где entity-URI – URI данной сущности, то документ упаковщика в целом должен быть корректным XML документом, отвечающим требованиям Рекомендации для Пространства имён XML [XML Names]. Кроме того, вывод должен быть таким, чтобы если путем разбора этого упаковщика как XML документа построить новое дерево как было описано в главе [3 Модель данных], а затем изъять элемент документа и поставить его непосредственного потомка вместо непосредственного потомка корневого узла, то новое дерево будет таким же как конечное дерево за следующими возможными исключениями:
– В двух деревьях может отличаться порядок следования атрибутов.
– Новое дерево может содержать узлы пространства имён, которые не были представлены в конечном дереве.
Замечание: В ходе вывода конечного дерева как XML XSLT процессору может потребоваться добавить декларации пространства имён.
Если XSLT процессор генерирует декларацию типа документа на основании атрибута doctype-system, то приведенные выше требования относятся и к сущности, в которой изъята сгенерированная декларация типа документа.
Атрибут version указывает версию XML, которая должна использоваться для вывода конечного дерева. Если XSLT процессор не поддерживает указанную версию XML, должна использоваться та версия XML, которую он поддерживает. Версия вывода в декларации XML (если декларация XML выводится) должна соответствовать той версии XML, которую процессор использует для вывода конечного дерева. Значение атрибута version должно соответствовать сценарию VersionNum из Рекомендации XML [XML] . Значение по умолчанию – 1.0.
Атрибут encoding указывает предпочтительную кодировку, которая должна использоваться при выводе конечного дерева. XSLT процессоры должны поддерживать значения UTF-8 и UTF-16. Для других значений, если XSLT процессор не поддерживает соответствующую кодировку, он должен фиксировать ошибку. Если же он этого не делает, то вместо указанной кодировки должен использовать UTF-8 или UTF- 16. XSLT процессор не должен пользоваться кодировкой, название которой не соответствует сценарию EncName из Рекомендации XML [XML]. Если атрибут encoding не указан, XSLT процессор должен использовать UTF- 8 или UTF-16. Есть вероятность, что в конечном дереве обнаружится символ, который нельзя представить в кодировке, которую XSLT процессор использует для вывода. В таком случае, если данный символ был обнаружен в контексте, где XML распознает ссылки на символы (то есть, в значении узла атрибута или узла текста), то этот символ следует представить в виде ссылки на символ. В противном случае (например, если символ был обнаружен в названии элемента) XSLT процессор должен фиксировать ошибку.
Если атрибут indent имеет значение yes, то метод вывода xml в дополнение к пробельным символам в конечном дереве может показывать собственные пробельные символы (возможно потому, что пробельные символы будут удалены из исходного документа или из стиля) с тем, чтобы получить более красивый результат. Если атрибут indent имеет значение no, какие-либо дополнительные пробельные символы появляться не должны. Значением атрибута по умолчанию является no . Для размещения дополнительных пробельных символов метод вывода xml должен использовать такой алгоритм, который гарантирует, что когда пробельные символы изъяты из вывода с помощью процедуры, описанной в главе [3.4 Удаление пробельных символов], а список элементов, сохраняющих пробельные символы, ограничивается лишь xsl:text, результат будет таким же, как если дополнительные пробельные символы не использовались.
Замечание: Для тех типов документов, которые содержат элементы со смешанным содержимым, использовать indent='yes' обычно небезопасно.
Атрибут cdata-section-elements содержит список QName (разделенных пробельными символами). Каждый QName приводится к расширенному имени с помощью деклараций пространства имён, в области действия которых находится элемент xsl:output с данным QName. Если имеется пространство имён по умолчанию, то оно используется для тех QName, которые своего префикса не имеют. Расширение выполняется до того, как несколько элементов xsl:output будут объединены в один эффективный элемент xsl:output. Если членом данного переченя является расширенное имя родителя текстового узла, то сам текстовый узел должен быть представлен в виде блока CDATA. Например,
<xsl:output cdata-section-elements='example'/>
приведет к тому, что фиксированный конечный элемент, записанный в стиле как
<example><foo></example>
или
<example><![CDATA[<foo>]]></example>
будет представлен как
<example><![CDATA[<foo>]]></example>
Если текстовый узел содержит последовательность символов ]]>, то текущий открытый блок CDATA будет закрыт сразу после ]], а перед > будет открыт новый блок CDATA. Например, фиксированный конечный элемент, записанный в стиле как
<example>]]></example>
будет представлен в виде
<example><![CDATA[]]]]><![CDATA[>]]></example>
Если текстовый узел содержит символ, который невозможно представить в той кодировке символов, которая используется для вывода конечного дерева, перед таким символом текущий открытый