TOPサーバ構築・運用> XPath式の組み立て
作って学ぶXMLデータベースNeoCore XMS実践
作って学ぶXMLデータベースNeoCore XMS実践

第3回:XMLデータベースを構築し、検索式を設計する
著者:ウルシステムズ  最上 隆史   2006/3/31
前のページ  1  2  3  4   
XPath式の組み立て

   それでは具体的に、お客様の名前に「鈴木」が含まれるようなオブジェクトを検索するためのXPath式を組み立ててみましょう。表5の3つのステップに分けて考えていきます。
  検索処理の要求 左記を実現するXPath式
ステップ1 「お客様名」という属性を持った「frame」要素を持つオブジェクトの上位項目を指定 /document-content/body/
presentation/page
ステップ2 ステップ1で指定したパス配下にあるname属性が「お客様名」という値を持っているような「frame」要素を指定 /frame[@name='お客様名']
ステップ3 ステップ2で指定した要素のうち、複数階層配下のテキストにユーザが入力した検索値(ここでは「鈴木」とする)が含まれるという条件を指定 ⁄⁄*[contains(text(),'鈴木')]

表5:XPath式の組み立て

   ステップ1で、「/document-content/body/presentation/page/」までのロケーションパスが特定できない場合には、パスのワイルドカードを使って「/document-content/body//」や「//page」などにしてもかまいません。

   こうして以下に示すXPath式が得られます。

お客様名を検索するためのXPath式
/ND/document-content/body/presentation/page/frame[@name='お客様名']⁄⁄*[contains(text(),'鈴木')]

   実際に検索してみた結果を以下に示します。

項目指定による検索結果
<Query-Results>
  <text:p text:style-name="P1">鈴木電気株式会社</text:p>
</Query-Results>

※注: サンプルのため一部省略しています。


フリーワード検索

   フリーワード検索では、提案書に含まれるすべてのテキストデータから指定されたキーワードを検索し、ヒットした文書の一覧(お客様名、提案タイトルなど)を取得します。このため、XPathよりも複雑な検索式が利用でき、かつ検索結果のフォーマットを指定できるXQueryを用いることにします。

   XQueryの構文はFLWRと呼ばれますが、「For:XMLデータの繰返し処理」「Let:変数に代入」「Where:条件を指定」「Return:結果出力の指定」の頭文字をとったものです。

   それでは、XQuery式を以下の3つのステップに分けて組み立てていきます。具体的にキーワードとして「システム」を指定して検索し、ヒットした文書のお客様名と提案タイトルを取得するXQuery式を検討します。

  検索処理の要求 左記を実現するXQuery式
ステップ1 検索の対象とする要素のロケーションパスを指定し、$dataというループ変数で参照 $data in /document-content
/body/presentation
ステップ2 ステップ1で指定した$dataの配下のすべてのテキストについて、'システム'というキーワードを含んでいるものという検索条件を記述 contains($data//text(),'システム')
ステップ3 検索結果に出力するお客様名と提案タイトルのテキストをそれぞれ$client、$titleで参照 $client := $data//frame[@name='お客様名']
//text()
$title := $data//frame[@name='提案タイトル']
//text()

表6:XQuery式の組み立て

   こうして、以下に示すXQuery式が得られます。

「システム」を含むような提案書を検索するためのXQuery式
for $data in /ND/document-content/body/presentation
let $client := $data//frame[@name='お客様名']//text()
  ,$title := $data//frame[@name='提案タイトル']//text()
where contains($data//text(),'システム')
return
<result>
  <client>{string($client)}</client>
  <title>{string($title)}</title>
</result>

   実際に検索してみた結果を以下に示します。

フリーワード検索による検索結果
<Query-Results>
  <result>
    <customer>伊藤証券株式会社</customer>
    <title>Think DX Serverを利用した基幹システムの導入効果</title>
  </result>
  <result>
    <customer>佐藤運輸株式会社</customer>
    <title>Think SCM Serverを利用したSCMシミュレーション構築</title>
  </result>
  <result>
    <customer>鈴木電気株式会社</customer>
    <title>Think That Serverタイプ2導入によるシステム再構築</title>
  </result>
</Query-Results>

   これで、Impress文書をXMLデータベースに登録する手順や、項目検索・フリーワード検索の実現方式が明確になりました。次回は検討した結果を使って、営業支援システムを構築していきます。

前のページ  1  2  3  4   


ウルシステムズ株式会社 最上 隆史
著者プロフィール
ウルシステムズ株式会社   最上 隆史
シニアコンサルタント
独立系ソフトウエアハウスで7年のシステム構築を経験。2005年より現職にて基幹システムの構築およびコンサルティングに従事。最近はRDBMSとXMLDBの利用価値に関心を持つ。



INDEX
第3回:XMLデータベースを構築し、検索式を設計する
  前回は
  提案書をXMLデータベースに登録する
  検索式を設計する
XPath式、XQuery式の組み立て