The GNU Project has released GNU JAXP 1.3, a free-as-in-speech (GPL with library exception) implementation of the Java API for XML Processing. This is the last release as a standalone package. In the future it will be maintained as part of GNU Classpath. The web page is admirably written. I wish the web pages for most payware software did as good a job of explaining concisely and clearly what the product is, what it does, how to get it, and everything else a potentiual user needs to know. I don't think I can do better than just quote it:
GNU JAXP provides the Ælfred2 SAX2 parser, and is configured to use its optionally validating module by default. It includes an implementation of the DOM Level 3 interfaces provided by the World Wide Web Consortium. There is also a (fast!) XPath 1.0 and XSLT 1.0 implementation which supports all options for input (source) and output (result). These are accessible through the JAXP 1.3 and W3C DOM bootstrapping APIs.
The following W3C DOM APIs are supported:
- DOM Level 3 Core
- DOM Level 3 Load & Save
- DOM Level 3 XPath
- DOM Level 2 Events
- DOM Level 2 Traversal
GNU JAXP additionally provides a mostly-complete alternative implementation of DOM Level 3 Core and XPath, a SAX2 parser, and a JAXP XSLT transformer that use the Gnome libxml2 and libxslt libraries. These libraries, implemented in C, provide very fast parsing and transformation. The libxmlj library, a JNI wrapper for the Gnome libraries, allows you to leverage this speed via the JAXP interfaces. However, libxmlj is still experimental and does not conform as well to the published SAX and DOM conformance tests, and JNI deployment may be a barrier to entry.
At the current time, libxmlj does not support the JAXP XPath interface, only the W3C DOM one.
GNU JAXP is not a complete implementation of JAXP 1.3. It does not currently provide support for tree validation: the only validation available is XML (DTD) validation by the SAX parser. We are still working on W3C XML Schema and RELAX NG validators and the integration of the PSVI into the DOM.
Java 1.4 or later is required.