Object Definition of Table Join

Table joins can be emulated by model objects with a special object definition. This Object Definition for Table Joins reuses the Object Definitions of simple model objects by referencing them. The Document Type Definition (DTD) of such an Object Definition XML looks as follows:

<!ELEMENT joinedObjectDef (columnDefs+, joinDef+)>
<!ATTLIST joinedObjectDef
  objectName CDATA #REQUIRED
  parent CDATA #REQUIRED
  version CDATA #REQUIRED
>
<!ELEMENT columnDefs (columnDef+, hidden+)>
<!ELEMENT columnDef EMPTY>
<!ATTLIST columnDef
  columnName CDATA #REQUIRED
  alias CDATA #IMPLIED
  as CDATA #IMPLIED
  domainObject CDATA #IMPLIED
  nestedObject CDATA #IMPLIED
  valueType (Number | String | Timestamp) #IMPLIED
  modifier (COUNT | AVG | MIN | MAX | SUM | VARIANCE | STDDEV) #IMPLIED
  template CDATA #IMPLIED
>
<!ELEMENT hidden EMPTY>
<!ATTLIST hidden
  columnName CDATA #REQUIRED
  domainObject CDATA #REQUIRED
>
<!ELEMENT joinDef (objectDesc+, objectNested*, joinCondition+, joinDef*,
  objectPlaceholder*)>
<!ATTLIST joinDef
  joinType (EQUI_JOIN | LEFT_JOIN | LEFT_JOIN_OUTER | RIGHT_JOIN |
            RIGHT_JOIN_OUTER | NO_JOIN) #REQUIRED
>
<!ELEMENT objectDesc EMPTY>
<!ATTLIST objectDesc
  objectClassName CDATA #REQUIRED
>
<!ELEMENT joinCondition (columnDef+)>
<!ELEMENT objectNested (columnDef+, resultGrouping*)>
<!ATTLIST objectNested
  name CDATA #REQUIRED
>
<!ELEMENT objectPlaceholder EMPTY>
<!ATTLIST objectPlaceholder
  name CDATA #REQUIRED
>
<!ELEMENT resultGrouping (columnDef+)>
<!ATTLIST resultGrouping
  modifier (GROUP | ORDER) #REQUIRED
>