XMLPARSE スカラー関数

XMLPARSE 関数は、引数を XML 文書として構文解析し、XML 値を戻します。

Read syntax diagramSkip visual syntax diagramXMLPARSE(DOCUMENTstring-expression STRIP WHITESPACEPRESERVE WHITESPACE )

スキーマは SYSIBM です。 関数名を修飾名で指定することはできません。

DOCUMENT
構文解析される文字ストリング式が、XML 名前空間勧告による変更を受けた XML 1.0 に準拠する整形式 XML 文書に評価されることを指定します (SQLSTATE 2200M)。
ストリング式
文字ストリングまたは BLOB 値を戻す式を指定します。 パラメーター・マーカーを使用する場合は、サポートされるデータ・タイプの 1 つにこれを明示的にキャストする必要があります。
STRIP WHITESPACE または PRESERVE WHITESPACE
入力引数内の空白を保持するかどうかを指定します。 どちらも指定されない場合、デフォルトは STRIP WHITESPACE です。
STRIP WHITESPACE
最長で 1000 バイトの空白文字だけを含むテキスト・ノードを除去することを指定します (最も近い収容エレメントが属性 xml:space='preserve' を持たない場合)。 1000 バイトを超える空白で始まるテキスト・ノードがある場合、エラーが戻されます (SQLSTATE 54059)。

CDATA セクション内の空白文字も、このオプションから影響を受けます。 DTD のエレメントに DOCTYPE 宣言があっても、エレメントのコンテンツ・モデルは空白を除去するかどうかを決めるためには使用されません。

PRESERVE WHITESPACE
すべての空白を保持することを指定します (最も近い収容エレメントが属性 xml:space='default' を持つ場合でも同様です)。

結果のデータ・タイプは XML です。 string-expression の結果が NULL になる可能性がある場合、結果も NULL になる可能性があります。 string-expression の結果が NULL であれば、結果も NULL 値になります。

  • 入力ストリングのエンコード: 入力ストリングには、XML 文書内の文字のエンコードを識別する XML 宣言を含めることができます。 ストリングを文字ストリングとして XMLPARSE 関数に渡す場合、これはデータベース・サーバーでコード・ページに変換されます。 このコード・ページは、発信元のコード・ページや XML 宣言で識別されるエンコードとは異なる場合があります。

    そのため、アプリケーションは文字ストリングの入力を持つ XMLPARSE を直接使用することは避けるべきです。アプリケーションはホスト変数を直接使用して XML 文書を含むストリングを送信する必要があります。これは、外部コード・ページと XML 宣言内のエンコードの間の一致を保つためです。 この状況で XMLPARSE を使用する必要がある場合には、引数として BLOB タイプを指定します。 これにより、コード・ページの変換を避けられます。

  • DTD の処理: 外部文書タイプ定義 (DTD) およびエンティティーをデータベース内に登録する必要があります。 内部および外部 DTD は両方とも、有効な構文であるか検査されます。 構文解析処理中に、以下のアクションも実行されます。
    • 内部および外部 DTD により定義されるデフォルト値が適用される。
    • エンティティー参照およびパラメーター・エンティティーがそれぞれの拡張フォームによって置換される。
    • 内部 DTD と外部 DTD が同一のエレメントを定義する場合、エラーが戻される (SQLSTATE 2200M)。
    • 内部 DTD と外部 DTD が同一のエンティティーまたは属性を定義する場合、内部定義が選択される。
    構文解析後、内部 DTD およびエンティティーは、外部 DTD およびエンティティーの参照と同様に、保管された値の表記では保存されません。
  • 非 UTF-8 データベースでの文字変換: XML 文書が非 Unicode データベース・サーバーに構文解析されるとき、文字データ・タイプのホスト変数かパラメーター・マーカーから文書が渡されるか、または文字ストリング・リテラルから文書が渡される場合に、コード・ページ変換が行われます。 タイプ XML、BLOB または FOR BIT DATA (CHAR FOR BIT DATA または VARCHAR FOR BIT DATA) のホスト変数またはパラメーター・マーカーを使用した XML 文書の構文解析は、コード・ページ変換を行いません。 文字データ・タイプが使用されるときには、XML 文書内のすべての文字がターゲット・データベース・コード・ページで一致するコード・ポイントを持っていることを注意深く確認してください。そうでない場合、置換文字が導入される場合があります。 構成パラメーター enable_xmlchar を使用すると、非 Unicode データベースに保管されている XML データの整合性を確保できます。 このパラメーターを「NO」に設定すると、文字データ・タイプからの XML 文書の挿入をブロックします。 BLOB および FOR BIT DATA データ・タイプは、これらのデータ・タイプを使用してデータベースに受け渡される文書がコード・ページ変換を行わないため、引き続き許可されています。

PRESERVE WHITESPACE オプションを使用すると、表に挿入された XML 文書内の空白文字 (description エレメント内の空白文字を含む) を保持します。

INSERT INTO PRODUCT VALUES ('100-103-99','Tool bag',14.95,NULL,NULL,NULL,
XMLPARSE( DOCUMENT 
  '<product xmlns="http://posample.org" pid="100-103-99">
    <description>
     <name>Tool bag</name>
     <details>
      Super Deluxe tool bag:
      - 26 inches long, 12 inches wide
      - Curved padded handle
      - Locking latch
      - Reinforced exterior pockets
     </details>
     <price>14.95</price>
     <weight>3 kg</weight>
    </description>
  </product>' PRESERVE WHITESPACE ));
以下の SELECT ステートメントを実行します。
SELECT XMLQUERY ('$d/*:product/*:description/*:details' PASSING DESCRIPTION as "d" )
FROM PRODUCT WHERE PID = '100-103-99' ;
これにより、空白文字を使用して details エレメントが戻ります。
<details xmlns="http://posample.org">
  Super Deluxe tool bag:
  - 26 inches long, 12 inches wide 
  - Curved padded handle
  - Locking latch
  - Reinforced exterior pockets
</details>