<!ELEMENT class ( class-name, parent-class-name?, schema, requires-id?, (map | member+)? ) >

<!ELEMENT schema ( schema-name, schema-major, schema-minor ) >
<!ELEMENT map ( member+, key?, index* ) >
<!ELEMENT member ( member-name, member-type, member-size?, id?, (indexed | unique)?, required?, primary?, linked? ) >
<!ELEMENT key ( member-name+ ) >
<!ELEMENT index ( member-name+ ) >

<!ELEMENT class-name ( #PCDATA ) >
<!ELEMENT parent-class-name ( #PCDATA ) >
<!ELEMENT schema-name ( #PCDATA ) >
<!ELEMENT schema-major ( #PCDATA ) >
<!ELEMENT schema-minor ( #PCDATA ) >
<!ELEMENT member-name ( #PCDATA ) >
<!ELEMENT member-type ( #PCDATA ) >
<!ELEMENT member-size ( #PCDATA ) >
<!ELEMENT requires-id EMPTY >
<!ELEMENT required EMPTY >
<!ELEMENT indexed EMPTY >
<!ELEMENT unique EMPTY >
<!ELEMENT linked EMPTY >
<!ELEMENT primary EMPTY >
<!ELEMENT id EMPTY >
<!ATTLIST key primary (true | false) "false">
<!ATTLIST required empty (allowed | disallowed) "disallowed">

