Ошибка DTD в Кислороде, но не в Netbeans так запутана

Я пытаюсь создать XML-файл с DTD, но в Netbeans он не дает никаких ошибок, но в Oxygen XML он сообщает неожиданный элемент childone. Содержимое типа родительского элемента должно соответствовать "((c:childone,c:childtwo)|(childone,childtwo,childthree,childfour))".

XML у меня выглядит следующим образом:

<rootelement>
   <c:childone></c:childone>
   <c:childtwo></c:childtwo>
   <childone></childone>
   <childtwo></childtwo>
   <childthree></childthree>
   <childfour></childfour>
</rootelement>

DTD у меня выглядит следующим образом:

<!ELEMENT rootelement ((c:childone,c:childtwo)|(childone,childtwo,childthree,childfour))>
<!ELEMENT c:childone (#PCDATA)>
<!ELEMENT c:childtwo (#PCDATA)>
<!ELEMENT childone (#PCDATA)>
<!ELEMENT childtwo (#PCDATA)>
<!ELEMENT childthree (#PCDATA)>
<!ELEMENT childfour (#PCDATA)>

Я запутался сейчас, пожалуйста, помогите. Надеюсь, я отформатировал это правильно.

1 ответ

Решение

DTD говорит, что содержимое <rootelement> может быть одной из двух форм; Ваш фактический документ содержит их обоих. Выберите один или измените DTD.

Я подозреваю, что Netbeans просто не проверяет и, следовательно, не замечает проблему.

Кстати, DTD ОЧЕНЬ плохо подходят для работы с документами в пространстве имен - и я, конечно, надеюсь, что вы связали c: префикс к пространству имен! - поэтому я настоятельно рекомендую перейти на XML-схемы, которые являются более мощной заменой DTD.

Другие вопросы по тегам