Попытка заставить мои 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>