Мегаобучалка Главная | О нас | Обратная связь


Define function defaulted



2019-12-29 207 Обсуждений (0)
Define function defaulted 0.00 из 5.00 0 оценок




(element? $e, anySimpleType $d)

returns anySimpleType

{

   if (empty($e))then $d

   else if (empty($e/_)then $d

   else data($e)

}

С помощь этой функции запрос Q5 можно переписать (здесь отсутствующие или пустые элементы commission и bonus считаются равными нулю).

for $e in $emps

Return

<emp>

{

$e/name,

<pay> | {$e/salary

+ defaulted ($e/commission,0)

+ defaulted ($e/bonus,0)}

</pay>

}

</emp>

Sortby(pay)

Функция, в теле которой присутствует вызов самой себя, называется рекурсивной (recursive), и две функции, в теле каждой из которых присутствует вызов другой функции пары, называются взаимно рекурсивными (mutually recursive). В следующем примере рекурсивная функция depth может быть вызвана для элемента и возвращает глубину элемента в иерархии, начинающейся с аргумента вызова. Если у элемент-аргумента отсутствуют потомки, глубина иерархии равна единице. Иначе глубина иерархии на единицу больше максимального значения глубины всех иерархий, корнем которых является потомок элемента-аргумента. Это значение вычисляется путем рекурсивного вызова функции depth.

define function depth(element $e)

Returns integer

{

if (empty($e/*)) then 1

else 1 + max

(for $c in $e/* return depth($c))

}

depth(document("bids.xml"))

Типы

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

Один из способов сослаться на тип — это указать его квалифицированное имя, или QName. QName может указывать на встроенный тип, такой как xs:integer, или на тип, который определен в некоторой схеме, такой как abc:address. Если в QName имеется префикс пространства имен (часть, расположенная слева от двоеточия), этот префикс должен быть привязан к некоторому идентификатору пространства имен. Это связывание достигается путем описываемого в следующем разделе объявления пространства имен в прологе запроса.

Еще один способ сослаться на тип — сделать это с помощью родового ключевого слова, такого как element или attribute. За этим ключевым словом может следовать QName, которое в большей степени ограничивает имя или тип узла.

За ссылкой на тип может следовать один из трех индикаторов присутствия: «*» означает «ноль или больше», «+» означает «один или больше», а «?» означает «ноль или один». Отсутствие индикатора присутствия означает присутствие ровно одного экземпляра указанного типа.

Проверка корректности

Процесс проверки корректности может выполняться применительно к документу XML или к части документа, например, отдельному элементу.

В запросной модели данных с каждым узлом-элементом ассоциируется аннотация типа. Аннотация типа свидетельствует о том, что данный элемент прошел проверку на соответствие определенному заявленному типу. Элементы, которые не прошли проверку или не соответствуют заявленному типу, получают аннотацию родового типа anyType.

Структура запроса

В XQuery запрос состоит из двух частей, называемых прологом запроса (query prolog) и телом запроса (query body). Пролог состоит из серии объявлений, которые определяют среду для обработки тела. Тело запроса — просто выражение, чье значение определяет результат запроса.

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

Помимо объявлений пространств имен пролог запроса может содержать одно или несколько объявлений импорта схемы. При объявлении импорта схемы указывается URI схемы, а также может быть указан второй URI, определяющий место, где может быть найден файл схемы. Цель импорта заключается в том, чтобы предоставить процессору запросов определения элементов, атрибутов и типов, которые объявлены в указанной схеме. Процессор запросов может использовать эти определения для проверки вновь сконструированных элементов, для оптимизации и для проведения статического анализа типов в запросе.

Помимо объявлений пространства имен и импорта схем пролог запроса может содержать одно или несколько определений функции. Функции, определенные в прологе запроса, могут использоваться в теле запроса или в телах других функций.

Итоги

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

В настоящее время XQuery определен на уровне предварительных рабочих документов. Обсуждаются функции полнотекстового поиска, сериализация результатов запроса, обработка ошибок и ряд других вопросов. Скорее всего, окончательная спецификация XQuery будет включать в себя несколько уровней соответствия; например, в ней может быть определено, как следует производить статическую проверку типов, но не будет требоваться, чтобы она выполнялась в каждой реализации, соответствующей спецификации.

Подобно тому, как XML применяется в качестве универсального формата обмена информацией в Сети, XQuery призван служить в качестве универсального формата обмена запросами. Если XQuery получит признание в качестве стандартного средства извлечения информации из источников XML-данных, это поможет реализовать потенциал XML.

XPath

XPath (XML Path Language) является языком для обращения к частям XML-документа.

XPath был создан чтобы организовать доступ к элементам документа XML из файла стилей XSLT. XPath создан на основе XML и является стандартом консорциума W3C.

В XPath используется компактный синтаксис, отличный от принятого в XML.

В 2007 году завершилась разработка версии 2.0, которая теперь является составной частью языка XQuery.



2019-12-29 207 Обсуждений (0)
Define function defaulted 0.00 из 5.00 0 оценок









Обсуждение в статье: Define function defaulted

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (207)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)