0

我如何知道我创建的 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 是否正确?

4

1 回答 1

1

您需要使用 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但未在 DTD 中定义元素 C 时,验证失败,因此我将其更改为

<!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"

哪个没有在元素 A 中指定 XML 属性,以指定它应该是的属性

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

这应该可以帮助你做功课

这是一个指向 DTD 教程的链接http://www.quackit.com/xml/tutorial/dtd_introduction.cfm这应该可以帮助您创建一个针对它进行验证的 XML 文档

于 2012-02-26T11:22:58.830 回答