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

Why XML Character constraint is asymmetric?

我不清楚 XML 字符验证中不对称背后的逻辑。

例如,随后的 XML 无效(如我所料):

<xml>
<value attr="<">my value</value>
</xml>

<xml>
<value attr="attribute">my value is < than</value>
</xml>

但是那些 XML 是有效的

<xml>
<value attr=">">my value</value>
</xml>

<xml>
<value attr="attribute">my value is > than</value>
</xml>

我期待的是任何字符喜欢 <>& 应始终被视为非法。 所以我想问一下那个选择的原因是什么(>可以但<不是)。

编写语法规则是为了避免解析器必须提前扫描才能正确解释字符的需要。

<>的区别在于解析器在遇到<时不向前扫描就不知道它是标签的开始还是LESS THAN字符,而当遇到 >,解析器根据其扫描历史(无需提前扫描)知道它应该被解释为标记结尾还是大于字符。

另请参阅:

  • Simplified XML Escaping
  • Michael Kay 关于 SGML 兼容性和规则统一性的