Как объявить пустой или непустой элемент dtd - PullRequest
3 голосов
/ 17 августа 2011

Как я могу объявить элемент в DTD, который является самозакрывающимся или содержит элементы? Я нашел оператор *, но не могу проверить, может ли он также проверять пустые элементы.

Я пробовал это, но выдает ошибку компиляции в Visual Studio о том, что элемент EMPTY не объявлен:

<!ELEMENT File (Annotations|EMPTY)>
<!ELEMENT Annotations (State*)>
<!ELEMENT State EMPTY>

Или я мог бы попробовать следующее, но я не могу проверить, все ли в порядке:

<!ELEMENT File (Annotations?)>
...

1 Ответ

1 голос
/ 17 августа 2011

Да, ваше объявление элемента для 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>
...