XML - статьи

         

/A> Язык запросов


Тесная интегрированность SXPath с языком программирования общего назначения Scheme предоставляет функциональность языка запросов к SXML-документам.

Проводя аналогии с языком запросов к XML-документам XQuery, можно обозначить следующие соответствия между конструкциями XQuery и возможностями Scheme:

  • Итерация по членам последовательности for-return языка XQuery реализуется на Scheme функцией map. Функция map получает на вход функцию от одного аргумента и список, формируя новый список, последовательно применяя полученную в качестве аргумента функцию к каждому из членов аргумента-списка.
  • Функции и операторы XQuery[11], а также функции XQuery, определяемые пользователем, реализуются на Scheme также функциями - стандартными, библиотечными или определяемыми пользователем. Дополнительно в языке Scheme функции могут использоваться как объекты первого класса, что не поддерживается в XQuery.
  • Конструкторы различных типов узлов в языке XQuery реализуются на Scheme конструкторами списков. Более того, наличие в языке Scheme выражений квази-цитирования (quasiquote) и снятия цитирования (unquote) позволяет компактным и наглядным образом комбинировать константные выражения и фрагменты вычисляемых выражений. Аналогичные идеи используются в синтаксисе XSLT для комбинирования литеральных элементов результата [2] и исполняемых инструкций.

Рассмотрим совместное использование SXPath и Scheme как языка запросов к SXML-документам на конкретном примере.

Пример 8.   Вновь обратимся к рисунку 1 и подведем счет для каждого сделанного заказа. Счет будет включать в себя имя клиента и общую цену с учетом количества единиц каждого заказанного товара.

Получение желаемого результата требует использования языка запросов, поскольку требуется не просто выбрать некоторые узлы из XML-документов, но также сконструировать новые узлы, которых в самих документах нет. На рис. 6 показано решение поставленного запроса в двух вариантах:

  • на языке XQuery, расширенном предлагаемыми в настоящей статье дополнительными осями XPath;
  • на Scheme, благодаря тесной интеграции SXPath с языком программирования.

Рис. 6: Вычисление счета для каждого заказа: с помощью XQuery, расширенного поддержкой XLink, (вверху) и с помощью Scheme (внизу). См. также пример 8.

Из рис. 6 легко видеть, что соответствие между выражениями языка XQuery и вызовами функций языка Scheme является достаточно прямолинейным, и многие конструкции языка XQuery имеют свое наглядное отражение в виде примитивов языка Scheme над деревьями SXML-документов.

Результатом вычисления представленного на рис. 6 кода на Scheme является набор узлов, выражающих на SXML искомые счета для сделанных заказов: ((bill   (total-price 1900)   (name "John Smith")) (bill   (total-price 20)   (name "Paul Brown")))



Содержание раздела