2008年12月18日木曜日

XML その5

XQueryにはXPath表現以外に、FLWOR(フラワー)表現と呼ばれる構文が用意されている。FLWOR式はRDBの問い合わせ言語であるSQLのSELECT文に相当し、XML文書からデータを取得し、その結果をXML形式で返却する。

FLWOR式は、「for節」「let節」「where節」「order by節」「return節」で構成される。
最初に「for節」または「let節」を記述し、必要に応じて複数回の「for節」や「let節」、1回の「where節」、1回の「order by節」を記述する。
最後に「return節」を記述し、最終的な結果を返却する。

「for節」
 構文 : for $変数名 in 式
 機能 : 「式」(XPath式など)を評価し、「式」が返す結果の各々のノードを「$変数名」にバインドし、最終的にノードの数だけreturn節を実行する。

「let節」
 構文 : let $変数名 := 式
 機能 : 「式」(XPath式など)を評価し、「式」が返す結果をまるごと「$変数名」にバインドする。

「where節」
 構文 : where 式 [(and | or) 式 ・・・]
 機能 : where節より前で宣言された変数に対して「式」を記述し、式がfalseとなるノードを除外する。

「order by節」
 構文 : order by 式 (ascending | descending)
 機能 : 「式」に記述された値を使用して、検索結果の並び替えを行う。

「return節」
 構文 : return 式
 機能 : 「式」を評価し、その結果を返却する。

※ 「for節」と「let節」の違いは、「式」が返す結果が複数ノードである場合、「for節」の場合はノードを1つずつ変数にバインドするのに対し、「let節」の場合は「式」が返す結果のすべてを変数にバインドする。

※ 「order by節」、「where節」はSQLのSELECT文で使用する「order by」「where」と同等の機能がある。

下記のtest.xmlから「製品コード」属性の値が"S0001"である「製品」要素を取得するためのFLWOR式と実行結果

【test.xml】
<製品情報>
<製品 製品コード="S0001" 製造工場="大分工場">
<製品名>フェルトペンW</製品名>
<価格>50</価格>
<発売日>2009-03-01</発売日>
</製品>
<製品 製品コード="S0002" 製造工場="神奈川工場">
<製品名>赤鉛筆</製品名>
<価格>10</価格>
<発売日>2008-08-25</発売日>
</製品>
</製品情報>

【FLWOR式】
for $prd in fn:doc("test.xml")/製品情報/製品
where $prd/@製品コード = "S0001"
return $prd

【実行結果】
<製品 製品コード="S0001" 製造工場="大分工場">
<製品名>フェルトペンW</製品名>
<価格>50</価格>
<発売日>2009-03-01</発売日>
</製品>

値が50より小さい「価格」要素を取得するためのFLWOR式と実行結果

【FLWOR式】
for $prd in fn:doc("test.xml")/製品情報/製品
let $prc := $prd/価格 where $prc < 50
return $prc

【実行結果】
<価格>10</価格>

0 件のコメント:

コメントを投稿