В нынешнем состоянии языки 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. Входящий документ
I've got a simple content
Листинг 8.54. Преобразование
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Welcome!
Be our guest!
Листинг 8.55. Выходящий документ
Welcome!
Be our guest!
I've got a simple content
Как можно заметить, метод вывода "html"
распознает элементы HTML вне зависимости от регистра символов — в нашем примере пустой элемент
был выведен как
, что соответствует синтаксису HTML.
Документы, которые преобразуются в HTML, могут также иметь программы, определенные внутри элемента script
или стили, заданные внутри элемента style
. В случае если внутри этих элементов оказываются символы, считающиеся в XML специальными — такие как " <
", " &
" и так далее, процессор не должен заменять их символьными или встроенными сущностями.
Пример
Предположим, что в преобразуемом документе элемент script
определен с использованием специальных символов, которые заменены сущностями:
if (a > b) swap(a, b)
или с использованием секций символьных данных:
b) swap(a, b) ]]>
При использовании метода вывода "html"
оба варианта будут выведены, как
if (a>b) swap(a, b)
Пожалуй, стоит еще раз повторить, что это относится только к элементам style
и script
. Специальные символы, использованные в других элементах, будут заменены символьными или встроенными сущностями.
Пример
This >o< is a black hole of this page!
будет выведено как
This >o< is a black hole of this page!
В соответствии со спецификацией, некоторые атрибуты в HTML могут и не иметь значений — как правило, это атрибуты с булевыми значениями, такие, к примеру, как атрибут selected
элемента option
, присутствие которого в элементе означает то, что опция выбрана, отсутствие — то, что она не выбрана. Для того чтобы получить в выходящем документе
следует в преобразовании указывать
то есть присваивать булевому атрибуту значение, равное собственному имени. Такие значения будут выведены в минимизированной форме, как это и требовалось.
HTML и XML также имеют небольшие различия в формате вывода инструкций по обработке. В то время как в XML эти инструкции имеют вид
в HTML инструкции по обработке заканчиваются не " ?>
", а просто правой угловой скобкой (" >
"):
а при использовании метода HTML
My heart is not here
одним и тем же шаблоном:
при использовании метода вывода "xml"
будет преобразован к виду
My heart's in the Highlands
My heart is not here
а при использовании метода "text"
к виду
My heart's in the Highlands
My heart is not here
Атрибут encoding
Атрибут encoding
указывает на предпочтительную кодировку вывода текста документа. Значение атрибута encoding
по умолчанию зависит от программной платформы, на которой производится преобразование. В большинстве процессоров по умолчанию используются кодировки UTF-8, ASCII и ISO-8859-1.
В случае если кодировка, используемая для вывода текста, не отображает некоторые символы документа, процессор может выдать ошибку.
Атрибут media-type
По умолчанию в качестве значения атрибута media-type
, используемого для простого текста, указывается "text/plain"
. Значение атрибута media-type
может быть использовано сервером, преобразующим документ в качестве MIME-типа.
Как уже было сказано раньше, спецификация XSLT позволяет помимо основных методов "xml"
, "html"
и "text"
использовать также и другие методы, реализация которых будет зависеть от производителя того или иного процессора. Кажется вполне логичной и закономерной возможность использования, к примеру, такого метода, как "pdf"
для создания документов в Adobe Portable Document Format (переносимом формате документов) или метода "bin"
для создания двоичного потока данных. Однако, на данном этапе, процесс сериализации (создания физической сущности из логической модели) пока еще не определен в общем виде для произвольного метода. Возможно, в будущем, по аналогии с объектной моделью документа (DOM) будут созданы схожие интерфейсы для более легкого определения методов сериализации и интеграции преобразований в другие программы, но в настоящее время следует ограничиваться тремя основными методами.
Читать дальше