Модель смешанного контента DTD - PullRequest
1 голос
/ 13 октября 2011

Скажите, что у меня есть что-то вроде этого

       <offor>Ubuntu Juju is all that you need 
      <charm Id="lisp" \>.</offor><offor>This one is the name thing</offor>

Это мой DTD

       <!ELEMENT offor (#PCDATA, charm?) >
      <!ELEMENT charm EMPTY>
      <!ATTLIST id ID #REQUIRED>

Может ли кто-нибудь помочь мне здесь?Мой DTD не работает

1 Ответ

5 голосов
/ 13 октября 2011

В вашем XML и DTD есть несколько ошибок:

  1. У вас нет корневого элемента. Я добавил <doc> в моем примере ниже.

  2. Вы использовали обратную косую черту (\) вместо прямой косой черты (/) при закрытии charm.

  3. Если у вас есть смешанное содержимое , вы не можете указать порядок #PCDATA и дочерние элементы, используя ,. Вы должны использовать | (или) и звездочку (*).

  4. В объявлении ATTLIST вы забыли добавить имя элемента, для которого объявлены атрибуты.

  5. Атрибут Id в XML не соответствует регистру имени атрибута id в DTD.

Вот пример обновленного XML и DTD. DTD находится во внутреннем подмножестве, но будет работать так же хорошо, если используется как внешний DTD.

<!DOCTYPE doc [
<!ELEMENT doc (offor+)>
<!ELEMENT offor (#PCDATA|charm)* >
<!ELEMENT charm EMPTY>
<!ATTLIST charm 
          id ID #REQUIRED>
]>
<doc>
  <offor>Ubuntu Juju is all that you need 
    <charm id="lisp"/>.</offor><offor>This one is the name thing</offor>
</doc>
...