/A> Реализация предложенных осей как расширения к SXPath
SXPath - это реализация XPath на языке функционального программирования Scheme, предоставляющая язык запросов к документам на SXML. Реализация SXPath трактует путь доступа как составной запрос к дереву документа или его ветви. Отдельный шаг доступа представляет собой комбинацию проекции, выборки или транзитивного замыкания [24]. Несколько шагов доступа комбинируются с помощью операций последовательного применения или объединения.
Библиотека SXPath состоит из набора низкоуровневых предикатов, фильтров, операций выборки и комбинаторов; и функций высокого уровня, реализованных в терминах низкоуровневых функций.
В рамках данной статьи предложенные 3 дополнительные оси, обеспечивающие поддержку в XPath языка XLink, были реализованы в качестве расширения к SXPath. Примечательно, что оси traverse и
traverse-arc, осуществляющие переход по дугам, прозрачным для приложения образом вызывают вычислитель языка XPointer, когда требуется разыменовать (resolve) идентификатор фрагмента на XPointer для целевого ресурса дуги. Упомянутые оси также могут прозрачным для приложения образом загружать по Унифицированным Идентификаторам Ресурса те документы, в которых располагаются целевые ресурсы перехода и которые ранее не были загружены с помощью функции
xlink:documents. Данное свойство сделанной реализации делает ее мощным инструментом для работы с ресурсами в масштабах Всемирной Сети.
Для иллюстрации сделанной реализации вернемся к некоторым рассмотренным ранее примерам и посмотрим их вычисление с помощью предложенного расширения SXPath поддержкой языка XLink.
Пример 6. Вычислим пример 1 с помощью SXPath, расширенного поддержкой языка XLink:
((sxpath/c
"//order[entry/item/traverse::printer]/
customer/traverse::person/name/text()")
(xlink:documents "purchase-orders.xml"))
Высокоуровневая функция sxpath/c получает на вход выражение XPath и конструирует реализацию этого выражения в виде комбинации низкоуровневых примитивов библиотеки SXPath. Сконструированная реализация выражения XPath имеет сигнатуру функции, которая затем применяется к набору узлов. В данном примере этот набор состоит из единственного узла - представленного на SXML документа
"purchase-orders.xml".
Результат вычисления данного кода на языке Scheme представляет собой список - набор узлов, состоящий из единственного текстового узла:
("John Smith")
Пример 7. Вычислим пример 2 с помощью SXPath, расширенного поддержкой языка XLink. sxpath/c "//order[customer/traverse::person/VIP]/ entry/item/traverse::*") (xlink:documents "purchase-orders.xml"))Результатом вычисления данного кода является следующий список, представляющий собой набор узлов на SXML:((printer (lot "001") (descr "Ink jet") (price "450")) (display (lot "003") (descr "Color, Digital") (warranty "2 years") (price "500")))