xmltk: An XML Toolkit for Lightweight XML Stream Processing
There are two important technical contributions in the toolkit: a highly scalable XML stream processor, and an XML stream index. Both have important applications beyond the toolkit, to XML packet routing and to selective dissemination of information. The XML stream processor achieves a sustained throughput of about 5.6MB/s and scales up to large numbers of XPath expressions (up to 1,000,000 in our experiments). Since the processor transforms all XPath expressions into a single deterministic automaton, we did a detailed theoretical analysis to prove that the number of states in the automaton remains relatively small. The stream index is the first attempt to index streaming data, rather than stored data. It has to be small compared to the data stream (ours is 6% or less), and has to arrive just in time with the data stream. We measured speedups of up to a factor of four in processing XML streams with the index.
From a technical point of view, it is essential for XML Toolkit commands to parse XML data and process a collection of XPath expressions. As a common library for these command, we have implemented a novel two technologies to realize a high-throuput XML data processing: 1) Lazy DFA (deteministic finite automaton that is constructed lazily) based XPath processor, and 2) SIX (streaming index for XML data) for XML parser.
We have implemented those Lazy DFA and SIX on our own tokenized (binary) SAX parser and xerces1_4_0 SAX parser.
Xmltk began life as a research project at the University of Washington, where it was supported by a generous gift from Microsoft and by Dan Suciu's NSF CAREER Grant 0092955 and Alfred P. Sloan Research Fellowship.
The project is now an open-source project