Voprosy_k_ekzamenu_po_YaOI

advertisement
Вопросы к экзамену по дисциплине «Языки описания информации»
Оглавление
1.
Что такое языки разметки? Метаязык XML и конкретные языки разметки. ........................... 2
2.
Классификация языков разметки. .................................................................................................. 3
3.
Основные правила метаязыка XML. ............................................................................................. 4
4.
Элементы и атрибуты языка разметки. ......................................................................................... 6
5.
Назначение и задание пространства имен в XML-документах. ................................................. 7
6.
Описание синтаксиса конкретных языков разметки ................................................................... 8
7.
Язык DTD. Назначение, происхождение, основные конструкции. ............................................ 9
8.
Язык XML Schema. Назначение, основные конструкции. ........................................................10
9.
Назначение языка XPath. Пути доступа. .....................................................................................12
10.
Язык XSLT. Правила языка. Порядок их выполнения. .........................................................14
11.
Язык XQuery. Описание запроса на языке..............................................................................16
12.
Язык XQuery. Выражение запроса типа FLWOR. ..................................................................16
13.
Работа с XML-документами в программе...............................................................................18
14.
Возможности работы с XML-документами в Системах Управления Баз Данных. ............18
1. Что такое языки разметки? Метаязык XML и конкретные языки
разметки.
Язык разметки это способ описания информации путем ее разделения на логически
связанные части, выделения этих частей с помощью специальных знаков (тэгов) и
задания этим частям их синтаксических и семантических свойств.
Тэги, добавляемые к информации, синтаксически отличаются от самого содержания
информации. На основе использования тэгов, программы могут понять структуру и смысл
обрабатываемой информации и могут выполнять обработку описанной информации.
XML – это метаязык, с помощью которого можно разрабатывать конкретные языки
разметки. Каждый конкретный язык разметки предназначен для описания информации
некоторой конкретной предметной области (компьютерные сети, передача информации
и т.п.). Конкретные языки разметки, разработанные на основе XML также называются
XML-приложениями или XML-реализациями.
Примерами уже созданных широко используемых конкретных языков разметки на основе
метаязыка XML являются:
 XHTML (Extensible Hypertext Markup Language) – расширяемый язык разметки
гипертекстов;
 MathML (Mathematical Markup Language) – язык форматирования математических
формул и научной информации;

SVG (Scalable Vector Graphics) – язык разметки масштабируемой векторной
графики;
2. Классификация языков разметки.




описание синтаксиса (схемы) конкретных языков разметки (языки DTD и XML
Schema);
связывание XML-документов между собой (языки XPath, XPointer, XLink);
преобразование XML-документов в разные форматы (языки XSLT и XQuery);
описание семантики конкретных языков разметки (языки RDF/RDFS и OWL).
3. Основные правила метаязыка XML.
В общем случае, описание XML-документа составляется в соответствии с двумя наборами
правил:
1.
Основные правила метаязыка XML.
2.
Правила (синтаксис) конкретного языка разметки.
При составлении XML-документов нужно выполнять следующие основные простые
правила:
1. XML-документ должен начинаться с XML–объявления для программы, выполняющей
его обработку (XML-процессора). Например: <?xml version="1.1"?>
В XML версии 1.0 XML-объявление может быть опущено, в версии XML 1.1 оно
обязательно.
2. XML-документ состоит из элементов, каждый из которых выделяется начальным
(открывающимся) тэгом и конечным (закрывающимся) тэгом.
Например: <book> … </book>
3. Начало каждого тэга выделяется символом '<', а конец – символами '>'. Между этими
символами записывается имя элемента.
Например: <адрес> или <прибор>. 14
4. Имя элемента в конечном тэге должно в точности соответствовать имени элемента в
начальном тэге, но начинаться с символа слэш ‘/’.
Например: </адрес> или </прибор>.
5. В XML не разрешается опускать конечный тэг – даже в том случае, когда
обрабатывающая программа может определить, где заканчивается элемент.
Не правильно: <p>первый параграф<p>второй параграф</p>
Правильно: <p>первый параграф</p><p>второй параграф</p>
6. Если в элементе нет содержания, то данный элемент может записываться в виде
элемента, который заканчивается '/>'.
Например: <br/>
7. Элементы XML-документа могут вкладываться друг в друга, но только целиком. То
есть, если элемент начинается внутри другого элемента, он должен и заканчиваться
внутри данного элемента.
Не правильное вложение одного элемента в другой:
<b><i>This text is bold and italic</b></i>
Правильное вложения элемента:
<b><i>This text is bold and italic</i></b>
8. Должен быть только один элемент самого верхнего уровня (корневой элемент), в
который вложен все другие элементы документа.
9. В начальном тэге за именем элемента могут записываться атрибуты в виде пар
“имя_атрибута=значение”, разделенных пробелами.
Например: <прибор id="01318013">.
10. Все значения атрибутов элементов должно заключаться в кавычки (одинарные или
двойные).
Не правильно: <note date=12/11/2007>
Правильно: <note date="12/11/2007">
11. Если значение атрибута само содержит двойные кавычки, то для его выделения можно
использовать одиночные кавычки.
Например: <автомобиль марка=' Лада "Калина" '>
12. Каждый XML элемент может содержать (между начальным и конечным тэгами):
• другие XML элементы; • текст; • комбинацию элементов и текста.
Документы, составленные в соответствии с базовыми правила метаязыка разметки XML,
называются правильно-сформированными (well-formed). Только правильносформированные описания информации называются XML-документами.
4. Элементы и атрибуты языка разметки.
При добавлении элемента в конкретный язык разметки можно использовать любое
желаемое имя, которое соответствует следующих правилам:

имена не могут содержать пробелы;

имя должно начинаться с буквы или с символа подчеркивания ‘_’, после чего
могут использоваться буквы, цифры или подчеркивания;

следует избегать использовать символы ‘-’, ‘:’ и ‘.’, т.к. обрабатывающие
программы могут понимать их не правильно;

имена не могут начинаться с букв ‘xml’;

следует помнить, что имена являются чувствительными к регистру, т.е. маленькие
и большие буквы являются разными символами.
Содержимым элемента считается все, что, расположено между его начальным и конечным
тэгами. В качестве содержимого элемента мо-жет использоваться следующее:
 вложенные элементы – элементы, которые расположены между открывающимся
и закрывающимися тэгами. Например, в элемент «книга» имеют такие вложенные
элементы, как «название», «автор», «страница» и «цена» (рис. 1.3);
 символьные данные – это текст, задающий информационное со-держание
элемента, например, название определенной книги в эле-менте «книга»;
 сочетание вложенных элементов и символьных данных.
Атрибуты – это некоторые параметры, связанные с элементами. Можно сказать, что
атрибуты хранят метаданные элементов. В начальном тэге элемента (в том числе и
пустом) можно задать один или нескольких атрибутов следующим образом
«имя="значение"». Например, элемент «Цена» включает атрибут с именем «тип»,
которому присвоено значение «оптовая»:
 <Цена тип="оптовая">230</Цена> 17
Обычно все данные, относящиеся к элементу, задаются внутри содержимого элемента.
Атрибуты чаще используются для хранения различных свойств элемента, которые не
входят в содержание самого элемента. Можно использовать элементы, как атрибуты.
5. Назначение и задание пространства имен в XML-документах.
В XML-технологии для задания пространств имен используются унифицированные
идентификаторы ресурса URI (Uniform Resource Identifier), с которым связывается
конкретный язык разметки. Идентификатор URI это символьная строка, позволяющая
идентифицировать некоторое ресурсы web-сети или абстрактные понятие: документ,
изображение, файл, службу, ящик электронной почты, понятия «сотрудник», «студент» и
т.п. URI является расширяемым способом идентификации, т.к. уже существуют разные
схемы идентификации, и пользователи могут создаваться новые схемы. В настоящее
время существует две основные схемы описания URI идентификаторов:
 URL (Uniform Resource Locator) это URI, в котором ресурсы идентифицируются с
помощью описания способа доступа к ним (т.е., их расположения в сети), а не
путем задания имени или каких-то других атрибутов этих ресурсов. Примерами
URL являются: http://www.cctpu.edu.ru/kms/ или ftp://www.tpu.ru/;
 URN (Uniform Resource Name) это идентификация ресурсов по имени в некотором
локальном пространстве имён (и, соответственно, в определённом контексте).
URN позволяют идентификаторам оставаться глобально уникальными и
неизменными, даже в тех случаях, когда ресурсы перестают существовать или
становятся недоступными. Примерами URN являются: urn:ISBN:0-395-36341-1
(международный стандартный книжный номер) или IvanovAP@mail.ru (адрес
электронной почты).
В тексте XML-документов URI идентификаторы языков разметки непосредственно
для задания элементов и атрибутов не используются. Вместо URI используются,
соответствующие им краткие строки – префиксы, такие как rdf и xsl. Каждый префикс
ставится в соответствие только одному URI. Пример: rdf:description; xsl:template.
Однако следует помнить, что пространства имен по умолчанию относятся только к элементам, а не
к атрибутам. В приведенном выше примере атрибуты width, height, rx, ry, x и y находятся вне
пространства имен. Для указания на то, что атрибуты относятся к конкретным языкам разметки
(пространствам имен) нужно использовать префиксы.
6. Описание синтаксиса конкретных языков разметки
Метаязык XML предназначен для создания конкретных языков разметки, для которых
определены наборы элементов и атрибутов, наилучшим образом подходящие для
описываемой информации. Для конкретных языков разметки нужно описывать их
синтаксис, чтобы можно было формальным образом проверять правильность составления
XML-документов. В XML-технологии имеется два языка для описания синтаксиса
конкретных языков разметки:
 язык Document Type Defenition (DTD), описывающий структуру документа с
помощью декларативных правил; данный язык был разработан совместно с
метаязыком SGML и не использует синтаксис языка XML;
 языка XMLSchema, описывающую структуру документа с использованием
синтаксиса языка XML; специально разработан для мета-языка XML.
Как уже отмечалось, XML-документы, которые является правильносформированными (соответствует синтаксису метаязыка XML) и которые
соответствуют формально описанному синтаксису конкретного языка разметки
называется действительными (валидным, valid).
В XML-технологии вместо термина «синтаксис» чаще использует-ся термин «схема». Отсюда и название
языков: XML Schema, RDF Schema.
Схемы (описание синтаксиса) конкретных языков разметки вклю-чают:
 множество допустимых элементов; если специально не опре-делено, то нельзя использовать другие
имена элементов, кроме содер-жащихся в этом множестве (словарь языка);
 шаблон каждого элемента, который определяет, какие элемен-ты или данные могут находиться
внутри элемента, в каком порядке, сколько их может быть, а также являются ли они обязательными;
 набор разрешенных атрибутов; каждое объявление атрибута определяет его имя, тип данных,
значения по умолчанию (если они есть) и обязательность из задания.
7. Язык DTD. Назначение, происхождение, основные конструкции.
Данный язык был унаследован от языка SGML (Standard Generalized Markup Language, Разраб
ISO).
Document Type Definition (DTD) используется для описания схем (синтаксиса) конкретных
языков разметки.
Описание конкретного языка разметки с помощью языка DTD может включаться в XMLдокумент или содержаться в отдельном файле (внешнее DTD-описание). Для включения
DTD описания в XML-документ используется элемент <!DOCTYPE … >, который
добавляется в начало XML-документа.
Если в этом документе используется внешнее DTD-описание (обычно содержащееся в
файле с расширением dtd), то DOCTYPE будет иметь следующий вид:
<!DOCTYPE [имя_корневого_элемента] [тип] [идентификатор] [адрес]>
 [имя_корневого_элемента] – указывает имя корневого элемента конкретного языка
разметки (оно должно в точности соответствовать имени корневого элемента,
записанного в XML-документе);
 [тип] – может принимать одно из двух значений:
o SYSTEM – DTD-описание является закрытым, не для общего
распространения,
o PUBLIC – DTD-описание является открытым для общего использования;
 [идентификатор] – формальный открытый идентификатор для типа PUBLIC;
 [адрес] – адрес файла или URL.
Объявление типа вложенного элемента имеет следующую общую форму:
<!ELEMENT [имя] [содержание]>
 [имя] – это имя объявляемого
типа элементов;
 [содержание] – описание содержимого, определяющего, что может
содержать элемент.
8. Язык XML Schema. Назначение, основные конструкции.
Языка DTD не основывается на синтаксисе языка XML и имеет
ограниченный набор типов данных. Описания на языке DTD конкретного
языка разметки (структура содержимого и объявления списков атрибутов)
трудно читать и понимать, в элементах и атрибутах нельзя задавать тип и
шаблоны данных.
Для преодоления этих недостатков был разработан другой язык описания
синтаксиса (структуры) конкретных языков разметки, называемый XML
Schema, который также часто обозначается как XSD (XML Schema
Definition). Язык XML Schema имеет следующее пространство имен –
http://www.w3.org/2001/XMLSchema.
Одним из основных преимуществ языка XSD является то, что он разработан
на основе метаязыка XML и использует его синтаксис. Это позволяет
обрабатывать описания синтаксиса на языке XSD с помощью тех же
программ, что и сами документы. Кроме этого схемы XML можно расширять
с помощью применения пространств имен.
Другим больших преимуществ языка XSD является поддержка большого
количества типов данных. Это позволяет точнее задавать правила проверки
содержания XML-документов и создавать новые типы данных.
xs:string – произвольные строки текста;
xs:time, xs:date,– шаблоны для обозначения времени, даты;
xs:language – код языка, например, en-US или RUS;
Для описания простого элемента используется следующий синтаксис:
<xs:element name="имя" type="тип"/>
<lastname>Refsnes</lastname> XSD: <xs:element name="lastname" type="xs:string"/>
Атрибуты:
<xs:attribute name="имя" type="тип"/> <xs:attribute name="lang" type="xs:string" default="EN"/>
Ограничения:
<xs:pattern value="([a-z][A-Z])+"/>
<xs:length value="8"/>
Составные элементы:
<xs:element name="product">
<xs:complexType>
<xs:attribute name="prodid" type="xs:positiveInteger"/>
</xs:complexType>
</xs:element>
9. Назначение языка XPath. Пути доступа.
Язык XML Path Language (XPath) [8] предназначен для описания указателей
(или поисковых запросов) на части XML-документов. Он использует
синтаксис, отличный от синтаксиса языка XML. С его по-мощью можно
записывать выражения, ссылающиеся на некоторый кон-кретный элемент
или на группу элементов XML-документа. XPath по-зволяет задавать части
документа (элементы, атрибуты, комментарии и т.п.) по их абсолютному или
относительному положению в документе, а также на основе их типа, их
содержимого или других критериев.
Языка XPath рассматривает XML-документ, как иерархическую структуру
(дерево), состоящую из узлов, следующих семи типов:
1. узел документа – включает весь XML-документ, помимо корневого
элемента также и комментарии, записанные вне его;
2. узлы элементов – включают элементы документа (начиная с
открывающего тэга и заканчивая закрывающим тэгом);
3. узлы атрибутов – пара «имя_атрибута=значение_атрибута»;
4. текстовые узлы – текстовое содержание элементов и атрибутов;
5. узлы пространств имен;
6. узлы инструкций обработки;
7. узлы комментариев.
Путь доступа задает шаблон для отбора узлов XML-документа.
Выбираемая с помощью пути доступа последовательность узлов может
быть пустой, содержать один узел или множество узлов. Можно отметить,
что пути доступа во многом сходны с путями к файлам, которые
используются в файловых системах для указания местонахождения файла
или папки.
Важным понятием при рассмотрении путей доступа является контекст.
Контекст – это некая точка отсчета, относительно которой записывается путь
доступа.
В языке XPath имеются два вида путей доступа:
 абсолютный путь – он начинается от корневого узла дерева
документа (запись такого пути начинается со слэша);
 относительный путь – он начинается с текущего (контекстного) узла
дерева документа.
‘books/book/name’, проходит по иерархии документа вплоть до элемента <name>.
Операторы и специальные символы путей доступа
При составлении путей доступа используются следующие операторы и специальные
символы, которые описаны в табл. 4.2 и 4.4.
Текущий контекст
Выражение с префиксом в виде точки и косой черты (./) явным об-разом указывает на
использование текущего контекста. Например, выражение ‘./author’ ссылается на все
элементы <author> внутри текущего контекста. Однако, следует запомнить, что это
выражение эквивалентно следующей краткой записи пути доступа: author.
Корневой элемент
Выражение, использующее косую черту и звездочку (/*), использует в качестве контекста
корневой элемент. Например, выражение ‘/*’ на-ходит корневой элемент документа.
Рекурсивный спуск
Выражение, использующее двойную косую черту (//), указывает на поиск, по всем
нижележащим уровням иерархии. Если двойная косая черта (//) в начале задается, то
поиск выполняется с корневого элемента (он является контекстом поиска). Например,
путь ‘//author’ ссылается на все элементы <author> внутри в любом месте внутри текущего
документа.
Конкретные элементы
Выражение, которое начинается с имени элемента, ссылается на запрос конкретного
элемента, который начинается от текущего узла контекста. Например, путь доступа
‘bookstore/book’ ссылается на последовательность элементов <book> внутри элементов
<bookstore> в текущего узле контекста.
Использование операторов пути
С помощью операторов пути (/ и //) описываются последовательности элементов
требуемого типа. Эти операторы принимают в качестве аргументов последовательность «с
левой стороны», из которой производится выбор, и критерий узлов «с правой стороны»
как инструкцию, указывающую, какие элементы нужно выбирать.
Оператор «дочерний элемент» (/) производит выбор из непосредственных дочерних
элементов левой последовательности, в то время как оператор «потомок» (//) производит
выбор из всех потомков последовательности с левой стороны. Оператор // можно
рассматривать как подстановку для одного или нескольких уровней иерархии.
Следует заметить, что операторы пути изменяют контекст по мере выполнения запроса.
Последовательно соединяя несколько операторов пути, пользователи могут выполнять
обход всего дерева документа.
В языке XPath кроме знака равенства поддерживает полный набор операторов сравнения, в том числе <, >,
>=, <= и !=. Например, выраже-ние //person[@born<=1976] ищет в документе все элементы person с атрибутом born, числовое значение которого меньше или равно 1976. Следует помнить, что если < или <=
используются внутри XML-документа, то необходимо заменять знак «меньше» на <, например
"//person[@born <= 1976]"/>.
В XPath имена атрибутов задаются с помощью символом @, за которым следует имя
нужного атрибута. Атрибуты и дочерние элементы обрабатываются одинаково, и эти два
типа считаются эквивалентными везде, где это возможно. Например, выражение XPath
@born выбирает атрибут born контекстного узла.
10. Язык XSLT. Правила языка. Порядок их выполнения.
В общем случае, в преобразовании исходного XML-документа участвуют три
документа:
 исходный XML-документ, который подвергается преобразованию;
 документ с описанием преобразования (XSLT-документ);
 результирующий XML-документ, который является результатом
преобразования.
Язык XSLT является декларативным языком, т.е. с его помощью описывается
не последовательности действий, а объявляется (декларируются) набор
правил преобразования. Каждое из таких правил может:
 обрабатывать определенный фрагмент входного документа с тем,
чтобы сгенерировать фрагмент выходного документа;
 вызывать другие правила, таким образом обеспечивая обработку
документов сколь угодно сложной структуры.
Правила:
Правила объявляются с помощью элемента (декларации) xsl:template, который
имеет следующий синтаксис:
<xsl:template match="пaттepн" name="имя" priority="число" mode="имя">
<!-- Содержимое:несколько элементов xsl:param, тело правила -->
</xsl:template>
Данный элемент имеет следующие атрибуты:
 match – задает путь доступа (XPath-выражение, паттерн), определяющего последовательность узлов исходного дерева, для
преобра-зования которых следует применять это правило. Правила, в
которых определен атрибут match, вызываются при помощи инструкции
xsl:apply-templates) (заданных либо во встроенных правилах, либо в
правилах XSLT-преобразования).
Например, следующее правило будет вызываться для обработки элементов
bold, который должны заменяться на элементы <b>:
<xsl:template match="bold">
<b><xsl:value-of select="." /></b>
</xsl:template>
 name – имя правила, используемое
для задания именованных правил,
которые могут вызываться вне зависимости от текущего кон-текста, и
даже вести себя как функции, т.е. принимать на вход парамет-ры и
возвращать некоторые значения. Вызвать их можно только по имени с
помощью элемента xsl:call-template.
Например, следующее правило не обрабатывает какие-либо опре-деленные
узлы, а может вызываться по имени (оно включает в резуль-тирующее дерево
текстовое содержание текущего узла):
<xsl:template name="bold">
<b><xsl:value-of select="."/></b>
</xsl:template>
 mode – указывает режим правила; с помощью режимов можно задавать
различные преобразования для одних и тех же частей докумен-та
(будут рассмотрены далее).
 priority – задает приоритет правила; используется для разре-шения
конфликтов, когда один и тот же узел исходного документа мо-жет
быть обработан различными правилами.
При определении правила нужно обязательно указать хотя бы один из
атрибутов match или name, причем эти атрибуты могут присутство-вать в
xsl:template одновременно.
Порядок:
Он начинает свою работу с того, что вначале ищет правило для корневого
элемента (текущего узла). Если правила для корневого элемента нет, то
используя встроенные правила (правила по умолчанию). Встроенные правила
описывают обход исходного дерева по принципу «сначала вглубь – потом в
ширину». При выполнении обхода происходит изменение контекста. Для
всех узлов входящих в текущий контекст определяются (выбираются)
правила, которые могут быть к ним применены. Порядок просмотра узлов
может быть изменен вызовом правил с помощью элемента xsl:apply-templates.
Если правило содержит инструкции xsl:apply-templates или xsl:for-each, которые дополнительно выбирают
узлы для обработки, то
текста (последовательности) и выполняется переход к этапу
Каждое правило будут создавать фрагменты дерева, которые затем
объединяются в дерево результирующего документа.
11. Язык XQuery. Описание запроса на языке.
Язык XML Query Language (XQuery) предназначен для извлечения из XML-документа
(или набора документов), некоторых его частей и их оформление в виде элементов нового
XML-документа.
Запрос (query) в языке XQuery также оформляется, как выражение. Разница между
выражением и запросом заключается в том, что в результате вычисления выражения
получается последовательность, а в результате выполнения запроса должен получиться
один или несколько XML- документов.
Самым простым примером прямого конструктуора является про-стое текстовое описание
XML-элемента:
<person id="92-3456" sex="male">
<name>Иван Петров</name>
<age>30</age>
</person>
Данный прямой конструктор формирует и включает в дерево но-вый узел-элемент person
и вложенные в него узлы-элементы name и age, узлы-атрибуты id и sex, а также текстовые
узлы с содержимым элемен-тов и значениями атрибутов.
12. Язык XQuery. Выражение запроса типа FLWOR.
В языке XQuery имеется специальный тип запроса, называемый FLWOR (читается так же,
как слово "flower" – цветок). Данное выражение во многом сходно с оператором Select
языка SQL. Запрос FLWOR в полном виде состоит из пяти частей "For-Let-Where-Order
by-Return", (из начальных букв этих частей и было составлено название данного типа
запросов).
Полная форма выражения-запроса выглядит следующим образом:
for $a1 as Тип1 at $i1 in Выражение1, $a2 as Тип2 at $i2 in Выражение2,...
let $b1 as Тип3 := ВыражениеЗ, $b2 as Тип4 := Выражение4,...
where Выражение5
order by Выражение6
return Выражение7
В запросе обязательно должен быть задан хотя бы один из заголовков for и let. Однако в
запросе их может быть несколько и они могут записываться в любом порядке.
Заключительная часть return является обязательной и она должна быть только одна.
Однако, в ней может записываться другой запрос FLWOR, а в нем еще один и т.д. Таким
образом можно составлять достаточно сложные вложенные запросы.
Запрос к XML-документу, как и все в языке XQuery, записывается в виде выражения,
которое в простейшем случае выглядит следующим образом:
let $n := (“Петр”, “Иванов”)
return <name> { $n } </name>
Здесь после знака присваивания := может стоять произвольное выражение. Данное
выражение вычисляется, и полученный результат присваивается переменной $n (в данном
случае это последовательность "Петр Иванов"). Затем значение переменной $n
подставляется в возвращаемый запросом элемент, т.е. <name>Петр Иванов</name>.
В операторе return можно записать любое выражение, хотя чаше всего здесь записывается
конструктор элементов.
Другая форма запроса начинается со слова for. Она выглядит и выполняется как цикл
языка XPath 2.0 (см. раздел 4.1). Вот простейший пример: for $n in (“Петр”, “Иванов”)
return <name> { $n } </name>
Здесь переменная $n последовательно принимает значения узлов и/или атомарных
значений, входящих в результат вычисления выражения, стоящего после знака операции
“in”. Для каждого значения переменной $n выполняется оператор return, и запрос
возвращает несколько элементов:
<name>Петр</name> <name>Иванов</name>
Переменная заголовка получает тип своего значения, но этот тип можно преобразовать,
указав новый тип после слова аs. Новый тип должен быть совместим со старым.
Например:
for $n as xs:string in ("Петр", "Иванов")
или
let $n as xs:string := ("Петр", "Иванов")
У заголовка for есть одна дополнительная возможность, которой нет у заголовка let.
Параллельно переменной заголовка можно определить еще одну целочисленную
переменную типа xs:integer, которая бу-дет принимать значения 1, 2, 3,..., отсчитывая
повторения цикла. Для создания порядковой переменной надо записать ее после слова at:
for $n at $i in ("Петр", "Иванов")
Этот заголовок задает по два значения переменных $n и $i:
($n = "Петр", $i = 1)
Заголовков let и for в начале запроса можно использовать совместно. Например:
for $n in ("Петр", "Иванов")
let $р := ("***", $n, "***")
return <name>{ $p }</name>
В результате получаем элементы:
<name>*** Петр ***</name>
<name>*** Иванов ***</name>
Такое совмещение заголовков let и for допускается в любом порядке и в любом
количестве. Можно записать несколько заголовков for подряд или перемежать их
заголовками let.
Циклы можно вкладывать друг в друга. При этом часто используется сокращенная запись.
Например, запрос:
for $i in (10, 20), $j in (1 to 3)
return <x>{ ($i, “,”, $j) }</x> даст в результате элементы:
<x>{ 10,1) }</x>
<x>{ 10,2) }</x>
<x>{ 10,3) }</x>
<x>{ 20,1) }</x>
<x>{ 20,2) }</x>
<x>{ 20,3) }</x>
Такая же запись возможна и в запросе с заголовком let. Например, если предыдущий
пример записать следующим образом:
let $i := (10, 20), $j := (1 to 3)
return <x>{ ($i, “,”, $j) }</x>
то будет получен следующий результат:
<х>10 20, 1 2 3</х>
В общем случае в запросе может быть несколько заголовков let и for, а в каждом заголовке
можно записать несколько переменных. Каждый заголовок let и каждое выполнение
заголовка for вместе формируют кортеж (tuple) – упорядоченный набор из одной или
нескольких переменных. Все выполнения всех заголовков for приводят к образованию
потока кортежей (tuple stream). Для каждого кортежа вычисляется выражение,
расположенное в операторе return.
Кортеж, сформированный в заголовках запроса, может быть проверен с помощью
условия, заданного выражением в операторе where. Если кортеж удовлетворяет данному
условию, то он передается оператору return. Например:
for $x in /book/price
where $x > 0
return $x
Поток кортежей, удовлетворяющих условию, можно сортировать, задав требуемый
порядок с помощью оператора order by, в котором записывается одно или несколько
выражений через запятую. Каждое выражение может завершаться словом ascending
(сортировка по возрастанию, по умолчанию) или словом descending (сортировка по
убыванию). В результате вычисления выражений определяются переменные, по которым
производится сортировка. Например:
for $n in ("Петр", "Иванов")
order by $n descending
return <name>{ $n }</name>
13. Работа с XML-документами в программе.
VS 2010+ позволяет XSLT производить отладку, привязывая xml файл к коду или наоборот. В
процессе отладки можно открывать специальные окна, используемые отладчиком:
–
Окно Locals показывает значения всех локальных переменных. К ним относятся
переменные, определенные в таблице стилей и переменные используемые
отладчиком для отслеживания узлов (nodes), которые находятся в контексте.
–
Окно XSL Output (вывода результата преобразования ). Это окно отделено от
Output окне Visual Studio.
–
Окно Watch. Для появления данного окна нужно выбрать команду Debug>Windows->Watch 1.
•
–
Если в поле Name ввести название переменной, например, $bookAverage и
нажать ENTER, то значение данной переменной будет показываться в окне
Watch 1.
В поле Name можно вводить предопределенные контекстные переменные , которая
отслеживает текущий контекст. Начальным значением self::node() является
корневой узел.
14. Возможности работы с XML-документами в Системах Управления Баз
Данных.
Для поддержки новых требований к обработке данных, Microsoft добавил в SQL Server
возможности работы с XML данными, начиная с SQL Server 2000.
Наиболее существенным дополнением возможностей SQL Server работать с XML данными было
введение специально типа данных XML.
•
Тип данных XML может хранить полные XML документы или их части.
•
Тип данных XML может использоваться аналогично тому, как используются и другие
типы данных SQL Server:
–
можно создавать таблицы с XML колонками,
–
можно объявлять XML переменные и использовать их в качестве параметров и
возвращаемых значений.
Поддержка работы с XML в SQL Server 2008 может быть разделена на три большие категории:
–
возможности формировать XML документы (из реляционных данных);
–
возможности выполнять грамматический разбор и запросы к XML документам,
хранящимся в XML полях;
–
возможности выполнять проверку XML документов.
С помощью XML типа данных в SQL Server реализовано ограниченное подмножество языка
XQuery и запросы на языке T-SQL могут использовать язык XQuery для получения информации из
XML колонок и переменных.
Нужна массовая загрузка XML данных и их декомпозиция на нижележащие таблицы, с помощью
XML view.
Оператор FOR XML совместно с директивами RAW, AUTO, PATH и EXPLICIT позволяет
генерировать XML документы, удовлетворяющие почти всем требованиям языка XML.
впервые реализованные в SQL Server 2000.
Директивы AUTO, RAW, EXPLICIT и PATH позволяют управлять структурой формируемого
XML документа;
•
использование директив AUTO и RAW позволяет формировать XML документ,
содержащий XML элемент для каждой строки в результате выборки. Они имеют простой
синтаксис и их просто использовать, но они предоставляют мало возможности управлять
структурой получаемого XML документа.
•
использование директивы EXPLICIT предоставляет больше возможностей по управлению
структурой создаваемых XML данных, но при этом используется намного более сложный
синтаксис и многие пользователи считают, что его трудно использовать;
•
директива PATH имеет более простой синтаксис и мощные возможности настройки. Почти
все, что возможно сделать с помощью директивы EXPLICIT также возможно и с помощью
директивы PATH.
Download