Lists Home |
Date Index |
Christopher R. Maden wrote:
> I have data that may be arbitrarily large and may conform to arbitrary
> XSDL schemata. Because of the size, I want to process the document as an
> event stream (hence SAX), and I want to make different processing
> decisions based on the declared types from the schema and based on the
> ultimate base types, if there's any type inheritance.
> What's the right tool? Perl is the language of choice, but I'm flexible.
> I've looked at libxml2 (and XML::LibXML), Xerces-C++ (and
> Xerces-p/XML::Xerces), and XSV. They are all focused on validation; the
> document is checked as to whether it fulfills the schema, but there does
> not seem to be a straightforward way to say, "Hi. I'm an element. What
> type am I?"
> What am I missing?
The problem is that the type of an element may depend on its context, not
just on its name, namespace, etc. Because of this ontological component,
type and validation are related, and it is not (deterministically)
possible to decide the type of an element at the point it is referenced
during SAX processing.
type a = element with name "x"
type b = element with name "x"
type c = element with name "y", with 2 children, types (a, b)
type d = element with name "y", with 1 child, type b
incoming SAX stream: startElement with name "y", startElement with name "x"
What type is the first element? What type is the second element?
It may be necessary to wait for some time, possibly until the entire
document has been processed, in order to determine the context and
therefore the type of any element in the document.