XSLT имеет серьёзный недочет. Спецификация трансформаций подразумевает возможность обработать одной трансформацией несколько исходных документов с формированием единого результатирующего дерева. Однако в спецификации не указано как декларировать такое поведение. Еще одним спорным моментом является то что исходный документ должен содержать ссылку на таблицу стиля осуществляющую необходимую трансформацию. В реальности часто возникает ситуация когда у разработчика не имеется возможности вносит какие-то вставки в исходный документ в том числе и ссылки не таблицу стиля. Описанная ниже схема позволяет определить внешний документ или часть внешнего документа декларирующего связь нескольких исходных документов с одним преобразованием. Язык программиррвания Денеб включает в себя "трансформатор" программу реализующую описываемое схемой поведение.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://deneblingvo.org/xsd/transformation/1.0" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dtn="http://deneblingvo.org/xsd/transformation/1.0">
<xs:element name="transformation" type="dtn:trasformation"/>
<xs:complexType name="trasformation">
<xs:sequence>
<xs:element name="stylesheet" type="dtn:stylesheet" minOccurs="1" maxOccurs="1"/>
<xs:element name="source" type="dtn:source" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="destination" type="dtn:destination" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="stylesheet">
<xs:attribute name="href" type="xs:anyURI"/>
</xs:complexType>
<xs:complexType name="source">
<xs:attribute name="href" type="xs:anyURI"/>
</xs:complexType>
<xs:complexType name="destination">
<xs:attribute name="href" type="xs:anyURI"/>
</xs:complexType>
</xs:schema>
Добавить комментарий