| dtd | ::= | ( elementDecl | attListDecl )* <EOF> |
| elementDecl | ::= | "<!ELEMENT" Name contentSpec ">" |
| contentSpec | ::= | <EMPTY> |
| | | <ANY> | |
| | | mixed | |
| | | children | |
| mixed | ::= | "(" <PCDATA> ( ( "|" Name )* ")*" | ")" ) |
| children | ::= | seqchoice ( modifier )? |
| seqchoice | ::= | "(" cp ( choice | seq ) ")" |
| choice | ::= | ( "|" cp )+ |
| seq | ::= | ( "," cp )* |
| cp | ::= | ( Name | seqchoice ) ( modifier )? |
| modifier | ::= | "*" |
| | | "+" | |
| | | "?" | |
| attListDecl | ::= | "<!ATTLIST" Name ( attribDef )* ">" |
| attribDef | ::= | Name attribType defaultDecl |
| attribType | ::= | stringType |
| | | tokenizedType | |
| | | enumeratedType | |
| stringType | ::= | <CDATA> |
| tokenizedType | ::= | <ID> |
| | | <IDREF> | |
| | | <IDREFS> | |
| | | <ENTITY> | |
| | | <ENTITIES> | |
| | | <NMTOKEN> | |
| | | <NMTOKENS> | |
| enumeratedType | ::= | ( notationType | enumeration ) |
| notationType | ::= | <NOTATION> "(" Name ( "|" Name )* ")" |
| enumeration | ::= | "(" Name ( "|" Name )* ")" |
| defaultDecl | ::= | <REQUIRED> |
| | | <IMPLIED> | |
| | | ( ( <FIXED> )? attribValue ) | |
| attribValue | ::= | <QUOTEDSTR> |
| Name | ::= | <NAME> |