【问题标题】:XML: namespace with an empty URIXML:具有空 URI 的命名空间
【发布时间】:2017-05-31 04:59:11
【问题描述】:

为什么 XML 验证器不允许使用空的命名空间 URI?是验证器 (http://www.xmlvalidation.com) 功能还是 XML 的一般功能?

<?xml version="1.0"?>
<root xmlns:em="">
<em:elem/>  
</root>

在命名空间 URI 中使用任何字符串是否有效? (例如 xmlns="abcd")

【问题讨论】:

    标签: xml namespaces uri xml-namespaces


    【解决方案1】:

    在命名空间声明中使用空字符串在 XML 命名空间 1.1 中具有特定含义:它将其变成“未声明”,因此在其范围内,前缀“em”不与任何 URI 关联。但 XML Namespaces 1.1 从未被用户或 XML 解析器编写者广泛采用。

    XML 命名空间 1.0 明确规定(第 2.2 节):空字符串虽然是合法的 URI 引用,但不能用作命名空间名称。

    “在命名空间 URI 中使用任何字符串是否有效?”问题的答案是一个复杂的。 XML 命名空间规范一方面说:

     An XML namespace is identified by a URI reference
    

        The attribute's normalized value MUST be either a URI reference — 
    the namespace name identifying the namespace — or an empty string.
    

    它还说:

        The use of relative URI references, including 
    same-document references, in namespace declarations 
    is deprecated.
    

    (您的示例 xmlns:p="abcd" 使用相对 URI 引用。)

    但是在定义一致性规则(第 7 节)时,它并没有说符合标准的文档必须在其命名空间声明中使用有效的 URI,我知道这是一个深思熟虑的决定(因为我当时对此提出质疑)。在实践中,绝大多数 XML 解析器和应用程序都允许任何字符串作为命名空间名称,但也有一些例外,例如 XOM 库,我建议任何人选择绝对 URI 作为良好做法。

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 2012-08-30
      • 2019-02-21
      • 2013-02-18
      • 2012-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多