Π’Π°Π±Π»ΠΈΡΠ° 8.2. ΠΠ½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ° source ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² item
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° source) ΠΠ»Π΅ΠΌΠ΅Π½Ρ item a <item source="a" name="A"/> a <item source="a" name="C"/> a <item source="a" name="H"/> b <item source="b" name="B"/> b <item source="b" name="E"/> b <item source="b" name="F"/> Ρ <item source="c" name="D"/> Ρ <item source="c" name="G"/>Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ "Ρ" ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ D ΠΈ G, Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ "Π°" β ΠΎΠ±ΡΠ΅ΠΊΡΡ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ A, C ΠΈ H, ΠΏΡΠΈΡΠ΅ΠΌ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΠΎ ΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠΌΡ ΡΠ²ΠΎΠΉΡΡΠ²Ρ Π½Π΅ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΡΡΠ΄Π°.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π½Π°ΠΌΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΡΠΎΡΡΡ (ΠΈ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Ρ), ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π²ΡΡΠ΄ Π»ΠΈ Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡΠ°ΠΌ, ΠΈ ΠΏΠΎΡΠΎΠΌΡ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π²ΡΠ΄Π΅Π»ΡΡΡ Π² XSLT-ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡΡ ΠΊΠ»ΡΡΠ΅Π²ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ² ΡΠ·Π»ΠΎΠ².
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π΄Π²Π΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°ΠΌΠΈ ΡΠ·Π»ΠΎΠ² ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΊΠ»ΡΡΠ΅ΠΉ β ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ xsl:key, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π² ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ»ΡΡ, ΠΈ ΡΡΠ½ΠΊΡΠΈΡ key, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·Π»ΠΎΠ², ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΡΡΠΈΡ ΡΡ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΊΠ»ΡΡΠ΅ΠΉ.
ΠΠ»Π΅ΠΌΠ΅Π½Ρ xsl:key
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π½Π΅ΡΠ»ΠΎΠΆΠ΅Π½:
<xsl:key
name="ΠΈΠΌΡ"
match="ΠΏΠ°ΡΡΠ΅ΡΠ½"
use="Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅"/>
ΠΠ»Π΅ΠΌΠ΅Π½Ρ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ xsl:key ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π² ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠ»ΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π·Π°Π΄Π°Π½Π½ΡΠΌ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ Π°ΡΡΠΈΠ±ΡΡΠ° name, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ·Π»Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ match, Π±ΡΠ΄Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² Π°ΡΡΠΈΠ±ΡΡΠ΅ use. ΠΠΈ Π°ΡΡΠΈΠ±ΡΡ use, Π½ΠΈ Π°ΡΡΠΈΠ±ΡΡ match Π½Π΅ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
ΠΡΠΈΠΌΠ΅ΡΠ Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ item ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ²ΠΎΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² source. ΠΠ»Ρ ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΊΠ»ΡΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ src ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
<xsl:key name="src" match="item" use="@source"/>
Π‘Π»Π΅Π΄ΡΡ ΡΡΡΠΎΠ³ΠΎΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, Π΄Π°Π½Π½ΠΎΠΌΡ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ·ΡΠΊΠ°, ΠΊΠ»ΡΡΠΎΠΌ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠΎΠΉΠΊΠ° Π²ΠΈΠ΄Π° (node, name, value), Π³Π΄Π΅ node β ΡΠ·Π΅Π», name β ΠΈΠΌΡ ΠΈ value β ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ°. Π’ΠΎΠ³Π΄Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ xsl:key, Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π² ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²ΡΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°. ΠΡΠ»ΠΈ ΡΡΠΎΠΌΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΠΊΠ»ΡΡ, ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· ΡΠ·Π»Π° x, ΠΈΠΌΠ΅Π½ΠΈ Ρ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ z, Π³ΠΎΠ²ΠΎΡΡΡ, ΡΡΠΎ ΡΠ·Π΅Π» x ΠΈΠΌΠ΅Π΅Ρ ΠΊΠ»ΡΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ z ΠΈΠ»ΠΈ ΡΡΠΎ ΠΊΠ»ΡΡ Ρ ΡΠ·Π»Π° x ΡΠ°Π²Π΅Π½ z.
ΠΡΠΈΠΌΠ΅ΡΠΠ»ΡΡ src ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠΎΠ΅ΠΊ:
(<item name="A".../>, 'src', 'a')
(<item name="B".../>, 'src', 'b')
(<item name="C".../>, 'src', 'a')
(<item name="D".../>, 'src', 'c')
...
(<item name="H".../>, 'src', 'a')
Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π½Π°ΡΠΈΠΌΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠΌΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
<item source="b" name="B"/>
ΠΈΠΌΠ΅Π΅Ρ ΠΊΠ»ΡΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ "src" ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ "b" ΠΈΠ»ΠΈ ΡΡΠΎ ΠΊΠ»ΡΡ "src" ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°
<item source="a" name="H"/>
ΡΠ°Π²Π΅Π½ "a".
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°ΠΌ ΡΠ·Π»ΠΎΠ² ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ ΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ, Π² XSLT ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ key, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΡΠ΅ΠΉΡΠ°Ρ ΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ.
Π€ΡΠ½ΠΊΡΠΈΡ key
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ:
node-set key(string, object)
ΠΡΠ°ΠΊ, ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ xsl:key Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ΅ΠΊ (node, name, value). Π€ΡΠ½ΠΊΡΠΈΡ key(key-name, key-value) Π²ΡΠ±ΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ ΡΠ·Π»Ρ x ΡΠ°ΠΊΠΈΠ΅, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΡ ΠΊΠ»ΡΡΠ° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ key-name (ΠΏΠ΅ΡΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ) ΡΠ°Π²Π½ΠΎ key-value (Π²ΡΠΎΡΠΎΠΌΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ).
ΠΡΠΈΠΌΠ΅ΡΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ key('src', 'a') Π±ΡΠ΄Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² item ΡΠ°ΠΊΠΈΡ , ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΡ ΠΊΠ»ΡΡΠ° "src" Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΠΎ "Π°". ΠΠΎΠΏΡΠΎΡΡΡ Π³ΠΎΠ²ΠΎΡΡ, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° "Π°".
ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°, ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π²Π΅Π»ΠΈΠΊΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΉ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ: ΠΎΡ Ρ ΡΡ-ΡΡΠ½ΠΊΡΠΈΠΉ Π΄ΠΎ ΠΊΠ»ΡΡΠ΅ΠΉ Π² ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΡ ΡΠ°Π±Π»ΠΈΡΠ°Ρ Π±Π°Π· Π΄Π°Π½Π½ΡΡ . ΠΠΎ Π²ΡΠ΅ΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠΈ, ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΡΠΆΠ΅ Π²ΡΡΡΠ΅ΡΠ°Π»ΠΎΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅.
ΠΠΎ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°Π±ΡΠ²Π°ΡΡ, ΡΡΠΎ ΡΠ·ΡΠΊ XSLT β Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ·ΡΠΊ ΠΈ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°, ΠΈ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅, ΠΊΠ»ΡΡΠΈ Π² Π½Π΅ΠΌ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΊΡΡΡΡΡ Π½ΡΠ°Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°ΡΡ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ. ΠΡ ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎ ΡΠ°ΡΠΊΡΡΡΡ Π²ΡΠ΅ ΡΡΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΊΠ»ΡΡΠ΅ΠΉ
ΠΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΊΠ»ΡΡΠ΅ΠΉ Π² ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΎΠ½ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΡΡΡΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΌΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ
<xsl:key name="src" match="item" use="string(@source)"/>
Π°ΡΡΠΈΠ±ΡΡ use ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡΡΠ° src ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° item Π±ΡΠ΄Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° source. ΠΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ:
<xsl:key name="src" match="item" use="@*"/>
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠΆΠ΅ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΉ, Π½ΠΎ, ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ, Π½Π΅ Π²ΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠΉΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π²Π°Π»ΠΈΡΡ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ. ΠΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ Π»ΠΈΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ xsl:key ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ β ΠΎΡΡΠ°Π²Π°Π»ΠΎΡΡ Π΄ΠΎΡΠ΅Π»Π΅ Π·Π°Π³Π°Π΄ΠΊΠΎΠΉ. ΠΠΎΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΡΠΎΡ ΠΏΡΠΎΠ±Π΅Π», Π΄Π°Π² ΡΡΡΠΎΠ³ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Ρ ΠΊΠ»ΡΡΠ΅ΠΉ.
Π£Π·Π΅Π» x ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΠΊΠ»ΡΡΠΎΠΌ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ ΠΈ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ z ΡΠΎΠ³Π΄Π° ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π² ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ xsl:key ΡΠ°ΠΊΠΎΠΉ, ΡΡΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²ΡΠ΅ Π½ΠΈΠΆΠ΅ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ:
β‘ ΡΠ·Π΅Π» x ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ Π² Π΅Π³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ΅ match;
β‘ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° name ΡΠ°Π²Π½ΠΎ ΠΈΠΌΠ΅Π½ΠΈ y;
β‘ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ u Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ Π°ΡΡΠΈΠ±ΡΡΠ° use Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°, ΡΠΎΡΡΠΎΡΡΠ΅Π³ΠΎ ΠΈΠ· Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ·Π»Π° x, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ:
β’ u ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΡΠ·Π»ΠΎΠ² ΠΈ z ΡΠ°Π²Π½ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΠΈΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ;
β’ u Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΡΠ·Π»ΠΎΠ² ΠΈ z ΡΠ°Π²Π½ΠΎ Π΅Π³ΠΎ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΠ΅Π· ΡΠΎΠΌΠ½Π΅Π½ΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠ· ΠΏΡΠΎΡΡΡΡ . ΠΠΎ ΠΊΠ°ΠΊ Π±Ρ ΠΌΡ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π»ΠΈ, Π΅ΡΠ»ΠΈ Π±Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΊΠ»ΡΡΠ΅ΠΉ? ΠΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ²:
β‘ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° xsl:key Π½Π°ΠΉΡΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·Π»ΠΎΠ² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΡ Π΅Π³ΠΎ ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ match (ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ X);
β‘ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ ΡΠ·Π»ΠΎΠ² (x β X) Π²ΡΡΠΈΡΠ»ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ° use (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ u(x));
β‘ Π΅ΡΠ»ΠΈ u(x) ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΡΠ·Π»ΠΎΠ² (Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ UΡ ), ΡΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ uxi β UΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»ΡΡ (x, n, string(uxi)), Π³Π΄Π΅ n β ΠΈΠΌΡ ΠΊΠ»ΡΡΠ° (Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° name ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° xsl:key);
β‘ Π΅ΡΠ»ΠΈ u(x) ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ ux), ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»ΡΡ (x, n, string(ux)).
ΠΡΠΈΠΌΠ΅ΡΠΠ°ΠΉΠ΄Π΅ΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΊΠ»ΡΡΠ΅ΠΉ, ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ
<xsl:key name="src" match="item" use="@*"/>
ΠΠΌΠ΅Π½Π° Π²ΡΠ΅Ρ ΠΊΠ»ΡΡΠ΅ΠΉ Π±ΡΠ΄ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ ΠΈ ΡΠ°Π²Π½Ρ "src". ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ x ΡΠ·Π»ΠΎΠ², ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΡ ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ item, Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ item ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π² Π°ΡΡΠΈΠ±ΡΡΠ΅ use, Π±ΡΠ΄Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²ΡΠ΅Ρ ΡΠ·Π»ΠΎΠ² Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² item. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ·Π»ΠΎΠ² Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄:
(<item name="Π".../>, 'src', 'a')
(<item name="Π".../>, 'src', 'A')
(<item name="Π".../>, 'src', 'b')
(<item name="Π".../>, 'src', 'Π')
(<item name="Π‘".../>, 'src', 'Π°')
(<item name="Π‘".../>, 'src', 'Π‘')
(<item name="D".../>, 'src', 'Ρ')
(<item name="D".../>, 'src', 'D')
...
(<item name="H".../>, 'src', 'a')