
Page | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
XML専用ストレージの特質を知り、最適な利用法を学ぶためのネイティブXMLデータベース導入ガイド
|
ネイティブXMLデータベースの歴史はXMLの歴史に他ならない。1998年にXMLがW3Cに勧告になると同時に、XMLデータを効率的に扱うためのネイティブXMLデータベースが登場した。続いて定められたXPath、XSLT、Namespaces、XMLSchema、XQueryといったXMLを扱うための主要な標準ができると、それらに対応する機能が追加されてきた。勧告から5年を経て、XMLは広く深くIT業界に普及したのに対し、ネイティブXMLデータベースは、当初期待されたほどには普及しなかった。
ところが、ここへ来てXML利用の本格化、XQueryの標準化の進展、新規ベンダーの参入等を背景に、ネイティブXMLデータベースが再び脚光を浴びるようになってきている。
本稿では、ネイティブXMLデータベースを選定する際に留意すべき点について、筆者等の経験を鑑みて示したい。特に、代表的なネイティブXMLデータベースとして選択した、Sonic XIS, Tamino, EsTerra, NeoCore XMS, Oracle 9i XMLDB, eXistについて、それぞれの特徴と実際に試用して得られた使用感について述べる。ここで、Oracle9iをネイティブXMLデータベースとしてとり上げられているのを不審に思われる読者がいらっしゃるかもしれない。実はOracle9i Release 2 から、提供しているXMLDBはXMLの階層構造をネイティブに扱うための、RDBとは異なる機能である。RDBの雄であるOracleがネイティブ方式を採用している事実が、XMLデータをネイティブに扱うアプローチの優位性を証明していると言える。
ネイティブXMLデータベースとは
ネイティブXMLデータベースは、一言でいうとXMLの特徴を生かした形で蓄積し操作が可能なストレージのことである。最大の特徴である階層構造についての扱いがRDBと異なっているという点が焦点ではあるが、その他の特徴もネイティブXMLストレージの性格を考える上で重要である。
データベースの性格を決めるXMLの特徴
XMLの代表的な特徴には、
(1)階層構造、
(2)メタ標準、
(3)自己記述性、
(4)関連標準
の4点が挙げられる。これらへの対応がネイティブXMLデータベースの特性に関わる。
(1)階層構造
XMLは、論理的な階層構造をテキストで表現したデータ構造である。元々、マニュアルや報告書などのドキュメントが持っている、章立てのような論理的な階層構造を計算機が扱うことのできるようなドキュメント記述言語SGMLをインターネットでの標準言語として選択、拡張したものである。同じくSGMLから派生したHTMLと同様にタグと呼ばれる記法によって記述される。リスト1に映画についての情報を表現したXMLデータの例<movies>を示す。ネイティブXMLデータベースはこのような階層構造を扱うことができることのできるデータベースである。
リスト1:XMLデータの例
<?xml version="1.0" encoding="Shift_JIS" ?> <movies> <movie> <title>Star Wars</title> <categories>Science Fiction</categories> <director>George Lucas</director> <cast> <actor> <name>Mark Hamill</name> <role>Luke Skywalker</role> </actor> <actor> <name>Harrison Ford</name> <role>Han Solo</role> </actor> <actor> <name>Carrie Fisher</name> <role>Princess Leia</role> </actor> </cast> </movie> <movie> <title>Harry Potter and the Sorcerer's Stone</title> <categories>Fantasy</categories> <director>Chris Columbus</director> <cast> <actor> <name>Daniel Radcliffe</name> <role>Harry Potter</role> </actor> </cast> </movie> </movies>
広く用いられているRDBでは、扱うデータの構造はリレーションと呼ばれる表の形式である。関係データベースを用いてXMLデータを管理するためには二つの方法がある。ひとつはBLOB(オブジェクト)やCLOB (テキスト)として格納する方法であるが、この場合は、せっかく持っている構造情報を利用した検索を行うことができない。もう一つはXMLの要素を表の構造にマッピングする方法であるが、XMLの高い記述力を生かすために複雑な構造を用いれば用いるほど、マッピングが大変になり、検索のパフォーマンスも低下してしまう
(2)メタ標準
HTMLと比較したときのXMLの大きな特徴は、階層構造を定義するためのスキーマが用意されていることである。HTMLに含まれるタグはレイアウトに関わるものに限られるが、XMLではスキーマを用いて利用者が定義できる。スキーマを規定することによって、XMLの要素の持つ意味を計算機に伝えることができ、自動処理を可能にする。この特徴により、標準を定義するための標準、つまりメタ標準として振る舞うので、アプリケーションの種類や業界などに共通な標準フォーマットを定義するのに利用されているのである。スキーマにはいくつかの種類があり、SGML時代から用いられているDTD (Data Type Definition)やW3Cで勧告になっているXML Schema、OASIS標準のRELAX NGなどがある。いずれもXMLの構造に含まれる要素やその構造について制約を与えることができる。リスト2に前述の映画データ<movies>の構造を規定するXML Schemaを示している。スキーマをどのように扱うのかは、ネイティブXMLデータベースの性格を決める重要な特徴になる。
(3)自己記述性
XMLの構造はスキーマによって定義することできるが、XMLのデータ自体は必ずしもスキーマを必要とせず、それだけで意味を表現することができる。RDBのデータはスキーマがなければ、意味のない数値データや文字列データの集合に過ぎないが、XMLでは構造とデータの両方を記述する。このため、XMLデータはスキーマがなくても計算機によって処理できる。スキーマを持ちその制約を満たすことを保証されているXMLデータを検証済み(Valid)XMLと呼ぶ。これに対して、XMLのシンタックスを満たすだけのXMLデータをウェルフォームド(well-formed)XMLと呼ぶ。ウェルフォームドXMLを扱うことができるかも、ネイティブXMLデータベースも重要な性質である。
リスト2:XMLデータの例
<?xml version="1.0" encoding="Shift_JIS"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="movies" type="movies"/> <xsd:complexType name="movies"> <xsd:sequence> <xsd:element ref="movie"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="movie"> <xsd:sequence> <xsd:element ref="title"/> <xsd:element ref="categories"/> <xsd:element ref="director"/> <xsd:element ref="cast"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="cast"> <xsd:sequence> <xsd:element ref="actor"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="actor"> <xsd:sequence> <xsd:element ref="name"/> <xsd:element ref="role"/> </xsd:sequence> </xsd:complexType> <xsd:element name="title" type="xsd:string"/> <xsd:element name="categories" type="xsd:string"/> <xsd:element name="director" type="xsd:string"/> <xsd:element name="name" type="xsd:string"/> <xsd:element name="role" type="xsd:string"/> </xsd:schema>
(4)関連標準
XMLのデータ構造は、従来にない複雑な構造を表現できるが、その反面、操作はそれまで以上に難しくなる。そのため、XMLを標準として勧告しているW3Cは、XMLを扱うための各種の標準を開発している。例えば、スキーマを記述することのできるXML Schema、XMLの階層構造をオブジェクト指向で表すためのDOM (Document Object Model)、構造の変換を行うためのXSLT (eXtensible Stylesheet Language Transformations)、階層構造の特定の場所を指定するためのXPath、複数のスキーマに対応するための名前空間を規定するNamespaces in XML、XMLを検索するためのXQuery等が代表的な関連標準である。これらの標準とそれに準拠したApache XercesやJAXPなどのJavaのライブラリの存在によって、XMLの利便性は大きく変わってくる。関連標準にどの程度準拠しているかが、ネイティブXMLデータベースの適用範囲に大きな影響を与える。