|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object net.sf.saxon.expr.PathMap
public class PathMap
A PathMap is a description of all the paths followed by an expression. It is a set of trees. Each tree contains as its root an expression that selects nodes without any dependency on the context. The arcs in the tree are axis steps. So the expression doc('a.xml')/a[b=2]/c has a single root (the call on doc()), with a single arc representing child::a, this leads to a node which has two further arcs representing child::b and child::c. Because element b is atomized, there will also be an arc for the step descendant::text() indicating the requirement to access the text nodes of the element.
The current implementation works only for XPath 2.0 expressions (for example, constructs like xsl:for-each-group are not handled.)
This class, together with the overloaded method
Expression.addToPathMap(PathMap, net.sf.saxon.expr.PathMap.PathMapNodeSet)
can be
seen as an implementation of the static path analysis algorithm given in section 4 of
A. Marian and J. Simeon,
Projecting XML Documents, VLDB 2003.
Nested Class Summary | |
---|---|
static class |
PathMap.PathMapArc
An arc joining two nodes in the path map. |
static class |
PathMap.PathMapNode
A node in the path map. |
static class |
PathMap.PathMapNodeSet
A (mutable) set of nodes in the path map |
static class |
PathMap.PathMapRoot
A root node in the path map. |
Constructor Summary | |
---|---|
PathMap(Expression exp)
Create the PathMap for an expression |
Method Summary | |
---|---|
void |
diagnosticDump(PrintStream out)
Display a printed representation of the path map |
PathMap.PathMapRoot |
getContextDocumentRoot()
Get the path map root for the context document |
PathMap.PathMapRoot |
getContextItemRoot()
Get the path map root for the context item |
PathMap.PathMapNodeSet |
getPathForVariable(Binding binding)
Get the path used when evaluating a given variable binding |
PathMap.PathMapRoot[] |
getPathMapRoots()
Get all the root expressions from the path map |
PathMap.PathMapRoot |
getRootForDocument(String requiredUri)
Get the path map root for a call on the doc() or document() function with a given literal argument |
static void |
main(String[] args)
Main method for testing |
PathMap.PathMapRoot |
makeNewRoot(Expression exp)
Make a new root node in the path map. |
PathMap.PathMapRoot |
reduceToDownwardsAxes(PathMap.PathMapRoot root)
Given a PathMapRoot, simplify the tree rooted at this node so that it only contains downwards selections: specifically, so that the only axes used are child, attribute, namespace, and descendant. |
void |
registerPathForVariable(Binding binding,
PathMap.PathMapNodeSet nodeset)
Register the path used when evaluating a given variable binding |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public PathMap(Expression exp)
exp
- the expression whose PathMap is requiredMethod Detail |
---|
public PathMap.PathMapRoot makeNewRoot(Expression exp)
exp
- the expression represented by this root node
public PathMap.PathMapRoot[] getPathMapRoots()
public void registerPathForVariable(Binding binding, PathMap.PathMapNodeSet nodeset)
binding
- the variable bindingnodeset
- the set of PathMap nodes reachable when evaluating that variablepublic PathMap.PathMapNodeSet getPathForVariable(Binding binding)
binding
- the variable binding
public PathMap.PathMapRoot getContextDocumentRoot()
IllegalStateException
- if there is more than one path map root for the context documentpublic PathMap.PathMapRoot getContextItemRoot()
IllegalStateException
- if there is more than one path map root for the context itempublic PathMap.PathMapRoot getRootForDocument(String requiredUri)
requiredUri
- the literal argument we are looking for
IllegalStateException
- if there is more than one path map root for the specified documentpublic PathMap.PathMapRoot reduceToDownwardsAxes(PathMap.PathMapRoot root)
root
- the root of the path to be simplified
public void diagnosticDump(PrintStream out)
out
- the output stream to which the output will be writtenpublic static void main(String[] args) throws Exception
args
- Takes one argument, the XPath expression to be analyzed
Exception
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |