Package net.sf.saxon.pattern
Class Pattern
java.lang.Object
net.sf.saxon.pattern.Pattern
- All Implemented Interfaces:
Serializable
,SourceLocator
,Container
,PatternFinder
- Direct Known Subclasses:
AnchorPattern
,ConditionalPattern
,ItemTypePattern
,LocationPathPattern
,NodeSetPattern
,PatternWithPredicate
,VennPattern
A Pattern represents the result of parsing an XSLT pattern string.
Patterns are created by calling the static method Pattern.make(string).
The pattern is used to test a particular node by calling match().
Patterns are created by calling the static method Pattern.make(string).
The pattern is used to test a particular node by calling match().
- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionint
allocateSlots
(StaticContext env, SlotManager slotManager, int nextFree) Allocate slots to any variables used within the patternanalyze
(ExpressionVisitor visitor, ExpressionVisitor.ContextItemType contextItemType) Type-check the pattern.int
Get the column number (always -1)int
Get the granularity of the container.double
Determine the default priority to use if this pattern appears as a match pattern for a template with no explicit priority attribute.int
Get the dependencies of the pattern.Get the executable containing this patternint
Determine the name fingerprint of nodes to which this pattern applies.int
Get the host language (XSLT, XQuery, XPath) used to implement the code in this containerabstract ItemType
Get an ItemType that all the items matching this pattern must satisfyint
Get the line number on which the pattern was definedGet the LocationProvider allowing location identifiers to be resolved.int
Determine the types of nodes to which this pattern applies.Get the public ID (always null)Get the system id of the entity in which the pattern occurredprotected boolean
internalMatches
(NodeInfo node, NodeInfo anchor, XPathContext context) Determine whether this Pattern matches the given Node.Iterate over the subexpressions within this patternstatic Pattern
make
(String pattern, StaticContext env, Executable exec) Static factory method to make a Pattern by parsing a String.abstract boolean
matches
(Item item, XPathContext context) Determine whether this Pattern matches the given item.boolean
matchesBeneathAnchor
(NodeInfo node, NodeInfo anchor, XPathContext context) Determine whether this pattern matches a given Node within the subtree rooted at a given anchor node.void
promote
(PromotionOffer offer, Expression parent) Offer promotion for subexpressions within this pattern.boolean
replaceSubExpression
(Expression original, Expression replacement) Replace a subexpression by a replacement subexpressionvoid
resolveCurrent
(LetExpression let, PromotionOffer offer, boolean topLevel) If the pattern contains any calls on current(), this method is called to modify such calls to become variable references to a variable declared in a specially-allocated local variableSequenceIterator<? extends NodeInfo>
selectNodes
(DocumentInfo doc, XPathContext context) Select nodes in a document using this PatternFinder.void
setExecutable
(Executable executable) Set the executable containing this patternvoid
setLineNumber
(int lineNumber) Set the line number where the pattern occurredvoid
setOriginalText
(String text) Set the original text of the pattern for use in diagnosticsvoid
setSystemId
(String systemId) Set the system ID where the pattern occurredvoid
Set an expression used to bind the variable that represents the value of the current() functionsimplify
(ExpressionVisitor visitor) Simplify the pattern by applying any context-independent optimisations.toString()
Get the original pattern text
-
Constructor Details
-
Pattern
public Pattern()
-
-
Method Details
-
make
public static Pattern make(String pattern, StaticContext env, Executable exec) throws XPathException Static factory method to make a Pattern by parsing a String.- Parameters:
pattern
- The pattern text as a Stringenv
- An object defining the compile-time context for the expressionexec
- The executable containing this pattern- Returns:
- The pattern object
- Throws:
XPathException
- if the pattern is invalid
-
getExecutable
Get the executable containing this pattern- Specified by:
getExecutable
in interfaceContainer
- Returns:
- the executable
-
setExecutable
Set the executable containing this pattern- Parameters:
executable
- the executable
-
getLocationProvider
Get the LocationProvider allowing location identifiers to be resolved.- Specified by:
getLocationProvider
in interfaceContainer
- Returns:
- the location provider
-
getContainerGranularity
public int getContainerGranularity()Get the granularity of the container.- Specified by:
getContainerGranularity
in interfaceContainer
- 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
-
setOriginalText
Set the original text of the pattern for use in diagnostics- Parameters:
text
- the original text of the pattern
-
setVariableBindingExpression
Set an expression used to bind the variable that represents the value of the current() function- Parameters:
exp
- the expression that binds the variable
-
simplify
Simplify the pattern by applying any context-independent optimisations. Default implementation does nothing.- Parameters:
visitor
- the expression visitor- Returns:
- the optimised Pattern
- Throws:
XPathException
- if a static error is discovered
-
analyze
public Pattern analyze(ExpressionVisitor visitor, ExpressionVisitor.ContextItemType contextItemType) throws XPathException Type-check the pattern.- Parameters:
visitor
- the expression visitorcontextItemType
- the type of the context item at the point where the pattern is defined. Set to null if it is known that the context item is undefined.- Returns:
- the optimised Pattern
- Throws:
XPathException
- if a static error is discovered
-
getDependencies
public int getDependencies()Get the dependencies of the pattern. The only possible dependency for a pattern is on local variables. This is analyzed in those patterns where local variables may appear.- Returns:
- the dependencies, as a bit-significant mask
-
iterateSubExpressions
Iterate over the subexpressions within this pattern- Returns:
- an iterator over the subexpressions. Default implementation returns an empty sequence
-
allocateSlots
Allocate slots to any variables used within the pattern- Parameters:
env
- the static context in the XSLT stylesheetslotManager
- the slot manager representing the stack frame for local variablesnextFree
- the next slot that is free to be allocated- Returns:
- the next slot that is free to be allocated
-
resolveCurrent
public void resolveCurrent(LetExpression let, PromotionOffer offer, boolean topLevel) throws XPathException If the pattern contains any calls on current(), this method is called to modify such calls to become variable references to a variable declared in a specially-allocated local variable- Parameters:
let
- the expression that assigns the local variable. This returns a dummy result, and is executed just before evaluating the pattern, to get the value of the context item into the variable.offer
- A PromotionOffer used to process the expressions and change the call on current() into a variable referencetopLevel
- true if this is an external call rather than an internal recursive call- Throws:
XPathException
- if an error occurs
-
promote
Offer promotion for subexpressions within this pattern. The offer will be accepted if the subexpression is not dependent on the factors (e.g. the context item) identified in the PromotionOffer. By default the offer is not accepted - this is appropriate in the case of simple expressions such as constant values and variable references where promotion would give no performance advantage. This method is always called at compile time.Unlike the corresponding method on
Expression
, this method does not return anything: it can make internal changes to the pattern, but cannot return a different pattern. Only certain kinds of promotion are applicable within a pattern: specifically, promotions affecting local variable references within the pattern.- Parameters:
offer
- details of the offer, for example the offer to move expressions that don't depend on the context to an outer level in the containing expressionparent
- the expression acting as parent of this pattern- Throws:
XPathException
- if any error is detected
-
setSystemId
Set the system ID where the pattern occurred- Parameters:
systemId
- the URI of the module containing the pattern
-
setLineNumber
public void setLineNumber(int lineNumber) Set the line number where the pattern occurred- Parameters:
lineNumber
- the line number of the pattern in the source module
-
matches
Determine whether this Pattern matches the given item. This is the main external interface for matching patterns: it sets current() to the node being tested- Parameters:
item
- The NodeInfo representing the Element or other node to be tested against the Patterncontext
- The dynamic context. Only relevant if the pattern uses variables, or contains calls on functions such as document() or key().- Returns:
- true if the node matches the Pattern, false otherwise
- Throws:
XPathException
- if a dynamic error occurs during pattern matching
-
matchesBeneathAnchor
public boolean matchesBeneathAnchor(NodeInfo node, NodeInfo anchor, XPathContext context) throws XPathException Determine whether this pattern matches a given Node within the subtree rooted at a given anchor node. This method is used when the pattern is used for streaming.- Parameters:
node
- The NodeInfo representing the Element or other node to be tested against the Patternanchor
- The anchor node, which must match any AnchorPattern subpatterncontext
- The dynamic context. Only relevant if the pattern uses variables, or contains calls on functions such as document() or key().- Returns:
- true if the node matches the Pattern, false otherwise
- Throws:
XPathException
- if a dynamic error occurs during pattern matching
-
internalMatches
protected boolean internalMatches(NodeInfo node, NodeInfo anchor, XPathContext context) throws XPathException Determine whether this Pattern matches the given Node. This is an internal interface used for matching sub-patterns; it does not alter the value of current(). The default implementation is identical to matches().- Parameters:
node
- The NodeInfo representing the Element or other node to be tested against the Patternanchor
- The anchor node, which must match any AnchorPattern subpatterncontext
- The dynamic context. Only relevant if the pattern uses variables, or contains calls on functions such as document() or key(). @return true if the node matches the Pattern, false otherwise- Returns:
- true if the pattern matches the supplied node
- Throws:
XPathException
- if a dynamic error occurs during pattern matching
-
selectNodes
public SequenceIterator<? extends NodeInfo> selectNodes(DocumentInfo doc, XPathContext context) throws XPathException Select nodes in a document using this PatternFinder.- Specified by:
selectNodes
in interfacePatternFinder
- Parameters:
doc
- the document node at the root of a treecontext
- the dynamic evaluation context- Returns:
- an iterator over the selected nodes in the document.
- Throws:
XPathException
-
getNodeKind
public int getNodeKind()Determine the types of nodes to which this pattern applies. Used for optimisation. For patterns that match nodes of several types, return Type.NODE. For patterns that do not match nodes, return -1.- Returns:
- the type of node matched by this pattern. e.g. Type.ELEMENT or Type.TEXT
-
getFingerprint
public int getFingerprint()Determine the name fingerprint of nodes to which this pattern applies. Used for optimisation.- Returns:
- A fingerprint that the nodes must match, or -1 if it can match multiple fingerprints, or it if matches atomic values
-
getItemType
Get an ItemType that all the items matching this pattern must satisfy- Returns:
- an ItemType, as specific as possible, which all the matching items satisfy
-
getDefaultPriority
public double getDefaultPriority()Determine the default priority to use if this pattern appears as a match pattern for a template with no explicit priority attribute.- Returns:
- the default priority for the pattern
-
getSystemId
Get the system id of the entity in which the pattern occurred- Specified by:
getSystemId
in interfaceSourceLocator
-
getLineNumber
public int getLineNumber()Get the line number on which the pattern was defined- Specified by:
getLineNumber
in interfaceSourceLocator
-
getColumnNumber
public int getColumnNumber()Get the column number (always -1)- Specified by:
getColumnNumber
in interfaceSourceLocator
-
getPublicId
Get the public ID (always null)- Specified by:
getPublicId
in interfaceSourceLocator
-
toString
Get the original pattern text -
getHostLanguage
public int getHostLanguage()Get the host language (XSLT, XQuery, XPath) used to implement the code in this container- Specified by:
getHostLanguage
in interfaceContainer
- Returns:
- typically
Configuration.XSLT
orConfiguration.XQUERY
-
replaceSubExpression
Replace a subexpression by a replacement subexpression- Parameters:
original
- the expression to be replacedreplacement
- the new expression to be inserted in its place- Returns:
- true if the replacement was carried out
-