Что XQuery добавляет к XPath?

На предыдущей странице мы нарочно сделали замечание о запросе, который мы не смогли сформулировать в XPath, а то у читателя могло бы сложиться впечатление, что при помощи XPath можно выбрать все, что угодно.

Мы увидели, что при помощи XPath можно сделать очень многое. Но не все.

  • XPath не определяет, откуда берутся данные, в которых мы ищем. Поскольку это не самостоятельная спецификация, источник данных определяется во внешней по отношению XPath спецификацией - XPointer или XSLT. В XQuery источник данных определяется функцией ввода. Одну из этих функций - doc - мы уже видели и применяли. Она используется в том случае, если в источнике содержится правильное дерево (с единственным корневым элементом). Вторая функция ввода - collection - для случая "леса" (отсутствует единый корень). Аргументом обеих функций является URL источника, в нашем случае - локальная файловая система.
  • В XPath мы выбирали данные, но сформировать из этих данных что-то структурированное, например, другой XML-документ, нам бы не удалось.
  • В XPath нам не удалось бы соединить естественным образом данные, расположенные на разных ветвях. Запрос Выбрать для каждого покупателя имя продавца, который его обслуживает у нас не получился Попробуйте - может быть, он получится у Вас?
  • Некоторые свойства XQuery приближают его к языкам программирования. Кое в чем это облегчает то, что возможно и в XPath, кое в чем создает новые возможности. Например, переменные позволяют сохранить результат вычисления выражения и использовать его многократно.

Замечание: С языками программирования XQuery роднит то, что, в отличие от SQL, XQuery - процедурный язык. SQL-запрос описывает не процедуру выполнения, а то, что должно получиться, в РСУБД SQL-engine сама определяет оптимальный порядок выполнения запроса. Операции же запроса XQuery выполняются именно в том порядке, в каком они записаны.