Предположим, у меня есть простая схема, которая использует xs: sequence (не xs: all).
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="mynamespace" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="mynamespace" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="RepeatingElement" type="repeatingElementType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="repeatingElementType">
<xs:sequence>
<xs:element name="FirstElement" type="xs:string"/>
<xs:element name="SecondElement" type="xs:string"/>
<xs:element name="ThirdElement" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
Затем я пишу преобразование с поддержкой схемы, которое использует узлы в последовательном порядке.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0" xmlns:n1="mynamespace" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:mode streamable="yes"/>
<xsl:import-schema namespace="mynamespace" schema-location="sampleSchema.xsd"></xsl:import-schema>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="element(*, n1:repeatingElementType)">
<xsl:value-of select="n1:FirstElement" />
<xsl:value-of select="n1:SecondElement" />
<xsl:value-of select="n1:ThirdElement" />
</xsl:template>
</xsl:stylesheet>
Прямо сейчас потоковые механизмы (например, SAXON) сгенерируют ошибку.
Template rule is declared streamable but it does not satisfy the streamability rules. * There is more than one consuming operand: {xsl:value-of} on line 10, and {xsl:value-of} on line 11
Учитывая, что движок знает порядок появления элементов, разве он не сможет определить на этапе анализа, что таблица стилей пригодна для потоков?