DOMAIN ::=
   <domain>
      <name>STRING</name>
      <variable-declarations>
         <list>VARIABLE-DECLARATION...</list>
      </variable-declarations>
      <refinements><list>REFINEMENT...</list></refinements>
      <object-classes><list>OBJECT-CLASS...</list></object-classes>
      <annotations><map>MAP-ENTRY...</map></annotations>
   </domain>
OBJECT-CLASS ::=
   <object-class>
      <name>STRING</name>
      <super-class-names><list>SYMBOL...</list></super-class-names>
      <object-properties><list>OBJECT-PROPERTY...</list></object-properties>
      <annotations><map>MAP-ENTRY...</map></annotations>
   </object-class>
OBJECT-PROPERTY ::=
   <object-property
         name="SYMBOL"
         value-class-name="SYMBOL"
         syntax="OBJECT-PROPERTY__SYNTAX">
   </object-property>
OBJECT-PROPERTY$SYNTAX ::= number | symbol | string | list | object | default
An object-class has the following fields:
| object-class ::= (object-class class-name supers object-property*) supers = (class-name*) object-property ::= (property-name [class-name] [:syntax syntax]) class-name ::= symbol property-name ::= symbol |