我声称在某些XML源中未转义的&符号是"无效的XML".LarsH然后提到:
从技术上讲,XML"格式不正确"."无效"意味着它无法符合特定架构.
我试图找到"无效"XML和"格式不正确"XML的官方定义来确认LarsH的声明,但我无法在官方规范中找到任何定义来进行比较.
"无效"XML与"格式不正确"的XML有何不同?
我认为一般差异很明显,而Nathan和Shawn的答案是准确的.提出问题的不明确的案例是:
对于一个非格式良好的XML片段,我从长时间使用XML中得到的印象是,有效性的问题是未定义的.但我无法从XML规范中证明这一点.
定义:如果XML文档具有关联的文档类型声明,并且文档符合其中表达的约束,则该XML文档是有效的.
请注意,此定义以"XML文档"开头.一个XML文档的定义为:
定义:如果数据对象格式正确,则该数据对象是XML文档,如本规范中所定义.此外,如果XML文档满足某些进一步的约束,则它是有效的.
这意味着上述"有效"定义仅适用于XML文档,即适用于格式良好的数据对象.关于不是(格式良好的)XML文档的数据对象,"有效"的定义没有说什么.
各种诠释学问题仍然存在......
我们是否将上述有效定义视为详尽无遗......也就是说,我们是否认为没有其他关于有效性的定义是明确的?(如果是这样,我们忽略基于XML Schema或RelaxNG等的/ validity)
我们是否将"if"视为"仅限于"?例如,没有DTD的格式良好的XML文档是否也被视为有效?如果一个格式不正确的XML文档符合其关联的DTD,它是否可以被认为是有效的?(Bob DuCharmes 似乎说这个定义意味着"只有":"XML规范明确规定有效文件必须格式正确[强调我的].")
我们可以假设每个不"有效"的XML文档都是"无效的"吗?我认同.但是每个数据对象呢?例如,有没有未定义的有效性状态?XML规范从未定义术语"无效",为解释留下了一些余地.很明显,如果X无效,则无效.但反过来说:如果X无效,那是否意味着它必须无效?
看看受尊敬的XML专家,在规范之外...... Bob DuCharme 写道,XML"无效的文档...... 可能仍然是格式良好的......",暗示着一个XML文档不是有效可能不是很好.但同样,"无效"与"无效"相同吗?此外,根据规范,XML文档的定义很好.因此从技术上讲,一个XML文件是无效的,必须仍然是良好的.我相信DuCharme在这里略微使用了一些术语.
我们还需要记住SGML下降语言的更广泛背景,包括HTML.该网页提供了根据W3C验证器服务认为有效的XHTML页面示例,但格式不正确.但是当我通过验证器服务运行它们时,它并没有说它们是有效的.
实际上,任何验证引擎都难以处理任何格式不正确的XML.它必须首先"纠正"输入数据,猜测预期的,正确的XML结构应该是什么,并且没有该过程的官方规范.因此,实施结果可能会有很大差异.验证将依赖于实现.
出于这个原因,我会说,出于所有实际目的,如果数据对象不是一个(格式良好的)XML文档,那么声称数据对象是无效的XML会产生误导.如果你的意思是通信(如未转义的&符号的情况)数据不是格式良好的XML,那么术语"无效"就是传达错误的东西,即使可以说是可以认为是真的.这有点像说蜘蛛不是果蝇,因为它有超过六条腿,当你的意思是蜘蛛不是昆虫,因为它有超过六条腿.确实,蜘蛛不是果蝇,但没有传达预期的意义.
尽管如此,我没有从XML规范中看到一个铁定的论据,该论证说明格式不正确的XML数据对象是否(或必须)无效.如果我们遵循Bob DuCharme,我们可能应该这样做,我们可以安全地得出结论,一个格式不正确的XML的数据对象无法生效.
当然,如果我们说,指的是一个数据对象,它不是格式良好的XML,它是无效的,我们会引起混淆,我们可能很容易理解为声称除了它没有格式良好之外的东西.
我希望进一步阅读XML专家可以让我们更好地了解这个问题的共识,即使答案不像XML规范那样正式.
格式良好表示语法正确性 - 例如打开带有结束标签的标签,打开引号具有结束引号,正确转义某些字符等等.
无效的XML表示与某些特定结构的一致性 - 例如某个节点是否存在,或者是否应该将另一个节点嵌套在其他节点之下.要无效,需要对XML结构被认为有效的定义.通常,这可以在XML模式(DTD或.xsd)中找到.如果我声明我希望XML只有顶级节点,有人发给我带有子节点的节点的XML,我会声明它"无效",即使XML可能是完美的格式和语法正确.
另请参阅"有效xml"和"格式良好的xml"之间是否存在差异?
| 归档时间: |
|
| 查看次数: |
2999 次 |
| 最近记录: |