<?xml version="1.0" encoding="utf-8"?>
<!ELEMENT control ((node|alph)*)>
<!ATTLIST control name CDATA #REQUIRED>

<!ELEMENT node ((node|move|delete|copy|speak|pause|stop|ref|root|alph)*)>
<!--by specifying the name attribute as type ID rather than CDATA, the XML
    validator checks that all IDs are distinct:-->
<!ATTLIST node name ID #IMPLIED>
<!ATTLIST node label CDATA #REQUIRED>
<!ATTLIST node color CDATA #IMPLIED>

<!ELEMENT move EMPTY>
<!ATTLIST move forward (yes|no) #REQUIRED>
<!ATTLIST move dist (char|word|line|sentence|paragraph|page|all) #REQUIRED>

<!ELEMENT delete EMPTY>
<!ATTLIST delete forward (yes|no) #REQUIRED>
<!ATTLIST delete dist (char|word|line|sentence|paragraph|page|all) #REQUIRED>

<!ELEMENT copy EMPTY>
<!ATTLIST copy what (new|repeat|word|line|sentence|paragraph|page|all) #REQUIRED>

<!ELEMENT speak EMPTY>
<!ATTLIST speak what (cancel|new|repeat|word|line|sentence|paragraph|page|all) #REQUIRED>

<!ELEMENT pause EMPTY>

<!ELEMENT stop EMPTY>

<!ELEMENT ref EMPTY>
<!--by specifying the name attribute as type IDREF rather than CDATA, the XML
    validator checks that a node with that name (as an ID) exists-->
<!ATTLIST ref name IDREF #REQUIRED>

<!ELEMENT root EMPTY>

<!ELEMENT alph EMPTY>