"valid xml" 和 "well formed xml" 之间有什么区别吗?
"valid XML"和"well-formed XML"之间有什么区别?
这个问题的出现的原因是XML的语法和语义的不同。XML是一种用于存储和传输数据的标记语言,它具有严格的语法规则和结构。
解决方法是明确区分"valid XML"和"well-formed XML"的含义和用途。"valid XML"是指通过DTD(文档类型定义)进行验证的XML,它满足DTD中定义的语义规则。而"well-formed XML"是指XML在语法上符合所有标签正确关闭的顺序和如果有声明的话,声明应该在文件的第一行,并且具有正确的属性。换句话说,"valid XML"与语义相关,而"well-formed XML"与语法相关。
所以,可以有无效但是格式正确的XML。
需要指出的是,"valid XML"和"well-formed XML"并不涉及语义(某物的意义)方面的内容。DTD没有办法指示特定元素或属性的含义。这需要类似Web Ontology Language的工具来实现。相反,"well-formed XML"指的是语法的低级别(可能更好地称为词法正确性),而"valid XML"指的是语法的更高级别(可以称之为"结构")。
"valid XML"和"well-formed XML"是XML语法和语义方面的两个概念,需要根据具体的需求来区分和使用。
XML(可扩展标记语言)是一种用于存储和传输数据的文本格式。在使用XML时,我们经常会遇到两个概念,即“well-formed XML”和“valid XML”。
“well-formed XML”指的是文本对象满足W3C对XML格式的要求。换句话说,一个文档只有在满足XML的语法规则时,才能称为“well-formed XML”。如果一个文档不满足XML的语法规则,那么它就不是XML。
而“valid XML”则是在满足“well-formed XML”的基础上,还需要符合特定模式(schema)的附加要求。在XML中,我们可以使用DTD(文档类型定义)、XSD(XML模式定义)、RELAX NG、Schematron等方法来定义模式。只有满足了这些模式的要求,才能称为“valid XML”。
需要注意的是,满足“valid XML”的文档一定是“well-formed XML”,但满足“well-formed XML”的文档不一定是“valid XML”。
下面是一些导致文档不满足“well-formed XML”和“valid XML”的例子:
不满足“well-formed XML”的例子:
- 元素缺少闭合标签(也不是自闭合标签)。
- 属性值缺少与开头引号匹配的闭合引号。
- 内容中使用了`<`或`&`而不是对应的转义字符`<`或`&`。
- 存在多个根元素。
- 存在多个XML声明,或者XML声明出现在文档顶部之外。
不满足“valid XML”的例子:
- XML模式要求的元素或属性缺失。
- XML模式要求的元素或属性在文档中未定义。
- 元素的内容与XML模式规定的内容不匹配。
- 属性的值与XML模式规定的类型不匹配。
此外,XML还有一个与命名空间相关的概念,“namespace-well-formed”。在XML中,冒号字符是允许出现在组件名称中的,但是根据W3C关于命名空间的建议,冒号应该只用于命名空间的目的。因此,W3C的建议中定义了“namespace-well-formed”,它包括了“well-formed XML”的规则以及命名空间和命名空间前缀的规则。
总结起来,“well-formed XML”是指满足XML语法规则的文档,“valid XML”是指在满足“well-formed XML”的基础上,还需满足特定模式的文档。
在XML中,'valid xml'和'well formed xml'是有区别的。符合XML标准的XML被认为是well formed,而符合DTD(文档类型定义)、XML Schema、RelaxNG或Schematron的XML被认为是valid。值得指出的是,well formed是valid的前提条件。根据XML规范的定义,如果一个XML文档不是well formed,就无法通过DTD或schema的检查。具体的规范引用可在这里找到:定义:如果数据对象在本规范中定义的基础上是well-formed的,则它是一个XML文档。此外,如果XML文档满足某些进一步的约束条件,则该文档是valid的。 对于valid XML和well-formed XML的进一步考虑,请参考我下面的回答。