XMLNAMESPACES または XMLATTRIBUTES の XML 構成の難問
こんにちは、マイク:
DB2 XML 構成についての IT Jungle Guru のヒントを読んだ後 (下記の「関連記事」参照)、リレーショナル・データから XML を構築できました。すべてうまくいっていますが、下の例のように XML 宣言の後に、すべてのデータを "Document" タグで囲まなければなりません。
XMLNAMESPACES を使ってみましたが、"xsi:schemaLocation" タグを生成することができません。求めるドキュメント・タグをどのように構築したらよいでしょうか。
-N.C.
ここでは、例にある xsi:schemaLocation が名前空間でなく、属性である点が問題です (w3schools.com と microsoft.com の記事でわかります)。そのため、XMLNAMESPACES ではなく、 XMLATTRIBUTES 関数を使ってそのタグを XML に組み込む必要があります。
DB2 XML 関数を使って、これをすべて構築する方法を図に示します。わかりやすくするために、以下の SQL は、 XMLELEMENT 関数を使って基本的なリレーショナル・データから XML を構築しています。
クエリーは次のような単純な XML を返します。
では、上記のクエリーをBUILD_XML という共通表式に埋め込み、XMLELEMENT 関数と XMLSERIALIZE 関数を使って、目的の "Document" ルート・エレメント内にクエリーの XML を組み込みましょう。
XMLELEMENT を使って (エレメントの下位ノードを提供している MY_XML 列とともに) Document ルート・エレメントを構築します。XMLSERIALIZE 関数は宣言を追加します。
後は、名前空間を 2 つ追加するだけです。
次に面倒な schemaLocation 属性を Document エレメントに追加します。
(Document エレメントの) XMLNAMESPACES 関数と XMLATTRIBUTES 関数を XMLELEMENT 関数へのパラメーターに指定して、上記の両方を XML に追加できます。
結果は以下のとおりです。
必要な 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