net.sf.saxon.sxpath

Class IndependentContext

public class IndependentContext extends AbstractStaticContext implements XPathStaticContext, NamespaceResolver, Serializable, Container

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.

Constructor Summary
IndependentContext()
Create an IndependentContext along with a new (non-schema-aware) Saxon Configuration
IndependentContext(Configuration config)
Create an IndependentContext using a specific Configuration
Method Summary
ExpressionbindVariable(StructuredQName qName)
Bind a variable used in an XPath Expression to the XSLVariable element in which it is declared.
voidclearAllNamespaces()
Clear all the declared namespaces, including the standard ones (xml, xslt, saxon).
voidclearNamespaces()
Clear all the declared namespaces, except for the standard ones (xml, xslt, saxon, xdt).
IndependentContextcopy()
Create a copy of this IndependentContext.
voiddeclareNamespace(String prefix, String uri)
Declare a namespace whose prefix can be used in expressions
XPathVariabledeclareVariable(QNameValue qname)
Declare a variable.
XPathVariabledeclareVariable(String namespaceURI, String localName)
Declare a variable.
XPathVariabledeclareVariable(StructuredQName qName)
Declare a variable.
intgetContainerGranularity()
Get the granularity of the container.
XPathVariablegetExternalVariable(StructuredQName qName)
Get the declared variable with a given name, if there is one
SetgetImportedSchemaNamespaces()
Get the set of imported schemas
NamespaceResolvergetNamespaceResolver()
intgetSlotNumber(QNameValue qname)
Get the slot number allocated to a particular variable
SlotManagergetStackFrameMap()
Get a Stack Frame Map containing definitions of all the declared variables.
StringgetURIForPrefix(String prefix)
Get the URI for a prefix, using the declared namespaces as the context for namespace resolution.
StringgetURIForPrefix(String prefix, boolean useDefault)
Get the namespace URI corresponding to a given prefix.
booleanisAllowUndeclaredVariables()
Ask whether undeclared variables are allowed.
booleanisImportedSchema(String namespace)
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.
IteratoriteratePrefixes()
Get an iterator over all the prefixes declared in this namespace context.
voidsetAllowUndeclaredVariables(boolean allow)
Say whether undeclared variables are allowed.
voidsetImportedSchemaNamespaces(Set namespaces)
Register the set of imported schema namespaces
voidsetNamespaceResolver(NamespaceResolver resolver)
Set an external namespace resolver.
voidsetNamespaces(NodeInfo node)
Declares all the namespaces that are in-scope for a given node, removing all previous namespace declarations.

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

Method Detail

bindVariable

public Expression bindVariable(StructuredQName qName)
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.

Parameters: qName the name of the variable

Returns: the resulting variable reference

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.

clearNamespaces

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

copy

public IndependentContext copy()
Create a copy of this IndependentContext. All aspects of the context are copied except for declared variables.

Returns: the new copy

declareNamespace

public void declareNamespace(String prefix, 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.

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

Parameters: qname The name of the variable

Returns: an XPathVariable object representing information about the variable that has been declared.

declareVariable

public XPathVariable declareVariable(String namespaceURI, 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

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

getContainerGranularity

public int getContainerGranularity()
Get the granularity of the container.

Returns: 0 for a temporary container created during parsing; 1 for a container that operates at the level of an XPath expression; 2 for a container at the level of a global function or template

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

getImportedSchemaNamespaces

public Set getImportedSchemaNamespaces()
Get the set of imported schemas

Returns: a Set, the set of URIs representing the names of imported schemas

getNamespaceResolver

public NamespaceResolver getNamespaceResolver()

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

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.

getURIForPrefix

public String getURIForPrefix(String prefix)
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.

Parameters: prefix The prefix

Throws: net.sf.saxon.trans.XPathException if the prefix is not declared

getURIForPrefix

public String getURIForPrefix(String prefix, boolean useDefault)
Get the namespace URI corresponding to a given prefix. Return null if the prefix is not in scope.

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.

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

isImportedSchema

public boolean isImportedSchema(String namespace)

iterateExternalVariables

public 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

iteratePrefixes

public Iterator 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

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

setImportedSchemaNamespaces

public void setImportedSchemaNamespaces(Set namespaces)
Register the set of imported schema namespaces

Parameters: namespaces the set of namespaces for which schema components are available in the static context

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.

Parameters: resolver the external NamespaceResolver

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.