Как изменить & # 8220; уровень & # 8221; проверки, которую обеспечивает задача Ant XMLValidate?

StackOverflow https://stackoverflow.com/questions/171097

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top