在命名空间声明中使用空字符串在 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 作为良好做法。