I am pleased to announce what I expect is the final beta and release candidate of XOM 1.0, my open source dual streaming/tree-based API for processing XML with Java. XOM focuses on correctness, simplicity, and performance, in that order. This final (I hope) beta makes a number of improvements to performance in various areas of the API. Depending on the nature of your programs and documents, you should see speed-ups of somewhere between 0 and 20% compared to the previous beta. There are no over-the-covers changes in this release. Under-the-covers a few classes have undergone major rewrites, and a couple of non-public classes have been removed. All the unit tests (now over a thousand of them) still pass, but please do check this release out with your own code. If no problems are identified in this beta, I expect to officially release XOM 1.0 possibly as early as tomorrow, and certainly by the end of the year.
The W3C has released the final recommendation of XInclude 1.0.
There do not appear to be any significant changes since the proposed recommendation was published a couple of months ago.
Briefly, XInclude describes a means to build complex doucments out of simpler documents by replacing elements like <xi:include href="chapter1.xml"/>
with the contents of the file they refer to.
For more details, I've written a Brief Introduction to XInclude.
There don't appear to be any fully conformant implementations yet.
However, XOM's XIncluder class implements all the required functionality, and passes all the tests that don't depend on optional features. Specifically XOM does not support unparsed entities, notations, or the xpointer
XPointer scheme. The Gnome Project's
libxml also does a pretty good job with XInclude, and does support the xpointer
scheme, though it doesn't handle all the edge cases quite as rigorously as XOM does. I've also written XInclude engines for DOM, JDOM, and SAX. However, these are much buggier and more incomplete than the XOM version. Some improvements have been made in CVS since the last milestone drop. However, they still flunk lots of the test cases, and may even get stuck in infinite loops or otherwise die horrible deaths when faced with relatively complex operations.