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

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

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

Π’ прСобразованиях часто Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ массивы статичСских Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Ρ‚Π΅ΠΌ Π² выраТСниях. К Π½Π΅ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, простоС созданиС Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° Π΄Π΅Ρ€Π΅Π²Π° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°Π»ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ

<xsl:variable name="colors">

 <color>#0E0E0E</color>

 <color>#FFFFFF</color>

</xsl:variable>

создаСт Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ colors Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π΄Π΅Ρ€Π΅Π²Π°. Π’ соотвСтствии со спСцификациСй XPath 1.0 Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ $colors/color[1] Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠΌ colors являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π΄Π΅Ρ€Π΅Π²Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π²ΠΎ мноТСство ΡƒΠ·Π»ΠΎΠ². Π˜Π½Ρ‹ΠΌΠΈ словами, ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ΅ ΠΈ ΠΎΠΏΡ€Π°Π²Π΄Π°Π½Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ являСтся ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ способы ΠΎΠ±ΠΎΠΉΡ‚ΠΈ этот Π·Π°ΠΏΡ€Π΅Ρ‚ β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ, Π½ΠΎ нСльзя Π½Π΅ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ самой большой Π·Π°Π½ΠΎΠ·ΠΎΠΉ Π² XSLT 1.0.

XSLT 1.1 исправляСт этот просчСт. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ colors, опрСдСлСнная Π²Ρ‹ΡˆΠ΅, Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ своим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π΄Π΅Ρ€Π΅Π²Π°, Π° мноТСство ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ, ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ, ΡƒΠ·Π»Π° этого Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΈ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… node-set.

НСсколько выходящих Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

Как извСстно, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² XSLT 1.0 ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ основной входящий Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ (плюс Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, доступныС ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ document) ΠΈ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ выходящий Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚. Π’ΠΎ Π΅ΡΡ‚ΡŒ, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° основС ΠΎΠ΄Π½ΠΎΠ³ΠΎ входящСго Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° нСсколько выходящих слСдуСт просто Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ нСсколько ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ.

БлСдуя многочислСнным запросам программистов, ΠΏΠΎΡ‡Ρ‚ΠΈ всС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ XSLT-процСссоров прСдоставили Π² своих ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°Ρ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько выходящих Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² нСпосрСдствСнно ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ прСобразования. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ xsl:document, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π² XSLT 1.1, сдСлал эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ стандартной.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π‘Π°ΠΌΡ‹ΠΌ простым ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ xsl:document являСтся Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π° нСсколько. НапримСр, имСя Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π²ΠΈΠ΄Π°

<book>

 <chapter>Text 1</chapter>

 <chapter>Text 2</chapter>

 <chapter>Text 3</chapter>

</book>

ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ элСмСнты chapter Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, Π° Π² самом выходящСм Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ³Π»Π°Π²Π»Π΅Π½ΠΈΠ΅ со ссылками.

Листинг 12.1. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ элСмСнт xsl:document

<xsl:stylesheet

 version="1.1"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="book">

  <xsl:copy>

   <xsl:apply-templates select="chapter"/>

  </xsl:copy>

 </xsl:template>

 <xsl:template match="chapter">

  <chapter href="chapter{position()}.xml"/>

  <xsl:document href="chapter{position()}.xml">

   <xsl:copy-of select="."/>

  </xsl:document>

 </xsl:template>

</xsl:stylesheet>

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этого прСобразования Π±ΡƒΠ΄ΡƒΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°.

Листинг 12.2. Π“Π»Π°Π²Π½Ρ‹ΠΉ выходящий Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ прСобразования

<book>

 <chapter href="chapter1.xml"/>

 <chapter href="chapter2.xml"/>

 <chapter href="chapter3.xml"/>

</book>

Листинг 12.3. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ chapter1.xml

<chapter>Text 1</chapter>

Листинг 12.4. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ chapter2.xml

<chapter>Text 2</chapter>

Листинг 12.5. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ chapter3.xml

<chapter>Text 3</chapter>

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΏΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ

Π’ XSLT 1.1 Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ элСмСнт xsl:script, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности для создания ΠΈ использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ xsl:script Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² самом ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π’ процСссорС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ скриптовыС языки Ρ‚ΠΈΠΏΠ° JavaScript, исходный ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² само ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Листинг 12.6. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ

<xsl:stylesheet

 version="1.1"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 xmlns:js="javascript:code">


 <xsl:script language="javascript" implements-prefix="js">

  function iff(arg1, arg2, arg3) {

   if (arg1) {

    return arg2;

   } else {

    return arg3;

   }

  }

 </xsl:script>

 ...

</xsl:stylesheet>

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

Атрибут language опрСдСляСт язык программирования, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ написано Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, язык влияСт Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ процСссор ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ содСрТимоС xsl:script ΠΈΠ»ΠΈ слСдуСт Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ внСшний Java-класс. ЕстСствСнно, Π½Π΅ слСдуСт ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ любой процСссор смоТСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, написанныС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… языках программирования β€” ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ XSLT-срСдств Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊ своим ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°ΠΌ ΠΎΠ³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°ΡŽΡ‚, ΠΊΠ°ΠΊΠΈΠ΅ языки Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚. Как слСдствиС, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, написанныС Π½Π° "нСпонятном" процСссору языкС, Π»ΠΈΠ±ΠΎ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅, Π»ΠΈΠ±ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ.

Помимо Π΄Π²ΡƒΡ… ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² implements-prefix ΠΈ language, Π² элСмСнт xsl:script ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ src ΠΈ archive, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ физичСскоС мСстополоТСниС ΠΊΠΎΠ΄Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ.

"Π’Π½Π΅ΡˆΠ½ΠΈΠ΅" Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Π§Π΅Ρ‚Ρ‹Ρ€Π΅ основных Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… языка XPath (Π±ΡƒΠ»Π΅Π²Ρ‹ΠΉ, числСнный, строковый Ρ‚ΠΈΠΏΡ‹ ΠΈ мноТСства ΡƒΠ·Π»ΠΎΠ²) Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии XSLT Π±Ρ‹Π»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Ρ‹ Ρ‚ΠΈΠΏΠΎΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° Π΄Π΅Ρ€Π΅Π²Π°. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ смыслС, Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² Π±Ρ‹Π»ΠΈ "внСшним" Ρ‚ΠΈΠΏΠΎΠΌ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ XPath, Π½ΠΎ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ с успСхом с этим Ρ‚ΠΈΠΏΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ.

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ продСмонстрировано Π² Π³Π»Π°Π²Π΅ 10 элСмСнтом ext:date, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пСрСписано ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

Листинг 12.7. ИспользованиС Π²Π½Π΅ΡˆΠ½ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ

<xsl:stylesheet

 version="1.1"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 xmlns:Date="java:java.util.Date"

 xmlns:SimpleDateFormat="java.text.SimpleDateFormat">


 <xsl:variable name="df" select="SimpleDateFormat:new('HH:mm')"/>

 <xsl:variable name="now" select="Date:new()"/>


 <xsl:template match="/">

  <xsl:value-of select="SimpleDateFormat:format($df, $now)"/>

 </xsl:template>


</xsl:stylesheet>

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΠ΅Π½ с прСфиксами Date ΠΈ SimpleDateFormat ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ привязку ΠΊ Java-классам java.util.Date ΠΈ java.text.SimpleDateFormat соотвСтствСнно (Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ URI пространств ΠΈΠΌΠ΅Π½, принятый Π² процСссорС Saxon).

ОбъявлСниС

<xsl:variable name="df" select="SimpleDateFormat:new('HH:mm')"/>

присваиваСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ df Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния конструктора класса SimpleDateFormat со строковым ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ "HH:mm", Ρ‡Ρ‚ΠΎ эквивалСнтно Java-ΠΊΠΎΠ΄Ρƒ

SimpleDateFormat df = new SimpleDateFormat("НН:mm");

Π˜Π½Ρ‹ΠΌΠΈ словами, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ df Π±Ρ‹Π» присвоСн "внСшний" Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… java.text.SimpleDateFormat. Аналогично, пСрСмСнная now содСрТит Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° java.util.Date. ЀактичСски, этим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π±Ρ‹Π»ΠΈ присвоСны экзСмпляры ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… классов.

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ SimpleDateFormat:format($df, $now), использованноС Π² этом ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ, прСдставляСт собой Π½ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ½ΠΎΠ΅, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° format экзСмпляра класса SimpleDateFormat, присвоСнного ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ df ΠΊ экзСмпляру класса Date, присвоСнного ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ now. Π’ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ Π½Π° Java:

df.format(now);

Надо ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ внСшними Ρ‚ΠΈΠΏΠ°ΠΌΠΈ β€” ΠΎΡ‚Π½ΡŽΠ΄ΡŒ Π½Π΅ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ XSLT 1.1. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… процСссорах интСрфСйсы Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ функциям Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ эта Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π° Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ ΠšΠΎΠ½ΡΠΎΡ€Ρ†ΠΈΡƒΠΌΠ° W3, ΠΈ слСдуСт ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΈΠ· Π²Ρ‚ΠΎΡ€ΠΎΠΉ вСрсии языка ΠΎΠ½Π° Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ дСнСтся.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ интСрфСйсы Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ

Π’Π°ΠΆΠ½Ρ‹ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π² XSLT 1.1 ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсиСй языка являСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ стандартных интСрфСйсов Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для языков IDL, JavaScript/ECMAScript ΠΈ Java Π½Π° основС интСрфСйсов DOM2.