<pre>One little rabbit<BR/>
Two little rabbits<BR/>
Three little rabbits</pre>
ΠΠ°Π½Π½ΡΠ΅, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π·Π°ΠΏΡΡΡΠΌΠΈ (CSV)
Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΡ Π·Π°ΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ»ΠΈ Π²ΡΡΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ Π·Π°ΠΏΡΡΡΠΌΠΈ (ΠΈΠ»ΠΈ CSV, comma-separated values). CSV β ΡΡΠΎ ΡΡΠ°ΡΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ , Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
a, b, Ρ, d, e, f, g
ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. Π€ΠΎΡΠΌΠ°Ρ CSV Π±ΡΠ» ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΠ΅ΡΠ²ΡΡ ΡΠ°Π³ΠΎΠ² ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ·ΡΠΊΠΎΠ² ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ: Π΄Π°Π½Π½ΡΠ΅ Π² Π½Π΅ΠΌ ΡΠΆΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π»ΠΈΡΡ Π·Π°ΠΏΡΡΡΠΌΠΈ.
ΠΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π½Π° ΠΏΡΠΎΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ CSV-Π΄Π°Π½Π½ΡΠ΅ Π² XML-Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ. ΠΡΡΡΡ Π²Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ:
<data>a, b, Ρ, d, e, f</data>
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠΈΠΌ, Π²ΡΠ½Π΅ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ XML-ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ°Π±Π»ΠΎΠ½:
<xsl:template name="item">
<xsl:param name="item"/>
<item><xsl:copy-of select="$item"/></item>
</xsl:template>
Π’ΠΎΠ³Π΄Π° Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΠΈΠΉ ΡΠ°Π±Π»ΠΎΠ½ Π·Π°ΠΏΠΈΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅.
ΠΠΈΡΡΠΈΠ½Π³ 11.18. Π¨Π°Π±Π»ΠΎΠ½, ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΠΈΠΉ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅<xsl:template name="markup" match="text()" mode="CSV">
<xsl:param name="str" select="."/>
<xsl:param name="delimiter" select="','"/>
<xsl:choose>
<xsl:when test="contains($str,$delimiter)">
<xsl:call-template name="item">
<xsl:with-param name="item"
select="substring-before($str, $delimiter)"/>
</xsl:call-template>
<xsl:call-template name="markup">
<xsl:with-param name="str"
select="substring-after($str, $delimiter)"/>
</xsl:call-template>
<xsl:with-param name="delimiter" select="$delimiter"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="item">
<xsl:with-param name="item" select="$str"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
ΠΠ° Π²Ρ ΠΎΠ΄ ΡΠ°Π±Π»ΠΎΠ½ markup ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° β str, ΡΡΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠΈΡΡ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ β Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ·Π»Π°) ΠΈ delimiter β ΡΡΡΠΎΠΊΠ°, ΡΠ°Π·Π΄Π΅Π»ΡΡΡΠ°Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² str (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ β Π·Π°ΠΏΡΡΠ°Ρ ",").
Π¨Π°Π±Π»ΠΎΠ½, ΡΠΎΡΠΌΠ°ΡΠΈΡΡΡΡΠΈΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° data, Π±ΡΠ΄Π΅Ρ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
<xsl:template match="data">
<xsl:copy>
<xsl:apply-templates mode="CSV"/>
</xsl:copy>
</xsl:template>
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄:
<data>
<item>a</item>
<item> b</item>
<item> c</item>
<item> d</item>
<item> e</item>
<item> f</item>
</data>
ΠΠ±ΡΠ°ΡΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°Ρ item ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ Π»ΠΈΡΠ½ΠΈΠ΅ ΠΏΡΠΎΠ±Π΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΠ»ΠΈ Π·Π° Π·Π°ΠΏΡΡΡΠΌΠΈ. ΠΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΊΠ°Π·Π°Π² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°Π·Π΄Π΅Π»ΡΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ» ", ":
<xsl:template match="data">
<xsl:copy>
<xsl:apply-templates mode="CSV">
<xsl:with-param name="delimiter" select="', '"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ, Π±ΡΠ΄Π΅Ρ:
<data>
<item>a</item>
<item>b</item>
<item>c</item>
<item>d</item>
<item>e</item>
<item>f</item>
</data>
ΠΡΡΠ°ΡΠΈ ΡΠΊΠ°Π·Π°ΡΡ, ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΡΠ°Π±Π»ΠΎΠ½ item, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° XML-ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΠ»Π°Π²Π° 12
Π Π°Π·Π²ΠΈΡΠΈΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ
ΠΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΡΡΠΏΠ΅Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π·Π°Π²ΠΈΡΠΈΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½Π° ΠΈ ΠΏΡΠΎΡΠ°Π±ΠΎΡΠ°Π½Π° ΠΎΠ½Π° Π±ΡΠ»Π°. ΠΠ΅ ΡΠΈΡΠΎΠΊΠΎΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΈ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΠΈ Π²Π΅Π΄ΡΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ. Π ΡΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅ XSLT ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ: ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ ΡΠ·ΡΠΊΠ° Ρ ΡΠ°ΠΌΡΡ ΡΠ°Π½Π½ΠΈΡ ΡΠ΅ΡΠ½ΠΎΠ²ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π·Π°Π½ΠΈΠΌΠ°Π»ΠΈΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΊΡΡΠΏΠ½ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ, ΠΊΠ°ΠΊ Microsoft, Oracle, IBM, Adobe, Lotus ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Apache XML Project ΠΏΠΎΠΌΠΎΠ³Π»Π° XSLT Π·Π°Π²ΠΎΠ΅Π²Π°ΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡ ΠΈ ΡΡΠ΅Π΄ΠΈ open-source ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° (open-source β ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Ρ "ΠΎΡΠΊΡΡΡΡΠΌ" ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ).
Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅, ΡΠ΅ΠΉΡΠ°Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π»ΠΈΡΡ ΠΊΠΎΠ½ΡΡΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΎΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΠΈ XSLT. ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ XSLT-ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² ΡΠΆΠ΅ ΠΈΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ Π΄Π΅ΡΡΡΠΊΠ°ΠΌΠΈ, Π° ΡΠΈΡΠ»ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² β ΠΏΠΎΠΆΠ°Π»ΡΠΉ, ΡΡΠΎ ΠΈ ΡΡΡΡΡΠ°ΠΌΠΈ.
ΠΠΎΠ²ΡΡΠ΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ ΠΏΠΎΠΌΠΎΠ³ Π² ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ ΡΡΠΎΠΊ (ΠΌΠ΅Π½Π΅Π΅ Π³ΠΎΠ΄Π°) ΠΈΠ·ΡΡΠΈΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ ΠΈ Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΈ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π²Π΅ΡΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±Ρ ΡΡΠΈΡΡΠ²Π°Π»ΠΈ ΡΡΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ. Π Π΄Π΅ΠΊΠ°Π±ΡΠ΅ 2000 Π³ΠΎΠ΄Π° Π±ΡΠ»Π° Π²ΡΠΏΡΡΠ΅Π½Π° Π²Π΅ΡΡΠΈΡ 1.1,. Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ»ΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ XSLT, Π½ΠΎ ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ β ΡΠ°ΠΊΠΈΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΠ·ΡΠΊΠΎΠ² Java ΠΈ JavaScript/ECMAScript. Π Π°Π²Π³ΡΡΡΠ΅ 2001 Π³ΠΎΠ΄Π° Π²Π΅ΡΡΠΈΠΈ 1.1 Π΄Π°Π»ΠΈ ΡΡΠ°ΡΡΡ Final Draft ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ Π½Π° ΠΏΠΎΠ»ΠΊΡ β ΠΎΠ½Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ (ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠ΅ΠΉ ΠΠΎΠ½ΡΠΎΡΡΠΈΡΠΌΠ° W3).
ΠΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ Π΄ΠΎΡΠ°Π±ΠΎΡΠΎΠΊ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ Π²Π΅ΡΡΠΈΡ XSLT 1.1 ΠΌΠΎΠ³Π»Π° Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡΠ΅ΡΠ΅Π½Π΄ΠΎΠ²Π°ΡΡ Π½Π° ΡΠΎΠ»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ° XSLT. ΠΠ΄Π½Π°ΠΊΠΎ, Π² ΡΠ°ΠΊΠΎΠΉ Π½Π°ΠΏΡΡΠΆΠ΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, ΠΊΠ°ΠΊ XML, ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΡΠΈΡΠ°ΡΡΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΠΌΠΈ, ΠΈΠ±ΠΎ Π²ΡΠ΅ ΠΎΠ½ΠΈ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Π°Π½Ρ. ΠΠ° ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ ΠΏΡΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ XSLT 1.1 ΠΈ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ 2.0 Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΠΎΠ²Π»ΠΈΡΠ»ΠΈ ΡΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ, ΠΊΠ°ΠΊ XML Schema ΠΈ XQuery.
XML Schema β ΡΡΠΎ Π΄ΠΎΠ»Π³ΠΎΠΆΠ΄Π°Π½Π½ΡΠΉ XML-ΡΠ·ΡΠΊ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΡΡΡΡΠΊΡΡΡΡ XML-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ DTD. XML Schema, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΏΡΠΎΡΡΡΠ΅ ΠΈ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠΉ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π² XML-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°Ρ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠ΅ ΠΈ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΠΊΠ»ΡΡΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅. ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠΎΠ³ΠΎ, XML Schema ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π² XML-ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΡ Π΅ΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ XML-ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ. Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ XML Schema ΠΏΠΎΠ»ΡΡΠΈΠ»Π° ΡΡΠ°ΡΡΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΠΎΠ½ΡΠΎΡΡΠΈΡΠΌΠ° W3 Π² ΠΌΠ°Π΅ 2001 Π³ΠΎΠ΄Π°.
XQuery β ΡΡΠΎ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡ W3C ΠΏΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ·ΡΠΊΠ° Π·Π°ΠΏΡΠΎΡΠΎΠ² Π΄Π»Ρ XML-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ². Π ΠΎΡΠ½ΠΎΠ²Ρ XQuery Π»Π΅Π³Π»ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠ·ΡΠΊΠΎΠ² Π·Π°ΠΏΡΠΎΡΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ β ΠΏΠΎΠΆΠ°Π»ΡΠΉ, ΡΡΠΎΠΈΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ ΡΠ°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ Quilt, XML-QL ΠΈ Lorel. ΠΠΎΡΡΠΈ Π²ΡΠ΅ ΡΡΠ°ΡΡΠ΅ ΡΠ·ΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π΄Π»Ρ XML Π±ΡΠ»ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΡΠΊΠΈΠΌΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°ΠΌΠΈ; Π² XQuery ΠΆΠ΅ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Ρ ΡΠ°ΠΊΠΈΠ΅ Π³ΠΈΠ³Π°Π½ΡΡ, ΠΊΠ°ΠΊ Microsoft ΠΈ Software AG.
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΡΡΠ½ΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ XML Schema ΠΈ XQuery Π²Π»ΠΈΡΡΡ Π½Π° XSLT β ΠΊΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, ΠΈΡ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ. ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ Π²Π΅ΡΠΎΠΌΠ°Ρ ΡΠ°ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ XSLT Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠ·ΡΠΊΠ° XPath, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈ Π² XPointer. ΠΠ°ΠΊ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, XPath Π²Π°ΠΆΠ΅Π½ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ XSLT ΠΈ XPointer, Π½ΠΎ ΠΈ Π΄Π»Ρ XQuery. ΠΠΎΠ΄Π΅Π»Ρ XML-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΠΎΠΏΠΈΡΠ°Π½Π½Π°Ρ Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ XPath, ΠΎΠΊΠ°Π·Π°Π»Π°ΡΡ ΠΌΠΎΡΠ½ΠΎΠΉ, Π»Π΅Π³ΠΊΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΠΎΠΉ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΠΎΠΉ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠ΅ΠΉ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ XML ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π΅Π΅ Π±ΡΠ»ΠΎ ΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈ Π² XQuery. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ²ΠΎΠ΅ΠΉ ΠΈΠ½ΠΊΠ°ΡΠ½Π°ΡΠΈΠΈ ΡΡΠ° ΠΌΠΎΠ΄Π΅Π»Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π° Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ β "XQuery 1.0 and XPath 2.0 Data Model" ("ΠΠΎΠ΄Π΅Π»Ρ Π΄Π°Π½Π½ΡΡ XQuery 1.0 ΠΈ XPath 2.0"). Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄ΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½Ρ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ β "XQuery 1.0 and XPath 2.0 Functions and Operators Version 1.0" ("ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² XQuery 1.0 ΠΈ XPath 2.0, Π²Π΅ΡΡΠΈΡ 1.0").
ΠΡΠΈΠ½ΡΡΠΈΠ΅ XML Schema ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° XPath. Π ΡΡ Π΅ΠΌΠ°Ρ Π₯ΠL-Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ° XPath Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΡΠ°ΠΆΠ°ΡΡ ΡΡΡ ΠΌΠ΅ΡΠ°ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ "+" Π±ΡΠ΄Π΅Ρ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ Π½Π° ΡΡΡΠΎΠΊΠΎΠ²ΡΡ ΠΈ ΡΠΈΡΠ»ΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°Ρ .
ΠΡΠΈΠΌΠ΅ΡΠ Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ int/x + int/y Π½Π° ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅:
<int>
<x>2</x>
<y>2</y>
</int>
Π ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ XPath ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ int/x + int/Ρ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄Π΅Ρ 4. ΠΠ΅ΠΆΠ΄Ρ ΡΠ΅ΠΌ, ΡΡΠ°ΡΡΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠ°ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΈΠΏΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ 4 Π² ΡΠ»ΡΡΠ°Π΅ ΡΠΈΡΠ»ΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ² ΠΈ "22" Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ .
ΠΠ° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠΈΡ ΡΡΡΠΎΠΊ ΡΠ°Π±ΠΎΡΠ° Π½Π°Π΄ XSLT 2.0 ΠΈ XPath 2.0 ΠΈΠ΄Π΅Ρ ΠΏΠΎΠ»Π½ΡΠΌ Ρ ΠΎΠ΄ΠΎΠΌ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΠΎΠΊΠ° Π΅ΡΠ΅ ΡΠ°Π½ΠΎ Π·Π°Π³Π»ΡΠ΄ΡΠ²Π°ΡΡ Π²ΠΏΠ΅ΡΠ΅Π΄ ΠΈ ΡΠ°ΡΠΊΡΡΠ²Π°ΡΡ ΡΠ΅ΠΊΡΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π³ΡΡΠΏΠΏΡ XSL, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½ΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡ XLST 1.1 ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΡ ΠΊ Π²Π΅ΡΡΠΈΠΈ XSLT 2.0, ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ΅ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ.
ΠΡΠ»ΠΈΡΠΈΡ XSLT 1.1 ΠΎΡ XSLT 1.0
ΠΡΡΡΡΡΡΠ²ΠΈΠ΅ result tree fragment
ΠΠ»Π°Π²Π½ΠΎΠ΅ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ XSLT 1.1 ΠΎΡ XSLT 1.0 ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ Π² XSLT 1.0 ΠΊΠ°ΠΊ result tree fragment (ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ Π΄Π΅ΡΠ΅Π²Π°) Π² XSLT 1.1. ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ. ΠΠΌΠ΅ΡΡΠΎ Π½Π΅Π³ΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 1.1 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·Π»ΠΎΠ², ΡΠΎΡΡΠΎΡΡΠ΅Π΅ ΠΈΠ· Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π° ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°.
ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΡΠΈΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ² Π΄Π΅ΡΠ΅Π²ΡΠ΅Π² ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½Π°. ΠΠΎ Π΅ΡΠ»ΠΈ ΠΏΡΠΈΠ½ΡΡΡ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ·ΡΠΊΠ° XPath ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·Π»ΠΎΠ², ΡΠ°Π·Π½ΠΈΡΠ° ΡΡΠ° ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΉ. ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ, ΡΠΎΡΡΠΎΡΡΠ΅Π΅ ΠΈΠ· Π΅Π³ΠΎ ΠΊΠΎΡΠ½Ρ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΡΡΡΡΠΊΡΡΡΡ, Ρ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠΌ Π½Π΅Π»ΡΠ·Ρ Π΄Π΅Π»Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΈΠ· ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΡΠ·Π»ΠΎΠ².