XMLマスターポイントレッスン ~ プロフェッショナル(データベース)編 ~
第1回 XMLデータのDB化に関する概要
インフォテリア株式会社 野中康弘 NONAKA, Yasuhiro
今回から「XMLマスター:プロフェッショナル(データベース)」試験(以下、プロフェッショナル(データベース))向けの対策講座を始めます。本連載はプロフェッショナル(データベース)試験に合格するための必須知識や重要なポイント、テクニックはもちろん、XMLDBに興味がある方やこれからXMLDBとその関連技術について学習したいという方にも、参考にしていただける内容になっています。第1回目の今回はプロフェッショナル(データベース)試験の概要と最初のセクションにあたる「XMLデータのDB化に関する概要」について解説します。
新資格を発表した背景と内容
近年、RDBMSが管理する表形式の定型処理用データ以外にも、階層構造を持つデータや非定型処理で利用される非構造データ、また構造の変更が頻繁に発生するようなデータが増えてきています。XMLはこれらのデータを表現することに適していることから、XMLで表現されたデータを格納/管理できるデータベース「XMLDB」が注目を集めています。
XMLDBはさまざまなソフトウェアベンダから提供されており、以前と比べると性能も向上しています。さらに、主要なRDBMSベンダ製品でもXMLデータをそのまま格納/管理できる「XMLネイティブ機能」を提供し始めています。主要なRDBMSでXMLデータ形式がサポートされたことにより、表形式とXMLデータ形式という選択肢が増え、それらを的確に使い分けられることがこれからのDBエンジニアに求められるスキルとなるでしょう。
このようなスキルを持つDBエンジニアの育成を目的に、2007年1月、XMLDBの技術力を認定する新資格「XMLマスター:プロフェッショナル(データベース)」(以下、プロフェッショナル(データベース))がXML技術者育成推進委員会より発表されました。
XMLマスターとは
XMLマスターは、XMLのスキルを持った技術者を育成することを目標に、2001年8月に発足した認定制度で、現在、1万4000人を越える認定技術者を輩出しています。XMLマスターは、XMLおよびXML関連技術の基礎を理解し、業務に活用できる技術力を認定する「XMLマスター:ベーシック(以下、ベーシック)」と、専門分野においてXMLの高度な技術力を認定する「XMLマスター:プロフェッショナル(以下、プロフェッショナル)」の2つのレベルの認定で構成されています。
DBエンジニアを対象とした資格
従来までのプロフェッショナルは、アプリケーション開発者を対象とした認定で、DBエンジニアを対象とした上位資格は用意されていませんでした。しかし、今回新たにDBエンジニアを対象としたプロフェッショナル(データベース)が発表されたことで、DBエンジニアもプロフェッショナル認定資格を取得できるようになります。なお、従来のプロフェッショナルは2007年1月22日より「XMLマスター:プロフェッショナル(アプリケーション開発)」に資格名称が変更され、プロフェッショナルは、アプリケーション開発者向けとDBエンジニア向けの2種類に分かれます(図1)。
新資格におけるXMLDBの定義とベンダ資格との差異
新資格では、XMLネイティブフォーマットを格納できるDBのことを「XMLDB」と呼び、これはXMLネイティブDBだけでなく、XMLネイティブフォーマットを格納できるRDBも含まれます。プロフェッショナル(データベース)では、これらのDBに共通して必要となるXMLDBの標準技術に対するスキルを認定します。また、プロフェッショナル(データベース)が他のDB系資格の中でどのような位置付けにあるのかを図2に示します。
主要ベンダのRDBMSでもXML機能をサポートしており、これらの機能の扱い方もベンダ固有の部分を除いてはプロフェッショナル(データベース)の試験範囲に含まれます。XMLマスターはベンダ製品固有の仕様ではなく、XQueryなどの標準技術やXMLDBに関する設計および操作のスキルを認定しますので、他のDB系認定試験を置き換えるものではありません。
概要概要と出題範囲
まずはプロフェッショナル(データベース)試験の概要と出題範囲について紹介しましょう。プロフェッショナル(データベース)試験は、DBエンジニアを対象に「XMLデータをRDB、またはXMLネイティブデータベースに格納、管理、操作が行なえる」プロフェッショナルを認定する資格です。従来のベーシック試験と本試験の両方に合格することが認定条件となり、試験時間は90分、合格ラインは80%以上です。出題範囲は(1)XMLデータのDB化に関する概要、(2)XQuery、XPath式、(3)XMLDBの操作、(4)XMLデータ構造の設計の4セクションから構成されます。各セクションの出題内容については表1を参照してください。また、XMLマスターの詳細については、XMLマスターのWebサイトをご覧ください。今回は、出題範囲のセクション1「XMLデータのDB化に関する概要」について解説します。なお、本連載はプロフェッショナル(データベース)試験対応の解説となるため、XMLの基礎知識についてはある程度理解できているものとして解説を進めて行きます。基礎知識に不安のある方は、前回までのベーシックV2対応の解説を参照してください。
表1:プロフェッショナル(データベース)の試験範囲
セクション名 | 出題内容 |
セクション1: XMLデータのDB化に関する概要 |
|
セクション2: XQuery、XPath式 |
|
セクション3: XMLDBの操作 |
|
セクション4: XMLデータ構造の設計 |
|
XMLDBの特長と関連仕様を理解しよう
XMLDBとは、XMLデータモデルでデータの格納/操作が行なえるデータベースのことで、XMLデータモデルとは、XMLデータの論理構造のことを指します。XMLデータがどのような構造になっているか、皆さんは覚えていますか。XMLデータは階層(ツリー)構造で表現されます(図3)。
XMLDBには、NeocoreXMS、Cyber Luxeon(サイバーテック)、TX1(東芝ソリューション)、EsTerra(メディアフュージョン)などXMLデータモデルのみを専用で取り扱うXMLネイティブDBと、DB2、Oracle、SQL ServerのようにリレーショナルモデルとXMLデータモデルの両方をサポートするハイブリッドDBがあります(図4)。
現在、主要なRDBMS製品には、XMLデータモデルで格納できる「XMLネイティブ機能」がサポートされつつありますが、かつては、XMLデータをRDBに格納するためには「XMLデータのリレーショナルモデルへのマッピング機能」が利用されていました。「リレーショナルモデルへのマッピング機能」とは、XMLデータをRDBMS側でリレーショナルフォーマットに変換して格納する方式です。この機能はRDBベンダごとに実装が異なっているため、XMLネイティブ機能との単純な比較はできませんが、マッピング方式によってはXMLデータの柔軟性がなくなるなど、XMLならではの利点を完全には享受できませんでした。今後はマッピング機能を利用してXMLデータをRDBに格納する機会は少なくなっていくものと思われます。
XMLDBの特長
XMLDBはXMLデータの特性を最大限に活かしたDB化が可能になります。そのため、XMLDBは次のような特長を持っています。
(1)半構造データの扱いに優れる
リレーショナルモデルが完全な構造データであるのに対し、XMLデータは半構造データです。リレーショナルモデルの場合には、テーブル内の列数、列名、列の長さなどをテーブル設計時にあらかじめ決定し、必ず設計されたテーブル構造に従ってデータを登録します。一方のXMLデータの場合には、スキーマ定義の際にさまざまな要素や属性をオプション扱い(XMLデータ内に記述されていても良いし、記述されていなくても良い)として定義でき、特に指定しない限り要素や属性のデータサイズは可変長となります。例えば、LIST1、LIST2のようにスキーマを定義しておけば、「趣味」要素、「来店記録」要素は出現回数が0回以上、無制限に出現可能となりますので、趣味の数、来店回数に応じて顧客情報XMLデータにそれらの情報を追加していくことができます。
LIST1:XMLデータモデルでのスキーマ定義(DTDによる定義)
<?xml version="1.0" encoding="Shift_JIS"?>
<!ELEMENT 顧客情報 (顧客+)>
<!ELEMENT 顧客 (趣味*,来店記録*)>
<!ELEMENT 趣味 (#PCDATA)>
<!ELEMENT 来店記録 (#PCDATA)>
<!ATTLIST 顧客 ID CDATA #REQUIRED>
<!ATTLIST 顧客 氏名 CDATA #REQUIRED>
LIST2:XMLデータモデルでのスキーマ定義(XML Schemaによる定義)
<?xml version="1.0" encoding="Shift_JIS"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="顧客情報" type="customerInfoType" />
<xs:complexType name="customerInfoType" >
<xs:sequence>
<xs:element ref="顧客" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:element name="顧客" type="customerType" />
<xs:complexType name="customerType">
<xs:sequence>
<xs:element ref="趣味" minOccurs="0" maxOccurs="unbounded"/>
<xs:element ref="来店記録" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="ID" type="xs:string" use="required" />
<xs:attribute name="氏名" type="xs:string" use="required" />
</xs:complexType>
<xs:element name="趣味" type="xs:string" />
<xs:element name="来店記録" type="xs:string" />
</xs:schema>
また、来店の際に特筆すべきことがあれば、「来店記録」要素の内容には、入力できる文字数の制限などはありませんので、自由な長さで記述することも可能です(LIST3)。
LIST3:顧客情報のXMLデータ
<?xml version="1.0" encoding="Shift_JIS" ?>
<顧客情報>
<顧客 ID="C0000001" 氏名="山田太郎">
<趣味>映画鑑賞</趣味>
<趣味>ドライブ</趣味>
<趣味>スキューバダイビング</趣味>
<来店記録>2007/1/10 初回来店</来店記録>
<来店記録>2007/1/20 </来店記録>
<来店記録>2007/1/30</来店記録>
<来店記録>2007/2/10</来店記録>
<来店記録>2007/2/20</来店記録>
</顧客>
<顧客 ID="C0000002" 氏名="高橋次郎">
<趣味>ドライブ</趣味>
<趣味>料理</趣味>
<趣味>スノーボード</趣味>
<来店記録>2006/2/11 初回来店</来店記録>
<来店記録>2007/2/11</来店記録>
</顧客>
<顧客 ID="C0000003" 氏名="鈴木花子">
<趣味>音楽鑑賞</趣味>
<趣味>料理</趣味>
<趣味>生け花</趣味>
<来店記録>2007/1/16 初回来店</来店記録>
<来店記録>2007/1/17 購入された商品の返品のため、来店</来店記録>
</顧客>
</顧客情報>
このような半構造のデータの特性を活かすと、データサイズが可変長の文章やコメント、特定レコードだけに付加される可能性のある属性などを容易にDBに格納できるようになります。また、XMLDBではスキーマ定義そのものを後から変更することも比較的短期間に低コストで行なえるため、元々はスキーマ定義に含まれていなかった要素や属性などを後から追加することもできます。
さらに、XMLDBではスキーマ定義を持つXMLデータを格納する方法以外にも、スキーマ定義を持たない(スキーマレス)XMLデータを格納する方法もあります。スキーマレスのXMLデータはスキーマ定義を持つXMLデータよりも、データ構造などの変更に対して柔軟に対応できます。
(2)階層構造の扱いに優れる
リレーショナルモデルにおいて、階層構造を持つデータを格納するためには、そのデータをいくつかのテーブルに分割し、分割した複数のテーブル間でリレーションシップを結ぶことになります。これに対して、XMLデータモデルではXMLの特性上、階層構造を自然に表現できます。
例えば、LIST2のような階層構造を持つXMLデータをリレーショナルモデルで表現するためには、顧客情報テーブル、趣味テーブル、マスター趣味テーブル、来店記録テーブルといった複数のテーブルに分割し、顧客情報テーブルと趣味テーブルは「趣味ID」、顧客情報テーブルと来店記録テーブルは「来店記録ID」、趣味テーブルとマスター趣味テーブルは「マスター趣味ID」でリレーションシップを結ぶといった設計をすることになり、データを登録する際には、元データとなるXMLデータも登録先のテーブルごとに分割しなければなりません(図5)。
一方、XMLDBでは階層構造を持つXMLデータを複数のテーブルに分割するなどの設計や登録データを分割する必要がなく、LIST3の内容を1つのXML文書として格納でき、元データそのままのデータ形式で容易にDB化が行なえます。
(3)Webとの親和性
XMLデータはXSLTスタイルシートやXQueryを使用すれば簡単にHTMLに変換できます。XMLDBに格納されたデータに対してXQueryを実行し、その出力結果をXML文書またはHTML文書として出力します。また、XML文書にXSLTスタイルシートを適用することで、XML文書またはHTML文書を出力することもできます(図6)。
これらの技術を使用することで、XMLDBに格納されたデータはリレーショナルデータよりも容易にWeb表示が可能となります。そのため、XMLDBは情報系のDBとして利用されるケースが多くあります。
(4)更新系の性能
XMLDBの更新系の性能はXMLDBごとに異なり、また製品に依存するため一概には言えませんが、XML文書単位でデータの更新/追加/削除を行なう場合、対象となるXML文書のサイズが大きくなればなるほど、パフォーマンスが劣化することをあらかじめ考慮しておいたほうが良いでしょう。つまり、更新系のトランザクション処理を高速に実現し、パフォーマンスを優先することが重要なシステムの場合には、現時点ではXMLDBよりもRDBMSのほうが適していると言えます。
XMLDBに関連するW3Cの主な仕様の概要
次に、XMLDBに関連するW3Cの主な仕様の概要について解説します。インターネット標準仕様の策定を行なうW3C(World Wide Web Consortium)では、XMLDBについても表2に示すような仕様の勧告を行なっています。ここでは、これらの仕様の概要について見ていきます。
表2:W3Cが勧告している主なXMLDB関連仕様
仕様 | 概要 |
XQuery 1.0 : An XML Query Language | XQuery 1.0の仕様 |
XML Path Language (XPath) 2.0 | XPath 2.0の仕様 |
XML Syntax for XQuery 1.0 (XQueryX) | XQueryXの仕様書 |
XQuery 1.0 and XPath 2.0 Data Model (XDM) | XQuery1.0、XPath 2.0、XSLT 2.0のデータモデルであるXDMの仕様書 |
XQuery 1.0 and XPath 2.0 Functions and Operators | XML Schemaのデータタイプ、XDMのデータタイプ、シーケンスで利用可能な関数の仕様書 |
XQuery 1.0 and XPath 2.0 Formal Semantics | XQuery1.0及びXPath 2.0のセマンティックスの定義書 |
XQuery 1.0
SQLがリレーショナルデータに問い合わせを行なえるように、XMLデータに問い合わせを行なうための標準仕様がXQuery 1.0です。XQuery 1.0は2007年1月に勧告となったばかりですが、すでに主要なDBMSではほぼ実装されています。
XQuery 1.0の入力はXML形式で、出力結果にはXMLデータまたは文字データが返されます。構文はXPath 2.0を拡張しており、またデータモデルはXPath 1.0のデータモデルをベースに拡張したXDM(XQuery 1.0 and XPath 2.0 Data Model)を利用します。なお、XQuery 1.0は現時点ではSQLのSELECTに相当する検索に関する部分の仕様を提供しています。
SQLのUPDATE、INSERT、DELETEに相当する更新系の処理を実行するための仕様は、現時点ではW3Cから勧告されていないため、更新系の処理についてはDBベンダ各社がそれぞれの方式を提供しているのが実情です。XQueryを使用してXML文書に問い合わせを行なう場合は、XQueryプロセッサを利用します(図7)。
XQuery 1.0の詳細については、次回以降に解説します。
XPath 2.0
XPath 2.0はXQuery 1.0のサブセットです。構文的に正しく、かつ正常に実行される式は、XPath 2.0でもXQuery 1.0でも同じ結果を返します。一方で、XPath 1.0とXPath 2.0とは、基本的な性質に差異があります。
XPath 1.0での問い合わせ結果は、「順序を持たない、重複のないノード集合」と定義されていますが、XPath 2.0での問い合わせ結果は、「順序を持ち、値の重複を許すノード集合」と定義されており、順序を持ったノードや値の集合を「シーケンス」と呼んでいます。また、XPath 2.0ではループと変数の機能が追加されています。XPath 2.0ではXPathで変数を宣言して、XPathから値を代入できます。ループについても同様で、XPathでループを実行してリターン値を算出できます(図8)。
XPath 2.0は今まで同様、XSLTでも利用できます。XQuery 1.0とXPath 2.0の関係を図9にまとめましたので、参考にしてください。
XPath 2.0についても、次回以降に詳しく解説します。
XQueryX
XQueryXは、XQuery式をXMLの構文で記述できる仕様です。XQueryXで記述された内容は人が読むには適しませんが、プログラムが処理する場合にはXQuery式よりもXML形式であるXQueryXのほうが処理しやすくなります。
今月の確認問題
ここまで、XMLDBとXMLDB関連の主な標準仕様の概要を解説してきました。ここで、今回解説した内容について、しっかりと理解できているかどうかを確認問題でチェックしてみましょう。
問題1
リレーショナルモデルではなく、XMLデータモデルを用いてDB化を行なう理由として正しくないものを選択してください。
- 設計情報の頻繁な変更が予想されるため
- 文書構造が定まらない文書コンテンツを管理するため
- 格納するデータが5階層からなるデータ構造を持つため
- データ件数が少ないため
解説
XMLDBの特長をまとめると、「設計変更が容易に行なえる」「半構造データの扱いに優れる」「階層構造の扱いに優れる」などを挙げることができます。よって、A、B、CはXMLデータモデル選択の理由として妥当となります。
一方、データ件数の多少はDBMS製品の選定基準にはなりますが、XMLデータモデルを選定するための判断基準にはなりませんので、Dは正しくありません。したがって、正解はDとなります。
問題2
次の中でシーケンスの概念を取り入れている仕様を選択してください。
- XQuery 1.0
- XSLT 2.0
- XPath 1.0
- XPath 2.0
解説
シーケンスとは、XPath 2.0での問い合わせ結果が「順序を持つノードや値の集合」のことで、シーケンスの概念はXQuery 1.0、XPath 2.0、XSLT 2.0のデータモデルであるXDMの仕様書(XQuery 1.0 and XPath 2.0 Data Model)の中で定義されています。CのXPath 1.0での問い合わせ結果は「重複のないノード集合」となり、シーケンスの概念は取り入れられていません。
したがって、正解はA、B、Dとなります。
* * *
今回は、XMLDBの特長およびXMLDB関連の主な標準仕様の概要について解説しましたが、きちんと理解できましたか? また、今回は誌面の都合上解説できなかった、「ファイルシステムにXMLデータを格納することとの違い」についてもしっかりと理解を深めておきましょう。
システム要件を把握し、リレーショナルモデル、またはXMLデータモデルのどちらを適用したほうが良いのかを判断できるスキルは、今後とても重要になっていくでしょう。この機会に、今回解説した内容の学習を通して、最適なデータモデルを選定できるスキルを身に付けていただきたいと思います。次回からは、XMLDBを操作する上で最も基本かつ重要な技術であるXQuery、XPath式について解説していきます。
野中康弘(のなかやすひろ)
インフォテリア株式会社教育部に勤務。現在は主にインフォテリア認定トレーニングコースの「XML マスター:ベーシックV2」に対応したコースのテキスト開発や改訂を担当。最近は、酒(主にビール)を飲みながら、購入したハイビジョンテレビで好みの映画を見ることがストレス解消となっている。
<掲載> P.210-215 DB Magazine 2007 May