| XPath2 | ::= | QueryList <EOF> |
| QueryList | ::= | Module ( <QuerySeparator> ( Module )? )* |
| Module | ::= | ( VersionDecl )? ( MainModule | LibraryModule ) |
| VersionDecl | ::= | <XQueryVersion> ( <StringLiteralForProlog> | <URILiteral> ) ( <XQueryEncoding> ( <StringLiteralForProlog> | <URILiteral> ) )? Separator |
| MainModule | ::= | Prolog QueryBody |
| LibraryModule | ::= | ModuleDecl Prolog |
| ModuleDecl | ::= | <ModuleNamespace> <NCNameForProlog> <AssignEquals> <URILiteral> Separator |
| Prolog | ::= | ( ( Setter | Import | NamespaceDecl | DefaultNamespaceDecl ) Separator )* ( ( VarDecl | FunctionDecl | OptionDecl | FTOptionDecl ) Separator )* |
| Setter | ::= | ( BoundarySpaceDecl | DefaultCollationDecl | BaseURIDecl | ConstructionDecl | OrderingModeDecl | EmptyOrderDecl | CopyNamespacesDecl ) |
| Import | ::= | ( SchemaImport | ModuleImport ) |
| Separator | ::= | <SemiColon> |
| NamespaceDecl | ::= | <DeclareNamespace> <NCNameForProlog> <AssignEquals> <URILiteral> |
| BoundarySpaceDecl | ::= | <DeclareXMLSpace> ( <Preserve> | <Strip> ) |
| DefaultNamespaceDecl | ::= | ( <DeclareDefaultElement> | <DeclareDefaultFunction> ) <Namespace> <URILiteral> |
| OptionDecl | ::= | <DeclareOption> <QNameForProlog> ( <StringLiteralForProlog> | <URILiteral> ) |
| FTOptionDecl | ::= | <DeclareFTOption> FTMatchOption |
| OrderingModeDecl | ::= | <DeclareOrdering> ( <Ordered> | <Unordered> ) |
| EmptyOrderDecl | ::= | <DeclareDefaultOrder> ( <EmptyGreatestForProlog> | <EmptyLeastForProlog> ) |
| CopyNamespacesDecl | ::= | <DeclareCopyNamespace> PreserveMode <CommaForProlog> InheritMode |
| PreserveMode | ::= | ( <Preserve> | <NoPreserve> ) |
| InheritMode | ::= | ( <Inherit> | <NoInherit> ) |
| DefaultCollationDecl | ::= | <DeclareCollation> <URILiteral> |
| BaseURIDecl | ::= | <DeclareBaseURI> <URILiteral> |
| SchemaImport | ::= | <ImportSchemaToken> ( SchemaPrefix )? <URILiteral> ( <AtURILiteral> ( <CommaForProlog> <URILiteral> )* )? |
| SchemaPrefix | ::= | ( ( <Namespace> <NCNameForProlog> <AssignEquals> ) | ( <DefaultElement> <Namespace> ) ) |
| ModuleImport | ::= | <ImportModuleToken> ( <Namespace> <NCNameForProlog> <AssignEquals> )? <URILiteral> ( <AtURILiteral> ( <CommaForProlog> <URILiteral> )* )? |
| VarDecl | ::= | <DefineVariable> <VariableIndicatorForProlog> <QNameForProlog> ( TypeDeclaration )? ( ( <ColonEqualsForProlog> ExprSingle ) | <External> ) |
| ConstructionDecl | ::= | <DeclareConstruction> ( <Strip> | <Preserve> ) |
| FunctionDecl | ::= | ( <DefineFunction> ) <QNameForProlog> <LparForProlog> ( ParamList )? <Rpar> ( <AsForProlog> SequenceType )? ( EnclosedExpr | <External> ) |
| ParamList | ::= | Param ( ( <Comma> | <CommaForProlog> ) Param )* |
| Param | ::= | <VariableIndicatorForProlog> <QNameForProlog> ( TypeDeclaration )? |
| EnclosedExpr | ::= | ( <Lbrace> | <LbraceExprEnclosure> | <LbraceExprEnclosureForProlog> ) Expr <Rbrace> |
| QueryBody | ::= | ( Expr ) |
| Expr | ::= | ExprSingle ( <Comma> ExprSingle )* |
| ExprSingle | ::= | ( FLWORExpr | QuantifiedExpr | TypeswitchExpr | IfExpr | OrExpr ) |
| FLWORExpr | ::= | ( ( ForClause | LetClause ) )+ ( WhereClause )? ( OrderByClause )? ( <Return> ) ExprSingle |
| ForClause | ::= | <ForVariable> <VarName> ( TypeDeclaration )? ( PositionalVar )? ( FTScoreVar )? <In> ExprSingle ( <Comma> <VariableIndicator> <VarName> ( TypeDeclaration )? ( PositionalVar )? ( FTScoreVar )? <In> ExprSingle )* |
| PositionalVar | ::= | <AtWord> <VariableIndicator> <VarName> |
| FTScoreVar | ::= | <FTScoreVariable> <VarName> |
| LetClause | ::= | ( ( <LetVariable> <VarName> ( TypeDeclaration )? ( FTScoreVar )? ) | ( <FTLetScoreVariable> <VarName> ) ) <ColonEquals> ExprSingle ( <Comma> ( ( <VariableIndicator> <VarName> ( TypeDeclaration )? ( FTScoreVar )? ) | FTScoreVar ) <ColonEquals> ExprSingle )* |
| WhereClause | ::= | <Where> ExprSingle |
| OrderByClause | ::= | ( <OrderBy> | <OrderByStable> ) OrderSpecList |
| OrderSpecList | ::= | OrderSpec ( <Comma> OrderSpec )* |
| OrderSpec | ::= | ExprSingle OrderModifier |
| OrderModifier | ::= | ( ( <Ascending> | <Descending> ) )? ( ( <EmptyGreatest> | <EmptyLeast> ) )? ( <Collation> <URILiteralToOperator> )? |
| QuantifiedExpr | ::= | ( <Some> | <Every> ) <VarName> ( TypeDeclaration )? <In> ExprSingle ( <Comma> <VariableIndicator> <VarName> ( TypeDeclaration )? <In> ExprSingle )* <Satisfies> ExprSingle |
| TypeswitchExpr | ::= | <TypeswitchLpar> Expr <Rpar> ( CaseClause )+ <Default> ( <VariableIndicator> <VarName> )? ( <Return> ) ExprSingle |
| CaseClause | ::= | <Case> ( <VariableIndicatorForCase> <VarName> <As> )? SequenceType ( <Return> ) ExprSingle |
| IfExpr | ::= | <IfLpar> Expr <Rpar> <Then> ExprSingle <Else> ExprSingle |
| OperatorExpr | ::= | OrExpr |
| OrExpr | ::= | AndExpr ( <Or> AndExpr )* |
| AndExpr | ::= | ComparisonExpr ( <And> ComparisonExpr )* |
| ComparisonExpr | ::= | FTContainsExpr ( ( ValueComp | GeneralComp | NodeComp ) FTContainsExpr )? |
| FTContainsExpr | ::= | RangeExpr ( <FTContainsIndicator> FTSelection ( FTIgnoreOption )? )? |
| RangeExpr | ::= | AdditiveExpr ( <To> AdditiveExpr )? |
| AdditiveExpr | ::= | MultiplicativeExpr ( ( <Plus> | <Minus> ) MultiplicativeExpr )* |
| MultiplicativeExpr | ::= | UnionExpr ( ( <Multiply> | <Div> | <Idiv> | <Mod> ) UnionExpr )* |
| UnionExpr | ::= | IntersectExceptExpr ( ( <Union> | <Vbar> ) IntersectExceptExpr )* |
| IntersectExceptExpr | ::= | InstanceofExpr ( ( <Intersect> | <Except> ) InstanceofExpr )* |
| InstanceofExpr | ::= | TreatExpr ( <Instanceof> SequenceType )? |
| TreatExpr | ::= | CastableExpr ( <TreatAs> SequenceType )? |
| CastableExpr | ::= | CastExpr ( <Castable> SingleType )? |
| CastExpr | ::= | UnaryExpr ( <CastAs> SingleType )? |
| UnaryExpr | ::= | ( <UnaryMinus> | <UnaryPlus> )* ValueExpr |
| ValueExpr | ::= | ( ValidateExpr | PathExpr | ExtensionExpr ) |
| GeneralComp | ::= | ( <Equals> | <NotEquals> | <Lt> | <LtEquals> | <Gt> | <GtEquals> ) |
| ValueComp | ::= | ( <FortranEq> | <FortranNe> | <FortranLt> | <FortranLe> | <FortranGt> | <FortranGe> ) |
| NodeComp | ::= | ( <Is> | <LtLt> | <GtGt> ) |
| ValidateExpr | ::= | ( <ValidateLbrace> | ( <ValidateSchemaMode> <LbraceExprEnclosure> ) ) Expr <Rbrace> |
| ExtensionExpr | ::= | ( Pragma )+ <LbraceExprEnclosure> ( Expr )? <Rbrace> |
| Pragma | ::= | <PragmaOpen> ( <S> )? <QNameForPragma> PragmaContents <PragmaClose> |
| PragmaContents | ::= | ( <ExtensionContentChar> )* |
| PathExpr | ::= | ( ( <Root> ( RelativePathExpr )? ) | ( <RootDescendants> RelativePathExpr ) | RelativePathExpr ) |
| RelativePathExpr | ::= | StepExpr ( ( <Slash> | <SlashSlash> ) StepExpr )* |
| StepExpr | ::= | ( AxisStep | FilterExpr ) |
| AxisStep | ::= | ( ForwardStep | ReverseStep ) PredicateList |
| ForwardStep | ::= | ( ( ForwardAxis NodeTest ) | AbbrevForwardStep ) |
| ForwardAxis | ::= | ( <AxisChild> | <AxisDescendant> | <AxisAttribute> | <AxisSelf> | <AxisDescendantOrSelf> | <AxisFollowingSibling> | <AxisFollowing> ) |
| AbbrevForwardStep | ::= | ( <At> )? NodeTest |
| ReverseStep | ::= | ( ( ReverseAxis NodeTest ) | AbbrevReverseStep ) |
| ReverseAxis | ::= | ( <AxisParent> | <AxisAncestor> | <AxisPrecedingSibling> | <AxisPreceding> | <AxisAncestorOrSelf> ) |
| AbbrevReverseStep | ::= | <DotDot> |
| NodeTest | ::= | ( KindTest | NameTest ) |
| NameTest | ::= | ( <QName> | Wildcard ) |
| Wildcard | ::= | ( <Star> | <NCNameColonStar> | <StarColonNCName> ) |
| FilterExpr | ::= | PrimaryExpr PredicateList |
| PredicateList | ::= | ( Predicate )* |
| Predicate | ::= | <Lbrack> Expr <Rbrack> |
| PrimaryExpr | ::= | ( Literal | VarRef | ParenthesizedExpr | ContextItemExpr | FunctionCall | Constructor | OrderedExpr | UnorderedExpr ) |
| Literal | ::= | ( NumericLiteral | <StringLiteral> ) |
| NumericLiteral | ::= | ( <IntegerLiteral> | <DecimalLiteral> | <DoubleLiteral> ) |
| VarRef | ::= | <VariableIndicator> <VarName> |
| ParenthesizedExpr | ::= | <Lpar> ( Expr )? <Rpar> |
| ContextItemExpr | ::= | <Dot> |
| OrderedExpr | ::= | <OrderedOpen> Expr <Rbrace> |
| UnorderedExpr | ::= | <UnorderedOpen> Expr <Rbrace> |
| FunctionCall | ::= | ( <QNameLpar> ) ( ExprSingle ( <Comma> ExprSingle )* )? <Rpar> |
| Constructor | ::= | ( DirectConstructor | ComputedConstructor ) |
| DirectConstructor | ::= | ( DirElemConstructor | DirCommentConstructor | DirPIConstructor ) |
| DirElemConstructor | ::= | ( <StartTagOpenRoot> | <StartTagOpen> ) <TagQName> DirAttributeList ( <EmptyTagClose> | ( <StartTagClose> ( DirElemContent )* <EndTagOpen> <TagQName> ( <S> )? <EndTagClose> ) ) |
| DirAttributeList | ::= | ( <S> ( <TagQName> ( <S> )? <ValueIndicator> ( <S> )? DirAttributeValue )? )* |
| DirAttributeValue | ::= | ( ( <OpenQuot> ( ( <EscapeQuot> | QuotAttrValueContent ) )* <CloseQuot> ) | ( <OpenApos> ( ( <EscapeApos> | AposAttrValueContent ) )* <CloseApos> ) ) |
| QuotAttrValueContent | ::= | ( <QuotAttrContentChar> | CommonContent ) |
| AposAttrValueContent | ::= | ( <AposAttrContentChar> | CommonContent ) |
| DirElemContent | ::= | ( DirectConstructor | <ElementContentChar> | CDataSection | CommonContent ) |
| CommonContent | ::= | ( <PredefinedEntityRef> | <CharRef> | <LCurlyBraceEscape> | <RCurlyBraceEscape> | EnclosedExpr ) |
| DirCommentConstructor | ::= | ( <XmlCommentStartForElementContent> | <XmlCommentStart> ) DirCommentContents <XmlCommentEnd> |
| DirCommentContents | ::= | ( ( <CommentContentChar> | <CommentContentCharDash> ) )* |
| DirPIConstructor | ::= | ( <ProcessingInstructionStartForElementContent> | <ProcessingInstructionStart> ) <PITarget> ( <SForPI> DirPIContents )? <ProcessingInstructionEnd> |
| DirPIContents | ::= | ( <PIContentChar> )* |
| CDataSection | ::= | ( <CdataSectionStartForElementContent> | <CdataSectionStart> ) CDataSectionContents <CdataSectionEnd> |
| CDataSectionContents | ::= | ( <CDataSectionChar> )* |
| ComputedConstructor | ::= | ( CompDocConstructor | CompElemConstructor | CompAttrConstructor | CompTextConstructor | CompCommentConstructor | CompPIConstructor ) |
| CompDocConstructor | ::= | <DocumentLbrace> Expr <Rbrace> |
| CompElemConstructor | ::= | ( <ElementQNameLbrace> | ( <ElementLbrace> Expr <Rbrace> <LbraceExprEnclosure> ) ) ( ContentExpr )? <Rbrace> |
| ContentExpr | ::= | Expr |
| CompAttrConstructor | ::= | ( <AttributeQNameLbrace> | ( <AttributeLbrace> Expr <Rbrace> <LbraceExprEnclosure> ) ) ( Expr )? <Rbrace> |
| CompTextConstructor | ::= | <TextLbrace> Expr <Rbrace> |
| CompCommentConstructor | ::= | <CommentLbrace> Expr <Rbrace> |
| CompPIConstructor | ::= | ( <PINCNameLbrace> | ( <PILbrace> Expr <Rbrace> <LbraceExprEnclosure> ) ) ( Expr )? <Rbrace> |
| SingleType | ::= | AtomicType ( <Optional> )? |
| TypeDeclaration | ::= | ( <As> | <AsForProlog> ) SequenceType |
| SequenceType | ::= | ( ( ItemType ( OccurrenceIndicator )? ) | <EmptySeqTok> ) |
| OccurrenceIndicator | ::= | ( <OccurrenceZeroOrOne> | <OccurrenceZeroOrMore> | <OccurrenceOneOrMore> ) |
| ItemType | ::= | ( AtomicType | KindTest | <Item> ) |
| AtomicType | ::= | ( <QNameForSingleType> | <QNameForAtomicType> | <QNameForSequenceType> ) |
| KindTest | ::= | ( DocumentTest | ElementTest | AttributeTest | SchemaElementTest | SchemaAttributeTest | PITest | CommentTest | TextTest | AnyKindTest ) |
| AnyKindTest | ::= | ( <NodeLpar> | <NodeLparForKindTest> ) <RparForKindTest> |
| DocumentTest | ::= | ( <DocumentLpar> | <DocumentLparForKindTest> ) ( ( ElementTest | SchemaElementTest ) )? <RparForKindTest> |
| TextTest | ::= | ( <TextLpar> | <TextLparForKindTest> ) <RparForKindTest> |
| CommentTest | ::= | ( <CommentLpar> | <CommentLparForKindTest> ) <RparForKindTest> |
| PITest | ::= | ( <ProcessingInstructionLpar> | <ProcessingInstructionLparForKindTest> ) ( ( <NCNameForPI> | <StringLiteralForKindTest> ) )? <RparForKindTest> |
| AttributeTest | ::= | ( <AttributeType> | <AttributeTypeForKindTest> ) ( ( AttribNameOrWildcard ( <CommaForKindTest> TypeName )? ) )? <RparForKindTest> |
| AttribNameOrWildcard | ::= | ( AttributeName | <AnyName> ) |
| SchemaAttributeTest | ::= | ( <SchemaAttributeType> | <SchemaAttributeTypeForKindTest> ) AttributeDeclaration <RparForKindTest> |
| AttributeDeclaration | ::= | AttributeName |
| ElementTest | ::= | ( <ElementType> | <ElementTypeForKindTest> | <ElementTypeForDocumentTest> ) ( ( ElementNameOrWildcard ( <CommaForKindTest> TypeName ( <Nillable> )? )? ) )? <RparForKindTest> |
| ElementNameOrWildcard | ::= | ( ElementName | <AnyName> ) |
| SchemaElementTest | ::= | ( <SchemaElementType> | <SchemaElementTypeForKindTest> | <SchemaElementTypeForDocumentTest> ) ElementDeclaration <RparForKindTest> |
| ElementDeclaration | ::= | ElementName |
| AttributeName | ::= | <QNameForItemType> |
| ElementName | ::= | <QNameForItemType> |
| TypeName | ::= | <QNameForItemType> |
| FTSelection | ::= | FTOr ( ( FTMatchOption | FTProximity ) )* ( <FTWeightIndicator> <DecimalLiteral> )? |
| FTOrExpr | ::= | FTOr |
| FTOr | ::= | FTAnd ( <FTOrIndicator> FTAnd )* |
| FTAnd | ::= | FTMildnot ( <FTAndIndicator> FTMildnot )* |
| FTMildnot | ::= | FTUnaryNot ( <FTMildnotIndicator> FTUnaryNot )* |
| FTUnaryNot | ::= | ( <FTUnaryNotIndicator> )? FTWordsSelection |
| FTWordsSelection | ::= | ( FTWords | ( <Lpar> FTSelection <Rpar> ) ) |
| FTWords | ::= | ( Literal | VarRef | ContextItemExpr | FunctionCall | ( <LbraceExprEnclosure> Expr <Rbrace> ) ) ( FTAnyallOption )? |
| FTProximity | ::= | ( <FTOrderedIndicator> | FTWindow | FTDistance | FTTimes | FTScope | FTContent ) |
| FTMatchOption | ::= | ( FTCaseOption | FTDiacriticsOption | FTStemOption | FTThesaurusOption | FTStopwordOption | FTLanguageOption | FTWildCardOption ) |
| FTCaseOption | ::= | ( <FTLowercaseIndicator> | <FTUppercaseIndicator> | <FTCasesensitiveIndicator> | <FTCaseinsensitiveIndicator> ) |
| FTDiacriticsOption | ::= | ( <FTWithdiacriticsIndicator> | <FTWithoutdiacriticsIndicator> | <FTDiacriticsensitiveIndicator> | <FTDiacriticinsensitiveIndicator> ) |
| FTStemOption | ::= | ( <FTWithstemIndicator> | <FTWithoutstemIndicator> ) |
| FTThesaurusOption | ::= | ( ( <FTWithThesaurusIndicator> ( FTThesaurusID | <Default> ) ) | ( <FTWithThesaurusIndicatorGroup> ( FTThesaurusID | <Default> ) ( <Comma> FTThesaurusID )* <Rpar> ) | <FTWithoutThesaurusIndicator> ) |
| FTThesaurusID | ::= | <FTAtStringLiteralIndicator> ( <FTRelationshipIndicator> )? ( FTRange <FTLevelsIndicator> )? |
| FTStopwordOption | ::= | ( ( <FTWithstopwordsIndicator> FTRefOrList ( FTInclExclStringLiteral )* ) | <FTWithoutstopwordsIndicator> | ( <FTWithDefaultstopwordsIndicator> ( FTInclExclStringLiteral )* ) ) |
| FTRefOrList | ::= | ( <FTAtStringLiteralIndicator> | ( <Lpar> <StringLiteral> ( <Comma> <StringLiteral> )* <Rpar> ) ) |
| FTInclExclStringLiteral | ::= | ( <Union> | <Except> ) FTRefOrList |
| FTLanguageOption | ::= | <FTLanguageIndicator> <StringLiteral> |
| FTWildCardOption | ::= | ( <FTWithWildcardIndicator> | <FTWithoutWildcardIndicator> ) |
| FTContent | ::= | ( <FTStartIndicator> | <FTEndIndicator> | <FTEntireIndicator> ) |
| FTAnyallOption | ::= | ( <FTAnyIndicator> | <FTAllIndicator> | <FTPhraseIndicator> | <FTAnywordIndicator> | <FTAllwordIndicator> ) |
| FTRange | ::= | ( ( <FTExactlyIndicator> UnionExpr ) | ( <FTAtleastIndicator> UnionExpr ) | ( <FTAtmostIndicator> UnionExpr ) | ( <FTFromIndicator> UnionExpr <To> UnionExpr ) ) |
| FTDistance | ::= | <FTDistanceIndicator> FTRange FTUnit |
| FTWindow | ::= | <FTWindowIndicator> UnionExpr FTUnit |
| FTTimes | ::= | <FTOccurrencesIndicator> FTRange <FTTimesIndicator> |
| FTScope | ::= | ( <FTSameIndicator> | <FTDifferentIndicator> ) FTBigUnit |
| FTUnit | ::= | ( <FTWordsIndicator> | <FTSentencesIndicator> | <FTParagraphsIndicator> ) |
| FTBigUnit | ::= | ( <FTSentenceIndicator> | <FTParagraphIndicator> ) |
| FTIgnoreOption | ::= | <FTIgnoreIndicator> UnionExpr |