Проблемы с проверкой схемы GPX

Я создаю приложение, которое работает в основном с файлами GPX в качестве входных данных. Учитывая тот факт, что файлы gpx должны определяться схемой gpx (как определено здесь: http://www.topografix.com/gpx.asp), первое, что я научил разумно делать с моим приложением, — это проверять входной файл на соответствие схеме (разумеется, имея в виду разные версии). Все идет нормально. Для исходных файлов, которые я тестировал, все было идеально. Однако иногда я использую файлы .gpx, которые оказываются недействительными для соответствующей схемы gpx. Итак, я пытался импортировать их с помощью других подобных инструментов, и, как ни странно, никакой ошибки не возвращалось, и файл был проанализирован идеально. Итак, самый логичный вывод — проблема в моем коде. Однако после тщательного изучения мой код оказался в полном порядке, и никаких проблем с ним в настоящее время не было. Это даже было подтверждено методом проверки, предложенным на сайте topografix.com ( http://www.topografix.com/gpx_validation.asp ) и снова пришел к выводу, что файл недействителен.

Итак, получается, что есть какие-то устройства GPS/системы записи GPS/и т.д. которые создают файлы .gpx без соответствия официальной схеме GPX. Этот вывод заставляет меня задать вопрос: ПОЧЕМУ? Я серьезно не понимаю идею, стоящую за этим. Кроме того, с большинством недопустимых файлов, которые я нашел, проблема заключается не в том, что можно рассматривать как дополнительную функцию, а в чем-то вроде несоблюдения правильного порядка с дочерними элементами некоторых элементов, что я считаю совершенно глупым.

Это заставляет меня задать вам два вопроса. Во-первых, я был бы рад, если бы кто-нибудь объяснил мне, почему многие файлы GPX, которые я нашел в Интернете, не соответствуют официальной схеме GPX. Во-вторых, я хотел бы спросить вас, как вы справляетесь с этой проблемой, если вам нужно анализировать файлы GPX. В конце концов, точки отслеживания все равно будут в файле, так что мне просто нужно игнорировать проверку XML-схемы и приступить к прямому анализу? Но опять же, если имя атрибута написано с ошибкой, моя система выйдет из строя. Любая информация о том, как вы справляетесь с анализом файлов GPS, будет очень признательна.

Спасибо за ваше время и помощь.

С уважением,

Петар

РЕДАКТИРОВАТЬ: я разместил новую тему: шаблоны и стандарты синтаксического анализа GPX, где я спрашиваю как люди на самом деле анализируют файлы GPX на практике. Если у вас есть идея, пожалуйста, напишите свой ответ там.


person Petar    schedule 29.11.2011    source источник
comment
Можете ли вы опубликовать свой неверный файл в gist или какой-либо другой pastebin, пожалуйста?   -  person Homer6    schedule 29.11.2011
comment
В этом нет ничего особенного. Проблема в том, что дочерние элементы трекпойнта ele и время расположены в неправильном порядке, что не допускается схемой GPX.   -  person Petar    schedule 29.11.2011


Ответы (5)


Авторы схемы решили использовать <xs:sequence> вместо <xs:all>. Последовательности XSD зависят от заказа.

Имя атрибута с ошибкой будет считаться недопустимым вводом. Вы должны проверить и потерпеть неудачу изящно. Компьютеры плохо справляются с двусмысленностью.

Надеюсь, это поможет...

ОБНОВИТЬ:

Извините, тогда позвольте мне уточнить. Проблема была создана авторами схемы И авторами вывода GPX (различных программных пакетов и устройств).

По сути, если человек может посмотреть на часть данных и понять, что это значит, ответственность за создание гибкой проверки, чтобы программу можно было использовать, лежит на разработчике программного обеспечения.

Например, предположим, что у вас есть поле ввода, в которое вы должны ввести сумму в долларах, а пользователь вводит «0,05 доллара США», программное обеспечение должно быть достаточно умным, чтобы распознать это как 5 центов, и достаточно умным, чтобы распознать, что есть пространство впереди и это бесполезно.

То же самое относится и к файлам с устройства. Да, проблема создана ими. Да, нелепо рассматривать вывод с устройства как пользовательский ввод, когда для формата существует прекрасное строгое определение. Но это проблема, с которой вы сейчас столкнулись. И, в конце концов, никого не волнует, какие технические проблемы вам пришлось преодолеть, чтобы все заработало. Все, что их волнует, это «работает ли это» и «насколько это полезно для меня».

Итак, если вы видите, что поля расположены не по порядку, но в остальном присутствуют все необходимые данные, измените порядок полей, чтобы они прошли проверку. Сделайте ваш импорт гибким. Заполните пробелы в данных предупреждающим сообщением, если пробелы отсутствуют. Но заставьте это работать.

Помимо попытки массировать данные перед их проверкой по XSD, вы можете сделать еще одну вещь, если обнаружите, что ошибки проверки постоянно вызываются простым порядком полей (что является распространенным недоразумением в XSD между xs:sequence и xs:all), измените свой XSD. Переключите его с последовательности на все. Вы можете сначала попробовать официальный XSD. Если бы он прошел, вам не пришлось бы проверять более свободные версии.

Надеюсь, это поможет...

person Homer6    schedule 29.11.2011
comment
Спасибо, но это не ответ на мой вопрос. Вопрос в том, почему люди производят такую ​​двусмысленность, имея в виду, что у них нет абсолютно никаких проблем, чтобы не делать этого. - person Petar; 29.11.2011
comment
Ваш ответ теперь имеет гораздо больше смысла, и я глубоко признателен за него. Я рад, что вы согласны со мной в том, что нет смысла лишь частично подчиняться строгому определению. Оба ваших предложения по преодолению проблемы хороши. Что меня беспокоит, так это тот факт, что существует так много устройств, производящих gpx, что невозможно поддерживать все различные версии gpx, которые они производят, если вы хотите сделать свою систему универсальной. Поэтому, если вы имели дело с парсингом GPX, пожалуйста, дайте мне знать, как вы это сделали. - person Petar; 30.11.2011

Пример почему?: geocaching.com создает файлы .gpx со специальными расширениями схемы, которые они определили.

GSAK также добавляет «ценность» файлам gpx. Боюсь, мир gpx НЕ стандартизирован, как вы думаете.

Ничто из этого не является частью схемы, которую вы используете. Другими словами, у вашей идеи строгой проверки схемы есть проблемы.

Это они, а не вы. Но вы вынуждены приспосабливаться к «их».

person jim mcnamara    schedule 29.11.2011
comment
Поправьте меня, если я ошибаюсь, но создание файла .gpx со специальным расширением схемы не мешает ему соответствовать стандартной схеме .GPX. Он просто должен быть действителен и в отношении расширенной схемы. Тем не менее, поскольку вы говорите, что у моей строгой проверки схемы есть проблемы (что я и предполагал), не могли бы вы дать мне свое предложение относительно того, как вы должны анализировать файлы GPS? - person Petar; 29.11.2011

Итак, получается, что есть какие-то устройства GPS/системы записи GPS/и т.д. которые создают файлы .gpx без соответствия официальной схеме GPX. Этот вывод заставляет меня задать вопрос: ПОЧЕМУ? Я серьезно не понимаю идею, стоящую за этим. Кроме того, с большинством недопустимых файлов, которые я нашел, проблема заключается не в том, что можно рассматривать как дополнительную функцию, а в чем-то вроде несоблюдения правильного порядка с дочерними элементами некоторых атрибутов, что я считаю быть совсем глупым.

Единственное, что я могу придумать, это предварительная обработка ввода GPX перед проверкой (единственным требованием на этом этапе было бы правильное формирование данных GPX).

Я бы использовал XSLT, начиная с преобразования идентичности, чтобы передать все без изменений. Затем вы можете переопределить преобразование идентичности, удалив все с определенным пространством имен. Вы также можете установить порядок дочерних элементов (атрибуты не имеют дочерних элементов, поэтому я думаю, что это опечатка) и исправить имена элементов/атрибутов с ошибками.

person Daniel Haley    schedule 29.11.2011
comment
Спасибо за предложение. Да, один из вариантов — предварительно обработать GPX перед проверкой. Проблема в том, что я хочу сделать свою программу универсальной — работать с любым введенным файлом GPX. Однако я понятия не имею о XSLT и методологии, которую вы предлагаете. Если это решит проблему предварительной обработки множества разных версий файлов GPX с отдельными функциями для всех из них, я бы исследовал это. PS: исправлена ​​опечатка в атрибутах :) - person Petar; 30.11.2011
comment
@ pe60t0 pe60t0 - Если вам действительно нужен общий формат, откажитесь от проверки схемы и просто обрабатывайте данные GPX как правильно сформированный XML. - person Daniel Haley; 30.11.2011
comment
@ pe60t0 - Кроме того, вам, вероятно, придется кодировать определенные варианты ввода GPX. Некоторые варианты не требуют специального кода (например, элементы в другом порядке). - person Daniel Haley; 30.11.2011
comment
Вы уверены, что правильный способ сделать это - полностью отказаться от проверки схемы? Думаю, при таком подходе система будет очень легко давать сбои и может появиться много багов. - person Petar; 30.11.2011

проблема со схемами, как вы хорошо заметили, заключается в том, что не все реализации стандартизированы, а некоторые являются полностью проприетарными. в этих случаях лучше всего импортировать файл в программу и сохранить его как GPX (даже если исходным файлом был GPX).

я использую бесплатную программу под названием GPS TRACKMAKER, которая открывает и сохраняет в различных форматах, включая GPX. Он также загружает данные напрямую с различных портативных устройств GPS (garmin, magellan и т. д.). загрузить GPSTM http://www.gpstm.com/dwlpage.php

в связанной статье я загрузил базовый анализ php dom из GPX, который работает довольно хорошо (100% совместим с GPX, сгенерированным GPSTM) Шаблоны и стандарты парсинга GPX

спасибо Odilon Ferreira Junior (автор GPSTM) за предоставление такого превосходного бесплатного инструмента.

person tony gil    schedule 26.01.2012

Как уже отмечал Homer6, одной из проблем является последовательность тегов в файле XML.

Прежде чем я продолжу, обратите внимание, что GPX 1.0 и GPX 1.1 очень разные. Большинство приложений производят/потребляют GPX 1.0. Например, в версии 1.0 для электронной почты есть регулярное выражение:

[\p{L}_]+(\.[\p{L}_]+)*@[\p{L}_]+(\.[\p{L}_]+)

Если какое-либо приложение имеет текстовое поле, предлагающее пользователю ввести его адрес электронной почты (который будет сохранен позже в файле GPX), оно должно быть довольно строгим. Если пользователь вводит «имя AT gmail.com», полученный файл GPX недействителен.

Схема XML-файла очень жесткая. Большинство разработчиков приложений не хотят такой же проверки правильности, когда их пользователи вводят данные, которые будут храниться в файле GPX. И именно поэтому большинство файлов не являются правильными файлами GPX. Кроме того, именно поэтому большинство приложений для синтаксического анализа игнорируют эти строгие правила.

person puzz    schedule 08.03.2012