メニューボタン
IBMi海外記事2017.06.08

XMLNAMESPACES または XMLATTRIBUTES の XML 構成の難問

Michael Sansoterra 著

こんにちは、マイク:
DB2 XML 構成についての IT Jungle Guru のヒントを読んだ後 (下記の「関連記事」参照)、リレーショナル・データから XML を構築できました。すべてうまくいっていますが、下の例のように XML 宣言の後に、すべてのデータを "Document" タグで囲まなければなりません。

技術情報code10

XMLNAMESPACES を使ってみましたが、"xsi:schemaLocation" タグを生成することができません。求めるドキュメント・タグをどのように構築したらよいでしょうか。
-N.C.

ここでは、例にある xsi:schemaLocation が名前空間でなく、属性である点が問題です (w3schools.commicrosoft.com の記事でわかります)。そのため、XMLNAMESPACES ではなく、 XMLATTRIBUTES 関数を使ってそのタグを XML に組み込む必要があります。

DB2 XML 関数を使って、これをすべて構築する方法を図に示します。わかりやすくするために、以下の SQL は、 XMLELEMENT 関数を使って基本的なリレーショナル・データから XML を構築しています。

技術情報code11

クエリーは次のような単純な XML を返します。

技術情報code12

では、上記のクエリーをBUILD_XML という共通表式に埋め込み、XMLELEMENT 関数と XMLSERIALIZE 関数を使って、目的の "Document" ルート・エレメント内にクエリーの XML を組み込みましょう。

技術情報code13

XMLELEMENT を使って (エレメントの下位ノードを提供している MY_XML 列とともに) Document ルート・エレメントを構築します。XMLSERIALIZE 関数は宣言を追加します。

技術情報code14

後は、名前空間を 2 つ追加するだけです。

技術情報code15

次に面倒な schemaLocation 属性を Document エレメントに追加します。

技術情報code16

(Document エレメントの) XMLNAMESPACES 関数と XMLATTRIBUTES 関数を XMLELEMENT 関数へのパラメーターに指定して、上記の両方を XML に追加できます。

技術情報code17

結果は以下のとおりです。

技術情報code18

必要な XML の構築に必要なのはこれだけです。XML には非常に多くの側面があり、慣れないことに直面したら (schemaLocation など) オンラインで検索して、内容 (属性、名前空間、エレメント、CDATA など) を正確に確認する方が簡単な場合があります。その後で適切な DB2 for i 関数を選んで、XML 構成に役立てることができます。

関連記事
Composing An XML Document From Relational Data, Part 1
Composing An XML Document From Relational Data: Part 2

あわせて読みたい記事

PAGE TOP