FLWOR式let節メモ

んんー、こんな使い方もできるのかっていう。

courseLIst.xml

<courseList>
  <course genreNo="00">
    <master instructorNo="00"/>
  </course>
  <course genreNo="01">
    <master instructorNo="01"/>
  </course>
</courseList>

instructorList.xml

<instructorList>
  <instructor no="00"><last>master</last><first>hoge</first></instructor>
  <instructor no="01"><last>master</last><first>piyo</first></instructor>
</instructorList>

XQuery

let $course_seq := fn:doc("courseList.xml")//course
let $inst_seq := fn:doc("instructorList.xml")//instructor
let $inst :=
  for $master in $course_seq/master
  return $inst_seq[@no=$master/@instructorNo]
return $inst

let節の右辺にFLWOR式が書けるんですね。で、そのreturnがバインドされると。

result

<instructor no="00">
  <last>master</last>
  <first>hoge</first>
</instructor>
<instructor no="01">
  <last>master</last>
  <first>piyo</first>
</instructor>

もしかしてfor節にも書けるのかな? 試す。仕様書読んだほうが早くて正確だけど。

XQuery

let $course_seq := fn:doc("courseList.xml")//course
let $inst_seq := fn:doc("instructorList.xml")//instructor
for $master in
  for $course in $course_seq
  return $course/master
return $inst_seq[@no=$master/@instructorNo]

result

<instructor no="00">
  <last>master</last>
  <first>hoge</first>
</instructor>
<instructor no="01">
  <last>master</last>
  <first>piyo</first>
</instructor>

やったー書けたよー\(^o^)/