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

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

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

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ элСмСнта

<xsl:value-of select="1&lt;2"/>

Π±ΡƒΠ΄Π΅Ρ‚ строка "true".

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ всСгда Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ наличия Π΄Π²ΡƒΡ… ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² числового Ρ‚ΠΈΠΏΠ°. Если ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Ρ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ числами, ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹.

Π’ XPath Π²ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π° A > B > C. Однако Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ довольно Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ. Π’ XPath дСйствуСт ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π»Π΅Π²ΠΎΠΉ ассоциативности ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² сравнСния, поэтому A > B > C Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎΡΠΈΠ»ΡŒΠ½ΠΎ (А > B) > C. Π’ΠΎ Π΅ΡΡ‚ΡŒ A Π±ΡƒΠ΄Π΅Ρ‚ сравнСно с B, Π·Π°Ρ‚Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, истина ΠΈΠ»ΠΈ лоТь, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² числовой Ρ‚ΠΈΠΏ (получится 1 ΠΈΠ»ΠΈ 0) ΠΈ Π·Π°Ρ‚Π΅ΠΌ сравнСн со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ C.

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

3 > 2 > 1 β†’ (3 > 2) > 1 β†’ 1 > 1 β†’ false

3 > 2 > 0 β†’ (3 > 2) > 0 β†’ 1 > 0 β†’ true

НСравСнствам Π² XPath соотвСтствуСт продукция RelationalExpr:

[XP24] RelationalExpr ::= AdditiveExpr

                          | RelationalExpr '<' AdditiveExpr

                          | RelationalExpr '>' AdditiveExpr

                          | RelationalExpr '<=' AdditiveExpr

                          | RelationalExpr '>=' AdditiveExpr

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ "Ρ€Π°Π²Π½ΠΎ" ΠΈ "Π½Π΅ Ρ€Π°Π²Π½ΠΎ" Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ

EqualityExpr:

[XP23] EqualityExpr ::= RelationalExpr

                        | EqualityExpr '=' RelationalExpr

                        | EqualityExpr '!=' RelationalExpr

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с мноТСствами ΡƒΠ·Π»ΠΎΠ²

Π’Ρ€ΠΈ основныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с мноТСствами ΡƒΠ·Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ язык XPath, β€” это Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ мноТСства, Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° с использованиСм ΠΏΡƒΡ‚Π΅ΠΉ ΠΈ объСдинСниС.

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° ΡƒΠ·Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ вычислСния Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ β€” Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΈΠ· Π½ΠΈΡ… ΡƒΠ·Π»Ρ‹, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ свойствам ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ это дСлалось ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π°ΠΌΠΈ Π² ΡˆΠ°Π³Π°Ρ… Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ.

Π’ выраТСниях мноТСства ΡƒΠ·Π»ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π°ΠΌΠΈ. Π£Π·Π΅Π» остаСтся Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅ΠΌΠΎΠΌ мноТСствС, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½ удовлСтворяСт всСм ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π°ΠΌ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ.

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

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅ΠΌΠΎΠΌ мноТСствС ΡƒΠ·Π»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ присвоСно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ nodes, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΡƒΠ·Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ имя Π° ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ href. ИскомоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ записано ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

$nodes[self::Π°][@href]

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π±ΠΎΠ»Π΅Π΅ слоТныС конструкции, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ объСдинСниС Π΄Π²ΡƒΡ… мноТСств β€” присвоСнного ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ nodes ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ body/*:

($nodes|body/*)[self::a][@href]

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ производится Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΡƒΠ·Π»ΠΎΠ², ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ EBNF-ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ FilterExpr:

[XP20] FilterExpr ::= PrimaryExpr | FilterExpr Predicate

Если Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ€Π΅ΠΊΡƒΡ€ΡΠΈΡŽ, которая имССтся Π² этом ΠΏΡ€Π°Π²ΠΈΠ»Π΅, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π±ΠΎΠ»Π΅Π΅ простом Π²ΠΈΠ΄Π΅:

FilterExpr ::= PrimaryExpr Predicate*

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ PrimaryExpr, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² этой ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ мноТСство ΡƒΠ·Π»ΠΎΠ². Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС процСссор выдаст ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΈΠΏ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π²ΠΎ мноТСство ΡƒΠ·Π»ΠΎΠ².

ИспользованиС Π² выраТСниях ΠΏΡƒΡ‚Π΅ΠΉ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ

Помимо Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ само ΠΏΠΎ сСбС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ выраТСниями. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ всС Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ элСмСнты ΡƒΠ·Π»ΠΎΠ² мноТСства, содСрТащСгося Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

$nodes/*

Для раздСлСния шагов Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΡŽΡ‰ΠΈΡ… выраТСниях ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ "/" ΠΈ "//". НапримСр, для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всСх ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² ΡƒΠ·Π»ΠΎΠ² ΠΈΠ· мноТСства, присвоСнного ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π°

$nodes//node()

Π—Π΄Π΅ΡΡŒ node() β€” это тСст ΡƒΠ·Π»Π°, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ для всСх Ρ‚ΠΈΠΏΠΎΠ² ΡƒΠ·Π»ΠΎΠ², Π° //, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, сокращСниС ΠΎΡ‚ /descendant-or-self:node()/.

ВыраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΡƒΡ‚ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ PathExpr:

[XP19] PathExpr ::= LocationPath

                    | FilterExpr

                    | FilterExpr '/' RelativeLocationPath

                    | FilterExpr '//' RelativeLocationPath

ОбъСдинСниС мноТСств

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° "|". Π’ объСдинСниС Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡƒΠ·Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ хотя Π±Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· мноТСств, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ содСрТит ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ. ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π»ΡŽΠ±Ρ‹Π΅ выраТСния, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ вычислСния ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ мноТСства ΡƒΠ·Π»ΠΎΠ².

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

ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ всСх элСмСнтов Π°, b ΠΈ с Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ //a|//b|//c.

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ объСдинСния соотвСтствуСт продукция UnionExpr:

[XP18] UnionExpr ::= PathExpr | UnionExpr '|' PathExpr

Π‘Ρ‚Π°Ρ€ΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ всС Ρ‚ΠΈΠΏΡ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ XPath, ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Ρ‚ΡŒ синтаксичСскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ ΠΈ Π²Ρ‹ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² порядкС ΡΡ‚Π°Ρ€ΡˆΠΈΠ½ΡΡ‚Π²Π°.

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, ΠΊΠ°ΠΊ самой ΠΎΠ±Ρ‰Π΅ΠΉ конструкции XPath, соотвСтствуСт продукция Expr, которая опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

[XP14] Expr ::= OrExpr

Π’ΠΎ Π΅ΡΡ‚ΡŒ, фактичСски, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² XPath опрСдСляСтся Ρ‡Π΅Ρ€Π΅Π· логичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. ЕстСствСнно, выраТСния Π½Π΅ обязаны Π±Ρ‹Ρ‚ΡŒ логичСскими. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ синтаксичСских ΠΏΡ€Π°Π²ΠΈΠ» логичСскоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ "ΠΈΠ»ΠΈ" находится Π²Ρ‹ΡˆΠ΅ всСго. Π’Π΅Ρ€Ρ…Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’ ΠΈΡ‚ΠΎΠ³Π΅ иСрархия Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ выстраиваСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (Π² скобках ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ названия EBNF-ΠΏΡ€Π°Π²ΠΈΠ»):

β–‘ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡ (Expr);

β–‘ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ выраТСния "ΠΈΠ»ΠΈ" (OrExpr);

β–‘ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ выраТСния "ΠΈ" (AndExpr);

β–‘ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡ равСнства ΠΈ нСравСнства (EqualityExpr);

β–‘ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡ сравнСния (RelationalExpr);

β–‘ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡ слоТСния ΠΈ вычитания (AdditiveExpr);

β–‘ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡ умноТСния ΠΈ дСлСния (MultiplicativeExpr);

β–‘ ΡƒΠ½Π°Ρ€Π½Ρ‹Π΅ выраТСния (UnaryExpr);

β–‘ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡ объСдинСния мноТСств (UnionExpr);

β–‘ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡ ΠΏΡƒΡ‚Π΅ΠΉ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ (PathExpr);

β–‘ ΠΏΡƒΡ‚ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ (LocationPath), Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ мноТСств (FilterExpr), ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡƒΡ‚ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ (RelativeLocationPath).

По этой схСмС нСслоТно Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ΡΡ‚Π°Ρ€ΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ β€” Ρ‡Π΅ΠΌ Π½ΠΈΠΆΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ находится Π² этой ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ, Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚. Для ΠΏΠΎΠ»Π½ΠΎΠΉ ясности, пСрСчислим ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² порядкС ΡΡ‚Π°Ρ€ΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΎΡ‚ ΡΡ‚Π°Ρ€ΡˆΠΈΡ…, с большим ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ, ΠΊ младшим, с мСньшим ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ выполнСния:

β–‘ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с путями Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ;

β–‘ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ объСдинСния мноТСств (|);

β–‘ ΡƒΠ½Π°Ρ€Π½Π°Ρ опСрация отрицания (-);

β–‘ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ вычислСниС остатка ΠΎΡ‚ дСлСния (*, div ΠΈ mod);

β–‘ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ слоТСния ΠΈ вычитания (+ ΠΈ -);

β–‘ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ сравнСния (<, >, <=, =>);

β–‘ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ равСнства ΠΈ нСравСнства (= ΠΈ !=);

β–‘ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ "ΠΈ" (and);

β–‘ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ "ΠΈΠ»ΠΈ" (or).

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ порядка ΠΈΠΌΠ΅ΡŽΡ‚ Π»Π΅Π²ΡƒΡŽ Π°ΡΡΠΎΡ†ΠΈΠ°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с опСрациями сравнСния (3 > 2 > 1 Ρ€Π°Π²Π½ΠΎΡΠΈΠ»ΡŒΠ½ΠΎ (3 > 2) >1).

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

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

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ XPath. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² XSLT, Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅, Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈ ΠΈΡ… созданиС Π²ΠΎΠΎΠ±Ρ‰Π΅ являСтся достаточно слоТной Ρ‚Π΅ΠΌΠΎΠΉ, вынСсСнной Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Π³Π»Π°Π²Ρƒ.

ΠŸΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, рассмотрим синтаксис ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²Π°. Он описываСтся ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ FunctionCall:

[XP16] FunctionCall ::= FunctionName

                        '(' ( Argument ( ',' Argument )* )? ')'

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

Ρ‚ΠΈΠΏ1 Ρ„ункция(Ρ‚ΠΈΠΏ2, Ρ‚ΠΈΠΏ3, Ρ‚ΠΈΠΏ4?)

Π³Π΄Π΅ Ρ‚ΠΈΠΏ1 β€” Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния, Ρ‚ΠΈΠΏ2, Ρ‚ΠΈΠΏ3, Ρ‚ΠΈΠΏ4 β€” Ρ‚ΠΈΠΏΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², символ "?" ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡƒΡ‰Π΅Π½. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован символ * для обозначСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ нСсколько Ρ€Π°Π·. НапримСр,