2

schemavalidateAntのタスクを使用して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...
4

0 に答える 0