<item source="a" name="H"/>
</source>
Π‘ΠΎΡΡΠ°Π²Π½ΡΠ΅ ΠΊΠ»ΡΡΠΈ
Π ΡΠ΅ΠΎΡΠΈΠΈ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ½ΡΡΠΈΠ΅, ΠΊΠ°ΠΊ ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΠΊΠ»ΡΡ. Π‘ΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π. ΠΠΆ. ΠΠ΅ΠΉΡΠ° [ΠΠ΅ΠΉΡ 1999], ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΠΊΠ»ΡΡ β ΡΡΠΎ "ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ; ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ°".
Π₯ΠΎΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ Π² XSLT ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠ»ΡΡΠΎΠΌ Π² ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΡ ΠΠ, ΠΈΠ΄Π΅Ρ Π²Π΅ΡΡΠΌΠ° ΠΈ Π²Π΅ΡΡΠΌΠ° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°ΠΌ ΡΠ·Π»ΠΎΠ² Π½Π΅ ΠΎΠ΄Π½ΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ.
ΠΠ»Π°Π²Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° Π² XSLT Π²ΡΠ΅Π³Π΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠΎΠΊΠΎΠΉ, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ ΡΠΈΠΏΠΎΠ². Π Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ·Π»ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π·Π° ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·. ΠΠΈΡΠ΅Π³ΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅Π³ΠΎ Π½Π° key(key-name, key-value-1, key-value-2, ...) Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠ° ΡΠ·Π»ΠΎΠ², ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π²Π½ΠΎ key-value-1, Π²ΡΠΎΡΠΎΠ΅ β key-value-2 ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅, XSLT Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ.
ΠΡΡ ΠΎΠ΄ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π΅Π½: Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΡΠ°ΠΆΠ°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΡ. ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΡΠ°Π· Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΡΡΠ°Π²Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠΎΠΊΠ°, ΡΠΎ ΡΡΠ° ΡΡΡΠΎΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ.
ΠΡΠΈΠΌΠ΅ΡΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°ΠΌ. ΠΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ:
β‘ Π½Π°ΠΉΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ;
β‘ Π½Π°ΠΉΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ;
β‘ Π½Π°ΠΉΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ.
ΠΠΈΡΡΠΈΠ½Π³ 8.27. ΠΡ ΠΎΠ΄ΡΡΠΈΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ<items>
<item source="a" name="A"/>
<item source="b" name="B"/>
<item source="b" name="E"/>
<item source="b" name="F"/>
<item source="a" name="C"/>
<item source="c" name="G"/>
<item source="a" name="H"/>
<item source="a" name="B"/>
<item source="b" name="G"/>
<item source="c" name="H"/>
<item source="c" name="C"/>
<item source="c" name="D"/>
<item source="b" name="A"/>
<item source="a" name="B"/>
<item source="c" name="D"/>
<item source="c" name="E"/>
<item source="a" name="F"/>
</items>
ΠΠ»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² item ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»ΡΡΠΈ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄ΡΡ ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· Π΄Π²ΡΡ ΡΠ°ΡΡΠ΅ΠΉ β ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΠΈ ΠΈΠΌΠ΅Π½ΠΈ, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ "-". ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠ»ΡΡΠΎΠΌ Π²ΡΠ΅ ΡΡΠΈ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π΅Π³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° xsl:key.
ΠΠΈΡΡΠΈΠ½Π³ 8.28. ΠΡ ΠΎΠ΄ΡΡΠΈΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="src" match="item" use="concat(@source,'-')"/>
<xsl:key name="src" match="item" use="concat('-', @name)"/>
<xsl:key name="src" match="item" use="concat(@source, '-', @name)"/>
<xsl:template match="/">
<result>
<items source="a" name="B">
<xsl:copy-of select="key('src', 'a-B')"/>
</items>
<items name="B">
<xsl:copy-of select="key('src', '-B')"/>
</items>
<items source="a">
<xsl:copy-of select="key('src', 'a-')"/>
</items>
</result>
</xsl:template>
</xsl:stylesheet>
ΠΠΈΡΡΠΈΠ½Π³ 8.29. ΠΡΡ ΠΎΠ΄ΡΡΠΈΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ<result>
<items source="a" name="B">
<item source="a" name="B"/>
<item source="a" name="B"/>
</items>
<items name="B">
<item source="b" name="B"/>
<item source="a" name="B"/>
<item source="a" name="B"/>
</items>
<items source="a">
<item source="a" name="A"/>
<item source="a" name="C"/>
<item source="a" name="H"/>
<item source="a" name="B"/>
<item source="a" name="B"/>
<item source="a" name="F"/>
</items>
</result>
Π£ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π΄Π΅ΡΡ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»ΡΡΠ° Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ: Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅ΡΡ Π°ΠΏΡΠΈΠΎΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ²ΠΎΠΉΡΡΠ², ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ Π½Π°Ρ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π±Ρ Π² ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²ΡΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΈΠΌΠ²ΠΎΠ» "-", Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΠΊΠ»ΡΡ "a-b-c": ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ a-b ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ ΠΈΠ»ΠΈ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ Ρ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ Π° ΠΈ ΠΈΠΌΠ΅Π½Π΅ΠΌ b-c. Π ΡΡΠ°ΡΡΡΡ, Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΡΠ°ΠΊΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠΌΠ΅Π΅ΡΡΡ, ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΡΡΠ°Π²Π½ΡΠ΅ ΠΊΠ»ΡΡΠΈ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ.
Π€ΡΠ½ΠΊΡΠΈΡ key Π² ΠΏΠ°ΡΡΠ΅ΡΠ½Π°Ρ
Π Π°Π·Π±ΠΈΡΠ°Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΏΠ°ΡΡΠ΅ΡΠ½ΠΎΠ², ΠΌΡ Π²ΡΡΡΠ΅ΡΠΈΠ»ΠΈΡΡ Ρ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΎΡΠΌΠΎΠΉ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠ³Π»Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ key. ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ Π΅ΡΠ΅ ΡΠ°Π· ΡΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ:
[PT3] IdKeyPattern ::= 'id' '(' Literal ')'
| 'key' '(' Literal ',' Literal ')'
Π€ΡΠ½ΠΊΡΠΈΡ key(key-name, key-value) Π² ΠΏΠ°ΡΡΠ΅ΡΠ½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ·Π»Π°ΠΌ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° key-name ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π²Π½ΡΠ΅ΡΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ key-value. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ ΡΠ·Π»ΠΎΠ² Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΎΠ±ΡΠ°Π·ΡΡ.
ΠΡΠΈΠΌΠ΅ΡΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎ-ΠΎΡΠΎΠ±ΠΎΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΡ Π°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π²ΠΈΠ΄Π°.
ΠΠΈΡΡΠΈΠ½Π³ 8.30. Π¨Π°Π±Π»ΠΎΠ½, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΡ key Π² ΠΏΠ°ΡΡΠ΅ΡΠ½Π΅<xsl:template match="key('src', 'a')">
<!-- Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°Π±Π»ΠΎΠ½Π° -->
</xsl:template>
ΠΡΠΎΡ ΡΠ°Π±Π»ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ Π»ΡΠ±ΡΠΌ ΡΠ·Π»Π°ΠΌ, ΠΈΠΌΠ΅ΡΡΠΈΠΌ ΠΊΠ»ΡΡ src ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π°.
ΠΡΠΌΠ΅ΡΠ°ΡΠΈΡ
ΠΡΠΌΠ΅ΡΠ°ΡΠΈΡ, Π½Π΅ΡΠΎΠΌΠ½Π΅Π½Π½ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ°ΠΌΡΡ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΡΠ΅ΡΠ°Π΅ΠΌΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ XSLT. ΠΠ°Π΄Π°ΡΠ° Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ, ΠΈΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ·Π»Π° Π² Π΄Π΅ΡΠ΅Π²Π΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ Π΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° Π·Π°Π΄Π°ΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ Π²ΡΠ²ΠΎΠ΄ Π½ΠΎΠΌΠ΅ΡΠΎΠ² ΡΠ°ΡΡΠ΅ΠΉ, ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² ΠΈ Π³Π»Π°Π² ΠΊΠ½ΠΈΠ³ΠΈ, ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅ΡΠΎΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ° ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊ ΡΠ°Π±Π»ΠΈΡΡ.
ΠΠ»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΡ Π½ΠΎΠΌΠ΅ΡΠΎΠ² ΡΠ·Π»ΠΎΠ² Π² Π΄Π΅ΡΠ΅Π²Π΅ Π² XSLT ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ². Π ΠΏΡΠΎΡΡΡΡ ΡΠ»ΡΡΠ°ΡΡ Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π»ΠΈ Π±ΡΠ²Π°Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ XPath-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
β‘ ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ·Π»Π° Π² ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ position. ΠΠ±ΡΠ°ΡΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΠ·Π»Π° Π² ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠΌ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅, Π° Π½Π΅ Π² Π΄Π΅ΡΠ΅Π²Π΅ ΠΈΡΡ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°.
β‘ Π€ΡΠ½ΠΊΡΠΈΡ count(preceding-sibling::*)+1 Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΠ΅Π΄ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π΅Π³ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ, ΠΈΠ½Π°ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, ΡΡΠ΅Π΄ΠΈ Π΅Π³ΠΎ Π±ΡΠ°ΡΡΠ΅Π². ΠΡΡΡ Π²ΡΠ±ΠΎΡΠΊΠΈ preceding-sibling::* Π²ΡΠ±ΠΈΡΠ°Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π±ΡΠ°ΡΡΠΊΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΡΠ·Π»Ρ, Π° ΡΡΠ½ΠΊΡΠΈΡ count Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ count(preceding-sibling::*)+1 Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΠΎ 1 Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° (ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΅ΠΌΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π½Π΅ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡ), 2 β Π΄Π»Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ (Π΅ΠΌΡ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ) ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
β‘ ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΏΡΠΈ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠΎΠ³ΠΎΠΌ Π²ΠΈΠ΄Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠΈΡΠ°ΡΡΠ΅Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ chapter, Π±ΡΠ΄Π΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: (preceding-sibling::chapter) +1.
β‘ ΠΠ»ΡΠ±ΠΈΠ½Π° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ·Π»Π° ΠΎΡ ΠΊΠΎΡΠ½Ρ Π΄Π΅ΡΠ΅Π²Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ count(ancestor-or-self::node()). ΠΡΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ 1 Π΄Π»Ρ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π°, 2 Π΄Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
ΠΡΡΠΈΡΠ»ΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π΅ Π΄Π΅ΡΠ΅Π²ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ β ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° xsl:value-of.
ΠΡΠΈΠΌΠ΅Ρ<xsl:value-of select="count(preceding-sibling::chapter)+1"/>
Π Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ Π±ΡΠ²Π°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΠ·Π»Ρ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π½Π° ΡΠ°Π·Π½ΡΡ ΡΡΠΎΠ²Π½ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΡΡΠ»ΠΎΠ²ΠΈΡΠΌ, Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΎΡΡΡΠ΅Ρ Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ Π½ΠΎΠΌΠ΅ΡΠ° ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ XPath Π² ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ Π½Π΅ΡΠ΄ΠΎΠ±Π½ΡΠΌ β Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌΠΈ ΠΈ Π²ΡΡΠΈΡΠ»ΡΡΡ ΠΈΡ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ°ΠΏΠΎΠ².
ΠΡΡΠ³ΠΈΠΌ, Π½Π΅ΡΡΠ°Π²Π½Π΅Π½Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΈΠΌ ΠΈ ΡΠ΄ΠΎΠ±Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ·Π»ΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° xsl:number.
ΠΠ»Π΅ΠΌΠ΅Π½Ρ xsl:number
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ:
<xsl:number
level="single"
| "multiple"
| "any"
count="ΠΏΠ°ΡΡΠ΅ΡΠ½"
from="ΠΏΠ°ΡΡΠ΅ΡΠ½"
value="Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅"
format="{ΡΡΡΠΎΠΊΠ°}"
lang="{ΡΠΎΠΊΠ΅Π½}"