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

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

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

<pre>One little rabbit<BR/>

Two little rabbits<BR/>

Three little rabbits</pre>

Π”Π°Π½Π½Ρ‹Π΅, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ запятыми (CSV)

Π Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΡƒ Π·Π°ΠΌΠ΅Π½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ прСдставили Π²Ρ‹ΡˆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ запятыми (ΠΈΠ»ΠΈ CSV, comma-separated values). CSV β€” это старый простой Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ просто ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

a, b, с, d, e, f, g

ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π€ΠΎΡ€ΠΌΠ°Ρ‚ CSV Π±Ρ‹Π» ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… шагов ΠΊ созданию языков Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ: Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Π΅ΠΌ ΡƒΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ‡Π°Π»ΠΈΡΡŒ запятыми.

ПокаТСм Π½Π° простом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ CSV-Π΄Π°Π½Π½Ρ‹Π΅ Π² XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚. ΠŸΡƒΡΡ‚ΡŒ входящий Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ выглядит ΠΊΠ°ΠΊ:

<data>a, b, с, d, e, f</data>

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΌ, вынСсСм созданиС XML-Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· элСмСнтов этой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаблон:

<xsl:template name="item">

 <xsl:param name="item"/>

 <item><xsl:copy-of select="$item"/></item>

</xsl:template>

Π’ΠΎΠ³Π΄Π° Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ шаблон Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² Π²ΠΈΠ΄Π΅.

Листинг 11.18. Π¨Π°Π±Π»ΠΎΠ½, Ρ€Π°Π·ΠΌΠ΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Π΅ Π² строковом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅

<xsl:template name="markup" match="text()" mode="CSV">

 <xsl:param name="str" select="."/>

 <xsl:param name="delimiter" select="','"/>

 <xsl:choose>

  <xsl:when test="contains($str,$delimiter)">

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

    <xsl:with-param name="item"

     select="substring-before($str, $delimiter)"/>

   </xsl:call-template>

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

    <xsl:with-param name="str"

     select="substring-after($str, $delimiter)"/>

   </xsl:call-template>

   <xsl:with-param name="delimiter" select="$delimiter"/>

  </xsl:when>

  <xsl:otherwise>

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

    <xsl:with-param name="item" select="$str"/>

   </xsl:call-template>

  </xsl:otherwise>

 </xsl:choose>

</xsl:template>

На Π²Ρ…ΠΎΠ΄ шаблон markup ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° β€” str, строка, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΡƒΠ·Π»Π°) ΠΈ delimiter β€” строка, Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния Π² str (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” запятая ",").

Π¨Π°Π±Π»ΠΎΠ½, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ содСрТимоС элСмСнта data, Π±ΡƒΠ΄Π΅Ρ‚ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

<xsl:template match="data">

 <xsl:copy>

  <xsl:apply-templates mode="CSV"/>

 </xsl:copy>

</xsl:template>

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этого прСобразования Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

<data>

 <item>a</item>

 <item> b</item>

 <item> c</item>

 <item> d</item>

 <item> e</item>

 <item> f</item>

</data>

ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² элСмСнтах item ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ лишниС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ шли Π·Π° запятыми. Π˜Π·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π½ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ, ΡƒΠΊΠ°Π·Π°Π² Π² качСствС Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‰Π΅ΠΉ строки символ ", ":

<xsl:template match="data">

 <xsl:copy>

  <xsl:apply-templates mode="CSV">

   <xsl:with-param name="delimiter" select="', '"/>

  </xsl:apply-templates>

 </xsl:copy>

</xsl:template>

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ слСдовало ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚:

<data>

 <item>a</item>

 <item>b</item>

 <item>c</item>

 <item>d</item>

 <item>e</item>

 <item>f</item>

</data>

ΠšΡΡ‚Π°Ρ‚ΠΈ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ эффСкта ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² шаблон item, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° XML-прСдставлСниС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· элСмСнтов ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

Π“Π»Π°Π²Π° 12

Π Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ

Как извСстно, успСх Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ зависит Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½Π° ΠΈ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΎΠ½Π° Π±Ρ‹Π»Π°. Π•Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ распространСниС Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ заинтСрСсованности Π²Π΅Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния. Π’ этом смыслС XSLT ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ²Π΅Π·Π»ΠΎ: имплСмСнтациями языка с самых Ρ€Π°Π½Π½ΠΈΡ… Ρ‡Π΅Ρ€Π½ΠΎΠ²Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² занимались Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΊΠ°ΠΊ Microsoft, Oracle, IBM, Adobe, Lotus ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Apache XML Project ΠΏΠΎΠΌΠΎΠ³Π»Π° XSLT Π·Π°Π²ΠΎΠ΅Π²Π°Ρ‚ΡŒ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ ΠΈ срСди open-source сообщСства (open-source β€” Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ с "ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ" исходным ΠΊΠΎΠ΄ΠΎΠΌ).

Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅, сСйчас слСдуСт лишь ΠΊΠΎΠ½ΡΡ‚Π°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ рост популярности XSLT. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ XSLT-процСссоров ΡƒΠΆΠ΅ исчисляСтся дСсятками, Π° число Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² β€” ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, Ρ‡Ρ‚ΠΎ ΠΈ тысячами.

ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½Ρ‹ΠΉ интСрСс ΠΏΠΎΠΌΠΎΠ³ Π² Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ срок (ΠΌΠ΅Π½Π΅Π΅ Π³ΠΎΠ΄Π°) ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ нСдостатки ΠΈ достоинства Π½ΠΎΠ²ΠΎΠ³ΠΎ языка ΠΈ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π»ΠΈ эти практичСскиС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹. Π’ Π΄Π΅ΠΊΠ°Π±Ρ€Π΅ 2000 Π³ΠΎΠ΄Π° Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π° вСрсия 1.1,. Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π»ΠΎ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ исправлСно Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ основных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии XSLT, Π½ΠΎ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹Π΅ дополнСния β€” Ρ‚Π°ΠΊΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ интСрфСйсов Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ для языков Java ΠΈ JavaScript/ECMAScript. Π’ августС 2001 Π³ΠΎΠ΄Π° вСрсии 1.1 Π΄Π°Π»ΠΈ статус Final Draft ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ Π½Π° ΠΏΠΎΠ»ΠΊΡƒ β€” ΠΎΠ½Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ стандартом (тСхничСской Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠ΅ΠΉ ΠšΠΎΠ½ΡΠΎΡ€Ρ†ΠΈΡƒΠΌΠ° W3).

НуТно ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ количСству Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΎΠΊ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ вСрсия XSLT 1.1 ΠΌΠΎΠ³Π»Π° Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Ρ€ΠΎΠ»ΡŒ Π½ΠΎΠ²ΠΎΠ³ΠΎ стандарта XSLT. Однако, Π² Ρ‚Π°ΠΊΠΎΠΉ напряТСнной области ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, ΠΊΠ°ΠΊ XML, приходится ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌΠΈ, ΠΈΠ±ΠΎ всС ΠΎΠ½ΠΈ взаимосвязаны. На Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ XSLT 1.1 ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ 2.0 Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ повлияли Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, ΠΊΠ°ΠΊ XML Schema ΠΈ XQuery.

XML Schema β€” это Π΄ΠΎΠ»Π³ΠΎΠΆΠ΄Π°Π½Π½Ρ‹ΠΉ XML-язык, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ структуру XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, своСго Ρ€ΠΎΠ΄Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ DTD. XML Schema, Π² частности, позволяСт ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ простыС ΠΈ слоТныС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… элСмСнтов ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ количСства ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π² XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Π΅ ΠΈ внСшниС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅. Помимо этого, XML Schema опрСдСляСтся Π² XML-синтаксисС, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ схСм стандартныС XML-инструмСнты. БпСцификация XML Schema ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° статус тСхничСской Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠšΠΎΠ½ΡΠΎΡ€Ρ†ΠΈΡƒΠΌΠ° W3 Π² ΠΌΠ°Π΅ 2001 Π³ΠΎΠ΄Π°.

XQuery β€” это Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ W3C ΠΏΠΎ созданию языка запросов для XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π’ основу XQuery Π»Π΅Π³Π»ΠΎ мноТСство ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… исслСдований Π² области языков запросов для полуструктурированных Π΄Π°Π½Π½Ρ‹Ρ… β€” ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ Quilt, XML-QL ΠΈ Lorel. ΠŸΠΎΡ‡Ρ‚ΠΈ всС старыС языки запросов для XML Π±Ρ‹Π»ΠΈ унивСрситСтскими ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ; Π² XQuery ΠΆΠ΅ заинтСрСсованы Ρ‚Π°ΠΊΠΈΠ΅ Π³ΠΈΠ³Π°Π½Ρ‚Ρ‹, ΠΊΠ°ΠΊ Microsoft ΠΈ Software AG.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΠΎΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ XML Schema ΠΈ XQuery Π²Π»ΠΈΡΡŽΡ‚ Π½Π° XSLT β€” казалось Π±Ρ‹, ΠΈΡ… области примСнСния нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ. Напомним, Ρ‡Ρ‚ΠΎ вСсомая Ρ‡Π°ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ XSLT зависит ΠΎΡ‚ языка XPath, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π² XPointer. Как оказалось, XPath Π²Π°ΠΆΠ΅Π½ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для XSLT ΠΈ XPointer, Π½ΠΎ ΠΈ для XQuery. МодСль XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, описанная Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии XPath, оказалась ΠΌΠΎΡ‰Π½ΠΎΠΉ, Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΠΎΠΉ ΠΈ понятной абстракциСй физичСской сущности XML ΠΈ поэтому Π΅Π΅ Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈ Π² XQuery. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ своСй ΠΈΠ½ΠΊΠ°Ρ€Π½Π°Ρ†ΠΈΠΈ эта модСль Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ β€” "XQuery 1.0 and XPath 2.0 Data Model" ("МодСль Π΄Π°Π½Π½Ρ‹Ρ… XQuery 1.0 ΠΈ XPath 2.0"). Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ β€” "XQuery 1.0 and XPath 2.0 Functions and Operators Version 1.0" ("ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² XQuery 1.0 ΠΈ XPath 2.0, вСрсия 1.0").

ΠŸΡ€ΠΈΠ½ΡΡ‚ΠΈΠ΅ XML Schema Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ влияниС Π½Π° XPath. Π’ схСмах Π₯МL-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ элСмСнтов. БоотвСтствСнно, сСмантика XPath Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡ‚Ρ€Π°ΠΆΠ°Ρ‚ΡŒ эту ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ слоТСния "+" Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ Π½Π° строковых ΠΈ числовых ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°Ρ….

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

Рассмотрим Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ int/x + int/y Π½Π° ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅:

<int>

 <x>2</x>

 <y>2</y>

</int>

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии XPath Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ вычислСния int/x + int/Ρƒ Π² любом случаС Π±ΡƒΠ΄Π΅Ρ‚ 4. ΠœΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ, ΡΡ‚Π°Ρ€ΡˆΠΈΠ΅ вСрсии ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚Π°ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ 4 Π² случаС числовых ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² ΠΈ "22" Π² случаС строковых.

На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания этих строк Ρ€Π°Π±ΠΎΡ‚Π° Π½Π°Π΄ XSLT 2.0 ΠΈ XPath 2.0 ΠΈΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΌ Ρ…ΠΎΠ΄ΠΎΠΌ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠΎΠΊΠ° Π΅Ρ‰Π΅ Ρ€Π°Π½ΠΎ Π·Π°Π³Π»ΡΠ΄Ρ‹Π²Π°Ρ‚ΡŒ Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΈ Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ сСкрСты Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ XSL, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… спСцификациях XLST 1.1 ΠΈ трСбованиях ΠΊ вСрсии XSLT 2.0, ΠΊΠΎΠ΅-ΠΊΠ°ΠΊΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ всС ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ.

ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ XSLT 1.1 ΠΎΡ‚ XSLT 1.0

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ result tree fragment

Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ сущСствСнноС ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ XSLT 1.1 ΠΎΡ‚ XSLT 1.0 состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, извСстный Π² XSLT 1.0 ΠΊΠ°ΠΊ result tree fragment (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π΄Π΅Ρ€Π΅Π²Π°) Π² XSLT 1.1. отсутствуСт. ВмСсто Π½Π΅Π³ΠΎ Π² вСрсии 1.1 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ мноТСство ΡƒΠ·Π»ΠΎΠ², состоящСС ΠΈΠ· СдинствСнного ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°.

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ двумя этими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ прСдставлСния Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π² минимальна. Но Ссли ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ полоТСния языка XPath ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π²ΠΎ мноТСство ΡƒΠ·Π»ΠΎΠ², Ρ€Π°Π·Π½ΠΈΡ†Π° эта оказываСтся ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΉ. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΈ мноТСство, состоящСС ΠΈΠ· Π΅Π³ΠΎ корня, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ структуры, с Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ нСльзя Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с мноТСством ΡƒΠ·Π»ΠΎΠ².