XML:具有空URI的命名空间

时间:2017-05-31 04:59:11

标签: xml namespaces uri xml-namespaces

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

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

在名称空间URI中使用任何字符串是否有效? (例如xmlns =&#34; abcd&#34;)

1 个答案:

答案 0 :(得分:0)

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

XML Namespaces 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作为良好实践。