Как изменить «уровень» проверки, который обеспечивает задача Ant XMLValidate? - PullRequest
0 голосов
/ 05 октября 2008

Я пытаюсь использовать задачу 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.

Ответы [ 2 ]

2 голосов
/ 22 октября 2008

Ваша проблема проистекает из разницы между двумя интерпретациями DTD: вашей и спецификацией :-). Идентификаторы IDREF должны ссылаться на идентификаторы в том же документе, а ваши - на элементы в документах.

Мое предложение состоит в том, чтобы создать собственную версию DTD, в которой для этого атрибута указывается NMTOKEN вместо IDREF, и использовать ее для выполнения проверки. Это гарантирует, что в содержимом будут действительные значения идентификатора xml.

0 голосов
/ 06 октября 2008

Не уверен, поможет ли это, но не могли бы вы попробовать этот обходной путь? Создайте временный файл, объедините все ваши XML-файлы и выполните проверку.

...