Я пытаюсь использовать задачу XMLValidate Ant для проверки XML-документа на DTD. Проблема заключается не в том, что она не работает, а в том, что она работает слишком хорошо. Мой DTD содержит элемент xref с атрибутом «@linkend» типа IDREF. Большинство этих идентификаторов ссылок за пределами текущего документа. Из-за этого моя сборка не выполняется, поскольку парсер жалуется, что идентификатор, который IDREF ссылается, не существует. Итак, есть ли способ подтвердить мой XML-документ против DTD, но игнорировать ошибки этого типа?Как изменить «уровень» проверки, который предоставляет задача AntValidate XMLValidate?
Несколько вещей, которые я пробовал: установка опции «lenient» в XMLValidate делает задачу только проверкой корректности документа, а не его действительностью против DTD. The XMLValidate task in the Ant manual перечисляет некоторые параметры 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.
Хорошая точка. На самом деле это то, что я делал. –