Книга: Технология XSLT
Ассоциация преобразования с XML-документом
Разделы на этой странице:
Ассоциация преобразования с XML-документом
Тем, кому приходилось работать со стилями в HTML-документах, пожалуй будет знакома конструкция вида <LINK REL="stylesheet">
, которая закрепляет за документом определенный стиль. Включив такую конструкцию, автор явным образом указывает, как следует отображать данный документ.
Подобные задачи возникают и при работе с XSLT. Например, если для обработки XML-документа всегда будет использоваться одно и то же преобразование, логично будет закрепить это преобразование за документом.
Для того чтобы закрепить XSLT-преобразование за XML-документом, в последнем должна быть использована инструкция по обработке xml-stylesheet
, которая имеет следующий вид:
<?xml-stylesheet
href="URI"
type="тип"
title="название"
media="тип носителя"
charset="кодировка"
alternate="yes" | "no"?>
Заметим, что xml-stylesheet
может закреплять за XML-документами не только преобразования. Основным назначением инструкции xml-stylesheet
является ассоциация с документом фиксированного стиля (англ. stylesheet
— стиль, стилевая таблица). С этой точки зрения преобразования являются не более, чем частным случаем стилевых таблиц.
Инструкция xml-stylesheet
содержит шесть псевдоатрибутов (приставка псевдо- поясняет, что на самом деле инструкции по обработке не имеют атрибутов), два из которых, href
и type
, являются обязательными. Использование псевдоатрибутов xml-stylesheet
поясняет табл. 4.2.
Таблица 4.2. Псевдоатрибуты инструкции по обработке xml-stylesheet
Псевдоатрибут | Описание |
---|---|
href |
Указывает местоположение стиля, закрепляемого за документом. В случае преобразований, href указывает местоположение преобразования, которое нужно применять к этому документу. В псевдоатрибуте href может быть также указан уникальный идентификатор преобразования, если оно включено в сам документ (см. раздел "Включение преобразования в документ"). |
type |
Указывает тип стиля, закрепляемого за документом. В нашем случае, поскольку мы ассоциируем с документом XSLT-преобразование, псевдоатрибут type должен иметь значение "text/xsl " |
title |
Задает название закрепляемого стиля. Название не имеет особого значения при обработке — оно просто поясняет назначение стиля |
media |
Указывает тип носителя или устройства, для которого предназначен результирующий документ |
charset |
Определяет кодировку, в которой создан стиль. Если стиль является XSLT-преобразованием, значение псевдоатрибута charset в расчет не принимается, поскольку кодировка преобразований явно или неявно определена в них самих |
alternate |
Указывает, является ли данный стиль основным ("no ") или альтернативным ("yes "). Значением этого атрибута по умолчанию является "no " |
Примечание
Что касается псевдоатрибута type
, то на самом деле нет стандарта, который заставлял бы использовать значение "text/xsl
". Рабочая группа XSL Консорциума W3 до сих пор обсуждает, какой именно тип должен быть присвоен XSLT. Поскольку XSLT есть XML-язык, формально следовало бы использовать "application/xml
", однако с легкой подачи Microsoft все используют "text/xsl
".
Инструкция xml-stylesheet
может быть включена только в пролог документа, то есть она должна предшествовать корневому элементу. Не рекомендуется включать эту инструкцию в блоки DOCTYPE
, поскольку некоторые парсеры и процессоры будут ее в этом случае игнорировать.
Примеры
Стандартный механизм использования xml-stylesheet
может быть продемонстрирован следующим документом:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="mytransform.xsl"?>
<body>
<!-- ... -->
</body>
В этом документе инструкция xml-stylesheet
указывает на то, что этот документ должен быть обработан XSLT-преобразованием mytransform.xsl
.
Псевдоатрибут title
может содержать краткое описание применяемого преобразования:
<?xml-stylesheet
title="Generate menu"
type="text/xsl"
href="menu.xsl"?>
Псевдоатрибуты media
и alternate
могут использоваться совместно для того, чтобы описать альтернативное представление документа, к примеру, на небольших мобильных устройствах:
<?xml-stylesheet
type="text/xsl"
href="pda.xsl"
alternate="yes"
media="handheld"?>
Теоретически, если документ с такой инструкцией будет показываться на мобильном устройстве (например, на Palm Pilot), он должен быть преобразован при помощи pda.xsl
. На практике не следует полагаться на подобные возможности, поскольку они сильно зависят от поддержки серверов и процессоров, которая в этом отношении все еще сильно ограничена.
В заключение описания инструкции xml-stylesheet
приведем правила, которые определяют ее синтаксис.
[XMS1] StyleSheetPI ::= '<?xml-stylesheet' (S PseudoAtt)* S? '?>'
[XMS2] PseudoAtt ::= Name S? '=' S? PseudoAttValue
[XMS3] PseudoAttValue ::= ( '"' ([^"<&]|CharRef|PredefEntityRef)* '"'
| "'" ([^'<&]|CharRef|PredefEntityRef)* "'")
- (Char* '?>' Char*)
[XMS4] PredefEntityRef ::= '"' | '<'
| '>' | '&' | '''
- Совместное использование преобразований и XML-документов
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Преобразование XML в реляционную базу данных
- Работа с активным документом
- 3. Ассоциация
- 2.7 Преобразования типов
- Модификаторы спецификации преобразования, используемые в функции printf( )
- 2.16. Явные и неявные преобразования
- XMLHttpRequest
- Листинг 14.2. Использование параметра XMLWriteMode при сохранении объекта ADO.NET DataSet
- XML снаружи и изнутри
- Базовые продукции XML