Этот блок XML действителен или нет? - PullRequest
0 голосов
/ 01 февраля 2012

Это мой XML-код, действительный или нет.

<?xml version="1.0"?>
<!DOCTYPE nahrung [
  <!ELEMENT nahrung      (obst|gemuese|sonstiges)+>
  <!ELEMENT obst    (#PCDATA)>
  <!ELEMENT gemuese    (#PCDATA)>
  <!ELEMENT sonstiges    (#PCDATA|beschreibung)*>
  <!ELEMENT beschreibung    EMPTY>
  <!ATTLIST beschreibung artikelname CDATA #REQUIRED
    preis CDATA #REQUIRED>
]>
<nahrung>
    <obst>Pflaume</obst>
    <gemuese>Kohl</gemuese>
    <sonstiges>Keks</sonstiges>
    <sonstiges><beschreibung preis="22.50"
         artikelname="banane"/></sonstiges>
    <gemuese>Gurke Preis: 22.50</gemuese>
</nahrung>

У меня есть <!ELEMENT nahrung (obst|gemuese|sonstiges)+>, что означает obst ИЛИ gemuse ИЛИ sonstiges только один раз в XML появляются и не все из них altogher. Я правильно понял?

Ответы [ 3 ]

2 голосов
/ 01 февраля 2012

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

В частности, эта строка из вашего DTD:

<!ELEMENT nahrung      (obst|gemuese|sonstiges)+>

Означает, что вы должны иметь 1 или более элементов из этого списка.

Если вы хотите разрешить, например, только один дочерний элемент (либо obst ИЛИ gemuse ИЛИ sonstiges), вы можете использовать это:

<!ELEMENT nahrung      (obst|gemuese|sonstiges)>
1 голос
/ 01 февраля 2012

(obst|gemuese|sonstiges)+ означает один из этих 1 или более раз. Значение этого xml является действительным.

1 голос
/ 01 февраля 2012

Это

(obst|gemuese|sonstiges)+

означает «любое ненулевое число элементов obst, gemuese и sontiges в любом порядке».

...