XMLデータベース製品カタログ 2003
〜XML対応リレーショナルデータベース編〜

山田祥寛
2003/11/15


紹介する製品
Microsoft SQL Server 2000
DB2 Universal Database V8.1
Sybase Adaptive Server Enterprise 12.5
Oracle9i XML DB
Microsoft SQL Server 2000

SQLXMLで飽くなき「XMLレス」XML対応への挑戦

 マイクロソフトのSQL Server 2000は、インターネット対応という切り口で飛躍的な進化を遂げたバージョンでもある。単にリレーショナルテーブル(2次元表)とXMLドキュメントの橋渡しを提供するというにとどまらない。URLクエリやアップデートグラムなど豊富に提供されたミドルウェアを利用することで、開発者はオブジェクト指向やXMLなどの高度な知識を習得する必要がない。あたかも従来のRDBを利用しているのと同じ要領でXML文書を入出力することができる。

 このSQL ServerのXML対応機能を一手に握っているのが、SQLXML.DLLだ。

図1 SQLXML.DLLのアーキテクチャ

 SQLXML.DLLは、SQL Server 2000とは独立したモジュールとして、ここ数年いくたびものバージョンアップを繰り返し、変化の早いインターネットの世界に対して迅速なソリューションを提供している。以下に、各バージョンで追加された機能概要を簡単に俯瞰(ふかん)してみよう。SQL Server 2000に標準で付与されたFor XMLやURLクエリなどの機能については、本稿では割愛する。詳細は、別稿「.NET Enterprise ServersのXML度を探る」などを参照してほしい。本稿では、その後追加されたSQLXML.DLLの機能を中心にSQL ServerのXML対応を紹介することとしたい。

バージョン 追加された機能
SQL Server 2000(標準) XDR対応、For XML句、URLクエリ、XMLビュー、注釈付きスキーマ
SQLXML1.0 XML一括ロード(XML Bulkload)、アップデートグラム、XPathクエリ
SQLXML2.0 XML Schema対応
SQLXML3.0 Webサービス
SQLXMLA XML for Analysis Services
 SQLXMLのバージョンと機能

SQLXML.DLLのバージョンと追加機能との対応

注釈付きXMLスキーマによるマッピング

 SQL Serverと(後述する)Oracle DatabaseとのXML対応のアプローチは、とても対照的である。というのも、Oracle DatabaseがXMLドキュメントをネイティブにDOMツリーとして格納するのに対し、SQL ServerはあくまでRDBのリレーショナル表に各要素をマッピングすることを基本としている点である。つまり、SQL Serverでは内部的には常にXML文書を「リレーショナル表」として扱い、入出力のタイミングでのみXMLとして扱うことで高速なデータ処理とRDBの堅牢性をそのままXMLの世界で利用することに成功している。SQL Serverの最大の特性とは、SQL ServerのXML対応をあくまでSQLXMLというインターフェイス部に限定し、コアとしてのデータベースエンジンはRDBの世界を徹底した点にあるともいえよう。

 本題に戻ろう。SQL ServerではXML文書をリレーショナル表に展開するに際して、注釈付きスキーマを利用する。注釈付きスキーマとは、文字どおり、一般的なスキーマに注釈を加えたものである。この注釈によって、XML文書の要素・属性に対してリレーショナル表のフィールドを関連付けている。具体的な注釈付きスキーマの例を見てみよう。

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">

<ElementType name="Employee" sql:relation="Employees">
    <AttributeType name="EmpID" />
    <AttributeType name="FName" />
    <AttributeType name="LName" />

    <attribute type="EmpID" sql:field="EmployeeID" />
    <attribute type="FName" sql:field="FirstName" />
    <attribute type="LName" sql:field="LastName" />
</ElementType>
</Schema>
リスト1 注釈付きスキーマの例

 上のサンプルでは、<Employee>要素はsql:relation属性を使用してEmployeesテーブルに、属性EmpID、FName、LNameは、それぞれsql:field属性を使用してEmployeesテーブルのEmployeeID、FirstName、LastNameフィールドにマッピングされる。

 注釈付きスキーマを利用することで、リレーショナル表とXML文書とを双方向に関連付け、リレーショナル表をXML文書から更新したり、あるいはリレーショナル表からXML文書を生成したりといった双方向変換が可能になるというわけだ。ちなみに、2003年11月時点では英語版のみであるが、「SQL Server XML View Mapper 1.0」というツールが提供されており、スキーマ文書とリレーショナル表とのマッピングをGUIベースで行うことができる。

 なお、SQL Server2000の標準機能では、スキーマ文書としてマイクロソフト独自のXDRが採用されていたが、SQLXML2以降を導入することでW3C標準のXML Schemaも使用可能である。

XMLバルクロードによるXML文書の一括アップロード

 前述したように、SQL ServerにおけるXML対応の基本ポリシーは、リレーショナル表へのXML文書のマッピングである。つまり、入出力に際しては、なにかしらの形でXML文書⇔リレーショナル表の相互変換が必要になるということである。URLクエリやOPENXMLなどの技術を利用することで、多くの場合、開発者はこの変換処理を意識する必要はないが、サーバリソースに対してマッピング処理が極めて高負荷なプロセスであるのも事実である。

 これを改善する目的で提供されているのが、Bulk Import――XMLバルクロード機能なのである。XMLバルクロードとは、要は大量のXML文書をSQL Serverに一括アップロードするための機能である。トランザクション単位で変換処理を行うことが問題であるのならば、バッチ処理として変換・インポート処理を行うことで、システム的な負荷を軽減しようというのが、その意図である。

 XMLバルクロードにはINSERTだけではなく、UPDATEやDELETEも可能なXMLアップデートプログラムも用意されている。

アップデートグラム

 アップデートグラムは、UNIXにおけるgrepのような機能だと思っていただければよいだろう。正規表現パターンで既存のXMLドキュメントからマッチングするパターンを特定し、該当する個所を置き換える。アップデートグラムを利用することで、階層を意識しない、簡易なXML文書へのアクセスが可能となる。

<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
  <updg:sync >
    <updg:before>
      <Employees>
        <EmployeeID="1" />
      </Employees>
    </updg:before>
    <updg:after>

      <Employees>
        <LastName="Fuller" />
      </Employees>
    </updg:after>
  </updg:sync>
</ROOT>
リスト2 アップデートグラムの例

XML Webサービスへの対応

 RDB製品のXML対応といった場合、その内容は大きく2つに分類される。すなわち、1つが「XMLとRDBとの相互運用性」――XML文書をRDBにどのようにマッピングするか、入出力するかという世界であり、そして、もう1つには「XML Webサービス」の世界である。

 その区分からすると、SQL Server 2000はSQLXML2の時点で前者の対応をほぼ完了していたといえる。つまり、後継のSQLXML3以降において、「XML Webサービス」対応へと踏み出したのは、いわば必然の流れだった。2003年6月に公開されたSQLXML3では、Transaction-SQL(ストアドプロシージャ)やXMLテンプレートをSOAPプロトコル経由で呼び出す機能が追加された。SQLXML3を利用することで、SQL Serverは「ノンプログラミング」でTransaction-SQLの結果セットをXMLフォーマットで出力することが可能になったのである。

 SQLXMLAでは「XML for Analysis Services」が追加されている。SOAPベースでデータソースの検出やクエリ問い合わせを実行できることに加え、SQL Server OLAP Servicesのキューブにアクセスできるようになった。これによって、インターネット経由でのデータ分析やデータマイニング・サービスの提供が可能となる。XML for Analysis Servicesは主要なBI(Business Intelligence)ベンダも賛同している規格でもあり、今後、XML BIのデファクトスタンダード候補としても期待できるだろう。

図2 XML for Analysis Servicesの概念図

 XMLベースで取り出したデータは、ActiveXコントロールを介することで、クライアント(Office製品やインターネットエクスプローラなど)上で手軽に加工・分析できるのが特徴だ。最後に、XML for Analysis Servicesで取得した店舗別販売実績データを、インターネットブラウザ(ASP .NETアプリケーション)上で参照している例を引用しておこう。

図3 XML for Analysis Servicesを使ったASP .NETアプリケーション(クリックで拡大します)

 

2/5 DB2 Universal Database V8.1

Index
XMLデータベース製品カタログ 2003
〜XML対応リレーショナルデータベース編〜
  XML対応リレーショナルデータベース概要
Microsoft SQL Server 2000
SQLXMLで飽くなき「XMLレス」XML対応への挑戦
  DB2 Universal Database V8.1
企業内データソースの戦略的な統合を目指す
  Sybase Adaptive Server Enterprise 12.5
JavaオプションでシンプルなXML対応を実現する
  Oracle XML DB
限りなきネイティブXMLデータベースへの挑戦

関連記事
 ・XMLデータベース製品カタログ 2003 〜ネイティブXMLデータベース編〜
 ・XMLサーバカタログ 2001〜Summer 〜XMLデータベース編〜
 ・.NET Enterprise ServersのXML度を探る

「XMLデータベース製品カタログ2003」



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

注目のテーマ

HTML5+UX 記事ランキング

本日月間