Да, ваше объявление элемента для File
правильное:
<!ELEMENT File (Annotations?)>
Вы говорите, что File
может содержать ноль или один Annotations
элемент.
Кроме того, если бы вы использовали *
вместо ?
, вы бы сказали, что File
может содержать ноль или больше Annotations
элементов.
Допустимые примеры:
<!DOCTYPE File [
<!ELEMENT File (Annotations?)>
<!ELEMENT Annotations (State*)>
<!ELEMENT State EMPTY>
]>
<File/>
<!DOCTYPE File [
<!ELEMENT File (Annotations?)>
<!ELEMENT Annotations (State*)>
<!ELEMENT State EMPTY>
]>
<File></File>
<!DOCTYPE File [
<!ELEMENT File (Annotations?)>
<!ELEMENT Annotations (State*)>
<!ELEMENT State EMPTY>
]>
<File>
<Annotations/>
</File>