Учебники

XQuery — первое приложение

Ниже приведен пример XML-документа, содержащего записи книжного магазина различных книг.

books.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
   
   <book category="JAVA">
      <title lang="en">Learn Java in 24 Hours</title>
      <author>Robert</author>
      <year>2005</year>
      <price>30.00</price>
   </book>
   
   <book category="DOTNET">
      <title lang="en">Learn .Net in 24 hours</title>
      <author>Peter</author>
      <year>2011</year>
      <price>70.50</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XQuery in 24 hours</title>
      <author>Robert</author>
      <author>Peter</author> 
      <year>2013</year>
      <price>50.00</price>
   </book>
   
   <book category="XML">
      <title lang="en">Learn XPath in 24 hours</title>
      <author>Jay Ban</author>
      <year>2010</year>
      <price>16.50</price>
   </book>
   
</books>

Ниже приведен пример документа Xquery, содержащий выражение запроса, которое должно быть выполнено в вышеуказанном XML-документе. Цель состоит в том, чтобы получить элементы заголовка тех узлов XML, цена которых превышает 30.

books.xqy

for $x in doc("books.xml")/books/book
where $x/price>30
return $x/title

Результат

<title lang="en">Learn .Net in 24 hours</title>
<title lang="en">Learn XQuery in 24 hours</title>

Проверить результат

Чтобы проверить результат, замените содержимое файла books.xqy (приведенного в главе « Настройка среды» ) приведенным выше выражением XQuery и выполните Java-программу XQueryTester.

Выражения XQuery

Давайте разберемся с каждой частью вышеприведенного выражения XQuery.

Использование функций

doc("books.xml")

doc () — это одна из функций XQuery, которая используется для поиска источника XML. Здесь мы передали «books.xml». Учитывая относительный путь, books.xml должен лежать на том же пути, где присутствует books.xqy.

Использование выражений XPath

doc("books.xml")/books/book

XQuery интенсивно использует выражения XPath для поиска необходимой части XML, по которой должен выполняться поиск. Здесь мы выбрали все узлы книг, доступные под узлом книг.

Итерировать объекты

for $x in doc("books.xml")/books/book

XQuery рассматривает данные XML как объекты. В приведенном выше примере $ x представляет выбранный узел, а цикл for выполняет итерацию по совокупности узлов.

Применить условие

where $x/price>30

Поскольку $ x представляет выбранный узел, «/» используется для получения значения требуемого элемента; Предложение «where» используется для наложения условия на результаты поиска.

Вернуть результат

return $x/title

Поскольку $ x представляет выбранный узел, «/» используется для получения значения требуемого элемента, цены, заголовка; Предложение return используется для возврата элементов из результатов поиска.