Using the "?" character specifies that the element named is optional.
Thus, in the following code snippet, we specify that every CONTACT must
have a NAME and either a PHONE or EMAIL and may have an optional ADDRESS
child.
<!ELEMENT CONTACT (NAME, (PHONE | EMAIL), ADDRESS?)>
<!ELEMENT NAME (#PCDATA)>
<!ELEMENT PHONE (#PCDATA)>
<!ELEMENT EMAIL (#PCDATA)>
<!ELEMENT ADDRESS (STREET+, CITY, STATE, ZIP, COUNTRY?)
<!ELEMENT STREET (#PCDATA)>
<!ELEMENT CITY (#PCDATA)>
<!ELEMENT STATE (#PCDATA)>
<!ELEMENT ZIP (#PCDATA)>
<!ELEMENT COUNTRY (#PCDATA)>