XPath 3.1 Grammar

XPath::=Expr
AbbrevForwardStep::="@" NodeTest
AbbrevReverseStep::=".."
AnyArrayTest::="array" "(" "*" ")"
AnyFunctionTest::="function" "(" "*" ")"
AnyKindTest::="node" "(" ")"
AnyMapTest::="map" "(" "*" ")"
Argument::=(ExprSingle | ArgumentPlaceholder)
ArgumentList::="(" (Argument ("," Argument)) ")"
ArgumentPlaceholder::="?"
ArrayConstructor::=(SquareArrayConstructor | CurlyArrayConstructor)
ArrayTest::=(AnyArrayTest | TypedArrayTest)
ArrowFunctionSpecifier::=(EQName | VarRef | ParenthesizedExpr)
AtomicOrUnionType::=_QName_or_EQName
AttribNameOrWildcard::=(AttributeName | "*")
AttributeDeclaration::=AttributeName
AttributeName::=_QName_or_EQName
AttributeTest::="attribute" "(" (AttribNameOrWildcard ("," TypeName)) ")"
AxisStep::=(ReverseStep | ForwardStep) PredicateList
BaseChar::=[AA–ZZ aa–zz ÀÀ–ÖÖ ØØ–öö øø–ÿÿ ĀĀ–ıı ĴĴ–ľľ ŁŁ–ňň ŊŊ–žž ƀƀ–ǃǃ ǍǍ–ǰǰ ǴǴ–ǵǵ ǺǺ–ȗȗ ɐɐ–ʨʨ ʻʻ–ˁˁ ΆΆ ΈΈ–ΊΊ ΌΌ ΎΎ–ΡΡ ΣΣ–ώώ ϐϐ–ϖϖ ϚϚ ϜϜ ϞϞ ϠϠ ϢϢ–ϳϳ ЁЁ–ЌЌ ЎЎ–яя ёё–ќќ ўў–ҁҁ ҐҐ–ӄӄ ӇӇ–ӈӈ ӋӋ–ӌӌ ӐӐ–ӫӫ ӮӮ–ӵӵ ӸӸ–ӹӹ ԱԱ–ՖՖ ՙՙ աա–ֆֆ אא–תת װװ–ײײ ءء–غغ فف–يي ٱٱ–ڷڷ ںں–ھھ ۀۀ–ێێ ېې–ۓۓ ەە ۥۥ–ۦۦ अअ–हह ऽऽ क़क़–ॡॡ অঅ–ঌঌ এএ–ঐঐ ওও–নন পপ–রর লল শশ–হহ ড়ড়–ঢ়ঢ় য়য়–ৡৡ ৰৰ–ৱৱ ਅਅ–ਊਊ ਏਏ–ਐਐ ਓਓ–ਨਨ ਪਪ–ਰਰ ਲਲ–ਲ਼ਲ਼ ਵਵ–ਸ਼ਸ਼ ਸਸ–ਹਹ ਖ਼ਖ਼–ੜੜ ਫ਼ਫ਼ ੲੲ–ੴੴ અઅ–ઋઋ ઍઍ એએ–ઑઑ ઓઓ–નન પપ–રર લલ–ળળ વવ–હહ ઽઽ ૠૠ ଅଅ–ଌଌ ଏଏ–ଐଐ ଓଓ–ନନ ପପ–ରର ଲଲ–ଳଳ ଶଶ–ହହ ଽଽ ଡ଼ଡ଼–ଢ଼ଢ଼ ୟୟ–ୡୡ அஅ–ஊஊ எஎ–ஐஐ ஒஒ–கக ஙங–சச ஜஜ ஞஞ–டட ணண–தத நந–பப மம–வவ ஷஷ–ஹஹ అఅ–ఌఌ ఎఎ–ఐఐ ఒఒ–నన పప–ళళ వవ–హహ ౠౠ–ౡౡ ಅಅ–ಌಌ ಎಎ–ಐಐ ಒಒ–ನನ ಪಪ–ಳಳ ವವ–ಹಹ ೞೞ ೠೠ–ೡೡ അഅ–ഌഌ എഎ–ഐഐ ഒഒ–നന പപ–ഹഹ ൠൠ–ൡൡ กก–ฮฮ ะะ าา–ำำ เเ–ๅๅ ກກ–ຂຂ ຄຄ ງງ–ຈຈ ຊຊ ຍຍ ດດ–ທທ ນນ–ຟຟ ມມ–ຣຣ ລລ ວວ ສສ–ຫຫ ອອ–ຮຮ ະະ າາ–ຳຳ ຽຽ ເເ–ໄໄ ཀཀ–ཇཇ ཉཉ–ཀྵཀྵ ႠႠ–ჅჅ აა–ჶჶ ᄀᄀ ᄂᄂ–ᄃᄃ ᄅᄅ–ᄇᄇ ᄉᄉ ᄋᄋ–ᄌᄌ ᄎᄎ–ᄒᄒ ᄼᄼ ᄾᄾ ᅀᅀ ᅌᅌ ᅎᅎ ᅐᅐ ᅔᅔ–ᅕᅕ ᅙᅙ ᅟᅟ–ᅡᅡ ᅣᅣ ᅥᅥ ᅧᅧ ᅩᅩ ᅭᅭ–ᅮᅮ ᅲᅲ–ᅳᅳ ᅵᅵ ᆞᆞ ᆨᆨ ᆫᆫ ᆮᆮ–ᆯᆯ ᆷᆷ–ᆸᆸ ᆺᆺ ᆼᆼ–ᇂᇂ ᇫᇫ ᇰᇰ ᇹᇹ ḀḀ–ẛẛ ẠẠ–ỹỹ ἀἀ–ἕἕ ἘἘ–ἝἝ ἠἠ–ὅὅ ὈὈ–ὍὍ ὐὐ–ὗὗ ὙὙ ὛὛ ὝὝ ὟὟ–ώώ ᾀᾀ–ᾴᾴ ᾶᾶ–ᾼᾼ ιι ῂῂ–ῄῄ ῆῆ–ῌῌ ῐῐ–ΐΐ ῖῖ–ΊΊ ῠῠ–ῬῬ ῲῲ–ῴῴ ῶῶ–ῼῼ ΩΩ KK–ÅÅ ℮℮ ↀↀ–ↂↂ ぁぁ–ゔゔ ァァ–ヺヺ ㄅㄅ–ㄬㄬ 가가–힣힣 ]
BracedURILiteral::="Q" "{" ([{}]) "}"
Char::=[	 
 
   –� ]
CombiningChar::=[̀–ͅ ͠–͡ ҃–҆ ֑–֡ ֣–ֹ ֻ–ֽ ֿ ׁ–ׂ ׄ ً–ْ ٰ ۖ–ۜ ۝–۟ ۠–ۤ ۧ–ۨ ۪–ۭ ँ–ः ़ ा–ौ ् ॑–॔ ॢ–ॣ ঁ–ঃ ় া ি ী–ৄ ে–ৈ ো–্ ৗ ৢ–ৣ ਂ ਼ ਾ ਿ ੀ–ੂ ੇ–ੈ ੋ–੍ ੰ–ੱ ઁ–ઃ ઼ ા–ૅ ે–ૉ ો–્ ଁ–ଃ ଼ ା–ୃ େ–ୈ ୋ–୍ ୖ–ୗ ஂ–ஃ ா–ூ ெ–ை ொ–் ௗ ఁ–ః ా–ౄ ె–ై ొ–్ ౕ–ౖ ಂ–ಃ ಾ–ೄ ೆ–ೈ ೊ–್ ೕ–ೖ ം–ഃ ാ–ൃ െ–ൈ ൊ–് ൗ ั ิ–ฺ ็–๎ ັ ິ–ູ ົ–ຼ ່–ໍ ༘–༙ ༵ ༷ ༹ ༾ ༿ ཱ–྄ ྆–ྋ ྐ–ྕ ྗ ྙ–ྭ ྱ–ྷ ྐྵ ⃐–⃜ ⃡ 〪–〯 ゙ ゚ ]
Comment::=CommentStart (CommentContents | Comment) CommentEnd
CommentContent::=Char
CommentContents::=CommentContent
CommentEnd::=":)"
CommentStart::="(:"
CommentTest::="comment" "(" ")"
ContextItemExpr::="."
CurlyArrayConstructor::="array" EnclosedExpr
DecimalLiteral::=(("." Digits) | (Digits "." [0–9]))
Digit::=[00–99 ٠٠–٩٩ ۰۰–۹۹ ००–९९ ০০–৯৯ ੦੦–੯੯ ૦૦–૯૯ ୦୦–୯୯ ௧௧–௯௯ ౦౦–౯౯ ೦೦–೯೯ ൦൦–൯൯ ๐๐–๙๙ ໐໐–໙໙ ༠༠–༩༩ ]
Digits::=[0–9]
DocumentTest::="document-node" "(" (ElementTest | SchemaElementTest) ")"
DoubleLiteral::=(("." Digits) | (Digits ("." [0–9]))) [eE] [+-] Digits
ElementDeclaration::=ElementName
ElementName::=_QName_or_EQName
ElementNameOrWildcard::=(ElementName | "*")
ElementTest::="element" "(" (ElementNameOrWildcard ("," TypeName "?")) ")"
EnclosedExpr::=Lbrace Expr Rbrace
EQName::=(QName | URIQualifiedName)
EscapeApos::="''"
EscapeQuot::=""""
Expr::=ExprSingle ("," ExprSingle)
ExprSingle::=(ForExpr | LetExpr | QuantifiedExpr | IfExpr | OrExpr)
Extender::=[·· ːː ˑˑ ·· ــ ๆๆ ໆໆ 々々 〱〱–〵〵 ゝゝ–ゞゞ ーー–ヾヾ ]
ForExpr::=SimpleForClause "return" ExprSingle
ForwardAxis::=(("child" "::") | ("descendant" "::") | ("attribute" "::") | ("self" "::") | ("descendant-or-self" "::") | ("following-sibling" "::") | ("following" "::") | ("namespace" "::"))
ForwardStep::=((ForwardAxis NodeTest) | AbbrevForwardStep)
FunctionBody::=EnclosedExpr
FunctionCall::=_Function_QName_or_EQName (ArgumentList)
FunctionEQName::=(FunctionQName | URIQualifiedName)
FunctionItemExpr::=(NamedFunctionRef | InlineFunctionExpr)
FunctionQName::=(QNameToken | "ancestor" | "ancestor-or-self" | "and" | "as" | "cast" | "castable" | "child" | "descendant" | "descendant-or-self" | "div" | "else" | "eq" | "every" | "except" | "following" | "following-sibling" | "for" | "ge" | "gt" | "idiv" | "in" | "instance" | "intersect" | "is" | "le" | "let" | "lt" | "mod" | "namespace" | "ne" | "of" | "or" | "parent" | "preceding" | "preceding-sibling" | "return" | "satisfies" | "self" | "some" | "then" | "to" | "treat" | "union")
FunctionTest::=(AnyFunctionTest | TypedFunctionTest)
GeneralComp::=("=" | "!=" | LeftAngleBracket | "<=" | ">" | ">=")
Ideographic::=[&#x4e00;一–&#x9fa5;龥 &#x3007;〇 &#x3021;〡–&#x3029;〩 ]
IfExpr::="if" "(" Expr ")" "then" ExprSingle "else" ExprSingle
ImplicitlyAllowedWhitespace::=WhitespaceChar
InlineFunctionExpr::="function" "(" ParamList ")" ("as" SequenceType) FunctionBody
IntegerLiteral::=Digits
ItemType::=(KindTest | ("item" "(" ")") | FunctionTest | MapTest | ArrayTest | AtomicOrUnionType | ParenthesizedItemType)
KeySpecifier::=(NCName | IntegerLiteral | ParenthesizedExpr | "*")
KindTest::=(DocumentTest | ElementTest | AttributeTest | SchemaElementTest | SchemaAttributeTest | PITest | CommentTest | TextTest | NamespaceNodeTest | AnyKindTest)
Lbrace::="{"
LeftAngleBracket::="<"
LetExpr::=SimpleLetClause "return" ExprSingle
Letter::=(BaseChar | Ideographic)
Literal::=(NumericLiteral | StringLiteral)
LocalPart::=NCNameTok
Lookup::="?" KeySpecifier
MapConstructor::="map" Lbrace (MapConstructorEntry ("," MapConstructorEntry)) Rbrace
MapConstructorEntry::=MapKeyExpr ":" MapValueExpr
MapKeyExpr::=ExprSingle
MapTest::=(AnyMapTest | TypedMapTest)
MapValueExpr::=ExprSingle
Minus::="-"
NamedFunctionRef::=_Function_QName_or_EQName "#" IntegerLiteral
NamespaceNodeTest::="namespace-node" "(" ")"
NameTest::=(_QName_or_EQName | Wildcard)
NCName::=QName
NCNameColonStar::=NCNameTok ":*"
NCNameTok::=Nmstart Nmchar
Nmchar::=(Letter | CombiningChar | Extender | Digit | "." | "-" | "_")
Nmstart::=(Letter | "_")
NodeComp::=("is" | "<<" | ">>")
NodeTest::=(KindTest | NameTest)
NumericLiteral::=(IntegerLiteral | DecimalLiteral | DoubleLiteral)
NumericLiteralError::=(("." Digits) | (Digits ("." [0–9]))) ([eE] [+-] Digits) [a–zA–Z]
OccurrenceIndicator::=("?" | "*" | Plus)
Param::="$" _QName_or_EQName TypeDeclaration
ParamList::=Param ("," Param)
ParenthesizedExpr::="(" Expr ")"
ParenthesizedItemType::="(" ItemType ")"
PathExpr::=((Slash RelativePathExpr) | (SlashSlash RelativePathExpr) | RelativePathExpr)
PITest::="processing-instruction" "(" (NCName | StringLiteral) ")"
Plus::="+"
PostfixExpr::=PrimaryExpr (Predicate | ArgumentList | Lookup)
Predicate::="[" Expr "]"
PredicateList::=Predicate
PrimaryExpr::=(Literal | VarRef | ParenthesizedExpr | ContextItemExpr | FunctionCall | FunctionItemExpr | MapConstructor | ArrayConstructor | UnaryLookup)
QName::=(FunctionQName | "array" | "attribute" | "comment" | "document-node" | "element" | "empty-sequence" | "function" | "if" | "item" | "map" | "namespace-node" | "node" | "processing-instruction" | "schema-attribute" | "schema-element" | "switch" | "text" | "typeswitch")
QNameToken::=(NCNameTok ":") LocalPart
QuantifiedExpr::=("some" | "every") "$" VarName "in" ExprSingle ("," "$" VarName "in" ExprSingle) "satisfies" ExprSingle
Rbrace::="}"
RelativePathExpr::=StepExpr ((Slash | SlashSlash) StepExpr)
ReverseAxis::=(("parent" "::") | ("ancestor" "::") | ("preceding-sibling" "::") | ("preceding" "::") | ("ancestor-or-self" "::"))
ReverseStep::=((ReverseAxis NodeTest) | AbbrevReverseStep)
SchemaAttributeTest::="schema-attribute" "(" AttributeDeclaration ")"
SchemaElementTest::="schema-element" "(" ElementDeclaration ")"
SequenceType::=(("empty-sequence" "(" ")") | (ItemType OccurrenceIndicator))
SimpleForBinding::="$" VarName "in" ExprSingle
SimpleForClause::="for" SimpleForBinding ("," SimpleForBinding)
SimpleLetBinding::="$" VarName ":=" ExprSingle
SimpleLetClause::="let" SimpleLetBinding ("," SimpleLetBinding)
SimpleMapExpr::=PathExpr ("!" PathExpr)
SimpleTypeName::=TypeName
SingleType::=SimpleTypeName "?"
Slash::="/"
SlashSlash::="//"
SquareArrayConstructor::="[" (ExprSingle ("," ExprSingle)) "]"
StarColonNCName::="*:" NCNameTok
StepExpr::=(PostfixExpr | AxisStep)
StringLiteral::=((""" (EscapeQuot | ["]) """) | ("'" (EscapeApos | [']) "'"))
TextTest::="text" "(" ")"
TypedArrayTest::="array" "(" SequenceType ")"
TypeDeclaration::="as" SequenceType
TypedFunctionTest::="function" "(" (SequenceType ("," SequenceType)) ")" "as" SequenceType
TypedMapTest::="map" "(" AtomicOrUnionType "," SequenceType ")"
TypeName::=_QName_or_EQName
UnaryLookup::="?" KeySpecifier
URIQualifiedName::=BracedURILiteral NCNameTok
URIQualifiedStar::=BracedURILiteral "*"
ValueComp::=("eq" | "ne" | "lt" | "le" | "gt" | "ge")
VarName::=_QName_or_EQName
VarRef::="$" VarName
WhitespaceChar::=[&#x0009; &#x000D; &#x000A; &#x0020; ]
Wildcard::=("*" | NCNameColonStar | StarColonNCName | URIQualifiedStar)