Корневой узел имеет схему отображения, которая определяет URI для каждой неразобранной сущности, декларированной в DTD данного документа. Этот URI создается из системного идентификатора и публичного идентификатора, указанного в декларации сущности. Чтобы для сущности найти URI, XSLT процессор может воспользоваться публичным идентификатором, вместо того чтобы обращаться к URI, указанному в системном идентификаторе. Если XSLT процессор для построения данного URI не пользуется публичным идентификатором, то он обязан воспользоваться системным идентификатором. Если системный идентификатор является относительным URI, он должен быть преобразован в абсолютный URI, используя в качестве базового URI того ресурса, который содержит декларацию данной сущности [RFC2396].
3.4 Удаление пробельных символов
После построения дерева исходного документа или документа стиля, но перед какой-либо его обработкой XSLT процессором, выполняется очистка (stripping) некоторых текстовых узлов. Текстовый узел вычищается только тогда, когда он содержит одни пробельные символы. При очистке текстовый узел удаляется из дерева документа. На вход процедура очистки получает перечень названий элементов, для которых следует сохранить пробельные символы. Процедура очистки применяется как для стилей, так и для исходных документов, однако перечень названий элементов, сохраняющих пробельные символы, для стилей и исходных документов определяется отдельно.
Текстовый узел сохраняется если имеет место какое-либо из следующих условий:
– Название элемента, являющегося родителем данного текстового узла, находится в перечне названий элементов, сохраняющих пробельные символы.
– Текстовый узел содержит хотя бы один непробельный символ. Как и в XML, пробельным символом считаются #x20, #x9, #xD и #xA.
– Элемент, являющийся предком этого текстового узла, имеет атрибут
В остальных случаях текстовый узел вычищается.
Атрибуты
Замечание: Это подразумевает, что если для фиксированного конечного элемента был указан атрибут
В случае со стилями перечень названий элементов, сохраняющих пробельные символы, состоит лишь из
<!– Category: top-level-element ->
<xsl:strip-space
elements = tokens />
<!– Category: top-level-element ->
<xsl:preserve-space
elements = tokens />
Для исходных документов перечень названий элементов, сохраняющих пробельные символы, задается элементами верхнего уровня xsl:strip-space и xsl:preserve- space. Каждый из этих элементов имеет атрибут elements, значением которого является перечень NameTest-ов (через пробельный символ). Изначально набор названий элементов, сохраняющих пробельные символы, содержит названия всех элементов. Если название элемента совпадает с NameTest в элементе xsl:strip-space, то он удаляется из перечня названий элементов, сохраняющих пробельные символы. Если название элемента совпадает с NameTest в элементе xsl:preserve-space, то оно добавляется к перечню названий элементов, сохраняющих пробельные символы. Элемент соответствует NameTest тогда и только тогда, когда процедура сравнения узлов из XPath для NameTest и этого узла дает результат true. Конфликты между соответствием элементам xsl:strip-space и xsl:preserve-space разрешаются так же как конфликты между правилами шаблона (см. [5.5 Разрешение конфликтов в правилах шаблона]). Таким образом, образец, соответствующий заданному названию элемента, определяется следующим образом:
Во-первых, любой образец, имеющий по отношению к другому образцу меньший приоритет импорта, игнорируется.
Далее, любой образец с NameTest, который имеет более низкий приоритет по умолчанию, чем приоритет по умолчанию у NameTest для другого образца, игнорируется.
Если и после этого остается более одного образца, соответствующего названию элемента, фиксируется ошибка. XSLT процессор может фиксировать ошибку. Если он этого не делает, то должен обработать ее сам, выбрав среди оставшихся соответствующих названию элемента образцов тот, который в этом стиле был найден последним.
4 Выражения
XSLT использует язык выражений, сформулированный в XPath [XPath]. Выражения в XSLT используются для таких целей, как:
– выбор узлов для обработки;
– формулирование условий для разных вариантов обработки узла;
– генерация текста для подстановки в конечное дерево.
Выражение должно соответствовать сценарию Expr из xpath.