Class StandaloneContext

  • All Implemented Interfaces:
    StaticContext, NamespaceResolver

    public class StandaloneContext
    extends java.lang.Object
    implements StaticContext, NamespaceResolver
    A StandaloneContext provides a context for parsing an XPath expression in a context other than a stylesheet. In particular, it is used to support the JAXP 1.3 XPath API. This API does not actually expose the StaticContext object directly; rather, the static context (namespaces, variables, and functions) is manipulated through the XPath object, implemented in Saxon by the XPathEvaluator
    • Constructor Detail

      • StandaloneContext

        public StandaloneContext()
        Create a StandaloneContext using the default Configuration and NamePool
      • StandaloneContext

        public StandaloneContext​(Configuration config)
        Create a StandaloneContext using a specific Configuration.
        Parameters:
        config - the Configuration. For schema-aware XPath expressions, this must be a SchemaAwareConfiguration.
      • StandaloneContext

        public StandaloneContext​(NodeInfo node)
        Create a StandaloneContext using a specific Node. This node is used to initialize the NamePool and also to establish the initial set of in-scope namespaces.
    • Method Detail

      • getLocationMap

        public LocationMap getLocationMap()
        Description copied from interface: StaticContext
        Get the location map. This is a mapping from short location ids held with each expression or subexpression, to a fully-resolved location in a source stylesheet or query.
        Specified by:
        getLocationMap in interface StaticContext
      • setLocationMap

        public void setLocationMap​(LocationMap locationMap)
      • declareNamespace

        public void declareNamespace​(java.lang.String prefix,
                                     java.lang.String uri)
        Declare a namespace whose prefix can be used in expressions. Namespaces may either be pre-declared (the traditional Saxon interface), or they may be resolved on demand using a supplied NamespaceContext. When a prefix has to be resolved, the parser looks first in the pre-declared namespaces, then in the supplied NamespaceContext object.
        Parameters:
        prefix - The namespace prefix. Must not be null. Must not be the empty string ("") - unqualified names in an XPath expression always refer to the null namespace.
        uri - The namespace URI. Must not be null.
      • clearAllNamespaces

        public void clearAllNamespaces()
        Clear all the declared namespaces, including the standard ones (xml, xslt, saxon). Leave only the XML namespace and the default namespace (xmlns="")
      • setNamespaces

        public void setNamespaces​(NodeInfo node)
        Set all the declared namespaces to be the namespaces that are in-scope for a given node. In addition, the standard namespaces (xml, xslt, saxon) are declared.
        Parameters:
        node - The node whose in-scope namespaces are to be used as the context namespaces. Note that this will have no effect unless this node is an element.
      • setBaseURI

        public void setBaseURI​(java.lang.String baseURI)
        Set the base URI in the static context
      • declareCollation

        public void declareCollation​(java.lang.String name,
                                     java.util.Comparator comparator,
                                     boolean isDefault)
        Declare a named collation
        Parameters:
        name - The name of the collation (technically, a URI)
        comparator - The Java Comparator used to implement the collating sequence
        isDefault - True if this is to be used as the default collation
      • getStackFrameMap

        public SlotManager getStackFrameMap()
        Get the stack frame map containing the slot number allocations for the variables declared in this static context
      • declareVariable

        public Variable declareVariable​(java.lang.String qname,
                                        java.lang.Object initialValue)
                                 throws XPathException
        Declare a variable. A variable may be declared before an expression referring to it is compiled. Alternatively, a JAXP XPathVariableResolver may be supplied to perform the resolution. A variable that has been explicitly declared is used in preference.
        Parameters:
        qname - Lexical QName identifying the variable. The namespace prefix, if any, must have been declared before this method is called, or must be resolvable using the namespace context.
        initialValue - The initial value of the variable. A Java object that can be converted to an XPath value.
        Throws:
        XPathException
      • setXPathVariableResolver

        public void setXPathVariableResolver​(javax.xml.xpath.XPathVariableResolver resolver)
        Set an XPathVariableResolver. This is used to resolve variable references if no variable has been explicitly declared.
        Parameters:
        resolver - A JAXP 1.3 XPathVariableResolver
      • getXPathVariableResolver

        public javax.xml.xpath.XPathVariableResolver getXPathVariableResolver()
        Get the XPathVariableResolver
      • setXPathFunctionResolver

        public void setXPathFunctionResolver​(javax.xml.xpath.XPathFunctionResolver xPathFunctionResolver)
      • getXPathFunctionResolver

        public javax.xml.xpath.XPathFunctionResolver getXPathFunctionResolver()
      • issueWarning

        public void issueWarning​(java.lang.String s,
                                 javax.xml.transform.SourceLocator locator)
        Issue a compile-time warning. This method is used during XPath expression compilation to output warning conditions. The default implementation writes the message to System.err. To change the destination of messages, create a subclass of StandaloneContext that overrides this method.
        Specified by:
        issueWarning in interface StaticContext
      • getSystemId

        public java.lang.String getSystemId()
        Get the system ID of the container of the expression. Used to construct error messages.
        Specified by:
        getSystemId in interface StaticContext
        Returns:
        "" always
      • getBaseURI

        public java.lang.String getBaseURI()
        Get the Base URI of the stylesheet element, for resolving any relative URI's used in the expression. Used by the document() function, resolve-uri(), etc.
        Specified by:
        getBaseURI in interface StaticContext
        Returns:
        "" if no base URI has been set
      • getLineNumber

        public int getLineNumber()
        Get the line number of the expression within that container. Used to construct error messages.
        Specified by:
        getLineNumber in interface StaticContext
        Returns:
        -1 always
      • getURIForPrefix

        public java.lang.String getURIForPrefix​(java.lang.String prefix)
                                         throws XPathException
        Get the URI for a prefix, using the declared namespaces as the context for namespace resolution. The default namespace is NOT used when the prefix is empty. This method is provided for use by the XPath parser.
        Specified by:
        getURIForPrefix in interface StaticContext
        Parameters:
        prefix - The prefix
        Throws:
        XPathException - if the prefix is not declared
      • getURIForPrefix

        public java.lang.String getURIForPrefix​(java.lang.String prefix,
                                                boolean useDefault)
        Get the namespace URI corresponding to a given prefix. Return null if the prefix is not in scope. This method first searches any namespaces declared using declareNamespace(String, String), and then searches any namespace context supplied using setNamespaceContext(javax.xml.namespace.NamespaceContext).
        Specified by:
        getURIForPrefix in interface NamespaceResolver
        Parameters:
        prefix - the namespace prefix
        useDefault - true if the default namespace is to be used when the prefix is ""
        Returns:
        the uri for the namespace, or null if the prefix is not in scope. Return "" if the prefix maps to the null namespace.
      • bindVariable

        public VariableReference bindVariable​(int fingerprint)
                                       throws StaticError
        Bind a variable used in an XPath Expression to the XSLVariable element in which it is declared. This method is provided for use by the XPath parser, and it should not be called by the user of the API, or overridden, unless variables are to be declared using a mechanism other than the declareVariable method of this class.

        If the variable has been explicitly declared using declareVariable(String, Object), that value is used; otherwise if a variable resolved has been supplied using setXPathVariableResolver(javax.xml.xpath.XPathVariableResolver) then that is used.

        Specified by:
        bindVariable in interface StaticContext
        Parameters:
        fingerprint - the name of the variable
        Returns:
        a VariableReference representing the variable reference, suitably initialized to refer to the corresponding variable declaration
        Throws:
        StaticError - If no variable with the given name is found, or if the value supplied for the variable cannot be converted to an XPath value.
      • setFunctionLibrary

        public void setFunctionLibrary​(FunctionLibrary lib)
        Set the function library to be used
      • getCollation

        public java.util.Comparator getCollation​(java.lang.String name)
        Get a named collation.
        Specified by:
        getCollation in interface StaticContext
        Parameters:
        name - The name of the required collation. Supply null to get the default collation.
        Returns:
        the collation identified by the given name, as set previously using declareCollation. Return null if no collation with this name is found.
      • getDefaultCollationName

        public java.lang.String getDefaultCollationName()
        Get the name of the default collation.
        Specified by:
        getDefaultCollationName in interface StaticContext
        Returns:
        the name of the default collation; or the name of the codepoint collation if no default collation has been defined
      • setDefaultElementNamespace

        public void setDefaultElementNamespace​(java.lang.String uri)
        Set the default namespace for element and type names
      • getDefaultElementNamespace

        public short getDefaultElementNamespace()
        Get the default XPath namespace, as a namespace code that can be looked up in the NamePool
        Specified by:
        getDefaultElementNamespace in interface StaticContext
      • setDefaultFunctionNamespace

        public void setDefaultFunctionNamespace​(java.lang.String uri)
        Set the default function namespace
      • setBackwardsCompatibilityMode

        public void setBackwardsCompatibilityMode​(boolean backwardsCompatible)
        Set XPath 1.0 backwards compatibility mode
        Parameters:
        backwardsCompatible - if true, expressions will be evaluated with XPath 1.0 compatibility mode set to true.
      • isInBackwardsCompatibleMode

        public boolean isInBackwardsCompatibleMode()
        Determine whether Backwards Compatible Mode is used
        Specified by:
        isInBackwardsCompatibleMode in interface StaticContext
        Returns:
        false; XPath 1.0 compatibility mode is not supported in the standalone XPath API
      • importSchema

        public void importSchema​(javax.xml.transform.Source source)
                          throws SchemaException
        Import a schema. This is possible only if the schema-aware version of Saxon is being used, and if the Configuration is a SchemaAwareConfiguration. Having imported a schema, the types defined in that schema become part of the static context.
        Parameters:
        source - A Source object identifying the schema document to be loaded
        Throws:
        SchemaException - if the schema contained in this document is invalid
        java.lang.UnsupportedOperationException - if the configuration is not schema-aware
      • isImportedSchema

        public boolean isImportedSchema​(java.lang.String namespace)
        Determine whether a Schema for a given target namespace has been imported. Note that the in-scope element declarations, attribute declarations and schema types are the types registered with the (schema-aware) configuration, provided that their namespace URI is registered in the static context as being an imported schema namespace. (A consequence of this is that within a Configuration, there can only be one schema for any given namespace, including the null namespace).
        Specified by:
        isImportedSchema in interface StaticContext
        Returns:
        This implementation always returns false: the standalone XPath API does not support schema-aware processing.
      • getImportedSchemaNamespaces

        public java.util.Set getImportedSchemaNamespaces()
        Get the set of imported schemas
        Specified by:
        getImportedSchemaNamespaces in interface StaticContext
        Returns:
        a Set, the set of URIs representing the names of imported schemas
      • isAllowedBuiltInType

        public boolean isAllowedBuiltInType​(AtomicType type)
        Determine whether a built-in type is available in this context. This method caters for differences between host languages as to which set of types are built in.
        Specified by:
        isAllowedBuiltInType in interface StaticContext
        Parameters:
        type - the supposedly built-in type. This will always be a type in the XS or XDT namespace.
        Returns:
        true if this type can be used in this static context