Class XQueryParser


public class XQueryParser extends XPathParser
This class defines extensions to the XPath parser to handle the additional syntax supported in XQuery
  • Field Details

  • Constructor Details

    • XQueryParser

      public XQueryParser(StaticContext env)
      Constructor for internal use: this class should be instantiated via the QueryModule
  • Method Details

    • makeXQueryExpression

      public XQueryExpression makeXQueryExpression(String query, QueryModule mainModule, Configuration config) throws XPathException
      Create an XQueryExpression
      Parameters:
      query - the source text of the query
      mainModule - the static context of the query
      config - the Saxon configuration
      Returns:
      the compiled XQuery expression
      Throws:
      XPathException - if the expression contains static errors
    • createRunTimeFunctionLibrary

      public static void createRunTimeFunctionLibrary(QueryModule mainModule, Configuration config, Executable exec)
    • getExecutable

      public Executable getExecutable()
      Get the executable containing this expression.
      Returns:
      the executable
    • setExecutable

      public void setExecutable(Executable exec)
      Set the executable used for this query expression
      Parameters:
      exec - the executable
    • customizeTokenizer

      protected void customizeTokenizer(Tokenizer t)
      Callback to tailor the tokenizer
      Overrides:
      customizeTokenizer in class XPathParser
      Parameters:
      t - the Tokenizer to be customized
    • setStreaming

      public void setStreaming(boolean option)
      Say whether the query should be compiled and evaluated to use streaming. This affects subsequent calls on the parseQuery() method. This option requires Saxon-EE.
      Parameters:
      option - if true, the compiler will attempt to compile a query to be capable of executing in streaming mode. If the query cannot be streamed, a compile-time exception is reported. In streaming mode, the source document is supplied as a stream, and no tree is built in memory. The default is false.
      Since:
      9.6
    • isStreaming

      public boolean isStreaming()
      Ask whether the streaming option has been set, that is, whether subsequent calls on parseQuery() will compile queries to be capable of executing in streaming mode.
      Returns:
      true if the streaming option has been set.
      Since:
      9.6
    • parseLibraryModule

      public final void parseLibraryModule(String queryString, QueryModule env) throws XPathException
      Parse a library module. Prolog? Expression
      Parameters:
      queryString - The text of the library module.
      env - The static context. The result of parsing a library module is that the static context is populated with a set of function declarations and variable declarations. Each library module must have its own static context objext.
      Throws:
      XPathException - if the expression contains a syntax error
    • parseAnnotationsList

      protected AnnotationList parseAnnotationsList() throws XPathException
      Parse the annotations that can appear in a variable or function declaration
      Overrides:
      parseAnnotationsList in class XPathParser
      Returns:
      the annotations as a list
      Throws:
      XPathException - in the event of a syntax error
    • parseRevalidationDeclaration

      protected void parseRevalidationDeclaration() throws XPathException
      Parse the "declare revalidation" declaration. Syntax: not allowed unless XQuery update is in use
      Throws:
      XPathException - if the syntax is incorrect, or is not allowed in this XQuery processor
    • ensureSchemaAware

      protected void ensureSchemaAware(String featureName) throws XPathException
      Throws:
      XPathException
    • parseFunctionDeclaration

      public void parseFunctionDeclaration(AnnotationList annotations) throws XPathException
      Parse a function declaration.

      Syntax:
      <"declare" "function"> QName "(" ParamList? ")" ("as" SequenceType)? (EnclosedExpr | "external")

      On entry, the "declare function" has already been recognized

      Parameters:
      annotations - the list of annotations that have been encountered for this function declaration
      Throws:
      XPathException - if a syntax error is found
    • parseItemTypeDeclaration

      protected void parseItemTypeDeclaration(AnnotationList annotations) throws XPathException
      Parse a type alias declaration. Allowed only in Saxon-PE and higher
      Throws:
      XPathException - if parsing fails
    • parseOutputDeclaration

      protected void parseOutputDeclaration(StructuredQName varName, String value) throws XPathException
      Throws:
      XPathException
    • parseFLWORExpression

      protected Expression parseFLWORExpression() throws XPathException
      Parse a FLWOR expression. This replaces the XPath "for" expression. Full syntax:

      [41] FLWORExpr ::= (ForClause | LetClause)+ WhereClause? OrderByClause? "return" ExprSingle
      [42] ForClause ::= <"for" "$"> VarName TypeDeclaration? PositionalVar? "in" ExprSingle ("," "$" VarName TypeDeclaration? PositionalVar? "in" ExprSingle)*
      [43] PositionalVar ::= "at" "$" VarName
      [44] LetClause ::= <"let" "$"> VarName TypeDeclaration? ":=" ExprSingle ("," "$" VarName TypeDeclaration? ":=" ExprSingle)*
      [45] WhereClause ::= "where" Expr
      [46] OrderByClause ::= (<"order" "by"> | <"stable" "order" "by">) OrderSpecList
      [47] OrderSpecList ::= OrderSpec ("," OrderSpec)*
      [48] OrderSpec ::= ExprSingle OrderModifier
      [49] OrderModifier ::= ("ascending" | "descending")? (<"empty" "greatest"> | <"empty" "least">)? ("collation" StringLiteral)?

      Overrides:
      parseFLWORExpression in class XPathParser
      Returns:
      the resulting subexpression
      Throws:
      XPathException - if any error is encountered
    • makeLetExpression

      protected LetExpression makeLetExpression()
      Make a LetExpression. This returns an ordinary LetExpression if tracing is off, and an EagerLetExpression if tracing is on. This is so that trace events occur in an order that the user can follow.
      Returns:
      the constructed "let" expression
    • containsLoopingClause

      protected static boolean containsLoopingClause(List<Clause> clauseList)
    • makeStringJoin

      public static Expression makeStringJoin(Expression exp, StaticContext env)
      Make a string-join expression that concatenates the string-values of items in a sequence with intervening spaces. This may be simplified later as a result of type-checking.
      Parameters:
      exp - the base expression, evaluating to a sequence
      env - the static context
      Returns:
      a call on string-join to create a string containing the representations of the items in the sequence separated by spaces.
    • readCollationName

      protected String readCollationName() throws XPathException
      Throws:
      XPathException
    • parseTypeswitchExpression

      protected Expression parseTypeswitchExpression() throws XPathException
      Parse a Typeswitch Expression. This construct is XQuery-only. TypeswitchExpr ::= "typeswitch" "(" Expr ")" CaseClause+ "default" ("$" VarName)? "return" ExprSingle CaseClause ::= "case" ("$" VarName "as")? SequenceType "return" ExprSingle
      Overrides:
      parseTypeswitchExpression in class XPathParser
      Returns:
      the expression that results from the parsing
      Throws:
      XPathException - if parsing fails
    • parseSwitchExpression

      protected Expression parseSwitchExpression() throws XPathException
      Parse a Switch Expression. This construct is XQuery-3.0-only. SwitchExpr ::= "switch" ("(" Expr ")")? SwitchCaseClause+ "default" "return" ExprSingle SwitchCaseClause ::= ("case" ExprSingle)+ "return" ExprSingle

      4.0 allows the parenthesized expression to be omitted, and also allows braces around the cases. This means there are three ways of recognizing the start of the expression: (a) "switch (", (b) "switch {" (c) "switch case"}

      Overrides:
      parseSwitchExpression in class XPathParser
      Returns:
      the parsed expression
      Throws:
      XPathException - in the event of a syntax error
    • parseValidateExpression

      protected Expression parseValidateExpression() throws XPathException
      Parse a Validate Expression. This construct is XQuery-only. The syntax allows: validate mode? { Expr } mode ::= "strict" | "lax"
      Overrides:
      parseValidateExpression in class XPathParser
      Returns:
      the parsed expression; except that this version of the method always throws an exception
      Throws:
      XPathException - if parsing fails
    • parseExtensionExpression

      protected Expression parseExtensionExpression() throws XPathException
      Parse an Extension Expression. Syntax: "(#" QName arbitrary-text "#)")+ "{" expr? "}"
      Overrides:
      parseExtensionExpression in class XPathParser
      Returns:
      the parsed expression; except that this version of the method always throws an exception
      Throws:
      XPathException - if parsing fails
    • parseConstructor

      protected Expression parseConstructor() throws XPathException
      Parse a node constructor. This is allowed only in XQuery. This method handles both the XML-like "direct" constructors, and the XQuery-based "computed" constructors.
      Overrides:
      parseConstructor in class XPathParser
      Returns:
      an Expression for evaluating the parsed constructor
      Throws:
      XPathException - in the event of a syntax error.
    • parseTryCatchExpression

      protected Expression parseTryCatchExpression() throws XPathException
      Parse a Try/Catch Expression. This construct is XQuery-3.0 only. The syntax allows: try { Expr } catch NameTest ('|' NameTest)* { Expr } We don't currently implement the CatchVars
      Overrides:
      parseTryCatchExpression in class XPathParser
      Returns:
      the parsed expression; except that this version of the method always throws an exception
      Throws:
      XPathException - if a static error is found
    • makeSimpleContent

      protected void makeSimpleContent(Expression content, SimpleNodeConstructor inst, int offset)
      Make the instructions for the children of a node with simple content (attribute, text, PI, etc)
      Parameters:
      content - the expression making up the simple content
      inst - the skeletal instruction for creating the node
      offset - the character position of this construct within the source query
    • stringify

      public static Expression stringify(Expression exp, boolean noNodeIfEmpty, StaticContext env)
      Convert an expression so it generates a space-separated sequence of strings
      Parameters:
      exp - the expression that calculates the content
      noNodeIfEmpty - if true, no node is produced when the value of the content expression is an empty sequence. If false, the effect of supplying an empty sequence is that a node is created whose string-value is a zero-length string. Set to true for text node constructors, false for other kinds of node.
      env - the static context
      Returns:
      an expression that computes the content and converts the result to a character string
    • makeStringLiteral

      protected Literal makeStringLiteral(String token, boolean doUnescaping) throws XPathException
      Method to make a string literal from a token identified as a string literal. This is trivial in XPath, but in XQuery the method is overridden to identify pseudo-XML character and entity references
      Overrides:
      makeStringLiteral in class XPathParser
      Parameters:
      token - the string as written (or as returned by the tokenizer)
      doUnescaping - if true, XML escape sequences (`&#xHH;`, etc) are recognized and expanded.
      Returns:
      The string value of the string literal, after dereferencing entity and character references
      Throws:
      XPathException - if parsing fails
    • unescape

      protected String unescape(String token) throws XPathException
      Unescape character references and built-in entity references in a string
      Overrides:
      unescape in class XPathParser
      Parameters:
      token - the input string, which may include XML-style character references or built-in entity references
      Returns:
      the string with character references and built-in entity references replaced by their expansion
      Throws:
      XPathException - if a malformed character or entity reference is found
    • parseStringConstructor

      protected Expression parseStringConstructor() throws XPathException
      Parse a string constructor: introduced in XQuery 3.1
      Overrides:
      parseStringConstructor in class XPathParser
      Throws:
      XPathException
    • uriLiteral

      public String uriLiteral(String in) throws XPathException
      Handle a URI literal. This is whitespace-normalized as well as being unescaped
      Parameters:
      in - the string as written
      Returns:
      the URI after unescaping of entity and character references followed by whitespace normalization
      Throws:
      XPathException - if an error is found while unescaping the URI
    • lookAhead

      protected void lookAhead() throws XPathException
      Lookahead one token, catching any exception thrown by the tokenizer. This method is only called from the query parser when switching from character-at-a-time mode to tokenizing mode
      Throws:
      XPathException - if parsing fails
    • atStartOfRelativePath

      protected boolean atStartOfRelativePath()
      Description copied from class: XPathParser
      Test whether the current token is one that can start a RelativePathExpression
      Overrides:
      atStartOfRelativePath in class XPathParser
      Returns:
      the resulting subexpression
    • testPermittedAxis

      protected void testPermittedAxis(int axis, String errorCode) throws XPathException
      Overrides:
      testPermittedAxis in class XPathParser
      Throws:
      XPathException
    • getLanguage

      protected String getLanguage()
      Get the current language (XPath or XQuery)
      Overrides:
      getLanguage in class XPathParser
      Returns:
      a string representation of the language being parsed, for use in error messages