Глобальные элементы и атрибуты 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Глобальные элементы и атрибуты



Глобальные элементы, и глобальные атрибуты, создаются с помощью объявлений, которые являются дочерними элементами элемента schema. Как было указано выше, на глобальный элемент или глобальный атрибут можно сослаться с помощью параметра ref в одном или более объявлениях.

Объявление, которое использует ссылку на глобальный элемент, позволяет элементу, на который указывает ссылка, появиться в документе в качестве содержимого данного объявления. Так, например, элемент comment появляется в po.xml на том же самом уровне, что и shipTo, billTo и элементы items, что связано с тем, что объявление comment находится в комплексном определении типа на том же самом уровне, что и объявления других трех элементов.

Объявление глобального элемента дает возможность элементу появиться в документе в качестве элемента верхнего уровня. Следовательно, purchaseOrder, который объявлен как глобальный элемент в po.xsd, может появиться как элемент верхнего уровня в po.xml. Обратите внимание, что объявление элемента comment как глобального позволяет ему появиться в документе po.xml как элементу верхнего уровня, а не только в качестве подэлемента элемента purchaseOrder.

Есть множество особенностей относительно использования глобальных элементов и атрибутов. Одна из них состоит в том, что глобальные объявления, не могут содержать ссылки: такие объявления должны задавать простые или сложные типы непосредственно. Говоря конкретно, глобальные объявления не могут содержать атрибута ref, они должны использовать атрибут type. Вторая особенность состоит в том, что в глобальных объявлениях нельзя использовать ограничение на количество вхождений элементов, хотя оно может быть помещено в локальные объявления, которые на них ссылаются. Другими словами, глобальные объявления не могут содержать атрибуты minOccurs, maxOccurs, или use.

Конфликты имен

Теперь разберем, как определить новые комплексные типы (см., PurchaseOrderType), объявить элементы (см., purchaseOrder) и объявить атрибуты (см., orderDate). Все эти действия манипулируют с именами, поэтому обычно возникает вопрос, что будет, если объявить два объекта с одинаковыми именами?

Рассмотрим несколько примеров. Если объявить два объекта с одинаковыми именами, но разными типами, то такое объявление создаст конфликтную ситуацию. Например, конфликт имен вызовут комплексный тип с именем USStates и простой тип с именем USStates. Однако если мы определяем комплексный тип с именем USAddress, и объявляем элемент или атрибут с именем USAddress, то конфликт не возникает. Конфликт также не возникает, если элементы с одинаковыми именами объявлены внутри определения различных типов. Например, если мы объявим один элемент как часть типа USAddress, а второй элемент с тем же именем как часть типа Item, то конфликт имен не возникнет. Такие объявления называют локальными. Наконец, если имеется два типа, один из которых определен вами (например, decimal), а второй встроен в язык XML-схемы, то конфликт имен также не возникает. Отсутствие конфликта связано с тем, что эти два типа принадлежат различным именным пространствам. Более подробно использование именных пространств в XML-схемах будет рассмотрено позже.

Простые типы

XML-схема содержит объявления нескольких элементов и атрибутов простого типа. Некоторые из этих простых типов, например string и decimal встроены в язык XML-схемы, в то время как другие определены специально для данного типа документа. Например, атрибут partNum имеет тип по имени SKU (Stock Keeping Unit), который получен из встроенного простого типа string. Встроенные простые типы, и их вариации могут использоваться в объявлениях элементов и атрибутов. В таблице 2 приводится список простых встроенных в язык XML-схемы типов.

 

 

Таблица 2. Список простых типов

Простой тип Примеры (разграничены запятыми) Примечания
string Confirm this is electric  
normalizedString Confirm this is electric см. 3)
token Confirm this is electric см. 4)
byte -1, 126 см. 2)
unsignedByte 0, 126 см. 2)
base64Binary GpM7  
hexBinary 0FB7  
integer -126789, -1, 0, 1, 126789 см. 2)
positiveInteger 1, 126789 см. 2)
negativeInteger -126789, -1 см. 2)
nonNegativeInteger 0, 1, 126789 см. 2)
nonPositiveInteger -126789, -1, 0 см. 2)
int -1, 126789675 см. 2)
unsignedInt 0, 1267896754 см. 2)
long -1, 12678967543233 см. 2)
unsignedLong 0, 12678967543233 см. 2)
short -1, 12678 см. 2)
unsignedShort 0, 12678 см. 2)
decimal -1.23, 0, 123.4, 1000.00 см. 2)
float -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN 32-х битовое число однократной точности с плавающей запятой. NaN - число не задано cм. 2)
double -INF, -1E4, -0, 0, 12.78E-2, 12, INF, NaN 64-х битовое число двойной точности с плавающей запятой  см. 2)
boolean true, false 1, 0  
time 13:20:00.000, 13:20:00.000-05:00 см. 2)
dateTime 1999-05-31T13:20:00.000-05:00 31 мая 1999 года 13 часов 20 минут Восточноевропейского стандартного времени, которое на 5 часов отстает от универсального времени. cм, 2)
duration P1Y2M3DT10H30M12.3S 1 год, 2 месяца, 3 дня, 10 часов, 30 минут, и 12.3 секунды
date 1999-05-31 см. 2)
gMonth --05-- Май см. 2) и 5)
gYear 1999 1999 см. 2) и 5)
gYearMonth 1999-02 Февраль 1999 года, не зависимо от номера дня см. 2) и 5)
gDay ---31 31 день см. 2) и 5)
gMonthDay --05-31 31 мая см. 2) и 5)
Name shipTo XML 1.0 тип Name
QName po:USAddress XML Namespace QName
NCName USAddress XML Namespace NCName, то есть QName без префикса и двоеточия
anyURI http://www.example.com/, http://www.example.com/ doc.html#ID5  
language en-GB, en-US, fr Значения допустимые для xml:lang как определено в XML 1.0
ID   XML 1.0 атрибут типа ID см. 1)
IDREF   XML 1.0 атрибут типа IDREF см. 1)
IDREFS   XML 1.0 атрибут типа IDREFS см. 1)
ENTITY   XML 1.0 атрибут типа ENTITY см. 1)
ENTITIES   XML 1.0 атрибут типа ENTITIES см. 1)
NOTATION   XML 1.0 атрибут типа NOTATION см. 1)
NMTOKEN US, Bresil XML 1.0 атрибут типа NMTOKEN см. 1)
NMTOKENS US UK, Bresil Canada Mexique XML 1.0 атрибут типа NMTOKENS, то есть список NMTOKEN разделенных пробелами см. 1)

Примечания:

1) Для обеспечения совместимости XML-схем и XML 1.0 DTD, простые идентификаторы типов (IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, NMTOKEN, NMTOKENS), должны использоваться только в атрибутах.

2) Значение этого типа может быть представлено больше чем одним лексическим форматом. Например, 100 и 1.0E2 - оба значения представлены в формате с плавающей точкой, и значением равным "сто". Однако, для этого типа были установлены правила, которые определяют канонический лексический формат.

3) Символы перевода строки, табуляции, и перевода каретки в типе normalizedString перед обработкой схемы преобразуются в пробелы.

4) Как и в normalizedString, смежные пробелы сокращены до единственного пробела, предшествующие и завершающие пробелы удаляются.

5) Префикс "g", задает время по Григорианскому календарю.

 

Новые простые типы можно определить, получая их от существующих простых типов (встроенных или ранее определенных). В частности мы можем получить новый простой тип, ограничивая существующий простой тип. Другими словами, для нового типа мы можем установить собственный диапазон значений как подмножество диапазона значений существующего типа. Для определения имени и типа собственного простого типа используют оператор simpleType. При этом c помощью оператора restriction указывают прототип, и идентифицируют фасеты (параметры), которые ограничивают диапазон значений базового типа.

Предположим, что мы хотим создать новый тип целого числа, названного myInteger, чей диапазон значений должен находиться между 10000 и 99999 (включительно). Мы базируем наше определение на встроенном простом типе integer, чей диапазон значений включает так же и целые числа как меньше чем 10000, так и больше чем 99999. Чтобы определить тип myInteger, мы ограничиваем диапазон базового типа integer, используя два фасета, названные minInclusive и maxInclusive.

Определение myInteger. Диапазон 10000-99999:

<xsd:SimpleType name=”myInteger”>

<xsd:restriction base=”xsd:integer”>

                   <xsd:minInclusive value=”10000”>

<xsd:maxInclusive value=”99999”>

                   </ xsd: restruction >

       </ xsd: SimpleType >

 

Приведенный пример показывает использование одной из возможных комбинаций базового типа, и двух фасетов, которые были применены для определения myInteger. Но возможно использование и других комбинаций встроенных простых типов и фасетов (см. таблицы 4.1 и 4.2). Рассмотрим более сложный пример определения простого типа. Тип по имени SKU получен из простого типа string. Мы ограничиваем значения SKU путем использования фасета pattern, который содержит регулярное выражение, определяющее допустимый формат строки "\d{3}-[A-Z]{2}". Это выражение читается следующим образом: "строка начинается с трех цифр, за которыми следует дефис, за дефисом следует два ASCII-символами верхнего регистра".

Определение простого типа SKU:

 

< xsd: SimpleType name =” SKU ”>

<xsd:restriction base=”xsd:string”>

                   <xsd:pattern value=”\d{3}-[A-Z]{2}”/>

</ xsd: restruction >

</ xsd: SimpleType >

Язык XML-схем определяет 12 фасетов, которые перечислены в таблице 3.

 

Таблица 3. Фасеты

Фасет Влияние на значение типа данных
enumeration Значение типа данных ограничивается определенным набором значений
maxExclusive Числовое значение типа данных меньше, чем указанное значение
minExclusive Числовое значение типа данных больше, чем указанное значение
maxInclusive Числовое значение типа данных меньше или равно указанному значению
minInclusive Числовое значение типа данных больше или равно указанному значению
maxLength Определяет максимальное число символов или элементов списка, допускаемых для этого значения
minLength Определяет минимальное число символов или элементов списка, допускаемых для этого значения
pattern Значение типа данных ограничено определенной последовательностью символов, представленной в виде регулярных выражений
length Определяет точное число символов или элементов списка, допускаемых для этого значения
whiteSpace Определяет способ обработки пробелов. Допустимые значения для этого атрибута: сохранить (preserve), заменить (replace) и свернуть (collapse)
fractionDigits Ограничение максимально допустимого количества разрядов десятичной дроби в значении
totalDigits Ограничение максимально допустимого количества разрядов в значении

 

Таблица 4.1. Простые типы и соответствующие им фасеты

Простые типы

Фасеты

lenght minLenght maxLenght pattern numeration whiteSpace
string + + + + + +
normalizedString + + + + + +
token + + + + + +
byte       + + +
unsignedByte       + + +
base64Binary + + + + + +
hexBinary + + + + + +
integer       + + +
positiveInteger       + + +
negativeInteger       + + +
nonNegativeInteger       + + +
nonPositiveInteger       + + +
int       + + +
unsignedInt       + + +
long       + + +
unsignedLong       + + +
short       + + +
unsignedShort       + + +
decimal       + + +
float       + + +
double       + + +
boolean       +   +
time       + + +
dateTime       + + +
duration       + + +
date       + + +
gMonth       + + +
gYear       + + +
gYearMonth       + + +
gDay       + + +
gMonthDay       + + +
Name + + + + + +
QName + + + + + +
NCName + + + + + +
anyURI + + + + + +
language + + + + + +
ID + + + + + +
IDREF + + + + + +
IDREFS + + +   + +
ENTITY + + + + + +
ENTITIES + + +   + +
NOTATION + + + + + +
NMTOKEN + + + + + +
NMTOKENS + + +   + +

 

Таблица 4.2. Простые типы и соответствующие им фасеты

Простые типы

Фасеты

maxInclusive minInclusive maxExclusive minExclusive totalDigit fractionDigits
byte + + + + + +
unsignedByte + + + + + +
integer + + + + + +
positiveInteger + + + + + +
negativeInteger + + + + + +
nonNegativeInteger + + + + + +
nonPositiveInteger + + + + + +
int + + + + + +
unsignedInt + + + + + +
long + + + + + +
unsignedLong + + + + + +
short + + + + + +
unsignedShort + + + + + +
decimal + + + + + +
float + + + +    
double + + + +    
time + + + +    
dateTime + + + +    
duration + + + +    
date + + + +    
gMonth + + + +    
gYear + + + +    
gYearMonth + + + +    
gDay + + + +    
gMonthDay + + + +    

 

 Среди них особенно полезен фасет enumeration. Его можно использовать для ограничения значения почти каждого простого типа, кроме boolean. Фасет enumeration ограничивает простой тип набором явных значений. Например, мы можем использовать enumeration, чтобы определить новый простой тип по имени USState, полученный из типа string, значение которого должно быть одним из стандартных сокращений наименования штатов США.

Использование фасета enumeration:

<xsd:SimpleType name=”USState”>

<xsd:restriction base=”xsd:string”>

                   <xsd:enumeration value=”AK”/>

<xsd:enumeration value=”AL”/>

<xsd:enumeration value=”AR”/>

</xsd:restruction>

</ xsd: SimpleType >

Использование типа USState является хорошей заменой типа string, при использовании в элементе state (содержит наименование штата). За счет такой замены мы можем ограничить значения элемента state в подэлементах billTo и shipTo. При этом эти значения ограничены следующим перечнем: AK, АL, AR, и т.д. Обратите внимание, что перечисляемые значения, указанные для данного типа должны быть уникальны.

Тип List

В дополнение к так называемым атомарным типам, которые составляют большинство, XML-схема имеет понятие списка. Перечень атомарных типов перечислен в таблице 2. Атомарные типы, списочные типы, и типы объединения, описанные в следующем разделе, все вместе называются простыми типами. Использование атомарных типов индивидуализирует используемые значения. Например, NMTOKEN индивидуализирует значение US, делая его неделимым в том смысле, что никакая часть US, типа символа "S", не имеет значения отдельно от целого. Списочные типы состоят из последовательностей атомарных типов, и, следовательно, допустимыми значениями могут быть только "атомы" из этой последовательности. Например, списочный тип NMTOKENS состоит из значений типа NMTOKEN, разделенных пробелами. Например, "US UK FR". Язык XML-схем имеет три встроенных списочных типа: NMTOKENS, IDREFS и ENTITIES.

В дополнение к встроенным списочным типам Вы можете создать новые списочные типы из существующих атомарных типов. Невозможно создать списочные типы из существующих списочных типов или из комплексных типов. Например, рассмотрим списочный тип listOfMyIntType, состоящий из значений myInteger:

< xsd: SimpleType name =” listOfMyIntType ”>

<xsd:list ItemType=”myInteger”>

</xsd:SimpleType >

Элемент в документе, содержимое которого соответствует типу listOfMyIntType, может выглядеть следующим образом:

< listOfMyInt > 20003 15037 95977 95945 </ listOfMyInt >

Для создания списочного типа могут быть применены следующие фасеты: length, minLength, maxLength, и enumeration. Например, чтобы определить список точно из шести штатов США (SixUSStates), мы сначала определяем новый списочный тип (полученный из типа USState) с именем USStateList, а затем создаем тип SixUSStates, ограничивая USStateList только шестью элементами.

 Списочный тип SixUSStates:

<xsd:SimpleType name=”USStateList”>

<xsd:list ItemType=”USState”/>

<xsd:SimpleType>

<xsd: SimpleType name=”SixUSStates”/>

< xsd:restruction base=” USStateList”>

<xsd:lenght value=”6”/>

</xsd:restruction>

</ xsd: SimpleType >

Элементы, тип которых - SixUSStates, должны содержать шесть элементов, и каждый из этих шести элементов должен быть одним из атомарных значений перечислимого типа USState, например:

<sixStates>PA NY CA NY LA AK </sixStates>

Обратите внимание, что мы получили списочный тип из элементов атомарного типа string. Однако, тип string может содержать пробелы, а пробелы разграничивают элементы в списочном типе. Поэтому Вы должны быть внимательным, используя списочные типы, исходный тип которых - string. Например, мы определили новый списочный тип на основе базового типа string и фасета length равным 3. Тогда следующие три элемента списка являются законными: Asie Europe Afrique.

Но следующие три элемента списка незаконны: Asie Europe Amerique Latine.

Даже учитывая что "Amerique Latine" может существовать вне списка как отдельная строка, когда это значение включено в список, то пробел между Amerique и Latine фактически создает четвертый элемент списка. Поэтому последний пример не будет соответствовать списочному типу с тремя элементами.

Задачи:

1. Изучить область применения XML–схем

2. Изучить структуру XML–схем

3. Изучить требования для создания корректного документа схемы

4. Знать достоинства и недостатки XML–схем по сравнению с DTD

5. Выучить виды элементов и атрибутов

6. Изучить назначение, способы создания и применения схем

7. Выучить виды базовых типов и способы создания пользовательских 8. Изучить виды ограничений, использующиеся в схемах

8. Изучить и научиться применять определения ключевых полей

9. Выучить виды и способы применения регулярных выражений в XML схемах

 

Ст руктура отчёта:

1. Титульный

2. Содержание

3. Описание целей и задач

4. Описание системы

5. Структура нормализованной БД (IDEF1x) с описанием всех ограничений

6. XML и XSD файлы

Пример лабораторной работы №2:

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

<fitness xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:NoNamespaceSchemaLocation="Schema.xsd">

XSD файл:

Описание: с помощью XML Schema описываем структуру XML: названия элементов и атрибутов, отношения между ними и типы данных.

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="./Schema.xsd">

<xsd:complexType name=”client”>

<xsd:sequence>

<xsd:element name=”name” type=”xsd:string”/>

<xsd:element name=”birth” type=”xsd:date”/>

<xsd:element name=”ID_card” type=”xsd:decimal”/>

<xsd:element name=”telephone” type=”xsd:string”/>

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name=”employee”>

<xsd:sequence>

<xsd:element name=”name” type=”xsd:string”/>

<xsd:element name=”position” type=”xsd:string”/>

<xsd:element name=”telephone” type=”xsd:string”/>

<xsd:element name=”email” type=”xsd:string”/>

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name=”contract”>

<xsd:sequence>

<xsd:element name=”ID_card” type=”xsd:decimal”/>

<xsd:element name=”contract_date” type=”xsd:date”/>

<xsd:element name=”term” type=”xsd:gMonthDay”/>

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name="list1">

<xsd:sequence>

<xsd:element ref="client" maxOccurs="unbounded"/>

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name="list2">

<xsd:sequence>

<xsd:element ref="employee" maxOccurs="unbounded"/>

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name="list3">

<xsd:sequence>

<xsd:element ref="contract" maxOccurs="unbounded"/>

</xsd:sequence>

</xsd:complexType>

<xsd:complexType name="fitness">

<xsd:all>

<xsd:element ref="list1"/>

<xsd:element ref="list2"/>

<xsd:element ref="list3"/>

</xsd:all>

</xsd:complexType>

</xsd:schema>

Л абораторная № 3

 

Т ема: «Изучение XML шаблонов»

Ц ель: Изучить основы формата XSLT

Теоретические основы:

XSLT (eXtensible Stylesheet Language Transformations) — язык преобразования XML-документов. Спецификация XSLT входит в состав XSL и является рекомендацией W3C.

При применении таблицы стилей XSLT, состоящей из набора шаблонов, к XML-документу (исходное дерево) образуется конечное дерево, которое может быть сериализовано в виде XML-документа, XHTML-документа (только для XSLT 2.0), HTML-документа или простого текстового файла. Правила выбора (и, отчасти, преобразования) данных из исходного дерева пишутся на языке запросов XPath.

XSLT имеет множество различных применений, в основном в области web-программирования и генерации отчётов. Одной из задач, решаемых языком XSLT, является отделение данных от их представления, как часть общей парадигмы MVC (англ. Model-view-controller). Другой стандартной задачей является преобразование XML-документов из одной XML-схемы в другую.

Процесс выполнения XSLT-преобразования

В процессе выполнения XSLT-преобразования задействованы:

· один или несколько входных XML-документов;

· одна или несколько таблиц cтилей XSLT;

· XSLT-процессор;

· один или несколько выходных документов.

В простейшем случае XSLT-процессор получает на входе два документа — входной XML-документ и таблицу стилей XSLT — и создает на их основе выходной документ.

Применение правил шаблонов

Язык XSLT является декларативным, а не процедурным. Вместо определения последовательности исполняемых операторов, этот язык определяет правила, которые будут применяться во время преобразования. Само преобразование ведется по фиксированному алгоритму.

В первую очередь XSLT процессор разбирает файл преобразования и строит XML дерево входного файла. Затем он ищет шаблон, который лучше всего подходит для корневого узла и вычисляет содержимое найденного шаблона. Инструкции в каждом шаблоне могут либо напрямую говорить XSLT процессору «создай здесь такой-то тег», либо говорить «обработай другие узлы по тому же правилу, что и корневой узел».

Более подробно этот алгоритм, в чём-то нетривиальный, описывается ниже, хотя многие из его экзотических деталей опущены.

Каждый XSLT-процессор должен выполнить следующие шаги для подготовки к трансформации:

1. Прочитать таблицу стилей XSLT с помощью XML-парсера и перевести его содержимое в дерево узлов (дерево таблицы стилей), согласно модели данных XPath. Синтаксические ошибки «времени компиляции» определяются на этой стадии. Таблицы стилей могут быть модульными, поэтому все включения (инструкции xsl:include, xsl:import) также будут обработаны на этой стадии с целью объединить все шаблонные правила и иные элементы из других таблиц стилей в единое дерево таблицы стилей.

2. Прочитать входные данные XML с помощью XML-парсера, перевести его содержимое в дерево узлов (исходное дерево), согласно модели данных XPath. XML-документ может ссылаться на другие XML-источники с помощью вызова функций document(). Эти вызовы обычно обрабатываются во время выполнения, так как их расположение может являться вычисляемым, а вызовы соответствующих функций могут не происходить вовсе.

3. Удалить пустые узлы из таблицы стилей XSLT, кроме тех, которые являются потомками от элементов xsl:text. Это позволяет исключить появление «лишних» пробелов.

4. Удалить пустые текстовые узлы из исходного дерева, если инструкции xsl:strip-space присутствуют в исходном документе. Это позволяет исключить появление «лишних» пробелов. (Пример выше не использует эту возможность)

5. Пополнить XSLT-дерево тремя правилами, которые предоставляют поведение по умолчанию для любых типов узлов, которые могут быть встречены при обработке. Первое правило — для обработки корневого узла; оно даёт инструкцию процессору обработать каждого потомка корневого узла. Второе правило — для любых текстовых узлов или узлов атрибутов; он даёт команду процессору сделать копию этого узла в результирующем дереве. Третье правило — для всех узлов комментария и узлов-инструкций обработки; никакой операции не производится. Шаблоны, явно заданные в XSLT, могут перекрывать часть или все шаблоны-правила, заданные по умолчанию. Если шаблон не содержит явных правил, встроенные правила будут применены для рекурсивного обхода исходного дерева и только текстовые узлы будут скопированы в результирующее дерево (узлы атрибутов не будут достигнуты, так как они не являются «детьми» их родительских узлов). Полученный таким образом результат обычно нежелателен, так как он является просто конкатенацией всех текстовых фрагментов из исходного XML-документа.

Затем процессор проделывает следующие шаги для получения и сериализации результирующего дерева:

· Создаёт корневой узел результирующего дерева.

· Обрабатывает корневой узел исходного дерева. Процедура обработки узла описана ниже.

· Сериализует результирующее дерево, если необходимо, согласно подсказкам, описанным инструкцией xsl:output.

При обработке узла производятся следующие действия:

1. Производится поиск наиболее подходящего шаблона правила. Это достигается проверкой соответствия шаблона (который является выражением XPath) для каждого правила, указывая узлы, для которых правило может быть применено. Каждому шаблону процессором назначается относительный приоритет и старшинство для облегчения разрешения конфликтов. Порядок шаблонных правил в таблице стилей также может помочь разрешению конфликтов между шаблонами, которые соответствуют одинаковым узлам, но это не оказывает влияния на порядок, в котором узлы будут обрабатываться.

2. Template rule contents are instantiated. Элементы в пространстве имён XSLT (обычно имеющие префикс xsl:) трактуются как инструкции и имеют специальную семантику, которая указывает на то, как они должны интерпретироваться. Одни предназначены для добавления узлов в результирующее дерево, другие являются управляющими конструкциями. Не XSLT-элементы и текстовые узлы, обнаруженные в правиле, копируются, «дословно», в результирующее дерево. Комментарии и управляющие инструкции игнорируются.

Инструкция xsl:apply-templates при её обработке приводит к выборке и обработке нового набора узлов. Узлы идентифицируются с помощью выражения XPath. Все узлы обрабатываются в том порядке, в котором они содержатся в исходном документе.

XSLT расширяет библиотеку функций XPath’s и позволяет определять XPath-переменные. Эти переменные имеют разную область видимости в таблице стилей, в зависимости от того, где они были определены и их значения могут задаваться за пределами таблицы стилей. Значения переменных не могут быть изменены во время обработки.

Хотя эта процедура может показаться сложной, однако она делает XSLT по возможностям похожей на другие языки web-шаблонов. Если таблица стилей состоит из единственного правила, предназначенного для обработки корневого узла, в результат просто копируется всё содержимое шаблона, а XSLT-инструкции (элементы 'xsl:…') заменяются вычисляемым содержимым. XSLT предлагает даже специальный формат («literal result element as stylesheet») для таких простых, одношаблонных трансформаций. Однако, возможность определять отдельные шаблоны и правила сильно увеличивает гибкость и эффективность XSLT, особенно при генерации результата, который очень похож на исходный документ.

Элемент <xsl:output>

Элемент <xsl:output> использовали, главным образом, для задания типа результирующего документа. Этот тип может задать, например, будет ли процессор XSLT записывать инструкцию обработки XML, <?xml version="1.0"?>, в начале документа, а также задать тип MIME (такой, как "text/xml" или "text/html") документов, отправляемых процессором XSLT из web-сервера браузеру. Кроме того, если установить выходной тип в HTML, большинство процессоров XSLT смогут распознать, что не всем элементам HTML необходимы закрывающие или открывающие теги и т.п.

В следующем списке перечислены атрибуты <xsl:output>:

cdata-section-elements (необязательный). Задает имена тех элементов, чье содержимое должно выводиться как разделы CDATA. Принимает значения списка QName, разделенного символами-разделителями;

doctype-public (необязательный). Задает открытый идентификатор, который будет использован в объявлении <!DOCTYPE> в выходных данных. Устанавливается в строковое значение;

doctype-system (необязательный). Задает системный идентификатор, который будет использован в объявлении <!DOCTYPE> в выходных данных. Устанавливается в строковое значение;

encoding (необязательный). Задает кодировку символов. Устанавливается в строковое значение;

indent (необязательный). Определяет, будет ли выходной документ выровнен с отражением структуры вложенности. Устанавливается в yes или no;

media-type (необязательный). Задает тип MIME вывода. Устанавливается в строковое значение;

method (необязательный). Задает формат вывода. Принимает значения "xml", "html", "text" или допустимое имя QName;

omit-xml-declaration (необязательный) Определяет, будет ли включено в вывод объявление XML. Устанавливается в "yes" или "no";

standalone (необязательный). Определяет, будет ли включено в вывод отдельное объявление XML, и если да - устанавливает его значение. Устанавливается в yes или no;

version (необязательный). Задает версию вывода. Принимает значение допустимого NMToken.

Чаще всего используется атрибут method, поскольку именно он определяет требуемый тип выходного дерева. Официально методом вывода по умолчанию является HTML, при условии, что выполняются все три следующих условия:

· корневой узел результирующего дерева имеет дочерний элемент;

· в названии элемента документа результирующего дерева присутствует часть "html" (в любой комбинации верхнего и нижнего регистров) и пустой URI пространства имен;

· все текстовые узлы перед первым дочерним элементом корневого узла содержат только символы-разделители.

Если выполняются все три этих условия, то по умолчанию метод вывода устанавливается в HTML. В ином случае методом вывода по умолчанию является XML.

В следующей таблице дается краткая сводка для каждого XSLT-элемента.

 

Таблица 1. XSLT-элементы



Поделиться:


Последнее изменение этой страницы: 2021-01-14; просмотров: 218; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.118.250 (0.16 с.)