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