Markup Object Events (MOE) is a Java API which combines the tree-based nature of DOM with the event-based nature of SAX. MOE makes it easy for developers to create trees representing partial documents. MOE object events can listen to other object events, 'filling up' until they reach completion and are ready for processing.
MOE is built around a core set of interfaces which define all nodes as having a similar structure. Every node, whatever its type, has at least the possibility of a (namespace-aware three-part) name, an unordered set of contents, an ordered set of contents, and a map for annotation. The classes which implement those interfaces can use them to represent XML at arbitrary levels of lexical preservation from a pure (or even refined) Infoset view to the preservation of "useless" things like spacing between attributes, single-quotes or double-quotes around attributes.
While MOE is currently oriented toward XML - and the particular notion of namespaces it uses definitely comes from XML - it's been designed to support a much wider set of information. MOE's origins lie in an effort to break down subcomponents of XML documents with lexical tools (regular expressions). While XML is a critical, and perhaps even canonical form, of markup, markup has many faces which are not XML. Developers will have to write parsers to support those forms of markup, but MOE should be capable of representing them. The
CoreComponent abstract class and
Mutable class are designed explicitly to be extensible in this way.
MOE is currently in alpha. You can explore javadoc, and a download is also available. Nothing in this package should be considered final. Initial version numbers are all at 0.01, and individual classes will carry their own version numbers. (Prior versions are available through CVS, though they'll all say "0.01".)I'll be issuing periodic collections of classes which contain a coherent set of working parts.
A project page with links to mailing lists and CVS is available.
There are now a few screen shots of the Swing-based MOEWorkshop up as well. This is much less cooked than MOE, though it's been a great aid to making MOE work. I really needed to see the models.
The entire package is and will be under the Mozilla Public License, Version 1.1. License details are in the javadoc.