Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВСхнология XSLTΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 75

Автор АлСксСй Π’Π°Π»ΠΈΠΊΠΎΠ²

Π’Π°Π±Π»ΠΈΡ†Π° 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')