XMLVALIDATE

XMLVALIDATE 関数は、デフォルト値およびタイプ・アノテーションを含む、XML スキーマ妥当性検査から取得した情報が加えられた入力 XML 値のコピーを戻します。

構文図を読む構文図をスキップする
                   .-DOCUMENT-.                   
>>-XMLVALIDATE--(--+----------+--XML-expression----------------->

>--+--------------------------------------+--)-----------------><
   '-| XML-validate-according-to-clause |-'      

XML-validate-according-to-clause

|--ACCORDING TO XMLSCHEMA--+-ID--XML-schema-name-----------------------+-->
                           '-+-URI--XML-uri1-+--+--------------------+-'   
                             '-NO NAMESPACE--'  '-LOCATION--XML-uri2-'     

>--+------------------------------+-----------------------------|
   '-| XML-valid-element-clause |-'   

XML-valid-element-clause

|--+---------------------+--ELEMENT--XML-element-name-----------|
   +-NAMESPACE--XML-uri3-+                              
   '-NO NAMESPACE--------'                              

DOCUMENT
XML-expression の結果の XML 値が、XML バージョン 1.0 に準拠する整形式 XML 文書でなければならないことを指定します。
XML-expression
データ・タイプ XML の値を戻す式。XML-expression が、XML ホスト変数、または暗黙的あるいは明示的なタイプ付きパラメーター・マーカーである場合、この関数は、無視できる空白文字を除去する妥当性検査のための構文解析を実行し、CURRENT IMPLICIT XMLPARSE OPTION 設定は考慮されません。
XML-validate-according-to-clause
入力 XML 値の妥当性検査時に使用する情報を指定します。
ACCORDING TO XMLSCHEMA
妥当性検査用の XML スキーマ情報を明示的に指定することを示します。この節が組み込まれない場合、XML スキーマ情報は XML-expression 値の中で提供される必要があります。
ID XML-schema-name
妥当性検査に使用される XML スキーマの SQL ID を指定します。この名前 (暗黙的または明示的 SQL スキーマ修飾子を含む) は、現行のサーバーの XML スキーマ・リポジトリー内で既存の XML スキーマを固有に識別しなければなりません。暗黙的または明示的に指定した SQL スキーマにこの名前の XML スキーマが存在しない場合は、エラーが戻されます。
URI XML-uri1
妥当性検査に使用される XML スキーマのターゲット・ネーム・スペース URI を指定します。XML-uri1 の値は、URI を空でない文字ストリング定数として指定します。URI は、登録済み XML スキーマのターゲット・ネーム・スペースでなければならず、LOCATION 節を指定しない場合は、登録済み XML スキーマを固有に識別する必要があります。
NO NAMESPACE
妥当性検査用の XML スキーマはターゲット・ネーム・スペースを持たないことを指定します。ターゲット・ネーム・スペース URI は、明示的なターゲット・ネーム・スペース URI として指定できない空の文字ストリングと同等です。
LOCATION XML-uri2
妥当性検査に使用される XML スキーマの XML スキーマ・ロケーション URI を指定します。XML-uri2 の値は、URI を空でない文字ストリング定数として指定します。XML スキーマ・ロケーション URI は、ターゲット・ネーム・スペース URI と結合されて登録済み XML スキーマを識別する必要があり、登録済みのそのような XML スキーマは 1 つだけでなければなりません。
XML-valid-element-clause
XML-expression 内の XML 値が、指定されたエレメント名を、XML 文書のルート・エレメントとして持つ必要があることを指定します。
NAMESPACE XML-uri3 または NO NAMESPACE
妥当性検査されるエレメントのターゲット・ネーム・スペースを指定します。どちらの節も指定されない場合、指定されたエレメントは、妥当性検査に使用される登録済み XML スキーマのターゲット・ネーム・スペースと同じネーム・スペース内にあると想定されます。
NAMESPACE XML-uri3
妥当性検査されるエレメントのネーム・スペース URI を指定します。XML-uri3 の値は、URI を空でない文字ストリング定数として指定します。これは、妥当性検査に使用される登録済み XML スキーマが複数のネーム・スペースを持つ場合に使用することができます。
NO NAMESPACE
妥当性検査用のエレメントはターゲット・ネーム・スペースを持たないことを指定します。ターゲット・ネーム・スペース URI は、明示的なターゲット・ネーム・スペース URI として指定できない空の文字ストリングと同等です。
ELEMENT xml-element-name
妥当性検査に使用される XML スキーマ内のグローバル・エレメントの名前を指定します。指定されるエレメントは、暗黙的または明示的ネーム・スペースを持ち、XML-expression の値のルート・エレメントと一致しなければなりません。

この関数の結果は XML です。XML-expression の値が NULL になる可能性がある場合、結果も NULL になる可能性があります。XML-expression の値が NULL の場合、結果も NULL 値です。結果の CCSID は、XML-expression によって決まります。

XML 妥当性検査プロセスは、直列化された XML 値に対して実行されます。XMLVALIDATE は XML タイプの引数で呼び出されるので、この値は、妥当性検査プロセスに先だって自動的に直列化されます。ただし、以下の 2 つの例外があります。
  • XMLVALIDATE への引数が XML ホスト変数であるか、または暗黙的あるいは明示的なタイプ付きパラメーター・マーカーである場合、妥当性検査のための構文解析操作が入力値に対して実行されます (暗黙の妥当性検査以外の構文解析は実行されず、CURRENT IMPLICIT XMLPARSE OPTION 設定は考慮されません)。
  • XMLVALIDATE への引数が、オプション PRESERVE WHITESPACE を使用した XMLPARSE 呼び出しである場合、文書の XML 構文解析および XML 妥当性検査を組み合わせて、単一の妥当性検査のための構文解析操作にすることができます。
ルート・エレメントにネーム・スペースがない文書を妥当性検査するには、xsi:noNamespaceSchemaLocation 属性がルート・エレメント上に存在していなければなりません。

XML スキーマの決定: XML スキーマは、XMLVALIDATE 呼び出しの一部として明示的に指定したり、入力 XML 値内の XML スキーマ情報から判別したりすることができます。XML スキーマ情報が呼び出し中に指定されない場合、入力 XML 値内のターゲット・ネーム・スペースおよびスキーマ・ロケーションが、妥当性検査のための登録済みスキーマを特定するために使用されます。明示的な XML スキーマが指定されない場合、入力 XML 値には、XML スキーマ情報のヒントが含まれなければなりません。明示的または暗黙的な XML スキーマ情報は、登録済み XML スキーマを特定する必要があり、登録済みのそのような XML スキーマは 1 つだけでなければなりません。

XML スキーマ文書を指定しない場合、 データベース・サーバーは、入力文書内で、XML スキーマのネーム・スペースと場所のヒントを指定する xsi:schemaLocation 属性 を探します。XML スキーマのターゲット・ネーム・スペースがない場合、XML スキーマの場所についてのヒントを指定するために xsi:noNamespaceSchemaLocation 属性 が使用されます。

xsi:schemaLocation 属性または xsi:noNamespaceSchemaLocation 属性は W3C XML スキーマ指定によって定義され、XML スキーマ・ヒントと呼ばれます。xsi:schemaLocation 属性には、XML スキーマ文書を見つけるのに役立つ値のペアが 1 つ以上含まれています。各ペアの最初の値はネーム・スペースで、2 番目の値はそのネーム・スペースの XML スキーマがある場所を示すヒントです。DB2® for i は、 1 次 XML スキーマ文書のターゲット・ネーム・スペース および XSR_REGISTER プロシージャー呼び出しに指定された schemalocation パラメーター を使用して、ネーム・スペースおよび場所のヒントと XML スキーマとのマッチングを試みます。

XMLVALIDATE 関数で XML スキーマ文書を指定すると、xsi:schemaLocation 属性または xsi:noNamespaceSchemaLocation 属性がオーバーライドされます。

xsi:schemaLocation 属性および xsi:noNamespaceSchemaLocation 属性 が XML 文書によって定義されていない場合、DB2 for i は、1 次 XSD のターゲット・ネーム・スペースが XML 文書中のネーム・スペースと一致する XML スキーマ を見つけようとします。

XMLVALIDATE 関数で XML スキーマを明示的に指定すると、XML 値で XML スキーマ情報のヒントを見つけるのに必要な構文解析をしないで済みます。

XML スキーマの権限: 妥当性検査に使用される XML スキーマは、使用前に XML スキーマ・リポジトリーに登録されていなければなりません。このステートメントの権限 ID が保持する特権には、少なくとも以下の 1 つ が含まれていなければなりません。
  • 妥当性検査時に使用される XML スキーマに対する USAGE 特権
  • データベース管理者権限

  • XML インスタンス文書内で XML スキーマのヒントによって識別される XML スキーマを使用して妥当性検査します。
      INSERT INTO T1(XMLCOL)
           VALUES (XMLVALIDATE(?))

    入力パラメーター・マーカーは、XML スキーマ情報を含む XML 値にバインドされると想定します。

      <po:order
          xmlns:po='http://my.world.com'
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://my.world.com/world.xsd" >
        ...
      </po:order>

    さらに、ターゲット・ネーム・スペース「http://my.world.com」と関連し、schemaLocation ヒント「http://my.world.com/world.xsd」による XML スキーマが、XML スキーマ・リポジトリー内にあると想定します。

    これらの前提事項に基づき、その XML スキーマに従って入力 XML 値は妥当性検査されます。

  • SQL 名 PODOCS.WORLDPO によって特定される XML スキーマを使用して妥当性検査を行います。
      INSERT INTO T1(XMLCOL)
         VALUES(
            XMLVALIDATE(? ACCORDING TO XMLSCHEMA ID PODOCS.WORLDPO))

    SQL 名 PODOC.WORLDPO に関連した XML スキーマが XML スキーマ・リポジトリー内にあると想定して、その XML スキーマに従って入力 XML 値は妥当性検査され、タイプにはアノテーションが付けられます。

  • XML 値の指定されたエレメントを妥当性検査します。
      INSERT INTO T1(XMLCOL)
         VALUES(
            XMLVALIDATE(? 
              ACCORDING TO XMLSCHEMA ID FOO.WORLDPO
                     NAMESPACE 'http://my.world.com/Mary'
                     ELEMENT "po"))

    SQL 名 FOO.WORLDPO に関連した XML スキーマが XML スキーマ・リポジトリー内にあると想定して、XML スキーマは、ネーム・スペースが「http://my.world.com/Mary」であるエレメント「po」に対して妥当性検査されます。

  • XML スキーマは、ターゲット・ネーム・スペースおよびスキーマ・ロケーションにより特定されます。
      INSERT INTO T1(XMLCOL)
         VALUES(
            XMLVALIDATE(? 
              ACCORDING TO XMLSCHEMA URI 'http://my.world.com'
                     LOCATION 'http://my.world.com/world.xsd'))

    ターゲット・ネーム・スペース「http://my.world.com」と関連し、schemaLocation ヒント「http://my.world.com/world.xsd」による XML スキーマが XML スキーマ・リポジトリー内にあると想定して、その XML スキーマに従って入力 XML 値は妥当性検査されます。