Java News from Thursday, January 6, 2005

I'm very pleased to announce the release of XOM™ 1.0, a new XML object model. XOM is a free-as-in-speech (LGPL), library for processing XML with Java. XOM supports a number of XML technologies including Namespaces in XML, XSLT, XInclude, and Canonical XML. XOM documents can be converted to and from SAX and DOM. XOM strives for correctness, simplicity, and performance, in that order. XOM is very easy to learn and easy to use. It works very straight-forwardly, and has a very shallow learning curve. Assuming you're already familiar with XML, you should be able to get up and running with XOM very quickly.

XOM is the only XML API that makes no compromises on correctness. XOM only accepts namespace well-formed XML documents, and only allows you to create namespace well-formed XML documents. (In fact, it's a little stricter than that: it actually guarantees that all documents are round-trippable and have well-defined XML infosets.) XOM manages your XML so you don't have to. With XOM, you can focus on the unique value of your application, and trust XOM to get the XML right.

XOM is fairly unique in that it is a dual streaming/tree-based API. Individual nodes in the tree can be processed while the document is still being built. The enables XOM programs to operate almost as fast as the underlying parser can supply data. You don't need to wait for the document to be completely parsed before you can start working with it.

XOM is very memory efficient. If you read an entire document into memory, XOM uses as little memory as possible. More importantly, XOM allows you to filter documents as they're built so you don't have to build the parts of the tree you aren't interested in. For instance, you can skip building text nodes that only represent boundary white space, if such white space is not significant in your application. You can even process a document piece by piece and throw away each piece when you're done with it. XOM has successfully processed gigabyte sized documents without breaking a sweat.

It's at least a year past when I hoped to release XOM, but the extra time has resulted in a much cleaner, more robust, faster API. XOM is now considered to be ready for production use. Future, post-1.0 releases should be backwards compatible with the 1.0 API for the foreseeable future.

If you'd like to know more about XOM, I suggest starting with the tutorial. XOM also includes a large collection of small sample programs that demonstrate various parts of the library. If you're curious about why XOM is the way it is, or if you would like to suggest future directions for XOM, you should read the design principles on which XOM is based. if you have a question about XOM that is not answered in the API documentation or the FAQ, you can ask it on the xom-interest mailing list. You do not need to be subscribed to post, but non-subscriber questions are moderated.