Мне нужно проверять XML-файлы на предмет широкого спектра ограничений: тип и / или формат текста элемента, совместные вхождения, сравнения дат и математика дат, а также некоторые определенные пользователем правила из базы данных (т.е. элемент X может содержат только дочерние элементы A, B и C), и я не уверен, как это сделать.
Текущее воплощение этого приложения навязывает эти ограничения через Perl, так как я чувствую, что код Perl дублирует большую часть функциональности, которую я получил бы из коробки, используя XSD или RELAX NG.
К сожалению, использование любого из них приведет к сообщениям об ошибках, которые будут зашифрованы для конечных пользователей. Отображение этих загадочных сообщений в нечто дружественное кажется невозможным (кроме предоставления номеров строк / столбцов).
Тогда есть Schematron. Это позволяет мне генерировать дружественные сообщения и проверять ограничения, которые не могут быть вышеупомянутыми схемами. К сожалению, проверка типа / формата и математика даты становятся большими взломами шаблонов XSLT.
Теперь я не уверен, что делать.
Комбинация между Schematron и, скажем, RELAX NG, кажется, лучший подход, но ошибки, генерируемые RELAX NG, делают невозможным предоставление чего-либо информативного для конечного пользователя.
Я надеялся использовать шаблон главной схемы, который будет изменен на основе пользовательских правил в БД.
Является ли сохранение исходного подхода наилучшим, или я должен двигаться вперед, используя Schematron / RELAX NG и встраивая принудительное применение формата / типа в шаблоны XSLT?