我不知道有什么区别,但是一位同事说有区别,尽管他不能支持。有什么区别?
Answers:
有效表示格式正确的XML满足指定架构给出的其他要求。
根据W3C XML建议:
[定义:如本规范中所定义,如果数据对象格式良好,则它是XML文档 。另外,如果XML文档满足某些进一步的约束,则它是有效的。]
<a><b></a></b>
<
或&
用于内容而非<
或&
。从技术上讲,XML组件名称中允许使用冒号。然而,冒号应该只能在命名空间用途名称中使用:
注意:
XML建议书[ XML名称]中的命名空间为包含冒号的名称赋予含义。因此,除命名空间用途外,作者不应在XML名称中使用冒号,但XML处理器必须接受冒号作为名称字符。
因此,另一个术语,结构良好的命名空间,在定义命名空间中的XML 1.0 W3C推荐标准暗含所有的良构的XML规则加上那些有关命名空间和命名空间前缀。
通俗地讲,格式良好的术语通常用于格式正确的命名空间会更精确的地方。但是,这是一种次要的技术方式,其实用性要比此答案中描述的格式正确的XML与有效的XML之间的区别要小。
有效XML是成功针对DTD进行验证的XML。
格式正确的XML是XML,它以正确的顺序关闭了所有标签,如果有声明,则它首先在文件中具有正确的属性。
换句话说,有效性是指语义,格式正确是指语法。
因此,您将拥有无效的格式正确的XML。
如果符合标准规定的所有XML文档的要求,则XML的格式正确-诸如具有单个根节点,具有正确嵌套的节点,所有节点具有结束标记(或在格式正确意味着它遵循XML规则,因此可以正确地进行解析。
如果XML将针对DTD或架构进行验证,则XML是有效的。这显然因情况而异-对一种模式有效的XML对另一种模式无效,即使它仍然是格式正确的。
如果XML格式不正确,则无法正确解析-解析器只会抛出异常或报告错误。这是通用的,您的XML包含什么都没有关系。只有对其进行了解析,才能对其进行有效性检查。此域或上下文相关,并且需要使用DTD或架构进行验证。对于简单的XML文档,您可能没有DTD或架构,在这种情况下,您不知道XML是否有效-概念或有效性在这种情况下根本不适用。当然,这并不意味着您不能使用它,而只是意味着您无法确定它是否有效。
XML规范中的W3C已定义了创建XML文档时必须遵循的某些规则。此类规则的示例包括仅具有一个根元素,为每个开始标签具有结束标签,对属性值使用单/双引号等等。如果XML文档遵循所有这些规则,则可以说它是格式正确的文档,可以使用XML解析器来解析和处理此类文档。
文档类型定义(DTD)或XML模式可用于定义XML文档特定类的结构和内容。这包括父子关系详细信息,属性列表,数据类型信息,值限制等。除了格式规则外,如果XML文档还遵循关联的DTD / Schema中指定的规则,则据说是有效的XML文档。
所有有效的XML文档格式正确,但并非总是如此。格式正确的XML文档不一定必须有效。
摘自可扩展标记语言(XML)1.0(第五版)-W3C建议书2008年11月26日:
[定义:如本规范中所定义,如果数据对象格式正确,则它是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
基于以下理论:“格式良好”与有效
DTD是“文档类型定义”的首字母缩写。这是一系列XML文件内容的描述。这是XML 1.0规范的一部分,并允许其描述和验证给定文档实例是否符合详细说明其结构和内容的一组规则。
验证是根据DTD(更通常是针对一组构造规则)检查文档的过程。
验证过程和构建DTD是XML生命周期中两个最困难的部分。简要地说,DTD定义了在文档中可以找到的所有可能元素,文档树的正式形状是什么(通过定义元素的允许内容;文本,允许子列表的正则表达式或混合内容)即文字和儿童)。DTD还定义了所有元素的有效属性以及这些属性的类型。
参见W3学校的XML DTD:
具有正确语法的XML文档称为“格式良好”。
针对DTD验证的XML文档既“格式正确”又“有效”。