Проверка документов XML на широкий спектр ограничений - PullRequest
0 голосов
/ 15 июля 2009

Мне нужно проверять XML-файлы на предмет широкого спектра ограничений: тип и / или формат текста элемента, совместные вхождения, сравнения дат и математика дат, а также некоторые определенные пользователем правила из базы данных (т.е. элемент X может содержат только дочерние элементы A, B и C), и я не уверен, как это сделать.

Текущее воплощение этого приложения навязывает эти ограничения через Perl, так как я чувствую, что код Perl дублирует большую часть функциональности, которую я получил бы из коробки, используя XSD или RELAX NG. К сожалению, использование любого из них приведет к сообщениям об ошибках, которые будут зашифрованы для конечных пользователей. Отображение этих загадочных сообщений в нечто дружественное кажется невозможным (кроме предоставления номеров строк / столбцов).

Тогда есть Schematron. Это позволяет мне генерировать дружественные сообщения и проверять ограничения, которые не могут быть вышеупомянутыми схемами. К сожалению, проверка типа / формата и математика даты становятся большими взломами шаблонов XSLT.

Теперь я не уверен, что делать.

Комбинация между Schematron и, скажем, RELAX NG, кажется, лучший подход, но ошибки, генерируемые RELAX NG, делают невозможным предоставление чего-либо информативного для конечного пользователя.

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

Является ли сохранение исходного подхода наилучшим, или я должен двигаться вперед, используя Schematron / RELAX NG и встраивая принудительное применение формата / типа в шаблоны XSLT?

1 Ответ

0 голосов
/ 15 июля 2009

С практической точки зрения мне кажется, что ваша задача на самом деле не относится к проверке XML, и, вероятно, ее не следует заставлять выполнять одну.

Ваше описание гласит, что у вас есть множество проверок данных, содержащихся в документах XML, и, возможно, даже в зависимости от обстоятельств, а не самих документов XML. Таким образом, я бы сказал, написать валидатор в коде, который анализирует документы и применяет ваш сложный, управляемый данными, пакет валидации. Я подозреваю, что вы сможете дать пользователям гораздо лучшую обратную связь, поскольку ваш код будет иметь семантическое знание домена.

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

...