2008-10-04 3 views
0

Ant의 XMLValidate 작업을 사용하여 DTD에 대한 XML 문서의 유효성을 검사하려고합니다. 문제는 그것이 작동하지 않는다는 것이 아니라 너무 잘 작동한다는 것입니다. 내 DTD에 IDREF 유형의 "@linkend"속성이있는 외부 참조 요소가 있습니다. 대부분의 참조 ID는 현재 문서 외부에 있습니다. 때문에 IDREF가 참조하는 ID가 존재하지 않는다는 파서가 불평하므로 빌드가 실패합니다. 그렇다면 DTD에 대해 XML 문서의 유효성을 검사 할 수 있지만이 유형의 오류는 무시할 수있는 방법이 있습니까?Ant의 XMLValidate 작업에서 제공하는 유효성 검사의 "수준"을 어떻게 변경합니까?

내가 시도한 몇 가지 사항 : XMLValidate에 "lenient"옵션을 설정하면 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> 

, 나는 공공 식별자의 카탈로그에 DTD를 해결하기 위해 ResolvingXMLReader 사용하고 있습니다 :

여기 내 코드입니다. 그러나 중첩 된 xmlcatalog 요소를 사용하여 DTD를 직접 지정하면 동일한 동작이 발생합니다.

답변

2

귀하의 문제는 DTD의 두 해석의 차이점에서 유래합니다 : 귀하와 귀하의 spec's :-). IDREF는 동일한 문서의 ID를 참조해야하지만 사용자가 문서의 요소를 참조해야합니다.

내 제안은 그 속성에 대해 IDREF 대신 NMTOKEN을 지정하는 DTD의 고유 버전을 작성하여 유효성 검증을 수행하는 것입니다. 이렇게하면 내용이 유효한 xml id 값이됩니다.

+0

좋은 지적. 이것은 실제로 내가 끝내었던 것이다. –

0

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

관련 문제