XML 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.


The Omni Group has released OmniWeb 5.1, a $29.95 payware web browser for Mac OS X. OmniWeb 5.x is based on the same KHTML engine safari uses so it supports the same basic functionality: XML, HTML, XHTML, and CSS but not XSLT. (I'm hoping we'll see XSLT functionality in Safari 2 next week at MacWorld, and maybe if we're really lucky it won't require a full OS upgrade, but don't hold your breath. Since Jobs returned, Apple has a horrible track record of supporting older OS releases.) Version 5.1 allegedly improves performance. However, the demo crashed on the second page I tried to load. The second time I launched it it loaded fine. A nice feature is that the demo gives you 30 days to try it out, rather than 30 days from first launch. Handy if you just want to use it occasionally to test sites rather than as your main browser.


The W3C Privacy Activity has posted the fourth public working draft of the Platform for Privacy Preferences 1.1 (P3P1.1) Specification. "P3P 1.1 is based on the P3P 1.0 Recommendation and adds some features using the P3P 1.0 Extension mechanism. It also contains a new binding mechanism that can be used to bind policies for XML Applications beyond HTTP transactions." New features in P3P 1.1 include a mechanism to name and group statements together so user agents can organize the summary display of those policies and a generic means of binding P3P Policies to arbitrary XML to support XForms, WSDL, and other XML applications.