連載 SQL
ServerでXMLを操作する
最終回:リレーショナルDBにXML文書を追加する
富士ソフトABC株式会社
技術センター
2002/7/26
XML文書形式のデータをSQL Serverに格納する方法 |
XML文書形式のデータをSQL Serverに格納する方法は2つ考えられます。1つはXML文書を分解してSQL文(INSERT文)を構築し、実行する方法、もう1つはSQL Server 2000で新たに追加された機能の1つであるOPENXMLを利用する方法です。それぞれの方法について説明していきましょう。
■XML文書とテーブル構造の関係
XML文書形式のデータをSQL Serverに格納する場合、XML文書内の要素や属性がSQL Serverのテーブル内のどのカラムに対応するのかを事前に確認する必要があります。間違ったマッピングをすると、挿入時にエラーになったり間違ったデータを挿入したりして、後で修正することになり、無用な手間がかかってしまいます。
今回挿入するデータは次のような構造になっています。
データの構造 |
個人情報 |
これをXML文書で表すと次のようになります。
XML文書で表したデータ |
<個人情報> |
対するSQL Serverの“Person”テーブルの構造は次のようになっています。
Personテーブルの構造 |
Name ………………氏名 |
両者のそれぞれ対応する情報を取り出してINSERT文を構築していきます。構築はスクリプトとDOM(Document Object Model)を使用します。スクリプト内でDOMのオブジェクトを作成し、XML文書を読み込んで構造をたどりながらデータを取り出してINSERT文を構築します。
スクリプトについてはこれまでにも説明してきているので、説明は必要な個所だけに留め、DOMについても利用するオブジェクトやメソッドについて簡単に説明します。
■SQL文の構築(INSERT文を構築する)
まずは定形化できる文字列について定義しておきます。構築するINSERT文の中で、挿入するデータ以外は定形化できるので以下のように定義します。
var strFix = "INSERT INTO Person
|
挿入先のテーブル名やカラム名はすでに分かっているので、このように定義できます。
次にデータベースのオープンとコネクションの作成、挿入するXML文書の読み込みです。これらの処理についてはすでに説明しているので、サンプルソースを参照してください。
次は挿入するデータをXML文書から取り出します。まずは個人情報ノードの一覧を取り出します。
var objNd = objXML.documentElement.selectNodes("個人情報"); |
selectNodes("個人情報")と指定することで、個人情報ノードの一覧を取り出すことができます。あとは一覧の中の情報を1つ1つ処理していくことになります。一覧として取り出されたノード数はlengthメソッドで取得することができるので、ループの処理回数として利用します。
一覧として取り出したノードは、インデックスで個々を特定することができます。objNd(0)やobjNd(1)、ループ処理の中であればobjNd(Idx)と指定します。サンプルソースの中では処理しやすいように、いったんテンポラリのオブジェクトを作成してコピーしています。
いよいよINSERT文を構築していきます。最初に定義した定形的な文字列を構築用のオブジェクトにコピーします。続いて「氏名」の情報を取り出してコピーした文字列に連結します。ここではselectSingleNode("氏名")と指定しています。このメソッドは指定されたオブジェクトに格納されているノード配下から、パラメタで指定された要素名の最初に見つかったノードを返すものです。見つかったノードで定義されている情報は、textメソッドで参照することができます。サンプルソースでは次のように記述して挿入するデータを取り出しています。
tmpNd.selectSingleNode("氏名").text; |
そのほかの情報についても同様に取り出して連結していきます。注意する点は、各データの区切りとして“,”(カンマ)を加えることと、文字列のデータの場合は“'”(シングルクオート)でくくり、数値の場合はくくらないようにすることです。データ型に合ったSQL文を構築しないと、SQL文の実行時にエラーが発生します。以上のことに注意してINSERT文の構築を記述すると以下のようになります。
strDat = strFix; |
INSERT文の構築が終わったら、Execute()メソッドでSQL文を実行します。
objCon.Execute(strDat); |
あとはオープンしたデータベースをクローズしてスクリプトの記述は終わりです。
挿入する情報が単純な場合は、このようにINSERT文を構築する方法でデータ登録した方が早くできます。
■サンプルプログラム
実際にサンプルを作成してみました。DataIns.htmlは、SQL文(INSERT文)を構築し、データを登録するスクリプトのサンプル。登録するデータは、PersonData.xmlとして用意しました。実行すると画面1のようになります。
画面1 サンプルの実行画面。ボタンを押すと登録を実行 |
次のページでは、OPENXMLを利用したデータの挿入について紹介します。
6/7 |
Index | |
SQL ServerでXMLを操作する | |
SQL
Server 2000でXML機能を使えるようにする ・SQL Server 2000のXML対応機能とは? ・この記事で使用するデータ ・SQL Server 2000の設定 |
|
リレーショナルデータをXML文書として取り出す ・リレーショナルデータとXML文書のマッピング ・SQL ServerのデータをXML文書として取り出す ・FOR XML句でデータを取り出す ・ELEMENTSオプションの指定 ・RAWモードの指定 ・EXPLICITモードの指定 |
|
クライアントサイド・スクリプトでSQL Serverを操作する ・サーバサイド・スクリプトとクライアントサイド・スクリプト ・スクリプトでデータを取り出す ・取り出したデータのXML文書化 |
|
XSLTでXML文書をHTMLに変換 ・XSLTスタイルシートの作成 ・クライアントサイド・スクリプトからXSLTを呼び出す ・スクリプトをサーバサイド・スクリプトに作り替える |
|
XPathを使って、SQL
Serverでクエリを実行する ・データベースをXML文書に見せかける ・ダイレクトにXPathを指定する方法 ・テンプレートを使用する方法 ・スキーマを使用する方法 |
|
XML文書形式のデータをSQL Serverに格納する方法 ・XML文書とテーブル構造の関係 ・SQL文の構築(INSERT文を構築する) ・サンプルプログラム |
|
ストアドプロシージャを利用したデータの追加 ・OPENXMLの仕組み ・ストアドプロシージャの作成と呼び出し ・挿入されたデータを確認する ・INSERT文とOPENXMLのどちらを使うべきか |
- QAフレームワーク:仕様ガイドラインが勧告に昇格 (2005/10/21)
データベースの急速なXML対応に後押しされてか、9月に入って「XQuery」や「XPath」に関係したドラフトが一気に11本も更新された - XML勧告を記述するXMLspecとは何か (2005/10/12)
「XML 1.0勧告」はXMLspec DTDで記述され、XSLTによって生成されている。これはXMLが本当に役立っている具体的な証である - 文字符号化方式にまつわるジレンマ (2005/9/13)
文字符号化方式(UTF-8、シフトJISなど)を自動検出するには、ニワトリと卵の関係にあるジレンマを解消する仕組みが必要となる - XMLキー管理仕様(XKMS 2.0)が勧告に昇格 (2005/8/16)
セキュリティ関連のXML仕様に進展あり。また、日本発の新しいXMLソフトウェアアーキテクチャ「xfy technology」の詳細も紹介する
|
|