Функции пользователя
Язык XQuery позволяет использовать все функции языка XPath 2.0. Кроме встроенных функций, каждый разработчик может применять собственноручно написанные. Синтаксис определения функции таков:
define function Имя ($xl as Тип1, $x2 as Тип2,...) as Тип3 {
Выражение
}
После слов define function записывается имя функции, которым может служить любое уточненное имя типа QName. В скобках перечисляется список аргументов функции, который может быть пустым. Для каждого аргумента после слова as можно записать его тип. Если тип аргумента не указан, то по умолчанию понимается произвольная последовательность. После скобки, закрывающей список аргументов, и слова as записывается тип значения, возвращаемого функцией. Если он отсутствует, то по умолчанию понимается произвольная последовательность. Наконец, в фигурных скобках записывается тело функции, в котором, чаще всего, располагается конструктор.
При записи типа можно использовать обозначения, обычные в описании DTD документа XML. Они заключаются в следующем:
если значения какого-то типа, записанного в заголовке функции, могут встречаться несколько раз или отсутствовать, то после имени типа записывается звездочка *:
если хотя бы одно значение обязательно должно присутствовать, то записывается плюс +;
если значение может встретиться нуль или один раз, то записывается вопросительный знак ?.
Для вызова функции достаточно написать ее имя и в скобках перечислить аргументы функции.
Язык XQuery допускает рекурсивные функции, вызывающие сами себя, и взаимно рекурсивные функции, вызывающие друг друга.
Где же записывается определение функции? Для записи всех определений перед выражением-запросом записывается пролог.
Пролог
Перед выражением-запросом можно написать необязательный пролог (prolog), содержащий глобальные определения. Пролог вместе с выражением-запросом образуют так называемый главный модуль (main module). В начале пролога можно записать. номер версии языка XQuery в следующем виде:
xquery version "1.0"
Далее в прологе в любом порядке и любом количестве можно записать необязательные определения пространств имен, переменных, импортировать схему документа и другие модули.
Определения функций, если они есть, записываются в конце пролога.
Определение пространств имен
Для определения пространства имен и его префикса достаточно записать их в прологе строкой вида:
declare namespace xyz = "http://some.domain/myns"
Таких строк в прологе может быть сколько угодно.
В языке XQuery определены префиксы пяти пространств имен, которые можно использовать по умолчанию:
xml = "http://www.w3.org/XML/1998/namespace"— пространство имен XML;
xs = "http://www.w3.org/2001/XMLSchema"— пространство имен XSD;
xsi = "http://www.w3.org/2001/XMLSchema-instance"— пространство экземпляров схем XML;
fn = "http://www.w3.org/2003/05/xpath-functions"— пространство имен встроенных функций языка XPath 2.0;
xdt = "http://www.w3.org/2003/05/xpath-datatypes" — пространство имен типов данных языка XPath 2.0.
Кроме того, в прологе можно определить два пространства имен по умолчанию для записи имен без префикса: одно для имен элементов, другое для имен функций. Их определения выглядят примерно так:
declare element namespace = http://some.domain/mynames
declare function namespace = http://some.domain/myfuncs
Напомню, что в прямом конструкторе элемента, в атрибуте xmlns, тоже можно определить пространство имен по умолчанию. Это определение будет действовать только в данном конструкторе, вне его действует определение, сделанное в прологе.
Достарыңызбен бөлісу: |