我有一个简短的问题。为什么要验证XML文件而不仅仅是格式良好?
我看了几个地方寻找这个问题的答案,但我找不到一个好的。
答案 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,但其中两个以完全不同的格式表达正确的数据类型,而第三个表达完全错误的数据类型。通过使用数据定义并对其进行验证,我们可以确保收到的数据符合我们的期望。