schemavalidate
Antのタスクを使用してXML ドキュメントを検証しています。
<schemavalidate
noNamespaceFile="${user.input.xsd}" file="${user.input.xml}">
</schemavalidate>
これは期待どおりに機能します。しかし、今では次のように XInclude を使用したスキーマ ファイルがあります。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xi="http://www.w3.org/2001/XInclude">
<xi:include href="..." xpointer="xmlns(xs=http://www.w3.org/2001/XMLSchema)xpointer(/xs:schema/xs:*)"/>
</xs:schema>
これにより、Ant で次のエラーが発生します。
foo.xsd:8:136: s4s-elt-schema-ns: 要素 'include' の名前空間は、スキーマ名前空間 ' http://www.w3.org/2001/XMLSchema ' からのものでなければなりません。
ここで、対応する機能を有効にして XInclude 処理を有効にしようとしました。
<schemavalidate
noNamespaceFile="${user.input.xsd}" file="${user.input.xml}">
<attribute name="http://apache.org/xml/features/xinclude" value="true"/>
</schemavalidate>
しかし、これは役に立ちません。エラーメッセージは同じままです。属性要素を変更して存在しない機能を使用すると、対応するエラーメッセージが表示されるため、機能はパーサーによって認識されているようです。
パーサー org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser が機能を認識しませんhttp://apache.org/xml/features/xinclud
ここで XInclude 処理を有効にすることはできますか?
編集 1
Ant デバッグ モードを有効にすると、機能が正しく設定されていることがわかります。
[schemavalidate] Using SAX2 reader org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser
[schemavalidate] Setting feature http://xml.org/sax/features/validation=true
[schemavalidate] Setting feature http://apache.org/xml/features/xinclude=true
[schemavalidate] Setting feature http://xml.org/sax/features/namespaces=true
[schemavalidate] Setting feature http://apache.org/xml/features/validation/schema=true
[schemavalidate] Setting feature http://apache.org/xml/features/validation/schema-full-checking=true
[schemavalidate] Validating foo.xml...