[jdom-interest] suggested JDOM2 improvements
Michael Kay
mike at saxonica.com
Fri Jan 20 02:45:19 PST 2012
>The only case where we can't compile XPath expressions is when we want
to use variables. Which defeats the whole purpose of compiling XPath!
Absolutely!
>Or we have to use thread-local compiled XPaths. So, I think it would
be great to split the XPath API in two parts.
That' definitely the way to go if you're making changes to this area. If
you're not familiar with it, do take a look at the s9api design in Saxon:
http://www.saxonica.com/documentation/javadoc/net/sf/saxon/s9api/XPathCompiler.html
That involves three classes:
XPathCompiler contains the static context (variable and namespace
declarations)
XPathExecutable is the thread-safe compiled and reusable XPath expression
XPathEvaluator contains the dynamic context (variable values, context item)
You can eliminate the XPathEvaluator by having a more complex evaluate()
method on the XPathExecutable, e.g. one that supplies the variable
values as a Map; but this doesn't reduce the overall number of objects
involved, it just replaces the XPathEvaluator object with a Map object.
The other big design problem with an XPath API is the types used for
variable values and for the evaluation result. With the JAXP API I get
an enormous amount of support hassle caused by the lack of type safety
in the way JAXP does this. In s9api I decided, despite the complexity,
to introduce classes XdmValue, XdmItem, XdmAtomicValue etc to make the
whole thing type-safe, and I don't regret the decision. (I also have
XdmNode which abstracts over DOM, JDOM, XOM etc nodes.)
If you're designing a new XPath API in 2012 then I think it's essential
to think about how it will support XPath 2.0.
Michael Kay
Saxonica
More information about the jdom-interest
mailing list