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

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

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

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π΄Π΅Ρ€Π΅Π²ΠΎ, сгСнСрированноС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шаблоном:

<xsl:template name="head">

 <head>

  <title>Title two</title>

  <style type="text/css">

   H1 {border-width: 1; border: solid; text-align: center}

  </style>

 </head>

</xsl:template>

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния этого шаблона Π² Π²ΠΈΠ΄Π΅ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° head ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ head, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ конструкциСй:

<xsl:call-template name="html">

 <xsl:with-param name="head">

  <xsl:call-template name="head"/>

 </xsl:with-param>

</xsl:call-template>

Выходящий Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Π² Π²ΠΈΠ΄Π΅:

<html>

 <head>

  <title>Title two</title>

  <style type="text/css">

   H1 {border-width: 1; border: solid; text-align: center}

  </style>

 </head>

 <body>content</body>

</html>

Π’Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ случаС, соотвСтствуСт части Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° head.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ выходящий Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠΎ кусочкам ΠΈΠ· Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π². ΠŸΡ€ΠΈ ΡƒΠΌΠ΅Π»ΠΎΠΌ использовании ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ высокой гибкости ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ.

Π“Π»Π°Π²Π° 6

XPath-выраТСния

ВыраТСния для XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

По ΠΌΠ΅Ρ€Π΅ распространСния XML-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ развития смСТных с Π½ΠΈΠΌΠΈ областСй стали Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ подходят для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ XML, Π½ΠΎ ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ самих XML-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Одной ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡ являСтся ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ частям XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. НапримСр, Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, скаТСм, Ρ†Π΅Π½Ρƒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°, которая находится Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ value элСмСнта price, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰Π΅ΠΌΡƒ элСмСнту product, ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ стандартных SAX- ΠΈΠ»ΠΈ DOM-интСрфСйсов Π±Ρ‹Π»ΠΎ Π±Ρ‹, мягко говоря, Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ. И это Π΅Ρ‰Π΅ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π‘Ρ‹Π²Π°ΡŽΡ‚, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, слоТныС случаи, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡƒΠ·Π΅Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… мСстах Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅, Π΄Π° Π΅Ρ‰Π΅ ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ свойствами.

Для выполнСния часто Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π·Π°Π΄Π°Ρ‡ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Π±Ρ‹Π» создан язык XPath, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ΡΡ, ΠΊΠ°ΠΊ XML Path β€” язык XML- ΠΏΡƒΡ‚Π΅ΠΉ. Π“Π»Π°Π²Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ этого языка являСтся адрСсация, ΠΈΠ»ΠΈ, ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ мСстополоТСния частСй XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ мноТСства ΡƒΠ·Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ условиям располоТСния.

Помимо Π³Π»Π°Π²Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, Π² XPath ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками, числами, Π±ΡƒΠ»Π΅Π²Ρ‹ΠΌΠΈ значСниями ΠΈ мноТСствами ΡƒΠ·Π»ΠΎΠ². ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π° самом Π΄Π΅Π»Π΅ XPath β€” это ΠΌΠ½ΠΎΠ³ΠΎ большС, Ρ‡Π΅ΠΌ просто язык адрСсации. XPath-выраТСния, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ самой ΠΎΠ±Ρ‰Π΅ΠΉ конструкциСй языка, ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ значСния любого ΠΈΠ· основных Ρ‚ΠΈΠΏΠΎΠ² (ΠΊΡ€ΠΎΠΌΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° Π΄Π΅Ρ€Π΅Π²Π° β€” этот Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² XSLT).

Π’ языкС XSLT ΠΎΡ‡Π΅Π½ΡŒ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ XPath-выраТСния β€” Π²ΠΎ всСх вычислСниях, Π²Ρ‹Π±ΠΎΡ€ΠΊΠ°Ρ…, сравнСниях ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅, XSLT опираСтся Π½Π° XPath. Π’ XPath Π΅ΡΡ‚ΡŒ арифмСтичСскиС ΠΈ логичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΏΡ€Π°Π²Π΄Π°, Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ функциями XSLT). МоТно с ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΡΠ²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±Π΅Π· знания языка XPath Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ прСобразования.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, нСсмотря Π½Π° всС особСнности, язык XPath Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ прост, Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚, Π΄Π°ΠΆΠ΅ Π½Π΅ отдавая сСбС ΠΎΡ‚Ρ‡Π΅Ρ‚Π°, Ρ‡Ρ‚ΠΎ это XPath. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ пишСм

<xsl:value-of select="page/number"/>

для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ вывСсти Π½ΠΎΠΌΠ΅Ρ€ страницы, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² элСмСнтС number, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π² элСмСнтС page, ΠΌΡ‹ Π½Π΅ задумываСмся ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ page/number β€” это Π½Π° самом Π΄Π΅Π»Π΅ XPath-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎΡ‡Π½Π΅Π΅, ΠΏΡƒΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ.

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΏΡƒΡ‚ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ путям Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСмах, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ, Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅ понимая сСмантики β€” чисто ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ. Однако, для построСния слоТных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π½ΡƒΠΆΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ стоит Π·Π° Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ синтаксисом.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ всС грамматичСскиС конструкции этого языка, ΠΌΡ‹ ΠΎΠΏΡΡ‚ΡŒ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡ‹ Бэкуса-Наура, ΠΏΠΎ возмоТности раскрывая ΠΈ упрощая ΠΈΡ…. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡƒΡ‚Π°Ρ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€Π° XPath-ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΉ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ синтаксичСскими ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½ΠΎΠΌΠ΅Ρ€Π΅ прСфикс XP, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

[Π₯Π 1] LocationPath ::= RelativeLocationPath

                       | AbsoluteLocationPath

Π’ синтаксичСских ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° NCName, QName ΠΈ S, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΡƒΠΆΠ΅ рассматривали Ρ€Π°Π½Π΅Π΅. NCName ΠΈ QName относятся ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π°ΠΌ, a S ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½ΠΎΠ΅ пространство.

XPath-выраТСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ статичСскими ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ языка XSLT. ВыраТСния нСльзя ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²ΠΎ врСмя выполнСния прСобразования, ΠΈΠ½Π°Ρ‡Π΅ говоря, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ вычислСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) Π² XSLT ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚. НСльзя ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

<!-- Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ XPath-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ -->

<xsl:variable name="expr" select="concat(.'page/number[', id, ']')"/>

<!-- ВычисляСм динамичСски созданноС XPath-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ -->

<xsl:value-of select="eval($expr)"/>

Π’ XPath отсутствуСт функция eval, которая вычисляла Π±Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ XPath-выраТСния, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΅ΠΉ Π² Π²ΠΈΠ΄Π΅ строки.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Ѐункция eval присутствуСт Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… XSLT-процСссорах, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Saxon Π² Π²ΠΈΠ΄Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ saxon:evaluate.

ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ вычислСния Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

Как ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ€Π°Π½Π΅Π΅, Π² XSLT ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ прСобразования ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ частям XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ случаС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹ΠΌ β€” Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ выглядит ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚. Подобно этому, XPath-выраТСния Ρ‚ΠΎΠΆΠ΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Π² зависимости ΠΎΡ‚ контСкста. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΎΠΉ ΡƒΠ·Π΅Π» Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ обрабатываСтся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΊΠ°ΠΊΠΎΠ²Π° позиция этого ΡƒΠ·Π»Π° Π² ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΌ мноТСствС, сколько всСго ΡƒΠ·Π»ΠΎΠ² Π² этом мноТСствС, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ доступны ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ значСния ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚, ΠΊΠ°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΊΠ°ΠΊΠΈΠ΅ пространства ΠΈΠΌΠ΅Π½ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹. Π˜Π½Ρ‹ΠΌΠΈ словами, контСкст β€” это ΠΏΠΎΠ»Π½ΠΎΠ΅ описаниС полоТСния, окруТСния ΠΈΠ»ΠΈ ситуации, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ происходит вычислСниС.

Если Π΄Π°Π²Π°Ρ‚ΡŒ строгоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² соотвСтствии со спСцификациСй XPath, Ρ‚ΠΎ контСкст ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ части.

β–‘ ΠšΠΎΠ½Ρ‚Скстный ΡƒΠ·Π΅Π» β€” ΡƒΠ·Π΅Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ обрабатываСтся Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π» ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ влияниС Π½Π° вычислСниС ΠΌΠ½ΠΎΠ³ΠΈΡ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ контСкстного ΡƒΠ·Π»Π°. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв контСкстный ΡƒΠ·Π΅Π» совпадаСт с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ ΡƒΠ·Π»ΠΎΠΌ прСобразования, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²ΠΎ врСмя вычислСния самих XPath-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ.

β–‘ Π¦Π΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ контСкста β€” количСство ΡƒΠ·Π»ΠΎΠ² Π²ΠΎ мноТСствС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ обрабатываСтся Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π­Ρ‚ΠΎ число ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ last.

β–‘ Π¦Π΅Π»ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ контСкстного ΡƒΠ·Π»Π° Π² контСкстС вычислСния выраТСния β€” Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ порядковый Π½ΠΎΠΌΠ΅Ρ€ ΡƒΠ·Π»Π° Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ мноТСствС прСобразования, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ упорядочСно. Π­Ρ‚ΠΎ число ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ position. ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Ρ€Π°Π²Π½Π° 1, позиция послСднСго β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ last.

β–‘ ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ связанных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ мноТСство Π΅ΡΡ‚ΡŒ мноТСство ΠΏΠ°Ρ€ Π²ΠΈΠ΄Π° "имя-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅", Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ связываСтся со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, присвоСнным Π΅ΠΉ. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π² самом XPath, для этого слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ элСмСнт языка XSLT xsl:variable. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ значСния любого ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² XPath (Π±ΡƒΠ»Π΅Π²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, строка, число, мноТСство ΡƒΠ·Π»ΠΎΠ²), Ρ‚Π°ΠΊ ΠΈ значСния Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². НапримСр, Π² XSLT Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π΄Π΅Ρ€Π΅Π²Π°, Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ языка Ρ‚Π°ΠΊ ΠΈ вовсС ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π»ΡŽΠ±Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π”Ρ€ΡƒΠ³ΠΎΠ΅ Π΄Π΅Π»ΠΎ, Ρ‡Ρ‚ΠΎ XPath-выраТСния Π² соотвСтствии со стандартом Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ нСпосрСдствСнно Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΡ€ΠΎΠΌΠ΅ своих Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π±Π°Π·ΠΎΠ²Ρ‹Ρ…. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ XPath ΠΈ XSLT Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² Π³Π»Π°Π²Π΅ 10.

Π’ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, доступ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ.

β–‘ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, состоящая ΠΈΠ· мноТСства Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ процСссором. Π’ XPath опрСдСляСтся базовая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² процСссорС, ΠΎΠ΄Π½Π°ΠΊΠΎ эта Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π°. НапримСр, XSLT опрСдСляСт нСсколько Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ всСми XSLT-процСссорами. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π² прСобразованиях ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ собствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ контСкста состоит ΠΈΠ· всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, доступных ΠΏΡ€ΠΈ вычислСнии выраТСния.