XQuery ::= Module EOF Module ::= VersionDecl? ( LibraryModule | MainModule ) VersionDecl ::= 'xquery' ( 'encoding' StringLiteral | 'version' StringLiteral ( 'encoding' StringLiteral )? ) Separator LibraryModule ::= ModuleDecl Prolog ModuleDecl ::= 'module' 'namespace' NCName '=' URILiteral Separator Prolog ::= ( ( DefaultNamespaceDecl | Setter | NamespaceDecl | Import | FTOptionDecl ) Separator )* ( ( ContextItemDecl | AnnotatedDecl | OptionDecl ) Separator )* Separator ::= ';' Setter ::= BoundarySpaceDecl | DefaultCollationDecl | BaseURIDecl | ConstructionDecl | OrderingModeDecl | EmptyOrderDecl | RevalidationDecl | CopyNamespacesDecl | DecimalFormatDecl BoundarySpaceDecl ::= 'declare' 'boundary-space' ( 'preserve' | 'strip' ) DefaultCollationDecl ::= 'declare' 'default' 'collation' URILiteral BaseURIDecl ::= 'declare' 'base-uri' URILiteral ConstructionDecl ::= 'declare' 'construction' ( 'strip' | 'preserve' ) OrderingModeDecl ::= 'declare' 'ordering' ( 'ordered' | 'unordered' ) EmptyOrderDecl ::= 'declare' 'default' 'order' 'empty' ( 'greatest' | 'least' ) CopyNamespacesDecl ::= 'declare' 'copy-namespaces' PreserveMode ',' InheritMode PreserveMode ::= 'preserve' | 'no-preserve' InheritMode ::= 'inherit' | 'no-inherit' DecimalFormatDecl ::= 'declare' ( 'decimal-format' EQName | 'default' 'decimal-format' ) ( DFPropertyName '=' StringLiteral )* DFPropertyName ::= 'decimal-separator' | 'grouping-separator' | 'infinity' | 'minus-sign' | 'NaN' | 'percent' | 'per-mille' | 'zero-digit' | 'digit' | 'pattern-separator' Import ::= SchemaImport | ModuleImport SchemaImport ::= 'import' 'schema' SchemaPrefix? URILiteral ( 'at' URILiteral ( ',' URILiteral )* )? SchemaPrefix ::= 'namespace' NCName '=' | 'default' 'element' 'namespace' ModuleImport ::= 'import' 'module' ( 'namespace' NCName '=' )? URILiteral ( 'at' URILiteral ( ',' URILiteral )* )? NamespaceDecl ::= 'declare' 'namespace' NCName '=' URILiteral DefaultNamespaceDecl ::= 'declare' 'default' ( 'element' | 'function' ) 'namespace' URILiteral FTOptionDecl ::= 'declare' 'ft-option' FTMatchOptions AnnotatedDecl ::= 'declare' ( CompatibilityAnnotation | Annotation )* ( VarDecl | FunctionDecl | CollectionDecl | IndexDecl | ICDecl ) CompatibilityAnnotation ::= 'updating' Annotation ::= '%' EQName ( '(' Literal ( ',' Literal )* ')' )? VarDecl ::= 'variable' '$' VarName TypeDeclaration? ( ':=' VarValue | 'external' ( ':=' VarDefaultValue )? ) VarValue ::= ExprSingle VarDefaultValue ::= ExprSingle ContextItemDecl ::= 'declare' 'context' 'item' ( 'as' ItemType )? ( ':=' VarValue | 'external' ( ':=' VarDefaultValue )? ) ParamList ::= Param ( ',' Param )* Param ::= '$' EQName TypeDeclaration? FunctionBody ::= EnclosedExpr EnclosedExpr ::= '{' Expr '}' OptionDecl ::= 'declare' 'option' EQName StringLiteral Expr ::= ExprSingle ( ',' ExprSingle )* FLWORExpr ::= InitialClause IntermediateClause* ReturnClause InitialClause ::= ForClause | LetClause | WindowClause IntermediateClause ::= InitialClause | WhereClause | GroupByClause | OrderByClause | CountClause ForClause ::= 'for' ForBinding ( ',' ForBinding )* ForBinding ::= '$' VarName TypeDeclaration? AllowingEmpty? PositionalVar? FTScoreVar? 'in' ExprSingle AllowingEmpty ::= 'allowing' 'empty' PositionalVar ::= 'at' '$' VarName FTScoreVar ::= 'score' '$' VarName LetClause ::= 'let' LetBinding ( ',' LetBinding )* LetBinding ::= ( '$' VarName TypeDeclaration? | FTScoreVar ) ':=' ExprSingle WindowClause ::= 'for' ( TumblingWindowClause | SlidingWindowClause ) TumblingWindowClause ::= 'tumbling' 'window' '$' VarName TypeDeclaration? 'in' ExprSingle WindowStartCondition WindowEndCondition? SlidingWindowClause ::= 'sliding' 'window' '$' VarName TypeDeclaration? 'in' ExprSingle WindowStartCondition WindowEndCondition WindowStartCondition ::= 'start' WindowVars 'when' ExprSingle WindowEndCondition ::= 'only'? 'end' WindowVars 'when' ExprSingle WindowVars ::= ( '$' CurrentItem )? PositionalVar? ( 'previous' '$' PreviousItem )? ( 'next' '$' NextItem )? CurrentItem ::= EQName PreviousItem ::= EQName NextItem ::= EQName CountClause ::= 'count' '$' VarName WhereClause ::= 'where' ExprSingle GroupByClause ::= 'group' 'by' GroupingSpecList GroupingSpecList ::= GroupingSpec ( ',' GroupingSpec )* GroupingSpec ::= GroupingVariable ( TypeDeclaration? ':=' ExprSingle )? ( 'collation' URILiteral )? GroupingVariable ::= '$' VarName OrderByClause ::= ( 'order' 'by' | 'stable' 'order' 'by' ) OrderSpecList OrderSpecList ::= OrderSpec ( ',' OrderSpec )* OrderSpec ::= ExprSingle OrderModifier OrderModifier ::= ( 'ascending' | 'descending' )? ( 'empty' ( 'greatest' | 'least' ) )? ( 'collation' URILiteral )? ReturnClause ::= 'return' ExprSingle QuantifiedExpr ::= ( 'some' | 'every' ) '$' VarName TypeDeclaration? 'in' ExprSingle ( ',' '$' VarName TypeDeclaration? 'in' ExprSingle )* 'satisfies' ExprSingle SwitchExpr ::= 'switch' '(' Expr ')' SwitchCaseClause+ 'default' 'return' ExprSingle SwitchCaseClause ::= ( 'case' SwitchCaseOperand )+ 'return' ExprSingle SwitchCaseOperand ::= ExprSingle TypeswitchExpr ::= 'typeswitch' '(' Expr ')' CaseClause+ 'default' ( '$' VarName )? 'return' ExprSingle CaseClause ::= 'case' ( '$' VarName 'as' )? SequenceTypeUnion 'return' ExprSingle SequenceTypeUnion ::= SequenceType ( '|' SequenceType )* IfExpr ::= 'if' '(' Expr ')' 'then' ExprSingle 'else' ExprSingle TryCatchExpr ::= TryClause CatchClause+ TryClause ::= 'try' '{' TryTargetExpr '}' TryTargetExpr ::= Expr CatchClause ::= 'catch' CatchErrorList '{' Expr '}' CatchErrorList ::= NameTest ( '|' NameTest )* OrExpr ::= AndExpr ( 'or' AndExpr )* AndExpr ::= ComparisonExpr ( 'and' ComparisonExpr )* ComparisonExpr ::= FTContainsExpr ( ( ValueComp | GeneralComp | NodeComp ) FTContainsExpr )? FTContainsExpr ::= StringConcatExpr ( 'contains' 'text' FTSelection FTIgnoreOption? )? StringConcatExpr ::= RangeExpr ( '||' RangeExpr )* RangeExpr ::= AdditiveExpr ( 'to' AdditiveExpr )? AdditiveExpr ::= MultiplicativeExpr ( ( '+' | '-' ) MultiplicativeExpr )* MultiplicativeExpr ::= UnionExpr ( ( '*' | 'div' | 'idiv' | 'mod' ) UnionExpr )* UnionExpr ::= IntersectExceptExpr ( ( 'union' | '|' ) IntersectExceptExpr )* IntersectExceptExpr ::= InstanceofExpr ( ( 'intersect' | 'except' ) InstanceofExpr )* InstanceofExpr ::= TreatExpr ( 'instance' 'of' SequenceType )? TreatExpr ::= CastableExpr ( 'treat' 'as' SequenceType )? CastableExpr ::= CastExpr ( 'castable' 'as' SingleType )? CastExpr ::= UnaryExpr ( 'cast' 'as' SingleType )? UnaryExpr ::= ( '-' | '+' )* ValueExpr ValueExpr ::= ValidateExpr | SimpleMapExpr | ExtensionExpr SimpleMapExpr ::= PathExpr ('!' PathExpr)* GeneralComp ::= '=' | '!=' | '<' | '<=' | '>' | '>=' ValueComp ::= 'eq' | 'ne' | 'lt' | 'le' | 'gt' | 'ge' NodeComp ::= 'is' | '<<' | '>>' ValidateExpr ::= 'validate' ( ValidationMode | 'type' TypeName )? '{' Expr '}' ValidationMode ::= 'lax' | 'strict' ExtensionExpr ::= Pragma+ '{' Expr? '}' Pragma ::= '(#' S? EQName ( S PragmaContents )? '#)' /* ws: explicit */ PathExpr ::= '/' ( RelativePathExpr / ) | '//' RelativePathExpr | RelativePathExpr RelativePathExpr ::= StepExpr ( ( '/' | '//' | '!' ) StepExpr )* StepExpr ::= PostfixExpr | AxisStep AxisStep ::= ( ReverseStep | ForwardStep ) PredicateList ForwardStep ::= ForwardAxis NodeTest | AbbrevForwardStep ForwardAxis ::= 'child' '::' | 'descendant' '::' | 'attribute' '::' | 'self' '::' | 'descendant-or-self' '::' | 'following-sibling' '::' | 'following' '::' AbbrevForwardStep ::= '@'? NodeTest ReverseStep ::= ReverseAxis NodeTest | AbbrevReverseStep ReverseAxis ::= 'parent' '::' | 'ancestor' '::' | 'preceding-sibling' '::' | 'preceding' '::' | 'ancestor-or-self' '::' AbbrevReverseStep ::= '..' NodeTest ::= KindTest | NameTest NameTest ::= EQName | Wildcard PostfixExpr ::= PrimaryExpr ( Predicate | ArgumentList )* ArgumentList ::= '(' ( Argument ( ',' Argument )* )? ')' PredicateList ::= Predicate* Predicate ::= '[' Expr ']' Literal ::= NumericLiteral | StringLiteral NumericLiteral ::= IntegerLiteral | DecimalLiteral | DoubleLiteral VarRef ::= '$' VarName VarName ::= EQName ParenthesizedExpr ::= '(' Expr? ')' ContextItemExpr ::= '.' OrderedExpr ::= 'ordered' '{' Expr '}' UnorderedExpr ::= 'unordered' '{' Expr '}' FunctionCall ::= FunctionName ArgumentList Argument ::= ExprSingle | ArgumentPlaceholder ArgumentPlaceholder ::= '?' Constructor ::= DirectConstructor | ComputedConstructor DirectConstructor ::= DirElemConstructor | DirCommentConstructor | DirPIConstructor DirElemConstructor ::= '<' QName DirAttributeList ( '/>' | '>' DirElemContent* '' ) /* ws: explicit */ DirAttributeList ::= ( S ( QName S? '=' S? DirAttributeValue )? )* /* ws: explicit */ DirAttributeValue ::= '"' ( EscapeQuot | QuotAttrValueContent )* '"' | "'" ( EscapeApos | AposAttrValueContent )* "'" /* ws: explicit */ QuotAttrValueContent ::= QuotAttrContentChar | CommonContent AposAttrValueContent ::= AposAttrContentChar | CommonContent DirElemContent ::= DirectConstructor | CDataSection | CommonContent | ElementContentChar DirCommentConstructor ::= '' /* ws: explicit */ DirPIConstructor ::= '' /* ws: explicit */ ComputedConstructor ::= CompDocConstructor | CompElemConstructor | CompAttrConstructor | CompNamespaceConstructor | CompTextConstructor | CompCommentConstructor | CompPIConstructor CompElemConstructor ::= 'element' ( EQName | '{' Expr '}' ) '{' ContentExpr? '}' CompNamespaceConstructor ::= 'namespace' ( Prefix | '{' PrefixExpr '}' ) '{' URIExpr '}' Prefix ::= NCName PrefixExpr ::= Expr URIExpr ::= Expr FunctionItemExpr ::= NamedFunctionRef | InlineFunctionExpr NamedFunctionRef ::= EQName '#' IntegerLiteral InlineFunctionExpr ::= Annotation* 'function' '(' ParamList? ')' ( 'as' SequenceType )? FunctionBody SingleType ::= SimpleTypeName '?'? TypeDeclaration ::= 'as' SequenceType SequenceType ::= 'empty-sequence' '(' ')' | ItemType ( OccurrenceIndicator / ) OccurrenceIndicator ::= '?' | '*'^OccurrenceIndicator | '+' ItemType ::= KindTest | 'item' '(' ')' | FunctionTest | AtomicOrUnionType | ParenthesizedItemType | JSONTest | StructuredItemTest JSONTest ::= JSONItemTest | JSONObjectTest | JSONArrayTest StructuredItemTest ::= "structured-item" "(" ")" JSONItemTest ::= "json-item" "(" ")" JSONObjectTest ::= "object" "(" ")" JSONArrayTest ::= "array" "(" ")" AtomicOrUnionType ::= EQName KindTest ::= DocumentTest | ElementTest | AttributeTest | SchemaElementTest | SchemaAttributeTest | PITest | CommentTest | TextTest | NamespaceNodeTest | JSONTest | AnyKindTest AnyKindTest ::= 'node' '(' ')' DocumentTest ::= 'document-node' '(' ( ElementTest | SchemaElementTest )? ')' TextTest ::= 'text' '(' ')' CommentTest ::= 'comment' '(' ')' NamespaceNodeTest ::= 'namespace-node' '(' ')' PITest ::= 'processing-instruction' '(' ( NCName | StringLiteral )? ')' AttributeTest ::= 'attribute' '(' ( AttribNameOrWildcard ( ',' TypeName )? )? ')' AttribNameOrWildcard ::= AttributeName | '*' SchemaAttributeTest ::= 'schema-attribute' '(' AttributeDeclaration ')' AttributeDeclaration ::= AttributeName ElementTest ::= 'element' '(' ( ElementNameOrWildcard ( ',' TypeName '?'? )? )? ')' ElementNameOrWildcard ::= ElementName | '*' SchemaElementTest ::= 'schema-element' '(' ElementDeclaration ')' ElementDeclaration ::= ElementName AttributeName ::= EQName ElementName ::= EQName SimpleTypeName ::= TypeName TypeName ::= EQName FunctionTest ::= Annotation* ( AnyFunctionTest | TypedFunctionTest ) AnyFunctionTest ::= 'function' '(' '*' ')' TypedFunctionTest ::= 'function' '(' ( SequenceType ( ',' SequenceType )* )? ')' 'as' SequenceType ParenthesizedItemType ::= '(' ItemType ')' RevalidationDecl ::= 'declare' 'revalidation' ( 'strict' | 'lax' | 'skip' ) InsertExprTargetChoice ::= ( 'as' ( 'first' | 'last' ) )? 'into' | 'after' | 'before' InsertExpr ::= 'insert' ( 'node' | 'nodes' ) SourceExpr InsertExprTargetChoice TargetExpr DeleteExpr ::= 'delete' ( 'node' | 'nodes' ) TargetExpr ReplaceExpr ::= 'replace' ( 'value' 'of' )? 'node' TargetExpr 'with' ExprSingle RenameExpr ::= 'rename' 'node' TargetExpr 'as' NewNameExpr SourceExpr ::= ExprSingle TargetExpr ::= ExprSingle NewNameExpr ::= ExprSingle TransformExpr ::= 'copy' '$' VarName ':=' ExprSingle ( ',' '$' VarName ':=' ExprSingle )* 'modify' ExprSingle 'return' ExprSingle FTSelection ::= FTOr FTPosFilter* FTWeight ::= 'weight' '{' Expr '}' FTOr ::= FTAnd ( 'ftor' FTAnd )* FTAnd ::= FTMildNot ( 'ftand' FTMildNot )* FTMildNot ::= FTUnaryNot ( 'not' 'in' FTUnaryNot )* FTUnaryNot ::= 'ftnot'? FTPrimaryWithOptions FTPrimaryWithOptions ::= FTPrimary FTMatchOptions? FTWeight? FTPrimary ::= FTWords FTTimes? | '(' FTSelection ')' | FTExtensionSelection FTWords ::= FTWordsValue FTAnyallOption? FTWordsValue ::= StringLiteral | '{' Expr '}' FTExtensionSelection ::= Pragma+ '{' FTSelection? '}' FTAnyallOption ::= 'any' 'word'? | 'all' 'words'? | 'phrase' FTTimes ::= 'occurs' FTRange 'times' FTRange ::= 'exactly' AdditiveExpr | 'at' ( 'least' AdditiveExpr | 'most' AdditiveExpr ) | 'from' AdditiveExpr 'to' AdditiveExpr FTPosFilter ::= FTOrder | FTWindow | FTDistance | FTScope | FTContent FTOrder ::= 'ordered' FTWindow ::= 'window' AdditiveExpr FTUnit FTDistance ::= 'distance' FTRange FTUnit FTUnit ::= 'words' | 'sentences' | 'paragraphs' FTScope ::= ( 'same' | 'different' ) FTBigUnit FTBigUnit ::= 'sentence' | 'paragraph' FTContent ::= 'at' ( 'start' | 'end' ) | 'entire' 'content' FTMatchOptions ::= ( 'using' FTMatchOption )+ FTMatchOption ::= FTLanguageOption | FTWildCardOption | FTThesaurusOption | FTStemOption | FTCaseOption | FTDiacriticsOption | FTStopWordOption | FTExtensionOption FTCaseOption ::= 'case' ( 'insensitive' | 'sensitive' ) | 'lowercase' | 'uppercase' FTDiacriticsOption ::= 'diacritics' ( 'insensitive' | 'sensitive' ) FTStemOption ::= 'stemming' | 'no' 'stemming' FTThesaurusOption ::= 'thesaurus' ( FTThesaurusID | 'default' | '(' ( FTThesaurusID | 'default' ) ( ',' FTThesaurusID )* ')' ) | 'no' 'thesaurus' FTThesaurusID ::= 'at' URILiteral ( 'relationship' StringLiteral )? ( FTLiteralRange 'levels' )? FTLiteralRange ::= 'exactly' IntegerLiteral | 'at' ( 'least' IntegerLiteral | 'most' IntegerLiteral ) | 'from' IntegerLiteral 'to' IntegerLiteral FTStopWordOption ::= 'stop' 'words' ( FTStopWords FTStopWordsInclExcl* | 'default' FTStopWordsInclExcl* ) | 'no' 'stop' 'words' FTStopWords ::= 'at' URILiteral | '(' StringLiteral ( ',' StringLiteral )* ')' FTStopWordsInclExcl ::= ( 'union' | 'except' ) FTStopWords FTLanguageOption ::= 'language' StringLiteral FTWildCardOption ::= 'wildcards' | 'no' 'wildcards' FTExtensionOption ::= 'option' EQName StringLiteral FTIgnoreOption ::= 'without' 'content' UnionExpr CollectionDecl ::= 'collection' EQName CollectionTypeDecl? CollectionTypeDecl ::= 'as' KindTest OccurrenceIndicator? IndexName ::= EQName IndexDomainExpr ::= PathExpr IndexKeySpec ::= IndexKeyExpr IndexKeyTypeDecl? IndexKeyCollation? IndexKeyExpr ::= PathExpr IndexKeyTypeDecl ::= 'as' AtomicType OccurrenceIndicator? AtomicType ::= EQName IndexKeyCollation ::= 'collation' URILiteral IndexDecl ::= 'index' IndexName 'on' 'nodes' IndexDomainExpr 'by' IndexKeySpec ( ',' IndexKeySpec )* ICDecl ::= 'integrity' 'constraint' EQName ( ICCollection | ICForeignKey ) ICCollection ::= 'on' 'collection' EQName ( ICCollSequence | ICCollSequenceUnique | ICCollNode ) ICCollSequence ::= VarRef 'check' ExprSingle ICCollSequenceUnique ::= 'node' VarRef 'check' 'unique' 'key' PathExpr ICCollNode ::= 'foreach' 'node' VarRef 'check' ExprSingle ICForeignKey ::= 'foreign' 'key' ICForeignKeySource ICForeignKeyTarget ICForeignKeySource ::= 'from' ICForeignKeyValues ICForeignKeyTarget ::= 'to' ICForeignKeyValues ICForeignKeyValues ::= 'collection' EQName 'node' VarRef 'key' PathExpr Comment ::= '(:' ( CommentContents | Comment )* ':)' /* ws: explicit */ Whitespace ::= S^WS | Comment /* ws: definition */ EQName ::= FunctionName | 'attribute' | 'comment' | 'document-node' | 'element' | 'empty-sequence' | 'function' | 'if' | 'item' | 'namespace-node' | 'node' | 'processing-instruction' | 'schema-attribute' | 'schema-element' | 'switch' | 'text' | 'typeswitch' FunctionName ::= EQName^Token | 'after' | 'ancestor' | 'ancestor-or-self' | 'and' | 'as' | 'ascending' | 'before' | 'case' | 'cast' | 'castable' | 'child' | 'collation' | 'copy' | 'count' | 'declare' | 'default' | 'delete' | 'descendant' | 'descendant-or-self' | 'descending' | 'div' | 'document' | 'else' | 'empty' | 'end' | 'eq' | 'every' | 'except' | 'first' | 'following' | 'following-sibling' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' | 'import' | 'insert' | 'instance' | 'intersect' | 'into' | 'is' | 'last' | 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'module' | 'namespace' | 'ne' | 'only' | 'or' | 'order' | 'ordered' | 'parent' | 'preceding' | 'preceding-sibling' | 'rename' | 'replace' | 'return' | 'satisfies' | 'self' | 'some' | 'stable' | 'start' | 'to' | 'treat' | 'try' | 'union' | 'unordered' | 'validate' | 'where' | 'with' | 'xquery' | 'allowing' | 'at' | 'base-uri' | 'boundary-space' | 'break' | 'catch' | 'construction' | 'context' | 'continue' | 'copy-namespaces' | 'decimal-format' | 'encoding' | 'exit' | 'external' | 'ft-option' | 'in' | 'index' | 'integrity' | 'lax' | 'nodes' | 'option' | 'ordering' | 'revalidation' | 'schema' | 'score' | 'sliding' | 'strict' | 'tumbling' | 'type' | 'updating' | 'value' | 'variable' | 'version' | 'while' | 'constraint' | 'loop' | 'returning' | 'object' | 'json-item' | 'array' NCName ::= NCName^Token | 'after' | 'and' | 'as' | 'ascending' | 'before' | 'case' | 'cast' | 'castable' | 'collation' | 'count' | 'default' | 'descending' | 'div' | 'else' | 'empty' | 'end' | 'eq' | 'except' | 'for' | 'ge' | 'group' | 'gt' | 'idiv' | 'instance' | 'intersect' | 'into' | 'is' | 'le' | 'let' | 'lt' | 'mod' | 'modify' | 'ne' | 'only' | 'or' | 'order' | 'return' | 'satisfies' | 'stable' | 'start' | 'to' | 'treat' | 'union' | 'where' | 'with' | 'ancestor' | 'ancestor-or-self' | 'attribute' | 'child' | 'comment' | 'copy' | 'declare' | 'delete' | 'descendant' | 'descendant-or-self' | 'document' | 'document-node' | 'element' | 'empty-sequence' | 'every' | 'first' | 'following' | 'following-sibling' | 'function' | 'if' | 'import' | 'insert' | 'item' | 'last' | 'module' | 'namespace' | 'namespace-node' | 'node' | 'ordered' | 'parent' | 'preceding' | 'preceding-sibling' | 'processing-instruction' | 'rename' | 'replace' | 'schema-attribute' | 'schema-element' | 'self' | 'some' | 'switch' | 'text' | 'try' | 'typeswitch' | 'unordered' | 'validate' | 'variable' | 'xquery' | 'allowing' | 'at' | 'base-uri' | 'boundary-space' | 'break' | 'catch' | 'construction' | 'context' | 'continue' | 'copy-namespaces' | 'decimal-format' | 'encoding' | 'exit' | 'external' | 'ft-option' | 'in' | 'index' | 'integrity' | 'lax' | 'nodes' | 'option' | 'ordering' | 'revalidation' | 'schema' | 'score' | 'sliding' | 'strict' | 'tumbling' | 'type' | 'updating' | 'value' | 'version' | 'while' | 'constraint' | 'loop' | 'returning' MainModule ::= Prolog Program Program ::= StatementsAndOptionalExpr Statements ::= Statement* StatementsAndExpr ::= Statements Expr StatementsAndOptionalExpr ::= Statements Expr? Statement ::= ApplyStatement | AssignStatement | BlockStatement | BreakStatement | ContinueStatement | ExitStatement | FLWORStatement | IfStatement | SwitchStatement | TryCatchStatement | TypeswitchStatement | VarDeclStatement | WhileStatement ApplyStatement ::= ExprSimple ';' AssignStatement ::= '$' VarName ':=' ExprSingle ';' BlockStatement ::= '{' Statements '}' BreakStatement ::= 'break' 'loop' ';' ContinueStatement ::= 'continue' 'loop' ';' ExitStatement ::= 'exit' 'returning' ExprSingle ';' FLWORStatement ::= InitialClause IntermediateClause* ReturnStatement ReturnStatement ::= 'return' Statement IfStatement ::= 'if' '(' Expr ')' 'then' Statement 'else' Statement SwitchStatement ::= 'switch' '(' Expr ')' SwitchCaseStatement+ 'default' 'return' Statement SwitchCaseStatement ::= ( 'case' SwitchCaseOperand )+ 'return' Statement TryCatchStatement ::= 'try' BlockStatement ( 'catch' CatchErrorList BlockStatement )+ TypeswitchStatement ::= 'typeswitch' '(' Expr ')' CaseStatement+ 'default' ( '$' VarName )? 'return' Statement CaseStatement ::= 'case' ( '$' VarName 'as' )? SequenceType 'return' Statement VarDeclStatement ::= Annotation* 'variable' '$' VarName TypeDeclaration? ( ':=' ExprSingle )? ( ',' '$' VarName TypeDeclaration? ( ':=' ExprSingle )? )* ';' WhileStatement ::= 'while' '(' Expr ')' Statement ExprSingle ::= ExprSimple | FLWORExpr | IfExpr | SwitchExpr | TryCatchExpr | TypeswitchExpr ExprSimple ::= QuantifiedExpr | OrExpr | InsertExpr | DeleteExpr | RenameExpr | ReplaceExpr | TransformExpr | JSONDeleteExpr | JSONInsertExpr | JSONRenameExpr | JSONReplaceExpr | JSONAppendExpr JSONDeleteExpr ::= "delete" "json" PostfixExpr JSONInsertExpr ::= "insert" "json" ExprSingle "into" ExprSingle ("at" "position" ExprSingle)? JSONRenameExpr ::= "rename" "json" PostfixExpr "as" ExprSingle JSONReplaceExpr ::= "replace" "json" "value" "of" PostfixExpr "with" ExprSingle JSONAppendExpr ::= "append" "json" ExprSingle "into" ExprSingle CommonContent ::= PredefinedEntityRef | CharRef | '{{' | '}}' | BlockExpr ContentExpr ::= StatementsAndExpr CompDocConstructor ::= 'document' BlockExpr CompAttrConstructor ::= 'attribute' ( EQName | '{' Expr '}' ) ( '{' '}' | BlockExpr ) CompPIConstructor ::= 'processing-instruction' ( NCName | '{' Expr '}' ) ( '{' '}' | BlockExpr ) CompCommentConstructor ::= 'comment' BlockExpr CompTextConstructor ::= 'text' BlockExpr PrimaryExpr ::= Literal | VarRef | ParenthesizedExpr | ContextItemExpr | FunctionCall | OrderedExpr | UnorderedExpr | Constructor | FunctionItemExpr | BlockExpr | ObjectConstructor | ArrayConstructor | JSONSimpleObjectUnion JSONSimpleObjectUnion ::= '{|' Expr? '|}' ObjectConstructor ::= "{" ( PairConstructor ("," PairConstructor)* )? "}" PairConstructor ::= ExprSingle ":" ExprSingle ArrayConstructor ::= "[" Expr? "]" BlockExpr ::= '{' StatementsAndOptionalExpr '}' FunctionDecl ::= 'function' EQName '(' ParamList? ')' ( 'as' SequenceType )? ( '{' StatementsAndOptionalExpr '}' | 'external' ) PragmaContents ::= ( Char* - ( Char* '#)' Char* ) ) &'#' DirCommentContents ::= ( ( Char - '-' ) | '-' ( Char - '-' ) )* DirPIContents ::= ( Char* - ( Char* '?>' Char* ) ) &'?' CDataSection ::= '' CDataSectionContents ::= Char* - ( Char* ']]>' Char* ) Wildcard ::= "*" | (NCName ":" "*") | ("*" ":" NCName) | (BracedURILiteral "*") EQName ::= QName | URIQualifiedName URIQualifiedName ::= BracedURILiteral NCName BracedURILiteral ::= 'Q' '{' (PredefinedEntityRef | CharRef | [^&{}] )* '}' URILiteral ::= StringLiteral IntegerLiteral ::= Digits DecimalLiteral ::= '.' Digits | Digits '.' [0-9]* /* ws: explicit */ DoubleLiteral ::= ( '.' Digits | Digits ( '.' [0-9]* )? ) [Ee] [+#x002D]? Digits /* ws: explicit */ StringLiteral ::= '"' ( PredefinedEntityRef | CharRef | EscapeQuot | [^"&] )* '"' | "'" ( PredefinedEntityRef | CharRef | EscapeApos | [^&'] )* "'" /* ws: explicit */ PredefinedEntityRef ::= '&' ( 'lt' | 'gt' | 'amp' | 'quot' | 'apos' ) ';' /* ws: explicit */ EscapeQuot ::= '""' EscapeApos ::= "''" ElementContentChar ::= Char - [&<{}] QuotAttrContentChar ::= Char - ["&<{}] AposAttrContentChar ::= Char - [&'<{}] PITarget ::= NCName - ( ( 'X' | 'x' ) ( 'M' | 'm' ) ( 'L' | 'l' ) ) Name ::= NameStartChar NameChar* NameStartChar ::= [:A-Z_a-z#x00C0-#x00D6#x00D8-#x00F6#x00F8-#x02FF#x0370-#x037D#x037F-#x1FFF#x200C-#x200D#x2070-#x218F#x2C00-#x2FEF#x3001-#xD7FF#xF900-#xFDCF#xFDF0-#xFFFD#x10000-#xEFFFF] NameChar ::= NameStartChar | [-.0-9#x00B7#x0300-#x036F#x203F-#x2040] NCName ::= Name - ( Char* ':' Char* ) Char ::= [#x0009#x000A#x000D#x0020-#xD7FF#xE000-#xFFFD#x10000-#x10FFFF] QName ::= PrefixedName | UnprefixedName PrefixedName ::= Prefix ':' LocalPart UnprefixedName ::= LocalPart Prefix ::= NCName LocalPart ::= NCName S ::= [#x0009#x000A#x000D#x0020]+ CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9A-Fa-f]+ ';' Digits ::= [0-9]+ CommentContents ::= ( ( Char+ - ( Char* ( '(:' | ':)' ) Char* ) ) - ( Char* '(' ) ) &':' | ( Char+ - ( Char* ( '(:' | ':)' ) Char* ) ) &'(' EOF ::= $ NonNCNameChar ::= $ | ':' | ( Char - NameChar ) DelimitingChar ::= NonNCNameChar | '-' | '.' DelimitingChar \\ IntegerLiteral DecimalLiteral DoubleLiteral NonNCNameChar \\ EQName^Token QName NCName^Token 'NaN' 'after' 'all' 'allowing' 'ancestor' 'ancestor-or-self' 'and' 'any' 'append' 'array' 'as' 'ascending' 'at' 'attribute' 'base-uri' 'before' 'boundary-space' 'break' 'by' 'case' 'cast' 'castable' 'catch' 'check' 'child' 'collation' 'collection' 'comment' 'constraint' 'construction' 'contains' 'content' 'context' 'continue' 'copy' 'copy-namespaces' 'count' 'decimal-format' 'decimal-separator' 'declare' 'default' 'delete' 'descendant' 'descendant-or-self' 'descending' 'diacritics' 'different' 'digit' 'distance' 'div' 'document' 'document-node' 'element' 'else' 'empty' 'empty-sequence' 'encoding' 'end' 'entire' 'eq' 'every' 'exactly' 'except' 'exit' 'external' 'first' 'following' 'following-sibling' 'for' 'foreach' 'foreign' 'from' 'ft-option' 'ftand' 'ftnot' 'ftor' 'function' 'ge' 'greatest' 'group' 'grouping-separator' 'gt' 'idiv' 'if' 'import' 'in' 'index' 'infinity' 'inherit' 'insensitive' 'insert' 'instance' 'integrity' 'intersect' 'into' 'is' 'item' 'json' 'json-item' 'key' 'language' 'last' 'lax' 'le' 'least' 'let' 'levels' 'loop' 'lowercase' 'lt' 'minus-sign' 'mod' 'modify' 'module' 'most' 'namespace' 'namespace-node' 'ne' 'next' 'no' 'no-inherit' 'no-preserve' 'node' 'nodes' 'not' 'object' 'occurs' 'of' 'on' 'only' 'option' 'or' 'order' 'ordered' 'ordering' 'paragraph' 'paragraphs' 'parent' 'pattern-separator' 'per-mille' 'percent' 'phrase' 'position' 'preceding' 'preceding-sibling' 'preserve' 'previous' 'processing-instruction' 'relationship' 'rename' 'replace' 'return' 'returning' 'revalidation' 'same' 'satisfies' 'schema' 'schema-attribute' 'schema-element' 'score' 'self' 'sensitive' 'sentence' 'sentences' 'skip' 'sliding' 'some' 'stable' 'start' 'stemming' 'stop' 'strict' 'strip' 'structured-item' 'switch' 'text' 'then' 'thesaurus' 'times' 'to' 'treat' 'try' 'tumbling' 'type' 'typeswitch' 'union' 'unique' 'unordered' 'updating' 'uppercase' 'using' 'validate' 'value' 'variable' 'version' 'weight' 'when' 'where' 'while' 'wildcards' 'window' 'with' 'without' 'word' 'words' 'xquery' 'zero-digit' '*' << Wildcard '*'^OccurrenceIndicator EQName^Token << 'after' 'ancestor' 'ancestor-or-self' 'and' 'as' 'ascending' 'attribute' 'before' 'case' 'cast' 'castable' 'child' 'collation' 'comment' 'copy' 'count' 'declare' 'default' 'delete' 'descendant' 'descendant-or-self' 'descending' 'div' 'document' 'document-node' 'element' 'else' 'empty' 'empty-sequence' 'end' 'eq' 'every' 'except' 'first' 'following' 'following-sibling' 'for' 'function' 'ge' 'group' 'gt' 'idiv' 'if' 'import' 'insert' 'instance' 'intersect' 'into' 'is' 'item' 'last' 'le' 'let' 'lt' 'mod' 'modify' 'module' 'namespace' 'namespace-node' 'ne' 'node' 'only' 'or' 'order' 'ordered' 'parent' 'preceding' 'preceding-sibling' 'processing-instruction' 'rename' 'replace' 'return' 'satisfies' 'schema-attribute' 'schema-element' 'self' 'some' 'stable' 'start' 'switch' 'text' 'to' 'treat' 'try' 'typeswitch' 'union' 'unordered' 'validate' 'where' 'with' 'xquery' 'contains' 'paragraphs' 'sentences' 'times' 'words' 'by' 'collection' 'allowing' 'at' 'base-uri' 'boundary-space' 'break' 'catch' 'construction' 'context' 'continue' 'copy-namespaces' 'decimal-format' 'encoding' 'exit' 'external' 'ft-option' 'in' 'index' 'integrity' 'lax' 'nodes' 'option' 'ordering' 'revalidation' 'schema' 'score' 'sliding' 'strict' 'tumbling' 'type' 'updating' 'value' 'variable' 'version' 'while' 'constraint' 'loop' 'returning' 'append' 'array' 'json-item' 'object' 'structured-item' NCName^Token << 'after' 'and' 'as' 'ascending' 'before' 'case' 'cast' 'castable' 'collation' 'count' 'default' 'descending' 'div' 'else' 'empty' 'end' 'eq' 'except' 'for' 'ge' 'group' 'gt' 'idiv' 'instance' 'intersect' 'into' 'is' 'le' 'let' 'lt' 'mod' 'modify' 'ne' 'only' 'or' 'order' 'return' 'satisfies' 'stable' 'start' 'to' 'treat' 'union' 'where' 'with' 'contains' 'paragraphs' 'sentences' 'times' 'words' 'by' 'ancestor' 'ancestor-or-self' 'attribute' 'child' 'comment' 'copy' 'declare' 'delete' 'descendant' 'descendant-or-self' 'document' 'document-node' 'element' 'empty-sequence' 'every' 'first' 'following' 'following-sibling' 'function' 'if' 'import' 'insert' 'item' 'last' 'module' 'namespace' 'namespace-node' 'node' 'ordered' 'parent' 'preceding' 'preceding-sibling' 'processing-instruction' 'rename' 'replace' 'schema-attribute' 'schema-element' 'self' 'some' 'switch' 'text' 'try' 'typeswitch' 'unordered' 'validate' 'variable' 'xquery' 'allowing' 'at' 'base-uri' 'boundary-space' 'break' 'catch' 'construction' 'context' 'continue' 'copy-namespaces' 'decimal-format' 'encoding' 'exit' 'external' 'ft-option' 'in' 'index' 'integrity' 'lax' 'nodes' 'option' 'ordering' 'revalidation' 'schema' 'score' 'sliding' 'strict' 'tumbling' 'type' 'updating' 'value' 'version' 'while' 'constraint' 'loop' 'returning'