【发布时间】:2010-09-13 04:00:34
【问题描述】:
我不知道有什么不同,但一位同事说有,尽管他无法支持。如果有,有什么区别?
【问题讨论】:
标签: xml validation xsd dtd
我不知道有什么不同,但一位同事说有,尽管他无法支持。如果有,有什么区别?
【问题讨论】:
标签: xml validation xsd dtd
有区别,是的。
遵循XML standard 的XML 被认为是格式正确的,而遵循DTD 的xml 被认为是有效的。
【讨论】:
有效的 XML 是成功通过 DTD 验证的 XML。
格式良好的 XML 是一种以正确顺序关闭所有标签的 XML,如果它有声明,则它首先在文件中具有正确的属性。
换句话说,有效性是指语义,格式良好是指语法。
所以你可以有无效的格式良好的 XML。
【讨论】:
嗯,按照定义,格式不正确的 XML 不是 XML。人们通常将有效的 XML 称为符合特定模式(XSD 或 DTD)的 XML。
【讨论】:
我要补充的是,有效的 XML 也意味着它是格式良好的,但格式良好的 XML 不一定是有效的。
【讨论】:
格式良好的 XML 是符合语言语法要求的 XML。不要遗漏任何结束标签,让所有单例标签都使用<whatever /> 而不仅仅是<whatever>,并且结束标签的顺序正确。
有效的 XML 是使用 DTD 并符合其所有要求的 XML。因此,如果您不正确地使用属性,就会违反 DTD 并且无效。
所有有效的 XML 都是格式正确的,但并非所有格式正确的 XML 都是有效的。
【讨论】:
如果满足标准规定的所有 XML 文档的要求,则 XML 是格式良好的 - 因此诸如具有单个根节点、具有正确嵌套的节点、所有节点具有结束标记(或使用空节点简写)右尖括号前的斜线),引用的属性等。格式正确仅意味着它遵守 XML 规则,因此可以正确解析。
如果 XML 将针对 DTD 或模式进行验证,则它是有效的。这显然因情况而异 - 对一种模式有效的 XML 对另一种模式无效,即使它仍然是格式良好的。
如果 XML 格式不正确,则无法正确解析 - 解析器只会抛出异常或报告错误。这是通用的,您的 XML 包含什么并不重要。只有在解析后才能检查其有效性。此域或上下文相关,并且需要一个 DTD 或模式来验证。对于简单的 XML 文档,您可能没有 DTD 或模式,在这种情况下,您无法知道 XML 是否有效——概念或有效性在这种情况下根本不适用。当然,这并不意味着你不能使用它,它只是意味着你无法判断它是否有效。
【讨论】:
正如其他人所说,格式良好的 XML 符合 XML 规范,有效的 XML 符合给定的模式。
另一种说法是,格式良好的 XML 在词法上是正确的(可以解析),而有效的 XML 在在语法上是正确的(可以匹配到已知的词汇和语法)。
一个 XML 文档在格式正确之前是无效的。所有 XML 文档都遵循相同的格式标准(W3 提出的 RFC)。一个 XML 文档可以对某些模式有效,而对其他模式无效。有许多模式语言,其中许多本身都是基于 XML 的。
【讨论】:
如果 XML 符合 DTD 规则,那么它就是一个有效的 XML。 如果 XML 文档符合 XML 规则(所有标签 开始是关闭的,有一个根元素等)然后它是一个 格式良好的 XML。
【讨论】:
DTD 是文档类型定义的首字母缩写。这是对一系列 XML 文件的内容的描述。这是 XML 1.0 规范的一部分,允许描述和验证给定文档实例是否符合详细说明其结构和内容的一组规则。
验证是根据 DTD(更一般地,根据一组构造规则)检查文档的过程。
验证过程和构建 DTD 是 XML 生命周期中最困难的两个部分。简而言之,DTD 定义了文档中所有可能的元素,文档树的正式形状是什么(通过定义元素的允许内容;文本、允许的子列表的正则表达式或混合内容即文本和儿童)。 DTD 还定义了所有元素的有效属性以及这些属性的类型。
【讨论】:
W3C 在 XML 规范中定义了创建 XML 文档时需要遵循的某些规则。此类规则的示例包括只有一个根元素,每个开始标签都有结束标签,属性值使用单引号/双引号,等等。如果一个 XML 文档遵循所有这些规则,则称其为格式良好的文档,并且可以使用 XML 解析器来解析和处理此类文档。
文档类型定义 (DTD) 或 XML 模式可用于定义特定类 XML 文档的结构和内容。这包括父子关系详细信息、属性列表、数据类型信息、值限制等。除了格式良好的规则外,如果一个 XML 文档还遵循关联的 DTD/Schema 中指定的规则,则称为是一个有效的 XML 文档。
所有有效的 XML 文档都是格式良好的,但反过来并不总是正确的。格式正确的 XML 文档不一定是有效的。
【讨论】:
取自Extensible Markup Language (XML) 1.0 (Fifth Edition) - W3C Recommendation 26 November 2008:
[定义:如果数据对象是格式良好的,那么它就是一个 XML 文档,如 在本规范中定义。此外,XML 文档是有效的 如果它满足某些进一步的限制。]
对于那些喜欢伪代码而不是文本段落的人...... :)
IF is_well_formed(<XML_doc>) THEN
# It is well-formed, and can be parsed
IF is_valid(<XML_doc>) THEN
# Well-formed and ALSO valid. Hurray!
# **A valid XML doc, is a well-formed doc!**
ELSE
# Only well-formed, NOT valid
END IF
ELSE
# Not well-formed, or valid!
END IF
FUNCTION is_well_formed
IF <does_not_contain_syntax,_spelling,_punctuation,_grammar_errors,_etc._errors> THEN
RETURN TRUE
ELSE
RETURN FALSE
END IF
END FUNCTION
FUNCTION is_valid
IF <markup_of_the_XML_document_matches_"some"_defined_standard> THEN
# Standards used to validate XML could be a DTDs or XML Schemas, referenced within the XML document
RETURN TRUE
ELSE
RETURN FALSE
END IF
END FUNCTION
【讨论】:
格式良好表示文本对象符合W3C requirements 的being XML。
有效表示格式良好的 XML 满足指定架构给出的额外要求。
[定义:一个数据对象是一个 XML 文档,如果它是 well-formed,如本规范中所定义。除此之外 如果 XML 文档满足某些进一步的约束,则它是 valid。]
格式不正确:
<a><b></a></b>
< 或 &amp; 用于内容,而不是 &lt 或 &amp;。无效
从技术上讲,XML 中的组件名称中允许使用冒号字符。但是,冒号 should 仅用于命名空间的名称中:
注意:
XML 推荐中的命名空间 [XML Names] 分配了一个 对包含冒号字符的名称的含义。因此,作者 不应在 XML 名称中使用冒号,除非用于命名空间, 但 XML 处理器必须接受冒号作为名称字符。
因此,Namespaces in XML 1.0 W3C Recommendation 中定义了另一个术语 namespace-well-formed,它暗示了所有用于良好格式的 XML 规则加上那些管理命名空间和命名空间前缀的规则。
通俗地说,术语格式良好 经常用于命名空间格式良好 更准确的地方。但是,与此答案中描述的格式良好的 XML 与有效的 XML 之间的区别相比,这是一种次要的技术方式。
【讨论】:
具有正确语法的 XML 文档称为“格式良好”。
针对 DTD 验证的 XML 文档既是“格式良好”又是 “有效”。
【讨论】: