Учебное пособие (1075724), страница 21
Текст из файла (страница 21)
4.1. Стартовая страница eXist.194Данные хранятся в eXist в каталогах (коллекциях). В каталоге могутнаходиться подкаталоги, файлы в формате XML. Корневой каталог называется«\db».Этот вариант хранения данных похож на то, как хранятся файлы в файловойсистеме. Однако в eXist все данные (каталоги и файлы XML) хранятся в двоичныхфайлах. За счет этого (как указано в документации eXist) работа с XML-даннымипроисходит быстрее, чем если бы они хранились в файловой системе в видефайлов.Для работы с eXist используется меню, расположенное в левой части окна.Наиболее часто используются следующие пункты меню:Полный список документации – Documentation / Main Documentation.Полный список примеров – Examples / All Examples.Среда для запуска примеров на XQuery – Examples / XQuery Sandbox.
Всепримеры на XQuery, которые далее рассматриваются, необходимо запускатьименно в этом окне.Для запуска запроса его необходимо скопировать в верхнее окно и нажатькнопку «Send». Пример выполнения запроса:195Рис. 4.2. Окно выполнения XQuery-запроса.Для входа в режим администрирования используется пункт менюAdministration / Admin (Username: admin, Password: пустое поле).Для установки стандартных примеров используется пункт меню ExamplesSetup.Пункт меню Home – возврат в главное меню.Для работы с коллекциями и файлами используется пункт меню BrowseCollections.196Рис. 4.3. Окно работы с коллекциями и файлами.В этом примере показана корневая коллекция «\db» и вложенные коллекции«sandbox» и «system». Для работы с коллекциями и файлами используютсяследующие кнопки:Remove Selected – удаление выбранного файла или коллекции.Create Collection – создание коллекции.Upload – загрузка файла XML в текущую коллекцию.Для правильной работы XQuery-запросов, которые далее рассматриваются вэтом разделе пособия, необходимо создать коллекцию «Examples» и загрузить в197нее учебные XML файлы из примера 4.1.
Результат загрузки файлов показан наследующем рисунке.Рис. 4.4. Результат загрузки файлов из примера 4.1.При нажатии на гиперссылку с именем файла его содержимое открывается вновом окне браузера.Одной из особенностей eXist является возможность работы с ним попротоколу WebDAV. Этот протокол позволяет работать с удаленным вебресурсом как с логическим диском в файловой системе.198Данные в eXist хранятся в бинарном виде. То есть коллекции и файлы XMLхранятся не в файловой системе напрямую, а в бинарных файлах.
Но к ним можнополучить доступ через WebDAV и работать с ними, как с файловой системой.Для этого нужно добавить новый элемент в сетевое окружение, а в качествеадреса указать «http://localhost:8080/exist/webdav/db/». Пользователь: admin, полепароля пустое. Результат подключения представлен на следующем рисунке:Рис. 4.5. Доступ к eXist с помощью WebDAV.4.3 Язык XQuery4.3.1 ВведениеXQuery является чувствительным к регистру символов.
Ключевые словазаписываются в нижнем регистре.Основным элементом запроса на языке XQuery является выражение(expression), которое обычно записывается в Unicode.Для обозначения комментариев используются выражения (: и :).(: Это комментарий :)Языки XQuery 1.0 и XPath 2.0 почти совпадают. Основным отличиемявляется то, что в XPath 2.0 используется не полный оператор FLWOR (For LetWhere OrderBy Return), а сокращенное выражение FOR.Типы данных, которые используются в языке XQuery, базируются на схемахXML.1994.3.2 Модель данныхОсновным элементом данных в языке XQuery является последовательность(sequence). Последовательность – это ноль или более элементов (item).Элемент является атомарным значением (atomic value) или узлом (node).Атомарное значение – это значение атомарного типа в соответствии с типамиданных XML-схем.
Узлом является составной элемент.Несмотря на то, что у документа XML древовидная структура, основнымэлементом для XQuery является последовательность. То есть из этой древовиднойструктуры выбираются последовательности, которые обрабатываются запросамина XQuery.Более подробно модель данных описана в документе [XDM, 2007].4.3.3 Выражения XPath 1.0Можно использовать выражения XPath 1.0, в том числе выражения сфильтрами.4.3.4 ПоследовательностиМожно использовать запятую для перечисления элементов или to длязадания диапазонов.Вложенныепоследовательностинеиспользуются.Например,последовательность 1, (2,3) превращается в 1,2,3.Для запуска примеров необходимо использовать в eXist пункт менюExamples / XQuery Sandbox.Примеры копируются в многострочное поле ввода, для запуска используетсякнопка «Send».Таблица 4.1.
Примеры запросов. Последовательности.(1,2,3)1, 2, 3(1,(2,3),(3,4),(),(5))1, 2, 3, 3, 4, 5200(1, 3 to 5)1, 3, 4, 5(5 to 3)пустая последовательностьfn:reverse(3 to 5)5, 4, 3'A','B'A, B"A","B"A, BВозможно использование фильтров:Таблица 4.2. Примеры запросов. Фильтры.(1 to 100)[. mod 5 eq 0]Числа кратные 5 от 5 до 100(0 to 100)[fn:position() = 1to 3]0, 1, 24.3.5 Арифметические выражения + (сложение) - (вычитание) * (умножение) div (деление) idiv (целая часть от деления) mod (остаток от деления)Таблица 4.3.
Примеры запросов. Арифметические выражения.2+24-(2+2)-43-215 div 22.52015 idiv 22 (целая часть от деления)5 mod 21 (остаток от деления)4.3.6 Операторы сравненияТаблица 4.4. Операторы сравнения.Сравнение значенийeqneltlegtgeСравнение последовательностей=!=<<=>>=Сравнение значений можно выполнять только для атомарных значений (недля последовательностей).Таблица 4.5. Примеры запросов.
Сравнение значений.2 eq 2true3 ne 2true(1,2) eq (1,2)ошибкаСравнениепоследовательностейпредназначенодляодновременногосравнения нескольких элементов последовательностей.Результат сравнения истинный, если условие выполняется хотя бы дляодного любого элемента в первой последовательности и любого элемента вовторой последовательности (элементы не обязательно находятся в одинаковойпозиции).Таблица 4.6. Примеры запросов. Сравнение последовательностей.2 = 2true3 != 2true(1,2) = (1,3)true (совпадение для 1)(1,2) = (3,1)true (совпадение для 1)202(1,2) = (3,4)false4.3.7 Создание элементов (конструкторы элементов)1. Прямое создание элементов (direct constructors):Таблица 4.7. Примеры запросов.
Прямое создание элементов.<P>Текст</P><P>Текст</P><DIV><DIV><P>Текст1</P><P>Текст1</P><P>Текст2</P><P>Текст2</P></DIV></DIV><q xmlns:try="try"><q xmlns:try="try"><e id1="1">1</e><e id1="1">1</e><e id1="1 2 3">1 2 3</e><e id1="{(1 to 3)}">{(1 to</q>3)}</e></q>let $q:= <q xmlns:try="try"><q xmlns:try="try"><e id1="1">1</e><e id1="1">1</e><e id1="1 2 3">1 2 3</e><e id1="{(1 to 3)}">{(1 to</q>3)}</e></q>return $q2.
Динамическое создание элементов (computed constructors)Используются следующие конструкции XQuery:elementназвание элемента{значение элемента}attributeназвание атрибута{значение атрибута}203И название, и значение элементов и атрибутов могут быть созданыдинамически.Таблица 4.8. Примеры запросов. Динамическое создание элементов.<a b="1">element a {<c>4</c>attribute b {1},<d>value</d>element c {4},</a>element d {"value"}}<a b="1">let $q:= 2+3<c>5</c>return<d>value</d>element a {</a>attribute b {1},element c {$q},element d {"value"}}<element1>1</element1>for $i in (1 to 3)<element2>2</element2>let $n :=<element3>3</element3>fn:concat("element",$i)return element {$n} {$i}Переименование элемента: $q/@* – копирование атрибутов, $q/* –копирование вложенных элементов.Таблица 4.9.
Примеры запросов. Переименование элемента.let $q:= <q id1="1"id2="2"><e1><e2/></e1></q>returnelement newname {$q/@*, $q/*}<newname id1="1" id2="2"><e1><e2/></e1></newname>204Также возможно использование следующих конструкций:document {содержимое} – динамическое создание документаtext {“текст”} – создание текстаcomment {“комментарий”} – создание комментарияprocessing-instructionназвание инструкции {значение инструкции} –создание инструкции обработки4.3.8 Выражение FLWORЧитается как «flower» (цветок).















