为什么XML验证器不允许使用空命名空间URI?它是验证器(http://www.xmlvalidation.com)功能还是XML的一般功能?
<?xml version="1.0"?>
<root xmlns:em="">
<em:elem/>
</root>
在名称空间URI中使用任何字符串是否有效? (例如xmlns =&#34; abcd&#34;)
答案 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作为良好实践。