1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.cafeconleche.org/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title>XOM</title>
<style type="text/css">
body {
color: black;
background-color:white;
}
#Content {
margin:0px 10em 50px 10px;
padding:10px 100px 10px 10px;
}
#Navbar {
/*/*/ position:absolute;
top:1ex;
right:20px;
max-width: 30%;
min-width: 170px;
width:10em; /*/*/
padding:10px;
background-color:#eee;
color: black;
border:1px dashed #999;
}
</style>
</head>
<body>
<div id="Content">
<h1>XOM</h1>
<p>XOM™
is a new XML object model.
It is an open source (LGPL), tree-based API for processing XML with Java
that strives for correctness, simplicity, and performance, <em>in that order</em>.
</p>
<ul>
<li><a href="tutorial.xhtml">Tutorial</a></li>
<li><a href="apidocs/">JavaDoc</a></li>
<li><a href="whatswrong/whatswrong.html">What's Wrong with XML APIs (and how to fix them)</a></li>
<li><a href="faq.xhtml">FAQ</a></li>
<li><a href="https://github.com/elharo/xom/releases/download/v1.3.9/xom-1.3.9.jar">Jar file</a> (Core packages only)</li>
<li><a href="https://github.com/elharo/xom/releases/download/v1.3.9/xom-1.3.9.zip">Complete zip</a> (includes source code, prebuilt jars, API documentation, unit tests, sample programs, third party jars)</li>
<li><a href="https://github.com/elharo/xom/releases/download/v1.3.9/xom-1.3.9.tar.gz">Complete tar.gz</a> (includes source code, prebuilt jars, API documentation, unit tests, sample programs, third party jars)</li>
<li><a href="https://github.com/elharo/xom/releases/download/v1.3.9/xom-1.3.9-src.zip">Source code zip</a> (includes source code, unit tests, sample programs, third party jars)</li>
<li><a href="https://github.com/elharo/xom/releases/download/v1.3.9/xom-1.3.9-src.tar.gz">Source code tar.gz</a> (includes source code, API documentation, unit tests, sample programs, third party jars)</li>
<li><a href="https://lists.ibiblio.org/mailman/listinfo/xom-interest">xom-interest mailing list</a></li>
<li><a href="https://github.com/elharo/xom/">Source Repository</a></li>
</ul>
<p> XOM is designed to be 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.</p>
<p>
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.
</p>
<p>
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.
</p>
<p>
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 been used to process documents that are gigabytes in size.
</p>
<p>
XOM includes built-in support for a number of XML technologies including
Namespaces in XML, XPath 1.0, XSLT 1.0,
XInclude, xml:id, xml:base, Canonical XML, and Exclusive Canonical XML.
XOM documents can be converted to and from SAX and DOM.
</p>
<p>
XOM's Maven group ID is <code>xom</code> and its artifact ID is <code>xom</code>. To add a dependency on XOM using Maven, add this <code>dependency</code> element to your pom.xml:</p>
<pre><code><dependency>
<groupId>xom</groupId>
<artifactId>xom</artifactId>
<version>1.3.9</version>
</dependency></code></pre>
<p>
To add a dependency using Gradle:
</p>
<pre><code>gradle
dependencies {
compile 'xom:xom:1.3.9'
}</code></pre>
<p>
XOM is not complete unto itself. It depends on an underlying SAX
parser to read documents and feed the data into a tree structure.
While theoretically any SAX2 compliant parser should work, <a
href="https://xerces.apache.org/xerces2-j/">Xerces 2.6.1</a> and later
is the only one that I am fairly confident does work. Xerces 2.12.2
is included with the full distribution. This product includes
software developed by the Apache Software Foundation
(https://www.apache.org/). Piccolo 1.0.3, Crimson, GNU JAXP 1.0b1,
the Oracle XML Parser for Java 9.2.0.2.0D and 9.2.0.5.0, and Xerces
versions prior to 2.6.1 all have bugs that prevent them from doing
what XOM needs them to do. (Note to XML parser vendors: XOM's test
suite gives parsers a very thorough workout, and delves into many of
the more obscure parts of the XML spec that many parsers get wrong.
You could do a lot worse for testing than making sure all the XOM
unit tests pass when using your parser.)
</p>
<p>
Similarly XSLT support depends on a TrAX processor. XInclude and
XML canonicalization, however, are native.
</p>
<p>
The current version of XOM is 1.3.9 and is backwards compatible with 1.2, 1.1 and 1.0.
You should not need to recompile any code to upgrade to 1.3.9.
XOM is believed to be quite stable and robust.
Future releases should be backwards compatible with the 1.0 API for the foreseeable future.
</p>
<p>
If you'd like to know more about XOM, I suggest starting with the <a href="tutorial.xhtml">tutorial</a>.
XOM also includes a large collection of small <a href="samples.xhtml">sample programs</a> 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 <a href="designprinciples.xhtml">design principles</a> on which XOM is based.
If you have a question about XOM that is not answered in the <a href="apidocs/">API documentation</a>
or the <a href="faq.xhtml">FAQ</a>, you can ask it on the <a href="http://lists.ibiblio.org/mailman/listinfo/xom-interest">xom-interest
mailing list</a>.
You do not need to be subscribed to post, but non-subscriber questions are moderated.
(Due to increasing amounts of non-subscriber spam, it is possible non-subscriber questions are missed.
If you don't get an answer, please subscribe and try again.)
</p>
<p>
Commercial licenses are available for companies that wish to bundle XOM with their products without subscribing to the LGPL. Contact <a href="mailto:elharo%40ibiblio%2Eorg?Commercial%20license%20for%20XOM">Elliotte Rusty Harold</a> if you're interested.
</p>
<hr />
<div align="center">[ <a href="https://cafe.elharo.com/">The Cafes</a> | <a href="https://www.cafeconleche.org">Cafe con Leche</a> |
<a href="https://www.cafeaulait.org">Cafe au Lait</a> ]</div>
<hr />
<p>Copyright 2002-2023 <a href="https://www.elharo.com/">Elliotte Rusty Harold</a><br />
<a href="mailto:elharo%40ibiblio%2Eorg">elharo@ibiblio.org</a><br />
Last Modified May 14, 2023
</p>
</div>
<div id="Navbar">
<h3>About XOM</h3>
<ul>
<li><a href="designprinciples.xhtml">Design Principles</a></li>
<li><a href="history.html">Release Notes</a></li>
<li><a href="faq.xhtml">FAQ</a></li>
<li><a href="install.xhtml">Installation Instructions</a></li>
<li><a href="infoset.xhtml">Infoset Mapping</a></li>
<li><a href="xpath.xhtml">XPath Mapping</a></li>
<li><a href="futuredirections.xhtml">Future Directions</a></li>
<li><a href="license.xhtml">License and Copyright</a></li>
<li><a href="https://lists.ibiblio.org/mailman/listinfo/xom-interest">Mailing Lists</a></li>
</ul>
<h3>Java API</h3>
<ul>
<li><a href="tutorial.xhtml">Tutorial</a></li>
<li><a href="apidocs/">JavaDoc</a></li>
<li><a href="samples.xhtml">Sample Code</a></li>
</ul>
<h3>Downloads</h3>
<ul>
<li><a href="https://github.com/elharo/xom/">Source Repository</a></li>
<li><a href="https://github.com/elharo/xom/releases/download/v1.3.9/xom-1.3.9.jar">Minimal JAR file</a></li>
<li><a href="https://github.com/elharo/xom/releases/download/v1.3.9/xom-1.3.9.zip">Complete distribution, zip format</a> (source code, API documentation, unit tests, sample programs, third party jars)</li>
<li><a href="https://github.com/elharo/xom/releases/download/v1.3.9/xom-1.3.9.tar.gz">Complete distribution, tar.gz format</a> (source code, API documentation, unit tests, sample programs, third party jars)</li>
</ul>
<h3>For Contributors</h3>
<ul>
<li><a href="contributor_license.txt">Contributor Agreement</a></li>
<li><a href="building.xhtml">Building XOM</a></li>
<li><a href="testsuite.xhtml">Test Suite</a></li>
</ul>
<h3>Third Party Articles</h3>
<ul>
<li><a href="https://www.artima.com/intv/xmlapis.html">What's Wrong with XML APIs</a></li>
<li><a href="https://www.artima.com/intv/dom.html">The Good, the Bad, and the DOM</a></li>
<li><a href="https://www.artima.com/intv/jdom.html">A Design Review of JDOM</a></li>
<li><a href="https://www.artima.com/intv/learn.html">Lessons Learned from JDOM</a></li>
<li><a href="https://www.artima.com/intv/xomdesign.html">Design Principles and XOM</a></li>
<li><a href="https://www.artima.com/intv/airbags.html">Air Bags and Other Design Principles</a></li>
<li><a href="https://www.artima.com/intv/desbyuse.html">Designing by Dictatorship, Examples, and Tests</a></li>
<li><a href="https://www.artima.com/intv/readxml.html">The Human Side of XML</a></li>
<li><a href="https://www.artima.com/intv/schema.html">Organic Schemas and Outlier Data</a></li>
<li><a href="https://www.xml.com/pub/a/2002/11/27/xom.html">Getting Started with XOM</a></li>
<li><a href="https://www.ibm.com/developerworks/library/x-matters32/index.html">The XOM Java XML API</a></li>
<li><a href="http://workbench.cadenhead.org/news/3793/java-xom-xml-made-simpler">Java XOM: XML Made Simpler</a></li>
</ul>
<h3>Projects using XOM</h3>
<ul>
<li><a href='https://concordion.org/'>Concordion</a></li>
<li><a href='http://altsol.gr/sleepxomxml/'>Sleep</a></li>
<li><a href='https://code.google.com/p/openinfocard/'>openinfocard</a></li>
<li><a href='https://github.com/integrallis/excemel'>Excemel</a></li>
<li><a href="https://json-lib.sourceforge.net/">json-lib</a></li>
<li><a href="https://memoranda.sourceforge.net/">Memoranda</a></li>
<li><a href="https://carrierwave.sourceforge.net/">Carrierwave</a></li>
<li><a href="https://wurfl.sourceforge.net/">WURFL</a></li>
<li><a href="http://cafeconleche.org/SAXTest/">SAX Conformance Testing</a></li>
<li><a href="https://sourceforge.net/projects/smartfrog/">SmartFrog</a></li>
<li><a href="https://confluence.atlassian.com/fisheye/">FishEye</a></li>
</ul>
</div>
</body>
</html>
|