<!ELEMENT Lexeme ( Head, ( Body | SimpleBody ), Lexeme? )>
<!ATTLIST Lexeme
    id          ID                #REQUIRED
>

<!ELEMENT Head ( Affix?, Headword, Affix?, Variant*, Note? )>

<!ELEMENT Affix ( OrthographicForm )>
<!ATTLIST Affix
    type        (prefix|suffix)   #REQUIRED
>

<!ELEMENT Note ( #PCDATA )>

<!ELEMENT Headword ( OrthographicForm )>

<!ELEMENT OrthographicForm ( #PCDATA )>
<!ATTLIST OrthographicForm
    encoding    CDATA             #IMPLIED
>

<!-- The body of a lexeme -->

<!ELEMENT SimpleBody ( MSI?, ( CrossRef | Comment | XRef ) )>

<!ELEMENT Body ( Pron*, MSI*, Sense+, Mapping*, Aux? )>

<!ELEMENT Pron ( Phon*, Variant*, Abbreviation*, AfPhon?)>
<!ATTLIST Pron
    id          ID                #REQUIRED
>

<!ELEMENT Phon ( #PCDATA )>
<!ATTLIST Phon
    type        CDATA             #REQUIRED
>

<!ELEMENT Variant ( #PCDATA )>
<!-- Haejoong added "phonetic" and "gramm" types -->
<!ATTLIST Variant
    type        ( phonological | grammatical | register | dialect
                | usagelevel | phonetic | gramm )
		                  #REQUIRED
    category    CDATA             #IMPLIED
>

<!ELEMENT Abbreviation ( OrthographicForm )>

<!ELEMENT AfPhon ( #PCDATA )>
<!ATTLIST AfPhon
    type        CDATA             #REQUIRED
>

<!ELEMENT MSI ( POS+, SimpleExample*, Comment* )>
<!ATTLIST MSI
    id          ID                #REQUIRED
>

<!ELEMENT POS ( OrthographicForm?, Feature* )>
<!ATTLIST POS
    type        CDATA             #REQUIRED
>

<!ELEMENT SimpleExample ( OrthographicForm )>
<!ATTLIST SimpleExample
    langid      CDATA             #IMPLIED
>

<!ELEMENT Comment ( #PCDATA )>

<!ELEMENT Sense ( Gloss*, Example*, Aux?, Compound* )>
<!ATTLIST Sense
    id          ID                #REQUIRED
    realm       CDATA             #IMPLIED
>

<!ELEMENT Mapping EMPTY>
<!ATTLIST Mapping
    pron        IDREF             #IMPLIED
    msi         IDREF             #IMPLIED
    sense       IDREF             #IMPLIED
    aux         IDREF             #IMPLIED
>

<!-- Auxiliary information -->

<!ELEMENT Aux ( Etymology*, CrossRef*, Comment*, Dialect*, Register? )>
<!ATTLIST Aux
    id          ID                #REQUIRED
    obsolete    (yes|no)          #IMPLIED
    rare        (yes|no)          #IMPLIED
    xref        CDATA             #IMPLIED
    informant   CDATA             #IMPLIED   
>

<!ELEMENT Etymology ( #PCDATA )>

<!ELEMENT CrossRef ( #PCDATA )>
<!ATTLIST CrossRef
    type        CDATA             #IMPLIED
    entry       CDATA             #REQUIRED
>

<!ELEMENT XRef ( #PCDATA )>
<!ATTLIST XRef
    type        CDATA             #IMPLIED
>

<!ELEMENT Register ( #PCDATA )>
<!ATTLIST Register
    type        CDATA             #IMPLIED
>

<!ELEMENT Feature ( #PCDATA )>
<!ATTLIST Feature
     name       NMTOKEN           #REQUIRED
>

<!-- Sense Information -->

<!ELEMENT Gloss ( OrthographicForm+ )>
<!ATTLIST Gloss
    dialect     CDATA             #IMPLIED
>

<!ELEMENT Example ( Usage*, ((Sentence, PhonologicalForm?, Translation*) | InterlinearText), Aux? )>

<!ELEMENT Usage EMPTY>
<!ATTLIST Usage
    type        CDATA             #REQUIRED
>

<!ELEMENT PhonologicalForm ( #PCDATA )>

<!ELEMENT Translation ( #PCDATA )>

<!ELEMENT InterlinearText ( #PCDATA )>

<!ELEMENT Compound (Sentence, Translation*)>
<!ATTLIST Compound
    realm       CDATA             #IMPLIED
>

<!ELEMENT Sentence ( #PCDATA )>
<!ATTLIST Sentence
    type        CDATA             #IMPLIED
>

<!ELEMENT Realm ( #PCDATA )>

<!ELEMENT Dialect ( #PCDATA )>
<!ATTLIST Dialect
    code        CDATA             #IMPLIED
>