代码之家  ›  专栏  ›  技术社区  ›  ScottProuty

格式良好的XML?标记名和属性名中的XML引用

xml
  •  4
  • ScottProuty  · 技术社区  · 16 年前

    我一直在搜索以确认我是否阅读了XML规范。我的解释是,在标记名和属性名中不允许使用预定义的实体和数字字符引用,例如,XML 1.0规范不允许这样做:

    <root>
    <test&apos;&#x27;&#39;tag test&apos;&#x27;&#39;attribute="one"/>
    </root>
    

    但是,我有一个解析器返回 test'''tag 标签名称和 test'''attribute 当另一个分析器返回时返回属性名 test&apos;&#x27;&#39;tag 标签名称和 test&apos;&#x27;&#39;attribute 属性名。

    哪个解析器是正确的?或者他们都错了(即他们应该抛出一个格式良好的错误)?

    谢谢!

    3 回复  |  直到 16 年前
        1
  •  2
  •   StaxMan    16 年前

    这很简单: 名称中不能使用任何实体 .这两个“解析器”都是错误的。XML规范非常清楚地定义了这一点——没有隐藏的默认规则;如果不包括某些构造,则不允许这样做。

    实体只能在常规字符内容和属性值中使用。它们可以包括在其他一些地方(注释、处理指令、DTD子集),但不会被扩展(即不被识别为实体)。

        2
  •  2
  •   dommer    16 年前

    在我看来他们都错了。根据 spec ,开始标记中只应包含以下字符:

    ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
    

    xmlspy当然也不满意。或<氧气/>。

    而且……只是为了更好的衡量……以下是.NET必须要说的:

    The '&' character, hexadecimal value 0x26, cannot be included in a name. Line 1, position 12.
    

    您使用的是什么解析器?

        3
  •  0
  •   17 of 26    16 年前

    在挖掘周围 w3.org ,我发现了以下相关片段:

    [41]属性::=name eq attvalue[vc:attribute value type][wfc:no external entity references][wfc:no<in attribute values]

    [WFC:无外部实体引用]链接到:

    格式良好约束:没有外部实体引用
    属性值不能包含对外部实体的直接或间接实体引用。

    名称链接到:

    [5]名称::=namestartchar(namechar)*

    [4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

    [4a]名称字符::=namestartchar“-”“”.“[0-9]xb7[x0300-x036f][x203f-x2040]

    是的,它像泥一样清澈!我对此的解释是,只要十六进制实体引用在上面指定的范围内,就可以使用它们,但不能使用预定义的引用。

    当名字与此不符时,我希望会有一个格式良好的错误。