ANT의 XMLValidate 작업이 제공하는 유효성 검사의 "레벨"을 어떻게 변경합니까?

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

  •  05-07-2019
  •  | 
  •  

문제

DTD에 대한 XML 문서를 검증하기 위해 Ant의 XMLValidate 작업을 사용하려고합니다. 문제는 그것이 작동하지 않는 것이 아니라 너무 잘 작동한다는 것입니다. 내 dtd에는 idref 유형의 "@linkend"속성이있는 xref 요소가 포함되어 있습니다. 이러한 참조 ID의 대부분은 현재 문서 외부의 ID입니다. 이로 인해 파서가 IDREF가 참조하는 ID가 존재하지 않는다고 불평하기 때문에 내 빌드가 실패합니다. 그렇다면 XML 문서를 DTD에 대해 검증 할 수있는 방법이 있지만이 유형의 오류를 무시합니까?

내가 시도한 몇 가지 사항 : XmlValidate에서 "Lenient"옵션을 설정하면 작업이 DTD에 대한 유효성이 아니라 문서의 잘 형성되는 것만 확인합니다. 개미 매뉴얼의 XmlValidate 작업 설정할 수있는 일부 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를 해결하고 있습니다. 그러나 중첩 된 XMLCATALOG 요소를 사용하여 DTD를 직접 지정하면 동일한 동작을 얻습니다.

도움이 되었습니까?

해결책

귀하의 문제는 DTD의 두 가지 해석의 차이점에서 비롯됩니다. 명세서 :-). IDREFS는 동일한 문서에서 ID를 참조 해야하는 반면 귀하는 문서의 요소를 나타냅니다.

내 제안은 해당 속성에 대해 IDREF 대신 NMToken을 지정하는 DTD 버전을 작성하고 유효성 검사를 수행하는 데 사용하는 것입니다. 이렇게하면 내용이 유효한 XML ID 값이 될 수 있습니다.

다른 팁

이것이 도움이되는지 확실하지 않지만이 해결 방법을 시도해 볼 수 있습니까? 임시 파일을 만들고 모든 XML을 병합하고 유효성 검사를 수행하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top