Знание правильности соответствующего XML с помощью данного сценария DTD - PullRequest
0 голосов
/ 26 февраля 2012

Как узнать, соответствует ли созданный мной XML правилу, указанному в моем DTD?

вот мой XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE HW SYSTEM "HW.dtd">
<A>
    AA = "BAR"
    AB = "FOO"
    AC = "1"
    <C>
        <B/>
        CA = "Name"
    </C>
    <D>Element</D>
</A>

и вот мой DTD

<?xml version="1.0" encoding="ISO-8859-1"?>
<!ELEMENT A (B* |C+,D)>
<ATTLIST A
    AA CDATA #REQUIRED
    AB CDATA #REQUIRED
    AC(0|1|2) #REQUIRED
>
<!ELEMENT B EMPTY>
<!ATTLIST C(B)>
<!ATTLIST C
    CA CDATA #REQUIRED
>
<!ELEMENT D (#PCDATA)>

мой XML правильный с DTD?

1 Ответ

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

Вам необходимо использовать валидатор XML,

Онлайн-версия http://www.xmlvalidation.com/,, есть множество инструментов, которые делают это также

В соответствии с валидатором, ваш DTD недействителен

Я пытался исправить ваш DTD, вот исправленная версия

<?xml version="1.0" encoding="ISO-8859-1"?>
<!ELEMENT A (B* | (C+,D))>
<!ATTLIST A
    AA CDATA #REQUIRED
    AB CDATA #REQUIRED
    AC (0|1|2) #REQUIRED
>
<!ELEMENT B EMPTY>
<!ELEMENT C EMPTY>
<!ATTLIST C
    CA CDATA #REQUIRED
>
<!ELEMENT D (#PCDATA)>

Проблемы с DTD, которые вы разместили, были:

Насколько я мог видеть, вам нужны скобки вокруг C +, D также неправильный <ATTLIST выше, так как вы указываете список атрибутов с помощью <!ATTLIST обратите внимание на! пропал без вести.

Также ваш DTD имел

<!ELEMENT B EMPTY>
<!ATTLIST C
    CA CDATA #REQUIRED
>

Что не прошло проверку, так как вы определяли список атрибутов из элемента C <!ATTLIST C, но не определили Элемент C в DTD, поэтому я изменил его на

<!ELEMENT C EMPTY>
<!ATTLIST C
    CA CDATA #REQUIRED
>

Это делает ваш DTD действительным

Кроме того, ваш XML неверен во многих отношениях

например, ваш DTD указывает

<!ATTLIST A
    AA CDATA #REQUIRED
    AB CDATA #REQUIRED
    AC (0|1|2) #REQUIRED
>

Это означает, что Элемент A должен иметь атрибуты AA BB AC, поскольку они необходимы, а также атрибут AC должен быть 0 или 1 или 2

Вы поставили

<A>
    AA = "BAR"
    AB = "FOO"
    AC = "1"

Что не указывает атрибуты XML в Элементе A, для указания атрибутов это должно быть

<A AA="BAR" AB="FOO" AC="1">

Это должно помочь вам сделать домашнее задание

вот ссылка http://www.quackit.com/xml/tutorial/dtd_introduction.cfm на учебник DTD, это должно помочь вам создать документ XML, который проверяет его

...