是否有任何差异之间的有效xml"和"xml'?
-
02-07-2019 - |
题
我不知道还有一个差异,但一个同事说,虽然他无法回来了。有什么区别如果有的话?
解决方案
有区别,是的。
符合 XML标准的XML被认为是格式良好的,而xml遵循< a href =“https://www.w3schools.com/xml/xml_dtd.asp"rel =”noreferrer“> DTD 被视为有效。
其他提示
有效的XML是成功针对DTD进行验证的XML。
格式良好的XML是XML,它以正确的顺序关闭所有标签,如果它有声明,它首先在文件中具有适当的属性。
换句话说,有效性是指语义,良构是指语法。
因此,您可以使用格式错误的XML。
以及形成vs有效的XML
以及形成 意味着一个案文符合对象 W3C的要求 对于 在XML.
有效的 意味着良好的XML满足额外的要求给予通过一个指定的架构。
官方的定义
每 W3C的建议XML:
[定义:数据对象是一种XML文件的如果这是 以及形成, 定义在本说明中。此外, XML文件 有效的 如果符合某些进一步的约束。]
意见:
- 一份文件,是不好的形成是不XML。(XML 通常使用的但是从技术上讲是多余的。)
- 正在有效意味着正在形成。
- 正在形成并不意味着是有效的。
- 虽然 W3C的建议XML 定义 有效性 将对a DTD,传统的使用的术语适用于符合XML模式指定的通过 划, 放松NG, 在, 或其他的方法。
的例子是什么原因导致的文件。
不好-成:
- 一个元素缺乏一个关闭的标记(并不是自闭幕).
- 元素的重叠,没有适当的筑巢:
<a><b></a></b>
- 一个属性的价值缺少一个关闭的报价相匹配的 开报价。
<
或&
用在内容而不是<
或&
.- 多个根本要素。
- 多XML声明的存在,或XML宣言》似乎比其他在顶部的文件。
无效:
- 一个元素的属性或缺,但需要通过XML模式。
- 一个元素的属性或使用但未定义的XML模式。
- 元素内容的不匹配内容指定的XML模式。
- 值的一个属性不匹配指定的类型XML模式。
名字空间-好吧-成
从技术上讲,结肠字是允许在组件名称在XML。然而,冒号 应该 只能使用的名称命名空间的目的:
注:
的名字空间的用XML建议[XML的名字]分配 意义的名称中包含的结肠的人物。因此,作者 不应使用结肠在XML名称,除了名字空间的用途, 但XML处理器,必须接受的结肠作为一个名符。
因此,另一个术语, 名字空间-好吧-成, 定义中 名字空间的用XML1.0W3C的建议 这意味着所有的XML规则以及标准格式 再加上 这些理事命名空间和名字空间的前缀。
俗语 以及形成 通常是用在哪里 名字空间-好吧-成 将更加精确。然而,这是一个小的技术方式的小实际结果比之间的区别 以及形成vs有效的XML 描述这个答案。
正如其他人所说,格式良好的XML符合XML规范,有效的XML符合给定的模式。
另一种说法是,格式良好的XML 词法正确(可以解析),而有效的XML 语法正确(可以匹配到一个已知的词汇和语法。)
XML文档在格式正确之前无法生效。所有XML文档都遵循相同的格式(W3推出的RFC)。一个XML文档对某些模式有效,对其他模式无效。有许多模式语言,其中许多都是基于XML的。
良好形成的XML是满足语言语法要求的XML。不要错过任何结束标记,让所有单例标记使用<whatever />
而不是<whatever>
,并以正确的顺序使用结束标记。
有效XML是使用DTD并符合其所有要求的XML。因此,如果您不正确地使用属性,则违反DTD并且无效。
所有有效的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也意味着它的结构良好,但格式良好的XML并不一定有效。
如果XML确认了DTD规则,那么它就是一个有效的XML。 如果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还定义了所有元素的有效属性以及这些属性的类型。
嗯,根据定义,格式不完善的XML不是XML。 Poeple通常将有效XML称为遵循特定模式(XSD或DTD)的XML。
请参阅 W3学校的XML DTD :
具有正确语法的XML文档称为<!> quot; Well Formed <!> quot;。
针对DTD验证的XML文档都是<!>; Well Formed <!> quot;和 <!> QUOT;有效QUOT <!>;