为什么XML字符约束是不对称的?

11 浏览
0 Comments

为什么XML字符约束是不对称的?

我不清楚XML字符验证中不对称性背后的逻辑。例如,以下XML是无效的(正如我所预期的):

my value

my value is < than

但是以下XML是有效的:

my value

my value is > than

我希望任何字符,如<>&都被视为非法。所以我想问的是,为什么选择这种方式(>是可以的,但<不可以)。

0
0 Comments

为什么XML字符约束是不对称的?

我对此也感到困惑不解。在快速浏览规范时,我立刻想到">"是无效字符,因为如果它是元素内部的有效字符,那么跳转到元素的末尾就更难了。后来,当我更仔细地浏览规范时,我意识到实际上是"<"是不允许的。什么!?

这对我来说实在没有任何道理。我阅读了这里以及其他地方给出的解释,嗯...不...无法理解。提前扫描?什么?如果解析器每次向前移动扫描每个字符,它可以轻松地建立上下文,因此两者都应该被允许。但是!对我来说,这就是关键:如果你想要快速地“跳过”到元素的末尾,使用你在编程语言中拥有的某种方法,你可能只剩下一种类似于instr/indexOf方法的方法。但是你不能使用它们,因为在执行此操作时,你需要不断构建和更新上下文!你需要根据规范解析每个属性,即使你知道你对这个特定元素不感兴趣!哇...这真的让我震惊。

我认为这两个字符当然都不应该出现在元素内部,但由于其中一个是允许的,所以另一个也应该是允许的。但是我更希望它们都不允许。好吧,现在为时已晚了。

对于对这个老问题的抱怨,我很抱歉。

PS. 是的,我刚刚编写了自己的XML解析器。所以我现在有点沮丧。如果不是必须的话,千万不要自己编写XML解析器。;)

另外,在结束标签内允许空格是一个错误。我的意思是,为什么?它没有任何用处,只会给解析器增加额外的工作。当然,在开始标签中可以,但是在结束标签中呢?不行。我们应该发布一个修复了所有这些荒谬问题的XML "2.0"版本。

0
0 Comments

为什么XML字符约束是不对称的?

XML字符约束是不对称的,原因是为了遵循SGML兼容性和保持属性规则与文本节点规则相同。具体原因比这更复杂一些。XML本可以允许在属性值中未转义地出现<和>字符,而不会对解析器造成任何困扰。它允许出现>字符而不允许出现<字符,部分是考虑到SGML兼容性,在XML的早期被认为非常重要,部分是为了使属性规则与文本节点规则相同。

解决这个问题的方法是使用转义字符来替代<字符。例如,可以使用<来表示<字符。这样可以避免解析器对字符进行前向扫描从而正确解释它们的需要。这种转义字符的使用可以保持XML的语法一致性,同时也能够避免解析器的困惑。

,XML字符约束是不对称的是为了遵循SGML兼容性和保持属性规则与文本节点规则相同。为了解决这个问题,可以使用转义字符来替代<字符,以避免解析器的困惑。

0