.NET Enterprise ServersのXML度を探る

SQL Server 2000

 SQL Server 2000(以下SQL Server)は、前バージョンと比較して大幅にXML機能が強化されており、データベースに対してXML文書形式のデータ入出力いずれもが可能になっている。それぞれの機能を見ていくことにしよう。

■FOR XML句

 検索命令のSELECT文の最後に「FOR XML」と記述することで、検索結果をXML文書の形式で得ることができる。FOR XMLを用いると、以下のようなSELECT文になる。

SELECT 列名 FROM テーブル名 WHERE 条件 FOR XML AUTO

 FOR XML句には、直後に指定するキーワードで設定される3種類のモードを持つ。例に示した「AUTO」モードを設定すると、テーブルから1行分のデータが取り出されたうえで、列名を要素名としたXML文書が取り出される。「RAW」モードでは、要素名が“row”で、属性名が列名、属性の値が列の値となった行が生成される。下記に、簡単にそれぞれの出力形式を示した。

<row 列名="値" 列名="値" /> …… RAWモードで出力したXML文書の形式

<列名>値<列名/> …… AUTOモードで出力したXML文書の形式
<列名>値<列名/>

 3つ目の「EXPLICIT」モードは、SQL文によってXML文書の構造を明示的に定義して出力する方法だ。

 FOR XML句は、検索時に検索結果をXML文書化するかどうかを設定できる一方で、出力されてくるXML文書に、RAWモードやAUTOモードに代表されるように、あまり複雑な構造を持たせるのには向いていない。単純なデータをアドホックにXML文書化するような用途に向いているだろう。

FOR XML句を使ったクエリ (クリックすると拡大します)
SELECT文の最後にFOR XMLを付加することで、結果がXML文書として出力されてくる

XMLビューのイメージ
XMLビューを通してデータベースを参照すると、XML文書として見える
■ビューとXMLビュー
SQLでいう「ビュー」とは、複数のテーブルを結合したり、特定の情報を抜き出して、実際には存在しない仮想テーブルをデータベース内に作り上げる、フィルタのような機能だ。「XMLビュー」という名称は、データベース内に仮想テーブルを作る代わりに、仮想XML文書を作る、という機能から付けられたようだ。

■XMLビュー

 XMLビューは、データベース内のデータを、仮想のXML文書にマッピングする働きをする。

 XMLビューを通してデータベースを見ると、データベースは行と列からなるテーブルの集合体ではなく、XMLビューごとに1つのXML文書として見える(XMLビューは複数定義が可能)。利用者はこの仮想的に存在するXML文書の一部を取り出したりすることが可能だ。

 XMLビューではデータベースの内容がXML文書として見える(逆にいうと、テーブル形式としては見えなくなる)ため、XMLビューを通してデータを取り出すには、SELECT文ではなくXPathを指定することになる。XPathとは、XML文書に書かれた要素をツリー構造に見立てたとき、どの深さのどの位置にあるどのノードか、といったことを指定するための構文だ。

 XMLビューを利用するには、あらかじめデータベース内のテーブルと列が、XML文書の要素と属性、値にどのようにマップされるのかを定義しておく。これがビューの定義になる。定義に利用されるのが、XMLのスキーマ言語であるXDRに、注釈を付加したもの。

■スキーマ言語「XDR」
XMには、XML文書のデータ構造を定義する「スキーマ言語」というものが存在する。一般にはスキーマ言語としてDTDを利用することが多いが、DTDはデータベースのようなデータを定義する機能が弱いため、BtoBではそれ以外のスキーマ言語を使うことが多い。XDRもその1つだが、ほかにもW3Cが勧告候補にしている「XML Schema」などがある。ただし、いまのところXDRを採用しているのはマイクロソフトのみで、しかもマイクロソフトは今後XML Schemaの採用へ移行すると言われている。

 XDRはスキーマ言語としてXML文書の構造を記述する機能を備えているが(スキーマの記述そのものもXML文書として記述する)、注釈によって文書構造のどこにデータベースの何が対応するか、といった情報を追加することで、データのXML文書へのマップを実現している。

 今後マイクロソフトから、ビジュアルにデータベースのスキーマとXMLのスキーマをマップするアプリケーションの提供が予定されているため、定型的にデータをXML文書化する場合には、FOR XML句を用いるよりも、XMLビューを利用する方法がいいかもしれない。

■URLクエリ

 SQL Serverの機能の中で、IISとSQL Serverを組み合わせることで、URLの中にSQL文を組み込める。例えば、次のようなURLでアクセスすると、テーブルCustomerの内容がすべて取り出せる。

http://IIS/northwind?sql=SELECT+*+FROM+Customers

 検索結果は自動的にHTML形式となり、Webブラウザで表示できる。CGIなどをまったく用いなくとも、URLだけで簡単にデータベースへ問い合わせができ、結果が表示できる便利な機能だ。このSQL文に、以下のようにFOR XML句を追加するだけで、結果をHTMLではなく、XMLで取得できる。

http://IIS/northwind?sql=SELECT+*+FROM+Customers+FOR+XML+AUTO

URLクエリの結果画面 (見やすくするため、画面は加工されています)
URLの中にSELECT文を組み込むと、その結果をWebブラウザで受け取ることができる。SELECT文の末尾にFOR XML句を入れると、結果はXML文書で帰ってくる

 FOR XML句を含んだSQL文を「XMLテンプレート」としてあらかじめ登録しておき、URLでそれを呼び出すこともできる。XMLテンプレートの中で、スタイルシートなどを設定できるため、Internet Explorer 5.0など、XMLのスタイルシートに対応しているWebブラウザならば、受け取った単調なタグと値の羅列のXML文を、HTMLのテーブル機能などで、きれいに整形して見せることができる。

 URLクエリの一番の特徴は、URLで問い合わせてHTTPで結果が得られるという点、つまり、インターネットのどこからでもWebブラウザだけでSQL Serverにアクセスできる点だ。クライアントはWebブラウザである必要はないから、直接サーバ同士を結んでデータ交換をするようなBtoBなどに応用できるだろう。

■OpenXML

 OpenXMLは、XML文書をSQL文の中で操作するためのキーワードだ。当然のことながら、ふつうXML文書はSQL文を用いて直接操作することはできない。しかしOpenXMLでは、XML文書をストアドプロシージャで処理させたものを、OpenXMLキーワード付きのSQL文で操作することで、XML文書内の任意のノードに対して、データベース内のテーブルにアクセスするように操作できる。

 ただし、元のXML文書に対して追加や変更ができるわけではないため、この場合想定される操作は、XML文中にある特定の条件に合致するノードを検索したり、検索したノードをそのままINSERT文でデータベースへ追加するといったことが挙げられる。全件検索した上で、テーブルに追加すれば、XML文書をノードに分解してテーブルに追加できる。

■そのほかのXML関連機能

 SQL Serverには、データ型に「テキスト型」を利用することで、テキスト文書をそのまま追加、検索できる。これは特にXML文書のための機能ではないが、XML文書はテキスト文書以外のなにものでもないため、テキスト型を利用すればSQL ServerにXML文書をまるごと格納できる。しかも、こうして格納したテキストデータは全文検索の対象になるため、内容の検索は容易だ。

 今後追加予定の機能には、XMLアップデートとXMLバルクロードがある。XMLアップデートは、XML文書によるデータベースの操作。XMLバルクロードは、文字通り巨大なXML文書をデータベースにロードする機能だ。

Exchange、Commerceなど、そのほかのサーバ

Index
.NET Enterprise ServersとXMLの関係
  各サーバのXML機能概要
  BizTalk Server 2000
BizTalkオーケストレーション・サービス
BizTalkメッセージング・サービス
SQL Server 2000
FOR XML句
XMLビュー
URLクエリ
OpenXML
  Exchange、Commerce、そのほかのサーバ
Exchange 2000 Server
Commerce Server 2000
Host Integration Server 2000
Internet Security & Acceleration Server 2000
Application Center 2000
Windows 2000
今後どんなXML機能が追加されるか?
 

 



XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

HTML5+UX 記事ランキング

本日月間