Как изменить & # 8220; уровень & # 8221; проверки, которую обеспечивает задача Ant XMLValidate?
Вопрос
Я пытаюсь использовать задачу Ant XMLValidate для проверки XML-документа на соответствие DTD. Проблема не в том, что он не работает, а в том, что он работает слишком хорошо. Мой DTD содержит элемент xref с символом " @ linkend " атрибут типа IDREF. Большинство из этих ссылочных идентификаторов за пределами текущего документа. Из-за этого моя сборка не удалась, так как анализатор жалуется, что ID, на который ссылается IDREF, не существует. Итак, есть ли способ, которым я могу проверить свой XML-документ по DTD, но игнорировать ошибки этого типа? Р>
Несколько вещей, которые я пробовал: Настройка " снисходительного отношения " опция XMLValidate заставляет задачу проверять только правильность документа, а не его соответствие DTD. Задача XMLValidate в руководстве по Ant перечисляет некоторые параметры JAXP и SAX, которые вы можете установить , но ни один не кажется применимым.
Вот мой код:
<target name="validate">
<echo message="Validating ${input}"/>
<xmlvalidate file="${input}" failonerror="yes"
classname="org.apache.xml.resolver.tools.ResolvingXMLReader">
<classpath refid="xslt.processor.classpath"/>
</xmlvalidate>
</target>
Как вы можете видеть, я использую ResolvingXMLReader для разрешения DTD по каталогу открытых идентификаторов. Тем не менее, я получаю то же самое поведение, если я указываю DTD напрямую, используя вложенный элемент xmlcatalog. Р>
Решение
Ваша проблема проистекает из разницы между двумя интерпретациями DTD: вашей и spec's :-). Идентификаторы IDREF должны ссылаться на идентификаторы в том же документе, а ваши - на элементы в разных документах.
Я предлагаю создать собственную версию DTD, в которой для этого атрибута указывается NMTOKEN вместо IDREF, и использовать ее для проверки. Это гарантирует, что в содержимом будут действительные значения идентификатора xml.
Другие советы
Не уверен, поможет ли это, но не могли бы вы попробовать этот обходной путь? Создайте временный файл, объедините все ваши XML-файлы и выполните проверку.