<!ELEMENT action ( command | state )* >
<!ATTLIST action tag CDATA #IMPLIED >

<!ELEMENT alsocompletes ( env ) >

<!ELEMENT anyposition EMPTY >

<!ELEMENT argoption ( name, help?, value? ) >
<!ATTLIST argoption use NMTOKEN #IMPLIED >

<!ELEMENT argspec ( optspec, description? ) >

<!ELEMENT argspecs ( argspec* ) >

<!ELEMENT arguments ( argoption | help )* >

<!ELEMENT code ( #PCDATA ) >
<!ATTLIST code samecommand NMTOKEN #IMPLIED >

<!ELEMENT command ( #PCDATA ) >

<!ELEMENT completion ( meta, prolog, services, states, dispatch, subcommands ) >
<!ATTLIST completion version NMTOKEN #REQUIRED >

<!ELEMENT description ( message, action? ) >

<!ELEMENT dispatch ( code )* >

<!ELEMENT env ( #PCDATA ) >

<!ELEMENT exclusionlist ( flag+ ) >

<!ELEMENT explanation ( #PCDATA )* >
<!ATTLIST explanation source CDATA #FIXED "" >

<!ELEMENT filename ( #PCDATA ) >

<!ELEMENT flag ( #PCDATA ) >

<!ELEMENT flagarg ( explanation?, help? ) >
<!ATTLIST flagarg name NMTOKEN #REQUIRED >

<!ELEMENT help ( #PCDATA ) >
<!ATTLIST help format ( preformattedtext | text ) #REQUIRED >
<!ATTLIST help level NMTOKEN #IMPLIED >
<!ATTLIST help name CDATA #IMPLIED >
<!ATTLIST help source ( manpage | zsh ) #REQUIRED >

<!ELEMENT message ( #PCDATA ) >
<!ELEMENT message EMPTY >

<!ELEMENT meta  ( filename? | includes? ) >

<!ELEMENT name ( #PCDATA ) >

<!ELEMENT nextposition EMPTY >

<!ELEMENT optspec ( anyposition | exclusionlist | flagarg | nextposition | position )* >
<!ELEMENT position EMPTY >
<!ATTLIST position position NMTOKEN #REQUIRED >

<!ELEMENT prolog ( code ) >

<!ELEMENT service ( alsocompletes | argspecs | arguments | code )* >
<!ATTLIST service name NMTOKEN #IMPLIED >

<!ELEMENT services ( service+ ) >

<!ELEMENT state ( #PCDATA | code | name )* >

<!ELEMENT states ( state+ ) >

<!ELEMENT subcommand ( service, states ) >
<!ATTLIST subcommand name NMTOKEN #REQUIRED >

<!ELEMENT subcommands ( subcommand+ ) >
<!ATTLIST subcommands prefix NMTOKEN #REQUIRED >

<!ELEMENT value EMPTY >