Попытка заставить мои DTD и XML работать правильно

Я пытался заставить мой XML-файл не только просматривать DTD, но и получал сообщение об ошибке при проверке моего DTD, заявляя, что разметка в документе, предшествующем корневому элементу, должна быть правильно сформирована. Я не уверен, что я делаю неправильно или как сделать так, чтобы оба файла работали. Любая помощь будет оценена.

DTD:

    <!ELEMENT measurements (#PCDATA|distance|weight|volume)>
    <!ELEMENT weight (#PCDATA)>
    <!ELEMENT volume (#PCDATA)>
    <!ELEMENT distance (#PCDATA)>
    <!ATTLIST distance status (metric|imperial) #REQUIRED>

XML:

    <?xml version="1.0"?>
    <!DOCTYPE measurements PUBLIC "-//American Sentinel//XML Applications//EN" "measurements.dtd">
    <measurement>
      <weight>5</weight>
      <volume>10</volume>
      <distance>metric</distance>
    </measurement>

1 ответ

Решение

В вашем DTD декларация для measurements должно быть:

<!ELEMENT measurements (#PCDATA|distance|weight|volume)*>

Это потому, что есть только один способ объявить смешанный контент.

Кроме того, вы объявили measurements (множественное число) в вашем DTD, но в вашем XML вы используете measurement (единственное число). Вам придется либо изменить DTD, либо XML. Если вы измените DTD, не забудьте изменить объявление doctype в XML.

Еще одна вещь заключается в том, что status Атрибут объявлен как требуется в вашем DTD.

Пример исправленного DTD и XML...

DTD

<!ELEMENT measurements (#PCDATA|distance|weight|volume)*>
<!ELEMENT weight (#PCDATA)>
<!ELEMENT volume (#PCDATA)>
<!ELEMENT distance (#PCDATA)>
<!ATTLIST distance status (metric|imperial) #REQUIRED>

XML

<!DOCTYPE measurements PUBLIC "-//American Sentinel//XML Applications//EN" "measurements.dtd">
<measurements>
    <weight>5</weight>
    <volume>10</volume>
    <distance status="metric"/>
</measurements>
Другие вопросы по тегам