Package net.sf.saxon.sxpath

## Class IndependentContext

- java.lang.Object
- - net.sf.saxon.sxpath.AbstractStaticContext
  - - net.sf.saxon.sxpath.IndependentContext

- All Implemented Interfaces:
    `StaticContext`, `NamespaceResolver`, `XPathStaticContext`
  Direct Known Subclasses:
    `SchemaElement.XPathStaticContext`

      public class IndependentContext
      extends AbstractStaticContext
      implements XPathStaticContext, NamespaceResolver

  An IndependentContext provides a context for parsing an XPath expression appearing in a context other than a stylesheet.

  This class is used in a number of places where freestanding XPath expressions occur. These include the native Saxon XPath API, the .NET XPath API, XPath expressions used in XML Schema identity constraints, and XPath expressions supplied to saxon:evaluate(). It is not used by the JAXP XPath API (though it shares code with that API through the common superclass AbstractStaticContext).

  This class currently provides no mechanism for binding user-defined functions.

- - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected boolean` | `autoDeclare` |
    `protected Executable` | `executable` |
    `protected NamespaceResolver` | `externalResolver` |
    `protected java.util.Set<java.lang.String>` | `importedSchemaNamespaces` |
    `protected java.util.HashMap<java.lang.String,​java.lang.String>` | `namespaces` |
    `protected OptimizerOptions` | `optimizerOptions` |
    `protected boolean` | `parentlessContextItem` |
    `protected ItemType` | `requiredContextItemType` |
    `protected RetainedStaticContext` | `retainedStaticContext` |
    `protected java.util.HashMap<StructuredQName,​XPathVariable>` | `variables` |

    - ### Fields inherited from class net.sf.saxon.sxpath.AbstractStaticContext

      `usingDefaultFunctionLibrary`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `IndependentContext()` | Create an IndependentContext along with a new (non-schema-aware) Saxon Configuration
    `IndependentContext​(Configuration config)` | Create an IndependentContext using a specific Configuration
    `IndependentContext​(IndependentContext ic)` | Create a IndependentContext as a copy of another IndependentContext

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `Expression` | `bindVariable​(StructuredQName qName)` | Bind a variable used in an XPath Expression to the XSLVariable element in which it is declared.
    `void` | `clearAllNamespaces()` | Clear all the declared namespaces, including the standard ones (xml, xslt, saxon).
    `void` | `clearNamespaces()` | Clear all the declared namespaces, except for the standard ones (xml, xsl, saxon).
    `void` | `declareNamespace​(java.lang.String prefix, java.lang.String uri)` | Declare a namespace whose prefix can be used in expressions
    `XPathVariable` | `declareVariable​(java.lang.String namespaceURI, java.lang.String localName)` | Declare a variable.
    `XPathVariable` | `declareVariable​(StructuredQName qName)` | Declare a variable.
    `XPathVariable` | `declareVariable​(QNameValue qname)` | Declare a variable.
    `int` | `getColumnNumber()` |
    `java.util.Collection<XPathVariable>` | `getDeclaredVariables()` |
    `Executable` | `getExecutable()` |
    `XPathVariable` | `getExternalVariable​(StructuredQName qName)` | Get the declared variable with a given name, if there is one
    `java.util.Set<java.lang.String>` | `getImportedSchemaNamespaces()` | Get the set of imported schemas
    `int` | `getLineNumber()` |
    `NamespaceResolver` | `getNamespaceResolver()` | Get a namespace resolver to resolve the namespaces declared in this static context.
    `OptimizerOptions` | `getOptimizerOptions()` | Get the optimizer options being used for compiling expressions that use this static context.
    `java.lang.String` | `getPublicId()` |
    `ItemType` | `getRequiredContextItemType()` | Get the required type of the context item.
    `int` | `getSlotNumber​(QNameValue qname)` | Get the slot number allocated to a particular variable
    `SlotManager` | `getStackFrameMap()` | Get a Stack Frame Map containing definitions of all the declared variables.
    `java.lang.String` | `getURIForPrefix​(java.lang.String prefix, boolean useDefault)` | Get the namespace URI corresponding to a given prefix.
    `boolean` | `isAllowUndeclaredVariables()` | Ask whether undeclared variables are allowed.
    `boolean` | `isContextItemParentless()` | Ask whether the context item is known to be parentless
    `boolean` | `isImportedSchema​(java.lang.String namespace)` | Ask whether a Schema for a given target namespace has been imported.
    `java.util.Iterator<XPathVariable>` | `iterateExternalVariables()` | Get an iterator over all the variables that have been declared, either explicitly by an application call on declareVariable(), or implicitly if the option `allowUndeclaredVariables` is set.
    `java.util.Iterator<java.lang.String>` | `iteratePrefixes()` | Get an iterator over all the prefixes declared in this namespace context.
    `RetainedStaticContext` | `makeRetainedStaticContext()` | Construct a RetainedStaticContext, which extracts information from this StaticContext to provide the subset of static context information that is potentially needed during expression evaluation.
    `void` | `setAllowUndeclaredVariables​(boolean allow)` | Say whether undeclared variables are allowed.
    `void` | `setContextItemParentless​(boolean parentless)` |
    `void` | `setDefaultElementNamespace​(java.lang.String uri)` | Set the default namespace for elements and types
    `void` | `setExecutable​(Executable exec)` |
    `void` | `setImportedSchemaNamespaces​(java.util.Set<java.lang.String> namespaces)` | Register the set of imported schema namespaces
    `void` | `setNamespaceResolver​(NamespaceResolver resolver)` | Set an external namespace resolver.
    `void` | `setNamespaces​(NodeInfo node)` | Declares all the namespaces that are in-scope for a given node, removing all previous namespace declarations.
    `void` | `setOptimizerOptions​(OptimizerOptions options)` | Set the optimizer options to be used for compiling expressions that use this static context.
    `void` | `setRequiredContextItemType​(ItemType type)` | Declare the static type of the context item.

    - ### Methods inherited from class net.sf.saxon.sxpath.AbstractStaticContext

      `addFunctionLibrary, getConfiguration, getContainingLocation, getDecimalFormatManager, getDefaultCollationName, getDefaultElementNamespace, getDefaultFunctionNamespace, getFunctionLibrary, getKeyManager, getPackageData, getStaticBaseURI, getSystemId, getUnprefixedElementMatchingPolicy, getWarningHandler, getXPathVersion, isInBackwardsCompatibleMode, issueWarning, makeEarlyEvaluationContext, resolveTypeAlias, setBackwardsCompatibilityMode, setBaseURI, setConfiguration, setContainingLocation, setDecimalFormatManager, setDefaultCollationName, setDefaultFunctionLibrary, setDefaultFunctionLibrary, setDefaultFunctionNamespace, setFunctionLibrary, setPackageData, setSchemaAware, setTypeAlias, setUnprefixedElementMatchingPolicy, setWarningHandler, setXPathLanguageLevel`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface net.sf.saxon.expr.StaticContext

      `getConfiguration, getContainingLocation, getDecimalFormatManager, getDefaultCollationName, getDefaultElementNamespace, getDefaultFunctionNamespace, getFunctionLibrary, getKeyManager, getPackageData, getStaticBaseURI, getSystemId, getUnprefixedElementMatchingPolicy, getXPathVersion, isInBackwardsCompatibleMode, issueWarning, makeEarlyEvaluationContext, resolveTypeAlias`

- - ### Field Detail

    - #### namespaces

          protected java.util.HashMap<java.lang.String,​java.lang.String> namespaces

    - #### variables

          protected java.util.HashMap<StructuredQName,​XPathVariable> variables

    - #### externalResolver

          protected NamespaceResolver externalResolver

    - #### requiredContextItemType

          protected ItemType requiredContextItemType

    - #### importedSchemaNamespaces

          protected java.util.Set<java.lang.String> importedSchemaNamespaces

    - #### autoDeclare

          protected boolean autoDeclare

    - #### executable

          protected Executable executable

    - #### retainedStaticContext

          protected RetainedStaticContext retainedStaticContext

    - #### optimizerOptions

          protected OptimizerOptions optimizerOptions

    - #### parentlessContextItem

          protected boolean parentlessContextItem

  - ### Constructor Detail

    - #### IndependentContext

          public IndependentContext()

      Create an IndependentContext along with a new (non-schema-aware) Saxon Configuration

    - #### IndependentContext

          public IndependentContext​(Configuration config)

      Create an IndependentContext using a specific Configuration
      Parameters:
        `config` - the Saxon configuration to be used

    - #### IndependentContext

          public IndependentContext​(IndependentContext ic)

      Create a IndependentContext as a copy of another IndependentContext
      Parameters:
        `ic` - the IndependentContext to be copied

  - ### Method Detail

    - #### makeRetainedStaticContext

          public RetainedStaticContext makeRetainedStaticContext()

      Construct a RetainedStaticContext, which extracts information from this StaticContext to provide the subset of static context information that is potentially needed during expression evaluation. This implementation returns the same RetainedStaticContext object each time, which relies on the information in the static context being effectively immutable while the IndependentContext object remains in use.
      Specified by:
        `makeRetainedStaticContext` in interface `StaticContext`
      Overrides:
        `makeRetainedStaticContext` in class `AbstractStaticContext`
      Returns:
        a RetainedStaticContext object: either a newly created one, or one that is reused from a previous invocation.

    - #### declareNamespace

          public void declareNamespace​(java.lang.String prefix,
                                       java.lang.String uri)

      Declare a namespace whose prefix can be used in expressions
      Parameters:
        `prefix` - The namespace prefix. Must not be null. Supplying "" sets the default element namespace.
        `uri` - The namespace URI. Must not be null.

    - #### setDefaultElementNamespace

          public void setDefaultElementNamespace​(java.lang.String uri)

      Set the default namespace for elements and types
      Specified by:
        `setDefaultElementNamespace` in interface `XPathStaticContext`
      Overrides:
        `setDefaultElementNamespace` in class `AbstractStaticContext`
      Parameters:
        `uri` - the namespace to be used for unprefixed element and type names. The value "" (or NamespaceConstant.NULL) represents the non-namespace

    - #### clearNamespaces

          public void clearNamespaces()

      Clear all the declared namespaces, except for the standard ones (xml, xsl, saxon). This also resets the default element namespace to the "null" namespace

    - #### 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=""). This also resets the default element namespace to the "null" namespace.

    - #### setNamespaces

          public void setNamespaces​(NodeInfo node)

      Declares all the namespaces that are in-scope for a given node, removing all previous namespace declarations. In addition, the standard namespaces (xml, xslt, saxon) are declared. This method also sets the default element namespace to be the same as the default namespace for this node.
      Parameters:
        `node` - The node whose in-scope namespaces are to be used as the context namespaces. If the node is an attribute, text node, etc, then the namespaces of its parent element are used.

    - #### setNamespaceResolver

          public void setNamespaceResolver​(NamespaceResolver resolver)

      Set an external namespace resolver. If this is set, then all resolution of namespace prefixes is delegated to the external namespace resolver, and namespaces declared individually on this IndependentContext object are ignored.
      Specified by:
        `setNamespaceResolver` in interface `XPathStaticContext`
      Parameters:
        `resolver` - the external NamespaceResolver

    - #### setAllowUndeclaredVariables

          public void setAllowUndeclaredVariables​(boolean allow)

      Say whether undeclared variables are allowed. By default, they are not allowed. When undeclared variables are allowed, it is not necessary to predeclare the variables that may be used in the XPath expression; instead, a variable is automatically declared when a reference to the variable is encountered within the expression.
      Parameters:
        `allow` - true if undeclared variables are allowed, false if they are not allowed.
      Since:
        9.2

    - #### isAllowUndeclaredVariables

          public boolean isAllowUndeclaredVariables()

      Ask whether undeclared variables are allowed. By default, they are not allowed. When undeclared variables are allowed, it is not necessary to predeclare the variables that may be used in the XPath expression; instead, a variable is automatically declared when a reference to the variable is encountered within the expression.
      Returns:
        true if undeclared variables are allowed, false if they are not allowed.
      Since:
        9.2

    - #### declareVariable

          public XPathVariable declareVariable​(QNameValue qname)

      Declare a variable. A variable must be declared before an expression referring to it is compiled. The initial value of the variable will be the empty sequence
      Specified by:
        `declareVariable` in interface `XPathStaticContext`
      Parameters:
        `qname` - The name of the variable
      Returns:
        an XPathVariable object representing information about the variable that has been declared.

    - #### declareVariable

          public XPathVariable declareVariable​(java.lang.String namespaceURI,
                                               java.lang.String localName)

      Declare a variable. A variable must be declared before an expression referring to it is compiled. The initial value of the variable will be the empty sequence
      Specified by:
        `declareVariable` in interface `XPathStaticContext`
      Parameters:
        `namespaceURI` - The namespace URI of the name of the variable. Supply "" to represent names in no namespace (null is also accepted)
        `localName` - The local part of the name of the variable (an NCName)
      Returns:
        an XPathVariable object representing information about the variable that has been declared.

    - #### declareVariable

          public XPathVariable declareVariable​(StructuredQName qName)

      Declare a variable. A variable must be declared before an expression referring to it is compiled. The initial value of the variable will be the empty sequence
      Parameters:
        `qName` - the name of the variable.
      Returns:
        an XPathVariable object representing information about the variable that has been declared.
      Since:
        9.2

    - #### iterateExternalVariables

          public java.util.Iterator<XPathVariable> iterateExternalVariables()

      Get an iterator over all the variables that have been declared, either explicitly by an application call on declareVariable(), or implicitly if the option `allowUndeclaredVariables` is set.
      Returns:
        an iterator; the objects returned by this iterator will be instances of XPathVariable
      Since:
        9.2

    - #### getExternalVariable

          public XPathVariable getExternalVariable​(StructuredQName qName)

      Get the declared variable with a given name, if there is one
      Parameters:
        `qName` - the name of the required variable
      Returns:
        the explicitly or implicitly declared variable with this name if it exists, or null otherwise
      Since:
        9.2

    - #### getSlotNumber

          public int getSlotNumber​(QNameValue qname)

      Get the slot number allocated to a particular variable
      Parameters:
        `qname` - the name of the variable
      Returns:
        the slot number, or -1 if the variable has not been declared

    - #### getNamespaceResolver

          public NamespaceResolver getNamespaceResolver()

      Description copied from interface: `StaticContext`
      Get a namespace resolver to resolve the namespaces declared in this static context.
      Specified by:
        `getNamespaceResolver` in interface `StaticContext`
      Returns:
        a namespace resolver.

    - #### 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.
      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.

    - #### iteratePrefixes

          public java.util.Iterator<java.lang.String> iteratePrefixes()

      Get an iterator over all the prefixes declared in this namespace context. This will include the default namespace (prefix="") and the XML namespace where appropriate
      Specified by:
        `iteratePrefixes` in interface `NamespaceResolver`
      Returns:
        an iterator over all the prefixes for which a namespace binding exists, including the zero-length string to represent the null/absent prefix if it is bound

    - #### bindVariable

          public Expression bindVariable​(StructuredQName qName)
                                  throws XPathException

      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.
      Specified by:
        `bindVariable` in interface `StaticContext`
      Parameters:
        `qName` - the name of the variable
      Returns:
        the resulting variable reference
      Throws:
        `XPathException` - if the variable cannot be bound (has not been declared)

    - #### getStackFrameMap

          public SlotManager getStackFrameMap()

      Get a Stack Frame Map containing definitions of all the declared variables. This will return a newly created object that the caller is free to modify by adding additional variables, without affecting the static context itself.
      Specified by:
        `getStackFrameMap` in interface `XPathStaticContext`
      Returns:
        a SlotManager object holding details of the allocation of variables on the stack frame.

    - #### getDeclaredVariables

          public java.util.Collection<XPathVariable> getDeclaredVariables()

    - #### isImportedSchema

          public boolean isImportedSchema​(java.lang.String namespace)

      Description copied from interface: `StaticContext`
      Ask 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`
      Parameters:
        `namespace` - the target namespace in question
      Returns:
        true if the given namespace has been imported

    - #### getImportedSchemaNamespaces

          public java.util.Set<java.lang.String> 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

    - #### setImportedSchemaNamespaces

          public void setImportedSchemaNamespaces​(java.util.Set<java.lang.String> namespaces)

      Register the set of imported schema namespaces
      Parameters:
        `namespaces` - the set of namespaces for which schema components are available in the static context

    - #### setRequiredContextItemType

          public void setRequiredContextItemType​(ItemType type)

      Declare the static type of the context item. If this type is declared, and if a context item is supplied when the query is invoked, then the context item must conform to this type (no type conversion will take place to force it into this type).
      Parameters:
        `type` - the required type of the context item
      Since:
        9.3

    - #### getRequiredContextItemType

          public ItemType getRequiredContextItemType()

      Get the required type of the context item. If no type has been explicitly declared for the context item, an instance of AnyItemType (representing the type item()) is returned.
      Specified by:
        `getRequiredContextItemType` in interface `StaticContext`
      Overrides:
        `getRequiredContextItemType` in class `AbstractStaticContext`
      Returns:
        the required type of the context item
      Since:
        9.3

    - #### setOptimizerOptions

          public void setOptimizerOptions​(OptimizerOptions options)

      Set the optimizer options to be used for compiling expressions that use this static context. By default the optimizer options set in the `Configuration` are used.
      Parameters:
        `options` - the optimizer options to be used

    - #### getOptimizerOptions

          public OptimizerOptions getOptimizerOptions()

      Get the optimizer options being used for compiling expressions that use this static context. By default the optimizer options set in the `Configuration` are used.
      Specified by:
        `getOptimizerOptions` in interface `StaticContext`
      Returns:
        the optimizer options being used

    - #### setExecutable

          public void setExecutable​(Executable exec)

    - #### getExecutable

          public Executable getExecutable()

    - #### getColumnNumber

          public int getColumnNumber()

    - #### getPublicId

          public java.lang.String getPublicId()

    - #### getLineNumber

          public int getLineNumber()

    - #### isContextItemParentless

          public boolean isContextItemParentless()

      Ask whether the context item is known to be parentless
      Specified by:
        `isContextItemParentless` in interface `XPathStaticContext`
      Returns:
        true if it is known that the context item for evaluating the expression will have no parent

    - #### setContextItemParentless

          public void setContextItemParentless​(boolean parentless)