ここにもXML

SQL Serverのデータ操作機能

2004年5月号掲載記事

SQL Serverは幅広く利用されているマイクロソフト社のデータベース製品です。

本来データベースを操作するためには、「SQL」というデータベースの操作言語を使うか、何らかのプログラムを作るしかありません。いわゆるデータベースやアプリケーションの開発者がそのような作業をすることになります。

しかしSQL Serverは、XMLに対応しており、XMLでの操作ができます。
もっとも簡単なのは、XML形式でデータを取り出すことです。

たとえば、データベースに対して、次のような問い合わせを出します。
ここで使っている「SELECT」は、データベースに対してデータを問い合わせるためのSQLの命令です。

SELECT au_id, au_lname, au_fname, phone FROM authors
FOR XML RAW

すると、次のようにXML形式のデータが戻ってきます。

<row au_id="172-32-1176" au_lname="White" au_fname="Johnson"
phone="408 496-7223"/>
<row au_id="213-46-8915" au_lname="Green" au_fname="Marjorie" 
phone="415 986-7020"/>
…以下略…

「FOR XML」がXML形式でデータを取り出すための指示です。「FOR XML」には、上記で指定した「RAW」の他、「AUTO」や「EXPLICIT」を指定することもできます。AUTOは上記のように「row」という要素ではなくて、テーブル名を要素名とするもの、「EXPLICIT」はあらかじめ定義しておいた任意のマッピングで要素名を使うものです。「AUTO」や「EXPLICIT」を使うと自由な書式のXMLを作れます。

またSQL Serverではさらに「SQLXML」という仕組みを使うと、Webサーバーとの連携ができます。SQLXMLは、マイクロソフト社のWebサーバー製品である「IIS(Internet Information Services)」と連携して動作します。

SQLXMLをインストールしている環境では、(1)問い合わせるSELECT文、(2)ユーザーに表示するときのXSLスタイルシート、の2つを用意することで、返されたXMLの結果をHTML形式に変換し、そのままWebブラウザから参照できるようになります。

【問い合わせるSELECT文のテンプレートファイル(select.xsl)】
<root xmlns:sql="urn:schemas-microsoft-com:xml-sql"
sql:xsl="select.xsl">
<sql:query>
SELECT au_id, au_lname, au_fname, phone FROM authors
FOR XML RAW
</sql:query>
</root>

【XSLスタイルシート(select.xsl)】
<?xml version="1.0" encoding="Shift_JIS"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="html" encoding="Shift_JIS"/>

<xsl:template match="root">
<HTML>
<BODY>
<H1>pubsテーブルの一覧</H1>
<TABLE border="1">
<TR>
<TH>au_id</TH><TH>au_lname</TH><TH>au_fname</TH><TH>phone</TH>
</TR>
<xsl:apply-templates select="row"/>
</TABLE>
</BODY>
</HTML>
</xsl:template>

<xsl:template match="row">
<TR>
<TD><xsl:value-of select="@au_id"/></TD>
<TD><xsl:value-of select="@au_lname"/></TD>
<TD><xsl:value-of select="@au_fname"/></TD>
<TD><xsl:value-of select="@phone"/></TD>
</TR>
</xsl:template>
</xsl:stylesheet>

【Webブラウザから見たときの結果】
<HTML>
<BODY>
<H1>pubsテーブルの一覧</H1>
<TABLE border="1">
<TR> 
<TH>au_id</TH><TH>au_lname</TH><TH>au_fname</TH><TH>phone</TH>
</TR>
<TR> 
<TD>172-32-1176</TD>
<TD>White</TD>
<TD>Johnson</TD>
<TD>408 496-7223</TD>
</TR> 
<TR> 
<TD>213-46-8915</TD>
<TD>Green</TD>
<TD>Marjorie</TD>
<TD>415 986-7020</TD>
</TR> 
…中略…
</TABLE>
</BODY>
</HTML>

そのほか、SQLXMLでは、XPathを使ってデータベースに問い合わせて、その結果を出力することもできます。またSQL ServerのXML機能では、参照だけでなく、更新もできます。データベースを更新する方法としては、HTMLの入力フォームを使う方法と、アップデートグラムを使う方法の2種類があります。HTMLの入力フォームを使う方法は、SQLを使ってデータを処理するものです。それに対して、アップデートグラムを使うと、次のような「更新前のデータ」と「更新後のデータ」をXML形式で用意することで、簡単にデータベースに対して更新をかけられます。たとえば、au_lname列の値がWhiteであるデータのphone列を「111 111-1111」に変更するには、次のようなアップデートグラムを用意します。

【アップデートグラムの例(updategram.xml)】
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync>
<updg:before>
<authors au_lname="White" />
</updg:before>
<updg:after>
<authors phone="111 111-1111" />
</updg:after>
</updg:sync>
</ROOT>

アップデートグラムは、「条件に合致したものを置換する」という基準でデータベースを操作します。updg:before要素が「現在のデータの条件」、updg:after要素が「更新後に設定するデータ」です。updg:beforeを省略すれば「データの追加」、updg:afterを省略すれば「データの削除」を意味します。

このようにSQL Serverは、XMLを使った操作ができるので、XMLの知識を活かしてデータの操作ができます。

実は、SQL ServerのXML機能の大きな目的は、XMLを使って企業間の連携をすることです。SQL Serverには、「ストアドプロシージャ」と呼ばれる、データベースを処理するプログラムを実行する仕組みがあります。SQLXMLを使うと、ストアドプロシージャをWebサービスに変換することもできます。

しかしWebサービスのように本格的なものまで作らなくとも「データを加工してユーザーにWebブラウザから参照させたいとき」「データベースの内容をXMLに吐きだしてファイルとして保存したり他のシステムにもっていきたいとき」「他のシステムのXML形式のデータをSQL Serverにインポートしたいとき」など、SQL ServerのXML機能は、幅広く使えます。

SQLXMLの詳細については、dotNETマガジン2004年6月号に掲載されているので、より詳細については、そちらを参照してみてください。
http://www.shoeisha.com/mag/dotnet/

SQL ServerのユーザーグループであるPASSJでは、開発や運用、そして資格試験など、SQL Serverに関わるさまざまなコンテンツを取りそろえています。XMLに関わるものとしては、ASP.NETを使ったWebアプリケーションやWebサービスの開発があります。データベースを活用したアプリケーションに興味がある方は、是非訪れてみてください。(http://www.sqlpassj.org/

この記事に関するご意見・ご質問はこちらまでお寄せください!
http://blogs.sqlpassj.org/yoshihirokawabata/archive/2004/05/18/2362.aspx

大澤文孝 テクニカル・ライター/PASSJセミナー 講師

ページトップへ▲

HOMEへ戻る