格式良好与经过验证的文档

时间:2015-05-08 01:21:57

标签: xml xsd dtd relaxng

我有一个简短的问题。为什么要验证XML文件而不仅仅是格式良好?

我看了几个地方寻找这个问题的答案,但我找不到一个好的。

2 个答案:

答案 0 :(得分:1)

“格式良好”只是意味着你拥有所有的结束标签,你没有错过任何尖括号等。

OTOH - “validated”表示已针对DTD或架构检查XML。这些允许您执行诸如限制元素内容的类型或范围之类的操作。或者,哪些元素是必需的,哪些是可选的,等等。

例如,假设您有一个名为“age”的元素。您可以使用模式要求它是1到100之间的非负整数。

或者,假设您有一个名为“color”的元素。您可以将内容限制为红色,蓝色或绿色。

关键是,你可以使用格式良好的XML,但它仍然没用,因为它没有经过验证并且有大量垃圾数据。这就是进行验证的好主意。请注意,在许多决定使用XML的项目中,这是经常失败的。根据我的经验,由于数据不良,从长远来看,预先节省的工作量会减少。

BTW - w3schools对模式有很好的introductory tutorial

答案 1 :(得分:1)

遵循语言规则的任何XML都是“格式良好的”。

这是格式良好的XML

<Manager fname="John" lname="Doe">
    <Employee fname="Joe" lname="Everyman" />
</Manager>

这是

<RandomCamelcaseText />

但这不是

<message> I'm just going to put text here and not close the tag!

无论如何,在任何应用程序中都会如此。

但是假设我们正在编写一个想要以XML形式接收客户数据的应用程序。如果我们不使用模式或DTD等指定数据格式,那么一个用户可能会提交此

<Customer fname="John" lname="Doe" />

另一个人可能会提交此

<Customer>
    <fname>John</fname>
    <lname>Doe</lname>
</Customer>

而另一个人可能会提交类似这样的内容

<meal>
    <spam />
    <eggs />
    <sausage meat="spam" />
</meal>

它们都是格式良好的XML,但其中两个以完全不同的格式表达正确的数据类型,而第三个表达完全错误的数据类型。通过使用数据定义并对其进行验证,我们可以确保收到的数据符合我们的期望。