Package net.sf.saxon.pattern
Class Pattern
java.lang.Object
net.sf.saxon.expr.Expression
net.sf.saxon.expr.PseudoExpression
net.sf.saxon.pattern.Pattern
- All Implemented Interfaces:
ExportAgent
,Locatable
,IdentityComparable
,Traceable
- Direct Known Subclasses:
AncestorQualifiedPattern
,AnchorPattern
,BasePatternWithPredicate
,BooleanExpressionPattern
,GeneralNodePattern
,GeneralPositionalPattern
,ItemTypePattern
,NodeSetPattern
,NodeTestPattern
,PatternThatSetsCurrent
,SimplePositionalPattern
,StreamingFunctionArgumentPattern
,UniversalPattern
,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().
-
Field Summary
Fields inherited from class net.sf.saxon.expr.Expression
EFFECTIVE_BOOLEAN_VALUE, EVALUATE_METHOD, ITEM_FEED_METHOD, ITERATE_METHOD, MAX_COST, MAX_SEQUENCE_LENGTH, MAX_STRING_LENGTH, PROCESS_METHOD, staticProperties, UNBOUNDED_LOWER, UNBOUNDED_UPPER, UPDATE_METHOD, WATCH_METHOD
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionint
allocateSlots
(SlotManager slotManager, int nextFree) Allocate slots to any variables used within the patternvoid
bindCurrent
(LocalBinding binding) Replace any calls on current() by a variable reference bound to the supplied bindingConvert the pattern to a typed pattern, in which an element name is treated as schema-element(N)abstract Pattern
copy
(RebindingMap rebindings) Copy an expression.final boolean
effectiveBooleanValue
(XPathContext context) Evaluate a pattern as a boolean expression, returning true if the context item matches the patternabstract void
export
(ExpressionPresenter presenter) Diagnostic print of expression structure.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.Make an elaborator for this expressionint
Determine the name fingerprint of nodes to which this pattern applies.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 satisfyGet the original text of the pattern as written, if available.abstract UType
getUType()
Get a UType indicating which kinds of items this Pattern can match.protected void
handleDynamicError
(XPathException ex, XPathContext context) Handle a dynamic error occurring in the course of pattern evaluation.boolean
isLiftable
(boolean forStreaming) Ask whether the expression can be lifted out of a loop, assuming it has no dependencies on the controlling variable/focus of the loopboolean
Test whether a pattern is motionless, that is, whether it can be evaluated against a node without repositioning the input stream.boolean
Ask whether dynamic errors in evaluating the pattern should be recovered.static Pattern
make
(String pattern, StaticContext env, PackageData packageData) 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.boolean
Ask whether the pattern is anchored on a call on current-group()final boolean
matchesItem
(Item item, XPathContext context) Determine whether this Pattern matches the given item.optimize
(ExpressionVisitor visitor, ContextItemStaticInfo contextInfo) Perform optimisation of an expression and its subexpressions.static boolean
patternContainsVariable
(Pattern pattern) Ask whether a pattern has dependencies on local variablesReconstruct a string representation of the pattern from its compiled form, in cases where the original text is not availableprotected static void
replaceCurrent
(Expression exp, LocalBinding binding) Replace any call to current() within a contained expression by a reference to a variableselectNodes
(TreeInfo document, XPathContext context) Select all nodes in a document that match this pattern.void
setOriginalText
(String text) Set the original text of the pattern for use in diagnosticsvoid
setPriority
(double priority) Set a priority to override the default priority.void
setRecoverable
(boolean recoverable) Aay whether dynamic errors in evaluating the pattern should be recovered.simplify()
Simplify the pattern by applying any context-independent optimisations.toPattern
(Configuration config) Convert this expression to an equivalent XSLT patternProduce a short string identifying the expression for use in error messagestoString()
Get a string representation of the pattern.typeCheck
(ExpressionVisitor visitor, ContextItemStaticInfo contextInfo) Type-check the pattern.Methods inherited from class net.sf.saxon.expr.PseudoExpression
computeCardinality, evaluateAsString, evaluateItem, getImplementationMethod, iterate, process
Methods inherited from class net.sf.saxon.expr.Expression
addToPathMap, adoptChildExpression, allowExtractingCommonSubexpressions, checkedOperands, checkForUpdatingSubexpressions, checkPermittedContents, computeDependencies, computeHashCode, computeSpecialProperties, computeStaticProperties, dispatchTailCall, dynamicError, equals, explain, getCardinality, getConfiguration, getCost, getEvaluationMethod, getExpressionName, getExtraProperty, getIntegerBounds, getIntrinsicDependencies, getLocalRetainedStaticContext, getLocation, getNetCost, getObjectName, getPackageData, getParentExpression, getProperties, getProperty, getRetainedStaticContext, getScopingExpression, getSlotsUsed, getSpecialProperties, getStaticBaseURI, getStaticBaseURIString, getStaticType, getStaticUType, getStreamerName, getTracingTag, hasCompatibleStaticContext, hashCode, hasSpecialProperty, hasVariableBinding, identityHashCode, implementsStaticTypeCheck, isCallOn, isEqual, isIdentical, isInstruction, isMultiThreaded, isStaticPropertiesKnown, isSubtreeExpression, isUpdatingExpression, isVacuousExpression, makeElaborator, markTailFunctionCalls, operandList, operands, operandSparseList, optimizeChildren, prepareForStreaming, resetLocalStaticProperties, restoreParentPointers, setEvaluationMethod, setExtraProperty, setFiltered, setFlattened, setLocation, setParentExpression, setRetainedStaticContext, setRetainedStaticContextLocally, setRetainedStaticContextThoroughly, setStaticProperty, simplifyChildren, staticTypeCheck, supportsLazyEvaluation, suppressValidation, typeCheckChildren, typeError, unordered, verifyParentPointers, withLocation
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface net.sf.saxon.trace.Traceable
gatherProperties
-
Constructor Details
-
Pattern
public Pattern()
-
-
Method Details
-
make
public static Pattern make(String pattern, StaticContext env, PackageData packageData) 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 expressionpackageData
- The package containing this pattern- Returns:
- The pattern object
- Throws:
XPathException
- if the pattern is invalid
-
replaceCurrent
Replace any call to current() within a contained expression by a reference to a variable- Parameters:
exp
- the expression in which the replacement is to take place (which must not itself be a call to current())binding
- the binding for the variable reference
-
patternContainsVariable
Ask whether a pattern has dependencies on local variables- Parameters:
pattern
- the pattern (typically a pattern in an xsl:number or xsl:for-each-group); or null- Returns:
- true if the pattern is non-null and has dependencies on local variables
-
isLiftable
public boolean isLiftable(boolean forStreaming) Ask whether the expression can be lifted out of a loop, assuming it has no dependencies on the controlling variable/focus of the loop- Overrides:
isLiftable
in classExpression
- Parameters:
forStreaming
- true if we are generating code for streaming- Returns:
- true if the expression can be loop lifted
-
bindCurrent
Replace any calls on current() by a variable reference bound to the supplied binding -
matchesCurrentGroup
public boolean matchesCurrentGroup()Ask whether the pattern is anchored on a call on current-group()- Returns:
- true if calls on matchesBeneathAnchor should test with all nodes in the current group as anchor nodes. If false, only the first node in a group is treated as the anchor node
-
setOriginalText
Set the original text of the pattern for use in diagnostics- Parameters:
text
- the original text of the pattern
-
isRecoverable
public boolean isRecoverable()Ask whether dynamic errors in evaluating the pattern should be recovered. This is the default for normal XSLT patterns, but patterns used internally to represent scannable streaming expressions are non-recoverable- Returns:
- true if dynamic errors in pattern evaluation should be treated as recoverable (if an error occurs, the pattern is treated as non-matching; a warning is sent to the ErrorListener).
-
setRecoverable
public void setRecoverable(boolean recoverable) Aay whether dynamic errors in evaluating the pattern should be recovered. This is the default for normal XSLT patterns, but patterns used internally to represent scannable streaming expressions are non-recoverable- Parameters:
recoverable
- true if dynamic errors in pattern evaluation should be treated as recoverable (if an error occurs, the pattern is treated as non-matching; a warning is sent to the ErrorListener).
-
handleDynamicError
Handle a dynamic error occurring in the course of pattern evaluation. The effect depends on (a) whether the error is a circularity error, and (b) whether the pattern is marked as recoverable or not- Parameters:
ex
- the exceptioncontext
- the evaluation context- Throws:
XPathException
- if the error is found to be non-recoverable
-
simplify
Simplify the pattern by applying any context-independent optimisations. Default implementation does nothing.- Overrides:
simplify
in classExpression
- Returns:
- the simplified expression (or the original if unchanged, or if modified in-situ)
- Throws:
XPathException
- if an error is discovered during expression rewriting
-
typeCheck
public Pattern typeCheck(ExpressionVisitor visitor, ContextItemStaticInfo contextInfo) throws XPathException Type-check the pattern.- Overrides:
typeCheck
in classExpression
- Parameters:
visitor
- the expression visitorcontextInfo
- 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 an error is discovered during this phase (typically a type error)
-
getDependencies
public int getDependencies()Get the dependencies of the pattern. The only interesting dependencies for a pattern are dependencies on local variables or on user-defined functions. These are analyzed in those patterns containing predicates.- Overrides:
getDependencies
in classExpression
- Returns:
- the dependencies, as a bit-significant mask
-
allocateSlots
Allocate slots to any variables used within the pattern- Parameters:
slotManager
- 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
-
isMotionless
public boolean isMotionless()Test whether a pattern is motionless, that is, whether it can be evaluated against a node without repositioning the input stream. This is a necessary condition for patterns used as the match pattern of a streamed template rule.- Returns:
- true if the pattern is motionless, that is, if it can be evaluated against a streamed node without changing the position in the streamed input file
-
effectiveBooleanValue
Evaluate a pattern as a boolean expression, returning true if the context item matches the pattern- Overrides:
effectiveBooleanValue
in classPseudoExpression
- Parameters:
context
- the evaluation context- Returns:
- true if the context item matches the pattern
- Throws:
XPathException
- if an error occurs during pattern matching
-
matchesItem
Determine whether this Pattern matches the given item. This is the main external interface for matching patterns: it calls the matches() method and handles any errors, by signalling a warning and returning false.- Parameters:
item
- The item to be tested against the Patterncontext
- The dynamic context.- Returns:
- true if the item matches the Pattern, false otherwise
- Throws:
XPathException
- if a non-recoverable error is found matching the pattern. Most errors however result in a warning and a return value of false.
-
matches
Determine whether this Pattern matches the given item. This should be called viamatchesItem()
to get the XSLT-defined error handling behaviour.The method, where required, sets current() to the node being tested.
- Parameters:
item
- The item to be tested against the Patterncontext
- The dynamic context.- Returns:
- true if the node matches the Pattern, false otherwise
- Throws:
XPathException
- if an error occurs while matching the pattern
-
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 an error occurs while matching the pattern (the caller will usually treat this the same as a false result)
-
selectNodes
Select all nodes in a document that match this pattern.- Parameters:
document
- the documentcontext
- the dynamic evaluation context- Returns:
- an iterator over the selected nodes in the document.
- Throws:
XPathException
-
getUType
Get a UType indicating which kinds of items this Pattern can match.- Returns:
- a UType indicating all the primitive types of item that the pattern can match.
-
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- Overrides:
getItemType
in classPseudoExpression
- Returns:
- an ItemType, as specific as possible, which all the matching items satisfy
-
setPriority
public void setPriority(double priority) Set a priority to override the default priority. This is used when the pattern is written in a complex form such as a[true()] justifying a priority of 0.5, but then simplifies down to an NodeTestPattern- Parameters:
priority
- the priority to be used if no explicit priority is given in the template rule
-
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
-
toString
Get a string representation of the pattern. This will be in a form similar to the original pattern text, but not necessarily identical. It is not guaranteed to be in legal pattern syntax.- Overrides:
toString
in classExpression
- Returns:
- a representation of the expression as a string
-
reconstruct
Reconstruct a string representation of the pattern from its compiled form, in cases where the original text is not available -
getHostLanguage
Get the host language (XSLT, XQuery, XPath) used to implement the code in this container- Returns:
- typically
HostLanguage.XSLT
orHostLanguage.XQUERY
-
convertToTypedPattern
Convert the pattern to a typed pattern, in which an element name is treated as schema-element(N)- Parameters:
val
- either "strict" or "lax" depending on the value of xsl:mode/@typed- Returns:
- either the original pattern unchanged, or a new pattern as the result of the conversion
- Throws:
XPathException
- if the pattern cannot be converted
-
toPattern
Description copied from class:Expression
Convert this expression to an equivalent XSLT pattern- Overrides:
toPattern
in classExpression
- Parameters:
config
- the Saxon configuration- Returns:
- the equivalent pattern
-
export
Description copied from class:Expression
Diagnostic print of expression structure. The abstract expression tree is written to the supplied output destination.- Specified by:
export
in interfaceExportAgent
- Specified by:
export
in classExpression
- Parameters:
presenter
- the expression presenter used to display the structure- Throws:
XPathException
- if the export fails, for example if an expression is found that won't work in the target environment.
-
copy
Description copied from class:Expression
Copy an expression. This makes a deep copy.- Specified by:
copy
in classExpression
- Parameters:
rebindings
- a mutable list of (old binding, new binding) pairs that is used to update the bindings held in any local variable references that are copied.- Returns:
- the copy of the original expression
-
optimize
public Pattern optimize(ExpressionVisitor visitor, ContextItemStaticInfo contextInfo) throws XPathException Perform optimisation of an expression and its subexpressions. This is the third and final phase of static optimization.This method is called after all references to functions and variables have been resolved to the declaration of the function or variable, and after all type checking has been done.
- Overrides:
optimize
in classExpression
- Parameters:
visitor
- an expression visitorcontextInfo
- the static type of "." at the point where this expression is invoked. The parameter is set to null if it is known statically that the context item will be undefined. If the type of the context item is not known statically, the argument is set toType.ITEM_TYPE
- Returns:
- the original expression, rewritten if appropriate to optimize execution
- Throws:
XPathException
- if an error is discovered during this phase (typically a type error)
-
getOriginalText
Get the original text of the pattern as written, if available. The result may be null if the original text is not available, for example where the pattern is constructed programmatically- Returns:
- the original text of the pattern if available, or null otherwise
-
toShortString
Description copied from class:Expression
Produce a short string identifying the expression for use in error messages- Overrides:
toShortString
in classExpression
- Returns:
- a short string, sufficient to identify the expression
-
getElaborator
Description copied from class:PseudoExpression
Make an elaborator for this expression- Overrides:
getElaborator
in classPseudoExpression
- Returns:
- an appropriate
Elaborator
-