Сериализация
После публикации нашей предыдущей статьи рабочие группы создали новый документ: Сериализация XSLT 2.0 и XQuery 1.06. Материал этого документа был перемещен из спецификации XSLT 2.0, чтобы его можно было использовать и для XQuery 1.0. В этом документе определяются методы формирования выходных данных в форматах XML, XHTML, HTML и TEXT. В XQuery 1.0 используется только метод формирования выходных данных в формате XML, в то время как в XSLT используются все методы.
Для сериализации может предоставляться значение модели данных XQuery 1.0 и XPath 2.0 (XDM). Сначала выполняется нормализация последовательности (Sequence Normalization), затем – генерация разметки, расширение символов и кодирование.
Нормализация последовательности определяется в виде нескольких шагов, преобразующих экземпляр модели данных (data model instance) – последовательность значений и узлов – в единственный узел-документ. Атомарные значения приводятся к строкам и затем к текстовым узлам. Узлы-документы отбрасываются, но их дети сохраняются. Ошибкой сериализации является помещение в результирующий документ узла-атрибута, который не является ребенком некоторого узла-элемента.
В сериализации определяется ряд параметров, которые влияют на производимый результат. Например, значением omit-xml-declaration может yes быть или no. В каждом отдельном методе формирования выходных данных используются не все параметры.
Метод вывода в формате XML генерирует правильно построенную сущность XML-документа (well-formed XML document entity), если результат нормализации последовательности – это узел-документ с единственным ребенком, являющимся узлом-элементом, и без детей, которые представляют собой текстовые узлы. В противном случае генерируется правильно построенная, внешняя, обобщенная, анализируемая XML-сущность (well-formed XML external general parsed entity). В спецификации не говорится, как следует формировать эти сущности. Требуется только, чтобы при синтаксическом разборе результата и при генерации экземпляра модели данных с использованием результирующего информационного набора (infoset) получался один и тот же экземпляр модели данных. Более точно, эти экземпляры могут различаться, например, порядком узлов.
В течение сериализации не предпринимаются какие-либо попытки сохранения аннотаций типов. Если результат валидируется на соответствие XML Schema, то создаются новые аннотации типов.