Ошибка 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.