<!ELEMENT characterMapping (history?, validity, assignments)>
<!ATTLIST characterMapping
    id CDATA #REQUIRED
    version CDATA #REQUIRED
    description CDATA #IMPLIED
    contact CDATA #IMPLIED
    registrationAuthority CDATA #IMPLIED
    registrationName CDATA #IMPLIED
    copyright CDATA #IMPLIED
    bidiOrder (logical|RTL|LTR) "logical"
    combiningOrder (before|after) "after"
    normalization (undetermined|neither|NFC|NFD|NFC_NFD) "undetermined"
>

<!ELEMENT history (modified+)>
<!ELEMENT modified (#PCDATA)>
<!ATTLIST modified
    version CDATA #REQUIRED
    date CDATA #REQUIRED
>

<!ELEMENT validity (state+)>
<!ELEMENT state EMPTY>
<!ATTLIST state
    type CDATA #REQUIRED
    next CDATA #REQUIRED
    s CDATA #REQUIRED
    e CDATA #IMPLIED
    max CDATA #IMPLIED
>

<!ELEMENT assignments (a*, fub*, fbu*, range*)>
<!ATTLIST assignments
    sub NMTOKENS "1A"
>

<!ELEMENT a EMPTY>
<!ATTLIST a
    b NMTOKENS #REQUIRED
    u NMTOKENS #REQUIRED
    c CDATA #IMPLIED
    v CDATA #IMPLIED
>

<!ELEMENT fub EMPTY>
<!ATTLIST fub
    b NMTOKENS #REQUIRED
    u NMTOKENS #REQUIRED
    c CDATA #IMPLIED
    ru CDATA #IMPLIED
    rc CDATA #IMPLIED
    v CDATA #IMPLIED
>

<!ELEMENT fbu EMPTY>
<!ATTLIST fbu
    b NMTOKENS #REQUIRED
    u NMTOKENS #REQUIRED
    v CDATA #IMPLIED
>

<!ELEMENT range EMPTY>
<!ATTLIST range
    bFirst NMTOKENS #REQUIRED
    bLast NMTOKENS #REQUIRED
    uFirst NMTOKENS #REQUIRED
    uLast NMTOKENS #REQUIRED
    bMin NMTOKENS #REQUIRED
    bMax NMTOKENS #REQUIRED
    v CDATA #IMPLIED
>


