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 件のコメント:
コメントを投稿