This model is the XOM Meta Model. It is the specification of the model used to define new XML-based models. It is also an instance of itself.

Model is the top-level element for a model description. The model element contains all other elements in the model and also defines the model's basic attributes, such as its name and version number.
Colon-separated list of packages to import. For example, importName="java.lang.*:java.util.List"
Default value for `keepDef` attribute.
The elements array contains a definition for each element within the model. Elements include Class, Element, and String definitions.
The Definition class represents a generic type of element definition. The actual definition may be of a Class, Element, or String. Definitions are the basic building blocks of a model.
Doc tags allow documentation to be added to any definition. The documentation will automatically appear in all physical forms of this model, including dtds, java classes, and the xsl transformation.
The FullDefinition class represents a fully-specified definition that may include content.
Specifies the content model of this definition. Content model determines how the contained objects and arrays will be parsed and intepreted:

- Sequential
  content is the default model. Under a sequential model, content is intepreted by its position, and the order of content in a .xml file must match the order defined in the model.
- Under random content, order is less important; different types are parsed as needed. Order is still used to resolve multiple instances of the same type.
- Mixed
  content allows text to appear intermixed with elements, which are interpreted in random order. It is currently unsupported.
- Any
  content removes all restrictions, allowing any content to appear (but at the price of a lack of type-safety in the java representation of the element).
- CData
  content specifies text-only content. No objects or arrays may be defined.

sequential
random
mixed
any
cdata
Whether to keep the underlying wrapper around (in a field called `_def`) after the object has been constructed.

If not specified, defaults to the value of the Model.defaultKeepDef attribute, or false if that is not specified.

This array defines all attributes to appear within this class or element.
This array defines all content (objects and arrays) to appear within this class or element. The interpretation of this array depends on the element's defined content model.
This element allows arbitrary Java Code to be attached to any class or element. Code sections are not verified until the final .java class is compiled and should be used sparingly.
An Element Definition defines a basic entity of the meta model. Elements are containers for two types of data: attributes and content. Attributes are simple name/value pairs which may take on the full range of Java types. Content consists of other Elements and Strings, either appearing alone or as arrays.
Name of the Class that this Element belongs to.

If the Element has multiple supertypes, the value is a comma-separated list. Since a Java interface is generated for each Class and a Java class is generated for each Element, and Java only allows single inheritance of classes, at most one of the supertypes can be an Element.

The dtdName attribute sets the name by which this Element will be known in the dtd. If not specified, it will default to the model's prefix (in any) plus the type of this element.
Whether the class generated for this Element is abstract. An abstract Element is similar to a Class: an abstract Element is implemented by an abstract Java class; a Class is implemented by a Java interface. Per the rules of Java, the abstract class generated for an abstract Element can have members and methods with bodies, but it only allows single inheritance.
A Class Definition defines a class of entities. A class specifies a group of entities with similar properties. Full inheritence is supported, although there are limits on what can be overridden.
Name of this Class.
Name of the supertype(s) of this Class.

If the Class has multiple supertypes, the value is a comma-separated list.

A StringElement is a simple type of element which has no attributes and whose content is a single String (usually represented as a CDATA section). StringElements are used when raw text must be included in a model, such as raw Java code, or SQL statements, or HTML documentation.
A Plugin in a special type of element whose content may be derived from a different model. The exact model to use is specified by the individual XML file, allowing a Plugin element to link to another model dynamically. The Plugin element automatically defines the defPackage and defClass attributes. Other attributes may be added as needed. Code and documentation sections are supported as well.
An Import as a special type of element that represents another element stored in an external model. The model to use is specified by the defPackage and defClass attributes of the import. An Import may not be derived from any class.
The Doc entity specifies a documentation section. The text contained in this element should be raw text or HTML used to document the object in which the Doc section appears.
The Code entity specifies a raw block of Java code. Each Class/Element becomes represented by a Java Class. Including a Code block inside a Class or Element will insert the code directly into the corresponding class. No checking is done on the code until it is complied later.
The Attribute entity appears within any Element definition. It defines an Attribute, which is a name/value pair used to hold data inside of an Element. The Attribute's definition includes its name, type, and usage information (default value and whether or not it is required). An Attribute definition may limit its values by specifying Value objects.
The Value entity specifies a single value in the set of allowed values for an Attribute. The value is specifies as text so that any special characters may appear.
The Content class contains all entities which represent types of content which may appear within an Element. Content includes Objects, Arrays, Strings, and special markers such as Any.
An Object is a single instance of an Element type. Objects have an identifying name and a type. The name identifies the object within its Element and must be unique within the Element. The object is itself an instance of an Element, and this Element is identified by the type. The type may be the type name of an Element or the class name of a Class.
An Array is a set of multiple instances of Elements. The Array has an identifying name and a base type. The name identifies the array within its Element and must be unique within the Element. Each object in the array is an instance of the Element identified by the type. The type may be the type name of an Element or the class name of a Class.
The Any content is a special marker which allows an Element to contain any type of data. The data will appear in a single array called "children". The data will contain all kinds of node (elements, comments, text) if the content model is "mixed", otherwise just elements. If an Any marker appears, no other content may appear in the element.
The CData content is a special marker which allows an Element to contain a single CDATA section as its only content, yet still have attributes. The data will appear in a single String called "cdata". If a CData marker appears, no other content may appear in the element.