FLWOR
Ще използваме същия пример както в предишната точка("book.xml").Разгледайте долния пример:
CODE1
| doc("books.xml")/bookstore/book[price>30]/title |
Тази фраза ще избере всички title елементи под book, които са под bookstore елементът, и имат стойност по-висока от 30.Долния FLWOR пример ще избере абсолютно същото нещо като фразата по-горе:
CODE1
2
3
| for $x in doc("books.xml")/bookstore/book
where $x/price>30
return $x/title |
Резултатът ще бъде такъв:
CODE1
2
| <title lang="en">XQuery Kick Start</title>
<title lang="en">Learning XML</title> |
С FLWOR можете да сортирате резултатът:
CODE1
2
3
4
| for $x in doc("books.xml")/bookstore/book
where $x/price>30
order by $x/title
return $x/title |
FLWOR е съкращение от "For, Let, Where, Order by, Return".
Клаузата For ще избере всички book елементи под bookstore в променливата $x.
Клаузата Where ще избере book елементът с title елемент в него с стойност по-голяма от 30.
Клаузата order by дерфинира редът на сортиране.
Клаузата Return определя кое трябва да бъде върнато.Тук се връща елементът title.
Резултатът в XQuery фраза ще бъде следия:
CODE1
2
| <title lang="en">Learning XML</title>
<title lang="en">XQuery Kick Start</title> |
Разгледайте долния пример:
CODE1
2
3
| for $x in doc("books.xml")/bookstore/book/title
order by $x
return $x |
Това ще избере всички елементи title под book, който е под bookstore и връща title елементът в азбучен ред.Ако искаме да ги добавим в лист на HTML просто ще добавим таговете <ul>, <li> в FLWOR фразата:
CODE1
2
3
4
5
6
7
| <ul>
{
for $x in doc("books.xml")/bookstore/book/title
order by $x
return <li>{$x}</li>
}
</ul> |
Резултатът ще бъде следния:
CODE1
2
3
4
5
6
| <ul>
<li><title lang="en">Everyday Italian</title></li>
<li><title lang="en">Harry Potter</title></li>
<li><title lang="en">Learning XML</title></li>
<li><title lang="en">XQuery Kick Start</title></li>
</ul> |
Сега искаме да премахнем елементът title и да се показва само информацията в него:
CODE1
2
3
4
5
6
7
| <ul>
{
for $x in doc("books.xml")/bookstore/book/title
order by $x
return <li>{data($x)}</li>
}
</ul> |
Резултатът ще бъде следния:
CODE1
2
3
4
5
6
| <ul>
<li>Everyday Italian</li>
<li>Harry Potter</li>
<li>Learning XML</li>
<li>XQuery Kick Start</li>
</ul> |
ТЕРМИНИ
В XQuery има седем основни вида връзки.Това са:елемнти, атрибути, текст, namespaces, инструкции на процеса, коментари и документ(корен).XML документа е представен като дърво от възли.Коренът на това дърво е документът(коренът).Погледнете долния пример:
CODE1
2
3
4
5
6
7
8
9
| <?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
</bookstore> |
Ето и възлите в този пример:
CODE1
2
3
4
5
| <bookstore> (document node)
<author>J K. Rowling</author> (element node)
lang="en" (attribute node) |
Малки стойности са връзки без деца или родители:
CODEОтношенията между в XQuery са същите като при XPath.
СИНТАКСИСЪТ
XQuery е много чувствилен и затова елементите, атрибутите, променливите и др. трябва да бъдат валидни XML имена.Можете да използвате и двойни и единични кавички.Променливите в XQuery се дефинират от $.Коментарите се дефинират от ( и : - (:коментар:).Също така в XQuery може даизползвате така наречените логически "if-then-else".Те се използват най-вече при програмиране.Ето един пример:
CODE1
2
3
4
| for $x in doc("books.xml")/bookstore/book
return if ($x/@category="CHILDREN")
then <child>{data($x/title)}</child>
else <adult>{data($x/title)}</adult> |
Скобите при if са препоръчителни.else е препоръчителен но може да бъде просо else ().Резултатът ще бъде:
CODE1
2
3
4
| <adult>Everyday Italian</adult>
<child>Harry Potter</child>
<adult>Learning XML</adult>
<adult>XQuery Kick Start</adult> |
В XQuery има два основни начина за сравняване.
1.Главни: =, !=, <, <=, >, >=
2.Стойности: eq, ne, lt, le, gt, ge
Разликите в двата начина е показан долу:
CODE1
2
3
4
| $bookstore//book/@q > 10
Горната фраза ще върне вярно ако атрибутът q им стойност по-голяма от 10
$bookstore//book/@q gt 10
Горната фраза ще върне вярно ако има само един атрибут q върнат от фразата,и неговата стойност е по-голяма от 10.Ако има повече от един q атрибут, който е върнат тогава ще има грешка. |