I have a data structure (not XML) which is organized as a DAG. I want to apply
XSLT to an XML representation of an item in that data structure in order to
generate HTML presentation of that item. However, the item can reference other
items in the graph but I do not want to flatten the graph into XML at the
start (there are possibly millions of items in the graph).
So what I need is a tree model that when the contents of a specific node (a
reference to another item) is requested that it calls me back to get the XML
representation of that.
I also want to share the basic unexpanded tree model for each item so that
once it has been generated I can use it again either directly or referenced
from another item.
Is there any support for that in Saxon? Is it something that Saxon is capable
I noticed a reference to http://www.nesterovsky-
within this forum and wondered whether anything similar had been done.
Saxon allows you to write your own implementation of the NodeInfo interface,
and supply a tree using that implementation as a source document, or as the
result of calling the doc() function (or a Java extension function). So long
as the implementation satisfies the NodeInfo contract, it should work. The
"contract" here is not only the Java API, but also the constraints and
consistency rules in the XDM specification, for example the fact that the
string value of an element must be the concatenation of its descendant text
nodes, that you can't have a zero-length text node with a parent, that the
namespace of an attribute must be one of the in-scope namespaces of the
containing element, and so on.
I have implemented NodeInfo over a variety of data structures; the more they
deviate from XML, the harder it gets. But it can certainly be done.
Note that with the NodeInfo interface, it is not assumed that Java object
identity equates to XDM node identity. The "same" XDM node can be represented
by different NodeInfo objects at the same time or at different times.
Sign up for the SourceForge newsletter:
You seem to have CSS turned off.
Please don't fill out this field.