ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΡ ΡΠΈΠΏΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π²ΡΠ½Π΅ΡΠ΅Π½Π° Π²ΠΎ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΡΠ°ΠΉΠ» 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-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π±ΡΠ»Π° ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΠΉ, Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ·ΡΠΊΠ° ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠ°Π·Π±ΠΎΡΠ°.