Обзор
« Преобразование XML с помощью XSLT
Язык стилей преобразования XML/XSLT — очень мощный язык, и полное обсуждение его выходит за рамки этой статьи, но краткое обсуждение основных концепций будет полезно для понимания описания возможностей Netscape, которые следуют за этим.
- Стиль XSLT — это XML-документ.
-
В отличие от CSS, у которого есть собственный специализированный синтаксис, стиль XSLT является XML-документом, который должен соответствовать всем правилам XML, включая корректность. Таким образом, модель преобразования заключается в том, что один XML-документ используется для преобразования другого XML-документа.
- Стиль XSLT отмечается как таковой путем включения стандартного заголовка XSLT.
-
Внешним элементом в стиле XSLT должен быть элемент
<xsl:stylesheet>(приемлемая альтернатива — элемент<xsl:transform>). Этот элемент будет содержать как минимум одно объявление пространства имен и обязательный атрибут версии. Также могут быть включены другие пространства имен и три необязательных атрибута. - Обязательное пространство имен для XSLT —
"http://www.w3.org/1999/XSL/Transform". -
Пространства имен вызывают немало путаницы в XML. Несмотря на то, что пространства имен часто выглядят как URI, на самом деле они не ссылаются на ресурс, расположенный по этому адресу. Вместо этого они являются способом задания уникального идентификатора для известного набора элементов. Строка
"http://www.w3.org/1999/XSL/Transform"— константа, которая обозначает элементы, помеченные как принадлежащие набору тегов, определённых W3C в рекомендации XSLT 1999 года. Другая строка, которая иногда встречается в стилях,"http://www.w3.org/TR/WD-xsl", указывает на соответствие более раннему рабочему черновику (отсюда WD) документа W3C. Это последнее пространство имен несовместимо с тем, которое W3C в конечном итоге приняло, и не поддерживается Netscape.Поскольку ввод
"http://www.w3.org/1999/XSL/Transform"многократно будет утомительным и сделает разметку трудно читаемой, существует стандартный механизм для присвоения сокращенного имени пространству имен в заголовке стиля. Таким образом, полный пример открывающего элемента стиля может выглядеть так. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">-
Псевдоатрибут xmlns сопоставляет сокращенное имя xsl с полным пространством имен для использования в документе, который следует за этим. Таким образом, элемент стиля выше имеет префикс
xsl:. Хотя xsl — это традиционно используемое сокращенное имя (называемое префиксом), оно не является обязательным, и вполне возможно выбрать другое. Примеры в этой статье предполагают использование префикса xsl. - Все преобразования XSLT выполняются над деревьями, а не над документами.
-
Двигатель преобразования XSLT, называемый процессором, не работает напрямую с документами. Прежде чем произойдёт преобразование, основной(е) XML-документ(ы) и документ(ы) стиля должны быть обработаны парсером, который создает абстрактное представление структуры документа в памяти. Это представление, называемое деревом, фактически и манипулируется процессором. Дерево — абстрактный тип данных, концептуальная модель, которая может быть реализована различными способами в зависимости от парсера и процессора. : Netscape использует структуру, похожую на W3C DOM, в качестве структуры дерева, но возможны и другие. Единственные требования касаются расположения объектов в дереве, их свойств и их взаимоотношений.
Дерево состоит из иерархической структуры узлов. Оно может состоять из семи различных типов узлов: единственный корневой узел, узлы элементов, текстовые узлы, атрибутивные узлы, узлы комментариев, узлы инструкций обработки и узлы пространств имен.
Вверху дерева находится корневой узел. Корневой узел не соответствует какой-либо отдельной части XML-документа: он представляет собой весь документ. Под корневым узлом находятся его дочерние узлы, которые могут быть элементами, комментариями, инструкциями обработки и так далее. Некоторые из этих дочерних узлов могут также иметь дочерние узлы. И это может продолжаться на нескольких уровнях. Существуют определённые ограничения на то, какие типы узлов могут быть где: например, текстовые узлы не могут иметь дочерних узлов.
Результатом действия процессора также является дерево. Netscape использует это дерево для отображения содержимого в окне браузера.
- XSLT — это декларативный язык высокого уровня.
-
По сути, стиль XSLT представляет собой набор правил, называемых шаблонами, которые объявляют, что любой узел, соответствующий этому конкретному шаблону, должен быть изменён определённым способом и в конечном итоге окажется в определённом месте в результирующем дереве. Подробности того, как это должно быть выполнено, остаются на усмотрение процессора. Поскольку порядок выполнения стиля гарантировать нельзя, XSLT не поддерживает функциональность, которая производит побочные эффекты. В этом он похож на Lisp или Scheme.
- Расположения в дереве задаются с помощью XPath, другой рекомендации W3C.
-
Преобразования зависят от возможности процессора точно определять отдельные узлы в дереве. Для этого W3C решил использовать отдельный язык XPath, который также используется за пределами контекста XSLT. Как следует из названия, XPath определяет «путь», который процессор должен пройти через дерево, чтобы достичь нужного узла. Этот путь состоит из выражений XPath, подлежащих оценке, выражения, которые могут включать ряд условий для сопоставления, способ сопоставления узлов и/или указание направленности внутри дерева. Более подробное описание частей XPath, наиболее часто используемых в XSLT, приводится в разделе справки.
- Возможные конфликты в соответствии шаблонов разрешаются с помощью набора каскадных правил приоритета.
-
Как правило, более специфическое правило шаблона имеет приоритет над менее специфическим, и при прочих равных условиях правило шаблона, появляющееся позже в документе, имеет приоритет над правилом, появившимся ранее.
- Стили могут быть прикреплены к XML-документу с помощью инструкции обработки.
-
Самый простой способ указать, какой стиль XSLT следует использовать для обработки конкретного XML-документа, — это включить инструкцию обработки в сам XML-документ. Например, если стиль называется inventory.xsl и находится в той же директории, что и XML-документ, инструкция обработки в XML-документе будет выглядеть так:
<?xml-stylesheet type="text/xml" href="inventory.xsl"?>-
Это должно быть помещено в раздел prolog XML-документа.
Чтобы узнать больше о XSLT и XPath, см. раздел Дополнительная информация в конце этой статьи.
© 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/XSLT/Transforming_XML_with_XSLT/An_Overview