<!--
The root of the document, contains all object descriptions and
include directives
-->
<!ELEMENT objects       (object|include|manual|mapping)*>

<!--

-->
<!ELEMENT manual        EMPTY>
<!ATTLIST manual
    class           CDATA   #REQUIRED
    read-handler    CDATA   #REQUIRED
    write-handler   CDATA   #REQUIRED
>

<!--
Defines a mapping. A mapping is the base information for building
multiplexers. A multiplexer is bound to a given type and must resolve to
a real handler. A mutiplexer resolving to an other multiplexer is invalid
and should throw an exception.

The type-attribute define the attribute name which will contain the selector
parameter in the chart-xml. 
-->
<!ELEMENT mapping       (type)*>
<!ATTLIST mapping
    type-attribute  CDATA   #IMPLIED
    base-class      CDATA   #REQUIRED
>
<!--
Maps the given type (must be a subtype of the mapping base class) to
the given class name.
-->
<!ELEMENT type          EMPTY>
<!ATTLIST type
    name            CDATA   #REQUIRED
    class           CDATA   #REQUIRED
>
<!--
Defines a single object

The object may define a constructor to be used. If no manual constructor
is defined, the default constructor is used.

The properties described for the object must be setable via the usual
get() methods.
-->
<!ELEMENT object        (constructor?,(element-property|lookup|attribute-property|ignore)*)>
<!ATTLIST object
    class           CDATA   #REQUIRED
    register-name   CDATA   #IMPLIED
    ignored         CDATA   #IMPLIED
>

<!--
Defines a constructor. The constructor can be parametrized  using
the properties defined for the class.
-->
<!ELEMENT constructor   (parameter)*>

<!-- Defines a property of an object.
A property can either be defined as xml-attribute, as lookup to an previously
defined register-name or it can be handled by an element.
-->
<!ELEMENT element-property      EMPTY>
<!ATTLIST element-property
    name        CDATA   #REQUIRED
    element     CDATA   #IMPLIED
>

<!ELEMENT lookup      EMPTY>
<!ATTLIST lookup
    name        CDATA   #REQUIRED
    lookup      CDATA   #IMPLIED
>

<!ELEMENT attribute-property      EMPTY>
<!ATTLIST attribute-property
    name        CDATA   #REQUIRED
    attribute   CDATA   #IMPLIED
    handler     CDATA   #IMPLIED
>

<!--
Marks an ignored property. This property will not be used for parsing,
and the model generatorBeanInfoBeanInfoBeanInfo will not touch or regenerate it
-->
<!ELEMENT ignore      EMPTY>
<!ATTLIST ignore
    name        CDATA   #REQUIRED
>

<!-- Defines an included file. The file will be loaded during the parsing. -->
<!ELEMENT include       EMPTY>
<!ATTLIST include
    src         CDATA   #REQUIRED
>

<!-- Defines a parameter for an constructor. -->
<!ELEMENT parameter     EMPTY>
<!ATTLIST parameter
    class       CDATA   #REQUIRED
    property    CDATA   #REQUIRED
>
