mb_language("uni"); mb_internal_encoding("utf-8"); mb_http_input("auto"); mb_http_output("utf-8"); ?>
WINGSプロジェクト 佐藤 治夫 (株式会社ビープラウド) [著], 山田 祥寛 [監修]
出典:開発者のための実装Webマガジン「Codezine」(株式会社翔泳社)
XML DB製品のCyber Luxeon上で、XMLデータベースの検索言語の標準であるXPathとXQueryを実行する方法を説明します。XQueryとそれに関連する仕様の構成、そしてXQuery,XPathの基本文法について説明します。
はじめに
広く知られているように、リレーショナル・データベース(以降、RDB)では、格納したデータの操作用言語としてSQL(Structured Query Language)が標準化されています。RDBを操作するエンジニアにとってSQLに関する知識は必要不可欠のものとなっています。
XMLデータベース(以降、XML DB)では、このSQLに該当するものとしてXQuery(XQuery 1.0: An XML Query Language)がW3Cで標準化されており、2007年1月23日にXPath 2.0など関連する8つの仕様群を含め、勧告(Recommendation)となりました(W3Cのプレスリリース)。
XQueryは、さまざまなタイプのXMLデータソース(XMLファイル、ネイティヴXML DB、RDBなど)が混在するマルチベンダかつマルチデータベース環境におけるデータ検索・抽出・データ結合の実現を目的として設計されたクエリ言語です。
本稿では、まず、XQueryとそれに関連する仕様の構成について説明します。その後、XML DB製品であるCyber Luxeon上でXQueryとXPathを実行する方法と、XQueryやXPathの基本的文法、XQuery・XPathの共通関数について説明します。
XQueryの仕様構成と関連する仕様
XQueryの仕様は、それ自体単独の仕様では構成されておらず、いくつかの関連仕様から構成されています。具体的には、XPath 2.0、XSLT 2.0と関数や演算子、データモデル、セマンティックなどを共通化するかたちになっており、それぞれの整合性が保たれるよう、並行で仕様の策定が進められています。
XPathは、XML文書内のノードを特定したり(アドレッシング)、あるノード群から特定のノード群を抽出したり(フィルタリング)することを目的としています。XPath 2.0は、XPath 1.0とXQueryの両方をもとにつくられ、XSLT 2.0やXQueryなどのホスト言語内に埋め込まれることを想定して再設計されています。
XSLTは、XML文書を他のXML文書に変換することを目的とした言語です。XSLT 2.0は、XPath 2.0の使用を前提として、XSLT 1.0をもとに再設計されています。
以下の図に、上で説明したXQuery、XPath 2.0、XSLT 2.0の仕様群の関連について示しています。
■XQuery、XPath 2.0、XSLT 2.0の仕様群
以下の表に上図に示した仕様群をまとめました。
また、XQueryにおいて基本機能ではありませんが、上記以外にも仕様の策定が進められているものを以下の表にまとめました。
また上記の仕様書以外にも、XQuery関連で、使用例、説明文書などが用意されています。それらを以下の表にまとめました。
XQueryのCRUD機能 |
XQueryは、Queryという名前が付いていることから分かるように、データベースに対して特定の情報を検索(問合せ)する機能を提供します。 RDBのSQLと違う点は、一般にCRUD(クラッド)と呼ばれる基本的なデータ操作、すなわち、データの作成(Create)、読み出し(Read)、更新(Update)、削除(Delete)のうち、読み出し(Read)のみ定義されている点です。XQueryによるXMLノードの挿入、削除、変更、コピーといった機能は、XQueryの拡張仕様「XQuery Update Facility」として別途仕様策定がXML Query Working Groupで進められています。XQuery Update Facilityは、本稿執筆時点では草案(Working Draft)の段階です。 |
Cyber LuxeonでのXPath/XQuery実行
XPath/XQueryの具体的な文法について説明する前に、まずは実際にCyber Luxeon上でXPath/XQueryを実行する方法を説明します。
Cyber Luxeonの管理者用ツールであるDXE Managerを起動します。起動方法は「XML DBとCyber Luxeonの基本」の「DXE Managerの基本的な使用方法」の「DXE Managerの起動、DXEサーバーへの接続」を参照してください。
DXE Managerのツリーペイン(ウィンドウ左側のペイン)上で、検索対象のXMLを右クリックして、[クエリー]-[クエリーの手動作成]を選択します。
■XQuery実行方法
[クエリ]ダイアログが開くので[クエリータイプ]のラジオボタンで[XPath]または[XQuery]を選択し、[クエリー文字列の入力]エリアに式を入力します。入力が終わったら[OK]ボタンを押下します。
■クエリーダイアログ
正しく実行されると、次のように実行結果が表示されます(画像はXQueryで検索し、検索結果を「IEで表示」モードで表示したところ)。
■XQuery実行結果
XPath(1/2)
前述の「XQueryの仕様構成と関連する仕様」で述べたように、XQuery1.0ではXPathの新仕様であるXPath 2.0が使用されます。XPathは、XMLデータをあらわす木構造をたどって文書内のノードにアクセスするという特徴があります。
サンプルの実行
まずは、XPathの簡単なサンプルをCyber Luxeon上で実行してみます。以下の図がCyber Luxeon上に保存した検索対象のサンプルXMLになります。
■サンプルXML
このXMLからplayer要素の中で、その子要素のname要素が「イチロー」のものを抽出するXPathを実行します。
入力するXPathは次のようになります。
上記の「Cyber LuxeonでのXPath/XQuery実行」で説明した方法で[クエリー]ダイアログを開き、クエリー文字列の入力欄にXPath式を入力し、[クエリータイプ]のラジオボタンで[XPath]を選択します。
■サンプルXPathの実行
[OK]ボタンを押下すると、以下の実行結果が表示されます(「IEで表示」モード)。
■サンプルXPathの実行結果
xlnxql:result要素内に、XPathの実行結果が格納されています。実行結果で表示されている「xlnxql」はCyber Luxeon独自の名前空間です。xlnxql:result要素のxlnsql:query属性には、XPath式、xlnxql:count属性には抽出件数が設定されています。
シーケンス
XPath 2.0における機能追加の最も大きなものとしてシーケンスという概念の導入があります。XPath 2.0では、XML中のすべての対象物をシーケンスとして扱います。シーケンスは、さまざまな異なるアイテムの集合を順番に並べたものです。
アイテムとアトミック値
アイテムは、XML文書のノード、あるいはアトミック値のいずれかとなります。アトミック値とは、XML Schemaで定義されているビルトイン型のどれかの値をもつインスタンスのことで、型には、string型、integer型、decimal型などがあります。アトミック値はそれ以上分割できないことから「アトミック」という名前がつけられています。
セットとシーケンス
XPath 1.0では集合をセットと呼んでいました。セットとシーケンスの異なる点は以下の2つです。
XPath 2.0の新機能(XPath 1.0との違い) |
XPath 2.0では、シーケンス以外にも、いくつかの機能が追加されました。以下が主な追加機能の一覧です。
|
基本式
基本式は、XPath内で使用される最も基本的な記述式を定義しています。基本式の構成要素を以下の表にまとめました。
パス
XPathの重要な概念として「パス」があります。パスとは、XML文書のツリー構造から特定のシーケンスを指定するための式のことをいいます。
サンプルのXPath式のパスの構成要素を示したものが以下の図になります。
■パスの記述
上図で示したように、パスは「/ステップ/ステップ/・・・(繰り返し)」のように、「/」と「ステップ」から構成されます(ステップについては次節で詳説します)。
また、これ以外にも「//」とステップの組み合わせによって記述する方法も用意されています。「//ステップ」と記述した場合は、コンテキストノード以下でマッチするノードすべてを表します。「//」を使用した例を以下に示します。
「/players/player/name」という階層構造を持つXMLの場合、「//name」という記述で、name要素すべてにマッチします。
著注:名前の変更 |
XPath 1.0では「パス」は「ロケーションパス(Location Path)」、「ステップ」は「ロケーションステップ(Location Steps)」と呼ばれていましたが、XPath 2.0になり、呼び名が変更されました。 |
■著者紹介■ |
WINGSプロジェクト 佐藤 治夫 (株式会社ビープラウド) (サトウ ハルオ) <WINGSプロジェクトについて>
有限会社 WINGSプロジェクトが運営する、テクニカルライティング・プロジェクト。海外記事の翻訳から、主にサーバサイド分野の書籍・雑誌/Web記事の執筆、講演、アプリケーション開発等を幅広く手がける。2005年9月時点での登録メンバは20名で、現在も一緒に執筆をできる有志を募集中。執筆に興味のある方は、どしどし応募頂きたい。CodeZine記事は、WINGSプロジェクト執筆/山田祥寛監修で今後も続々公開予定。
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「入門シリーズ(サーバサイドAjax/XML DB/PEAR/Smarty)」「独習シリーズ(ASP.NET/PHP)」「10日でおぼえる入門教室シリーズ(ASP.NET/PHP/Jakarta/JSP&サーブレット/XML)」「Pocket詳解辞典シリーズ(ASP.NET/PHP/Perl&CGI)」「今日からつかえるシリーズ(PHP/JSP&サーブレット/XML/ASP)」「書き込み式 SQLのドリル」他、著書多数。 |
▲このページのTOPへ