5.1.8 XML検証
すべてのXMLサービスには、DTDとXMLスキーマの文法を使用するXMLドキュメントを検証する機能があります。
すべてのXMLサービスでSAX2のorg.xml.sax.XMLReaderインターフェースを使用し、このインターフェース経由で検証機能が有効になります。
すべてのXMLサービスでorg.apache.xerces.parsers.SAXParserパーサーを使用し、以下の機能が有効になります。
機能 |
説明 |
http://xml.org/sax/features/validation |
DTD検証が有効です。 |
http://xml.org/sax/features/namespaces |
ネームスペース処理が有効です。 |
http://apache.org/xml/features/validation/dynamic |
動的検証が有効です。 |
http://apache.org/xml/features/validation/schema |
XMLスキーマ検証は省略値で無効です。 |
DTD文法は、ルート・エレメントの前のDOCTYPEで指定します。
<!DOCTYPE Orders SYSTEM "order.dtd">
XMLスキーマ文法は、ドキュメントのルート・エレメントのxsi:schemaLocationまたはxsi:noNamespaceSchemaLocation属性で指定します。
接頭辞xsiは、勧告で指定するように、スキーマ・ドキュメント・インスタンスのネームスペースにバインドする必要があります。
XMLスキーマ文法を使用する各ドキュメントでは、xsi:schemaLocation属性を使用して、ドキュメントで使用される文法の場所を指定する必要があります(ネームスペースを使用する場合)。ネームスペースを使用しない場合は、xsi:noNamespaceSchemaLocation属性を使用します。
通常は、ドキュメントのルート/トップレベル・エレメントに配置されますが、どのエレメントにも出現する可能性があります。
以下に、ターゲットのネームスペースがない場合の例を示します。
<document xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:noNamespaceSchemaLocation='document.xsd'>
</document>
以下に、ターゲットのネームスペースがある場合の例を示します。スキーマに定義されたターゲット・ネームスペースとは異なるネームスペースを指定するとエラーが発生するため注意してください。
<document xmlns='http://my.com' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
xsi:schemaLocation='http://my.com document.xsd'>
</document>
DTD検証機能とスキーマ検証機能の両方が有効な場合はどうなるか?
パイプラインに両方の検証機能がある場合
インスタンス・ドキュメントにあるのがDTD文法(ルート・エレメントの前のDOCTYPE)だけの場合は、DTD検証エラーのみが報告されます。
インスタンス・ドキュメントにあるのがXMLスキーマ文法のみの場合は、XMLスキーマ検証エラーのみが報告されます。
インスタンス・ドキュメントにDTD文法とXMLスキーマ文法の両方がある場合、DTDとXMLスキーマの両方の検証エラーが報告されます。
詳細については、以下を参照してください。
xml.apache.org/xerces2-j/faqs.html
xml.apache.org/xerces2-j/faq-pcfp.html