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 TypeMethodDescriptionintallocateSlots(StaticContext env, SlotManager slotManager, int nextFree) Allocate slots to any variables used within the patternanalyze(ExpressionVisitor visitor, ExpressionVisitor.ContextItemType contextItemType) Type-check the pattern.intGet the column number (always -1)intGet the granularity of the container.doubleDetermine the default priority to use if this pattern appears as a match pattern for a template with no explicit priority attribute.intGet the dependencies of the pattern.Get the executable containing this patternintDetermine the name fingerprint of nodes to which this pattern applies.intGet the host language (XSLT, XQuery, XPath) used to implement the code in this containerabstract ItemTypeGet an ItemType that all the items matching this pattern must satisfyintGet the line number on which the pattern was definedGet the LocationProvider allowing location identifiers to be resolved.intDetermine 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 booleaninternalMatches(NodeInfo node, NodeInfo anchor, XPathContext context) Determine whether this Pattern matches the given Node.Iterate over the subexpressions within this patternstatic Patternmake(String pattern, StaticContext env, Executable exec) Static factory method to make a Pattern by parsing a String.abstract booleanmatches(Item item, XPathContext context) Determine whether this Pattern matches the given item.booleanmatchesBeneathAnchor(NodeInfo node, NodeInfo anchor, XPathContext context) Determine whether this pattern matches a given Node within the subtree rooted at a given anchor node.voidpromote(PromotionOffer offer, Expression parent) Offer promotion for subexpressions within this pattern.booleanreplaceSubExpression(Expression original, Expression replacement) Replace a subexpression by a replacement subexpressionvoidresolveCurrent(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.voidsetExecutable(Executable executable) Set the executable containing this patternvoidsetLineNumber(int lineNumber) Set the line number where the pattern occurredvoidsetOriginalText(String text) Set the original text of the pattern for use in diagnosticsvoidsetSystemId(String systemId) Set the system ID where the pattern occurredvoidSet 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:
getExecutablein 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:
getLocationProviderin interfaceContainer- Returns:
- the location provider
-
getContainerGranularity
public int getContainerGranularity()Get the granularity of the container.- Specified by:
getContainerGranularityin 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:
selectNodesin 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:
getSystemIdin interfaceSourceLocator
-
getLineNumber
public int getLineNumber()Get the line number on which the pattern was defined- Specified by:
getLineNumberin interfaceSourceLocator
-
getColumnNumber
public int getColumnNumber()Get the column number (always -1)- Specified by:
getColumnNumberin interfaceSourceLocator
-
getPublicId
Get the public ID (always null)- Specified by:
getPublicIdin interfaceSourceLocator
-
toString
-
getHostLanguage
public int getHostLanguage()Get the host language (XSLT, XQuery, XPath) used to implement the code in this container- Specified by:
getHostLanguagein interfaceContainer- Returns:
- typically
Configuration.XSLTorConfiguration.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
-