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

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

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

ДСкларация Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° вынСсСна Π²ΠΎ внСшний Ρ„Π°ΠΉΠ» gemini.dtd.

Листинг 6.14. Π€Π°ΠΉΠ» gemini.dtd

<!ELEMENT vertices (vertex*)>

<!ELEMENT vertex EMPTY>

<!ATTLIST vertex

 name ID #REQUIRED

 connects IDREFS #REQUIRED>

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ этого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° функция id Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π° для Π²Ρ‹Π±ΠΎΡ€Π° элСмСнтов соСдинСнных Π²Π΅Ρ€ΡˆΠΈΠ½. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, функция id, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° connects (Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ пСрСчислСны Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, смСТныС Π΄Π°Π½Π½ΠΎΠΉ), Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ мноТСство, состоящСС ΠΈΠ· элСмСнтов с пСрСчислСнными ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, функция id('tau upsilon') Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ мноТСство, состоящСС ΠΈΠ· Π΄Π²ΡƒΡ… элСмСнтов с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ name, Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ tau ΠΈ upsilon соотвСтствСнно.

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, функция id ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ вычислСна ΠΈ ΠΎΡ‚ мноТСства ΡƒΠ·Π»ΠΎΠ². Π’ этом случаС Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ объСдинСниС мноТСств, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚ строкового значСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ мноТСства. НапримСр, id(id('tau upsilon')/@connects) Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ мноТСство, состоящСС ΠΈΠ· Π²Π΅Ρ€ΡˆΠΈΠ½ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ alpha, beta, delta, epsilon, theta, iota ΠΈ kappa β€” мноТСство Π²Π΅Ρ€ΡˆΠΈΠ½, смСТных с Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ tau ΠΈ upsilon.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прСобразования, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт vertex добавляСт ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ пСрСчислСны ΠΈΠΌΠ΅Π½Π° Π²Π΅Ρ€ΡˆΠΈΠ½, достиТимых ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ, Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π·Π° Π΄Π²Π° шага.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ мноТСство Π²Π΅Ρ€ΡˆΠΈΠ½, достиТимых Π·Π° ΠΎΠ΄ΠΈΠ½ шаг (ΠΈΠ½Π°Ρ‡Π΅ говоря, смСТных), ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²ΠΈΠ΄Π° id(@connects), для Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ мноТСства Π²Π΅Ρ€ΡˆΠΈΠ½, достиТимых ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π·Π° Π΄Π²Π° шага β€” Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ id(id(@connects)/@connects). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, мноТСство Π²Π΅Ρ€ΡˆΠΈΠ½, достиТимых Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π·Π° Π΄Π²Π° шага, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ

id(@connects)|id(id(@connects)/@connects)

Листинг 6.15. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ gemini.xsl

<xsl:stylesheet

 version="1.0"

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


 <xsl:output doctype-system="gemini.dtd"/>


 <xsl:template match="vertices">

  <xsl:copy>

   <xsl:apply-templates/>

  </xsl:copy>

 </xsl:template>


 <xsl:template match="vertex">

  <vertex name="{@name}" connects="{@connects}">

   <xsl:comment>

    <xsl:for-each select="id(@connects)|id( [email protected])/@connects)">

     <xsl:text> </xsl:text>

     <xsl:value-of select="@name"/>

    </xsl:for-each>

   </xsl:comment>

  </vertex>

 </xsl:template>


</xsl:stylesheet>

Листинг 6.16. Выходящий Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

<!DOCTYPE vertices SYSTEM "gemini.dtd">

<vertices>

 <vertex name="alpha" connects="tau">

  <!-- alpha epsilon theta iota tau-->

 </vertex>

 <vertex name="beta" connects="upsilon">

  <!-- beta delta iota kappa upsilon-->

 </vertex>

 <vertex name="gamma" connects="zeta">

  <!-- gamma delta zeta-->

 </vertex>

 <vertex name="delta" connects="zeta lambda upsilon">

  <!-- beta gamma delta zeta iota kappa lambda xi upsilon-->

 </vertex>

 <vertex name="epsilon" connects="nu mu tau">

  <!-- alpha epsilon theta iota mu nu tau-->

 </vertex>

 <vertex name="zeta" connects="delta gamma">

  <!-- gamma delta zeta lambda upsilon-->

 </vertex>

 <vertex name="theta" connects="tau">

  <!-- alpha epsilon theta iota tau-->

 </vertex>

 <vertex name="iota" connects="tau upsilon">

  <!-- alpha beta delta epsilon theta iota kappa tau upsilon-->

 </vertex>

 <vertex name="kappa" connects="upsilon">

  <!-- beta delta iota kappa upsilon-->

 </vertex>

 <vertex name="lambda" connects="delta xi">

  <!-- delta zeta lambda xi upsilon-->

 </vertex>

 <vertex name="mu" connects="epsilon">

  <!-- epsilon mu nu tau-->

 </vertex>

 <vertex name="nu" connects="epsilon">

  <!-- epsilon mu nu tau-->

 </vertex>

 <vertex name="xi" connects="lambda">

  <!-- delta lambda xi-->

 </vertex>

 <vertex name="tau" connects="alpha theta iota epsilon">

  <!-- alpha epsilon theta iota mu nu tau upsilon-->

 </vertex>

 <vertex name="upsilon" connects="beta iota kappa delta">

  <!-- beta delta zeta iota kappa lambda tau upsilon-->

 </vertex>

</vertices>

Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ XPath

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

Π›ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ β€” это строковыС значСния, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Π’ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°Ρ… нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ символ ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹. ΠšΡ€ΠΎΠΌΠ΅ этого, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ XPath-выраТСния Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ… элСмСнтов, Π² Π½ΠΈΡ… нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ символы "<" ΠΈ "&" β€” ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π½Π° сущности. Π›ΠΈΡ‚Π΅Ρ€Π°Π»Π°ΠΌ соотвСтствуСт продукция Literal, опрСдСляСмая Π² Π²ΠΈΠ΄Π΅:

[XP29] Literal ::= '"' [^"]* '"' | "'" [^']* "'"

XPath ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π΅ΡΡΡ‚ΠΈΡ‡Π½ΡƒΡŽ систСму счислСния. Наборы Ρ†ΠΈΡ„Ρ€, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ Digits, ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Ρ†ΠΈΡ„Ρ€ ΠΎΡ‚ 0 Π΄ΠΎ 9:

[XP31] Digits ::= [0-9]+

Число Π² XPath состоит ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ†ΠΈΡ„Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ‚ΠΎΡ‡ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΊ Π² Π½Π°Ρ‡Π°Π»Π΅ числа (.5), Ρ‚Π°ΠΊ ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅ (5.). Числу соотвСтствуСт EBNF-ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Number:

[XP30] Number ::= Digits ('.' Digits?)? | '.' Digits

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ умноТСния соотвСтствуСт символ "*" ΠΈ синтаксичСскоС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ MultiplyOperator:

[XP34] MultiplyOperator ::= '*'

ИмСнам ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² XPath, ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ символ "$". Π‘Π°ΠΌΠΈ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ QName, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ рассматривали Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ "Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°".

[XP36] VariableReference ::= '$' QName

ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡ NodeType, использованная Π² тСстС ΡƒΠ·Π»Π° (см. Ρ€Π°Π·Π΄Π΅Π» "ВСсты ΡƒΠ·Π»ΠΎΠ²" Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Ρ‹, продукция [XP7]), опрСдСляСт Ρ‚ΠΈΠΏΡ‹ ΡƒΠ·Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ тСстС β€” comment (ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ), text (тСкстовый ΡƒΠ·Π΅Π»), processing-instruction (ΡƒΠ·Π΅Π» инструкции ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅) ΠΈ node (ΡƒΠ·Π΅Π» любого Ρ‚ΠΈΠΏΠ°). NodeType записываСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

[XP38] NodeType ::= 'comment'

                    | 'text'

                    | 'processing-instruction'

                    | 'node'

Другая конструкция, NameTest, которая Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² тСстС ΡƒΠ·Π»Π°, провСряСт ΡƒΠ·Π»Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° оси Π½Π° соотвСтствиС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ. EBNF-ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ NameTest ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

[Π₯Π 37] NameTest ::= '*' | NCName ':' '*' | QName

Имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² XPath ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ XML-ΠΈΠΌΠ΅Π½Π΅ΠΌ Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚Π΅Ρ… ΠΈΠΌΠ΅Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для обозначСния Ρ‚ΠΈΠΏΠΎΠ² ΡƒΠ·Π»ΠΎΠ². ΠŸΡ€Π°Π²ΠΈΠ»ΠΎ FunctionName ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

[XP35] FunctionName ::= QName - NodeType

Π’ цСлях удобочитаСмости, Π² выраТСниях ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½ΠΎΠ΅ пространство. Π•ΠΌΡƒ соотвСтствуСт EBNF-ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ExprWhiteSpace:

[XP39] ExprWhitespace ::= S

Π Π°Π·Π±ΠΎΡ€ XPath-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ Operator ΠΈ OperatorName:

[XP33] OperatorName ::= 'and' | 'or' | 'mod* | 'div'

[XP32] Operator     ::= OperatorName

                        | MultiplyOperator

                        | '/' | '//' | '|' | '+' | '-'

                        | '=' | '!=' | '<' | '>' | '<=' | '>='

ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡ самого Ρ‚ΠΎΠΊΠ΅Π½Π° выраТСния ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄:

[Π₯Π 28] ExprToken ::= '(' | ')' | '[' | ']'

                     | ' . ' | ' .. ' | '@' | ' | ':: '

                     | NameTest

                     | NodeType

                     | Operator

                     | FunctionName

                     | AxisName

                     | Literal

                     | Number

                     | VariableReference

ΠŸΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ XPath-выраТСния ΠΎΠ½ΠΎ сначала разбиваСтся Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ· Π½ΠΈΡ… ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ слоТныС структуры. ΠŸΡ€ΠΈ Ρ€Π°Π·Π±ΠΈΠ²ΠΊΠ΅ выраТСния Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, слСдуСт всСгда Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ с самым Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ строковым прСдставлСниСм.

Помимо этого, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠ° XPath-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π±Ρ‹Π»Π° ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠΉ, Π² спСцификации языка приводятся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ€Π°Π·Π±ΠΎΡ€Π°.