Ошибка DTD в Oxygen, но не в 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)>

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


person Dino    schedule 14.02.2014    source источник


Ответы (1)


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

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

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

person keshlam    schedule 14.02.2014
comment
На самом деле я создаю DTD и схему. Но сначала я создаю DTD, а затем схему. c: — это префикс пространства имен. Я все еще учусь. Я думал, что у меня может быть или для выбора либо с префиксом c, либо без префикса в DTD, но, очевидно, нет. - person Dino; 15.02.2014
comment
Или находится между двумя разными наборами контента. Как вы написали, у вас может быть один набор (с префиксом) или другой набор (без префикса), но не оба. Если вы хотите разрешить смешение, грамматика должна сказать об этом. Если у вас нет особых причин для работы с ними, в наши дни я бы пропустил DTD. - person keshlam; 15.02.2014
comment
Ах, я вижу, что технически мой DTD должен быть изменен или я должен удалить один из группы элементов, либо предшествующих, либо тех, которые не предшествуют. - person Dino; 15.02.2014