すべてのXMLサービスには、DTDとXMLスキーマの文法を使用するXMLドキュメントを検証する機能があります。
すべてのXMLサービスでSAX2のorg.xml.sax.XMLReaderインターフェースを使用し、このインターフェース経由で検証機能が有効になります。
すべてのXMLサービスでorg.apache.xerces.parsers.SAXParserパーサーを使用し、以下の機能が有効になります。
|
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
xml.apache.org/xerces2-j/features.html