Книга: Технология XSLT
Метод вывода "html"
Разделы на этой странице:
Метод вывода "html"
В нынешнем состоянии языки XML и HTML сильно похожи синтаксически, но при этом имеют некоторые довольно весомые различия. Метод вывода "html"
используется для того, чтобы выводить документы в формате, который будет понятен большинству существующих на данный момент Web-браузеров.
Одно из основных различий HTML и XML состоит в том, что в XML пустые элементы имеют формат <имя/>
, в то время как в HTML тот же элемент был бы выведен, как <имя>
— без косой черты. Метод вывода "html"
учитывает эти различия и выводит теги пустых элементов HTML без косой черты после имени. В соответствии с технической рекомендацией языка HTML 4.0, пустыми элементами являются area
, base
, basefont
, br
, col
, frame
, hr
, img
, input
, isindex
, link
, meta
и param
.
Пример
Листинг 8.53. Входящий документ
<?xml version="1.0" encoding="utf-8"?>
<page>
<title>I'm just a simple page...</title>
<content>I've got a simple content</content>
</page>
Листинг 8.54. Преобразование
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes" method="html"/>
<xsl:template match="/page">
<html>
<head>
<title>
<xsl:value-of select="title"/>
</title>
</head>
<body>
Welcome!<br/>
Be our guest! <HR/>
<xsl:value-of select="content"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Листинг 8.55. Выходящий документ
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>I'm just a simple page...</title>
</head>
<body>
Welcome!<br>
Be our guest! <HR>
I've got a simple content
</body>
</html>
Как можно заметить, метод вывода "html"
распознает элементы HTML вне зависимости от регистра символов — в нашем примере пустой элемент <HR/>
был выведен как <HR>
, что соответствует синтаксису HTML.
Документы, которые преобразуются в HTML, могут также иметь программы, определенные внутри элемента script
или стили, заданные внутри элемента style
. В случае если внутри этих элементов оказываются символы, считающиеся в XML специальными — такие как "<
", "&
" и так далее, процессор не должен заменять их символьными или встроенными сущностями.
Пример
Предположим, что в преобразуемом документе элемент script
определен с использованием специальных символов, которые заменены сущностями:
<script> if (a > b) swap(a, b) </script>
или с использованием секций символьных данных:
<script><![CDATA[ if (a>b) swap(a, b) ]]></script>
При использовании метода вывода "html"
оба варианта будут выведены, как
<script> if (a>b) swap(a, b) </script>
Пожалуй, стоит еще раз повторить, что это относится только к элементам style
и script
. Специальные символы, использованные в других элементах, будут заменены символьными или встроенными сущностями.
Пример
<P>This >o< is a black hole of this page!</P>
будет выведено как
<P>This >o< is a black hole of this page!</P>
В соответствии со спецификацией, некоторые атрибуты в HTML могут и не иметь значений — как правило, это атрибуты с булевыми значениями, такие, к примеру, как атрибут selected
элемента option
, присутствие которого в элементе означает то, что опция выбрана, отсутствие — то, что она не выбрана. Для того чтобы получить в выходящем документе
<option selected>
следует в преобразовании указывать
<option selected="selected">
то есть присваивать булевому атрибуту значение, равное собственному имени. Такие значения будут выведены в минимизированной форме, как это и требовалось.
HTML и XML также имеют небольшие различия в формате вывода инструкций по обработке. В то время как в XML эти инструкции имеют вид
<?приложение содержимое?>
в HTML инструкции по обработке заканчиваются не "?>
", а просто правой угловой скобкой (">
"):
<?приложение содержимое>
Таким образом, результатом выполнения кода
<xsl:processing-instruction name="app">content</xsl:processing-instruction>
при использовании метода XML будет
<?app content?>
а при использовании метода HTML
<?app content>
Атрибут version
Атрибут version
элемента xsl:output
в методе "html"
обозначает версию языка HTML, которая должна использоваться в выходящем документе. По умолчанию значением этого атрибута является "4.0"
, что означает соответствие выходящего документа спецификации языка HTML версии 4.0. Отметим, что последней версией языка HTML на момент написания этой книги является версия 4.02, однако отличия между этими версиями незначительны.
Атрибут encoding
Кодировка выходящего документа определяется в HTML несколько иначе, чем в XML. Если в XML мы использовали определение encoding
в декларации XML, то в HTML кодировка описывается в элементе meta
следующим образом:
<html> <head>
<meta http-equiv="Content-Type"
content="text/html; charset=windows-1251">
...
Поэтому, если в выходящем документе внутри корневого элемента html
присутствует элемент head
, процессор должен добавить в него элемент meta с соответствующим определением кодировки.
Пример
Элемент
<xsl:output encoding="ISO-8859-1"/>
добавит в элемент head
выходящего HTML-документа элемент meta
в следующем виде:
<meta http-equiv="Content-Type"
content="text/html; charset=ISO-8859-1">
Таким образом, для определения кодировки выходящего HTML-документа не следует вручную создавать соответствующий элемент meta
— нужно просто указать требуемую кодировку в атрибуте encoding
элемента xsl:output
.
Атрибут indent
XSLT позволяет использовать в HTML документах индентацию точно так же, как мы бы использовали ее в методе "xml"
.
Атрибуты doctype-system и doctype-public
Декларация типа документа с внешними системными или публичными идентификаторами может быть использована в HTML точно так же, как в XML. Поскольку в объявлении типа документа после <!DOCTYPE
должно стоять имя корневого элемента, при методе вывода "html"
этим именем будет "HTML"
или "html"
в зависимости от регистра символов имени корневого элемента документа.
Атрибут media-type
Атрибут media-type
определяет медиа-тип содержимого выходящего документа. Для HTML-документов значением media-type
по умолчанию будет "text/html"
.
- Восстановление "безнадежных" баз данных. InterBase Surgeon
- Основные "рычаги" управления производительностью
- Включение и отключение синхронного вывода
- Using Double Quotes to Resolve Variables in Strings with Embedded Spaces
- 2. Правила вывода Армстронга
- 3. Производные правила вывода
- 1.6 Драйверы и буферы ввода-вывода
- Глава 6 BIOS – базовая система ввода-вывода
- Применение PHP-технологий в программе HtmlPad
- 4.11.4. Правила "все кроме"
- 5.5. ПРИМЕР РАЗРАБОТКИ ОПИСАНИЯ ПРОЦЕССА "КИПЯЧЕНИЕ ВОДЫ В ЧАЙНИКЕ"
- Рис. 201. Выберите "Через высокоскоростное подключение, запрашивающее имя пользователя и пароль"