FLWOR
Мова програмування XQuery визначає FLWOR (вимовляється як «flower») як вирази, які підтримують ітерацію та прив’язування змінних до проміжних результатів. FLWOR — це абревіатура: FOR, LET, WHERE, ORDER BY, RETURN. FLWOR майже аналогічний SELECT-FROM-WHERE SQL і може використовуватися для надання функціональних можливостей, подібних до XML-документів.
Значення кожної букви абревіатури
Як згадувалось раніше ,FLWOR це абревіатура, і кожна буква означає певний вираз.
- F - for. Вибирає набір усіх вузлів
- L - let. Помістіть результат у змінну XQuery
- W - where. Вибирає вузол, заданий умовою.
- O - order by. Сортує вказані вузли відповідно до умов.
- R - return. Повертає кінцевий результат.
Приклад
Ось для прикладу у нас є такий xml документ під назвою ("file.xml").Тут вказані школи(school) з їхніми id та учні(student) , що навчаються у даних школах. Також кожен учень має ім'я(Name),
прізвище (Surname), стать(Sex), та рік народження(BirthYear).Імена та прізвища вигадані. Будь-які збіжності випадкові.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Schools>
<School id="SH001">
<Students>
<Student id="ST1SH001">
<Name>Sviatoslav</Name>
<Surname>Kondera</Surname>
<Sex>Man</Sex>
<BirthYear>2002</BirthYear>
</Student>
<Student id="ST2SH001">
<Name>Orest</Name>
<Surname>Rodtsevych</Surname>
<Sex>Man</Sex>
<BirthYear>2002</BirthYear>
</Student>
<Student id="ST3SH001">
<Name>Solomiya</Name>
<Surname>Tymnyak</Surname>
<Sex>Woman</Sex>
<BirthYear>2005</BirthYear>
</Student>
</Students>
</School>
<School id="SH002">
<Students>
<Student id="ST1SH002">
<Name>Yarina</Name>
<Surname>Panteriy</Surname>
<Sex>Woman</Sex>
<BirthYear>2003</BirthYear>
</Student>
<Student id="S2SH002">
<Name>Nazar</Name>
<Surname>Rodtsevych</Surname>
<Sex>Man</Sex>
<BirthYear>2005</BirthYear>
</Student>
</Students>
</School>
</Schools>
Приклад запиту XQuery . У даному прикладі ми йдемо циклом по усіх учнях(Student) та створюємо змінну StudentYears , яка позначає кількість років учня. Далі ми сортуємо учнів по року народження та вибираємо учнів , які мають більше або рівне 18 років. Та повертаємо ім'я , прізвище та кількість років.
for $student in doc("file.xml")//Student
let $StudentYears:= year-from-date(current-date())- $student/BirthYear
order by $student/BirthYear
where $StudentYears>=18
return (concat("Name: ",$student/Name ," Surname: ",$student/Surname," Years: ",$StudentYears))
Результат Запиту
Name: Sviatoslav Surname: Kondera Years: 19 Name: Orest Surname: Rodtsevych Years: 19 Name: Yarina Surname: Panteriy Years: 18