格式正确的文件与经过验证的文件
Well-formed vs validated documents
我有一个简短的问题。为什么 XML 文件应该被验证而不仅仅是格式正确?
我在几个地方寻找这个问题的答案,但我没有找到一个好的答案。
"Well formed" 只是意味着您拥有所有的结束标记,您没有遗漏任何尖括号等。
OTOH - "validated" 表示 XML 已经根据 DTD 或模式进行了检查。这些允许您做一些事情,例如限制元素内容的类型或范围。或者,哪些元素是必需的,哪些是可选的等等
例如,假设您有一个名为 "age" 的元素。您可以使用您的模式来要求它是 1 - 100 范围内的非负整数。
或者,假设您有一个名为 "color" 的元素。您可以将内容限制为红色、蓝色或绿色。
关键是,您可以拥有格式正确的 XML,但它对您仍然无用,因为它未经验证并且有一堆垃圾数据。这就是为什么进行验证是个好主意。请注意,这在许多决定使用 XML 的项目中经常失败。根据我的经验,由于数据不佳,前期节省的精力在长期 运行 中会丢失。
顺便说一句 - w3schools 在模式方面有很好的 introductory tutorial。
任何遵循语言规则的任意XML都是"well-formed"。
这是合式的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,但是其中两个以完全不同的格式表达了正确的数据类型,而第三个则完全表达了错误的数据类型。通过使用数据定义并对其进行验证,我们可以确保我们收到的数据符合我们的预期。
我有一个简短的问题。为什么 XML 文件应该被验证而不仅仅是格式正确?
我在几个地方寻找这个问题的答案,但我没有找到一个好的答案。
"Well formed" 只是意味着您拥有所有的结束标记,您没有遗漏任何尖括号等。
OTOH - "validated" 表示 XML 已经根据 DTD 或模式进行了检查。这些允许您做一些事情,例如限制元素内容的类型或范围。或者,哪些元素是必需的,哪些是可选的等等
例如,假设您有一个名为 "age" 的元素。您可以使用您的模式来要求它是 1 - 100 范围内的非负整数。
或者,假设您有一个名为 "color" 的元素。您可以将内容限制为红色、蓝色或绿色。
关键是,您可以拥有格式正确的 XML,但它对您仍然无用,因为它未经验证并且有一堆垃圾数据。这就是为什么进行验证是个好主意。请注意,这在许多决定使用 XML 的项目中经常失败。根据我的经验,由于数据不佳,前期节省的精力在长期 运行 中会丢失。
顺便说一句 - w3schools 在模式方面有很好的 introductory tutorial。
任何遵循语言规则的任意XML都是"well-formed"。
这是合式的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,但是其中两个以完全不同的格式表达了正确的数据类型,而第三个则完全表达了错误的数据类型。通过使用数据定义并对其进行验证,我们可以确保我们收到的数据符合我们的预期。