对于 XML 中的非默认命名空间,每个标签都应该有一个前缀吗?

With a non-default namespace in XML should every tag have a prefix?

我是 XML 的初学者。我刚刚研究了命名空间,我有点挣扎所以我的问题是在这个例子中,

<s:root xmlns:s="help.com">
  <h></h>
</s:root>

我们可以有没有 s: 前缀的 <h> 吗?

如果是,<h> 是否包含在 s: 命名空间中?

我知道是个傻问题,但是一开始就傻了。感谢您的回答。

你的例子 XML 是有效的,所以,是的,h 元素可以没有前缀 s:,这意味着 h 在空命名空间中,而不是在与前缀 s: 引用的命名空间相同。没有前缀的后代元素隐式继承默认命名空间,但不带有前缀命名空间。

(a) 是的,您的示例格式正确。

(b) h 元素不在命名空间中。只有在默认名称空间声明 (xmlns="some-url")

范围内时,无前缀元素才在名称空间中

你的问题一点都不“愚蠢”——实际上反映了先进的新兴理解。

“应该”XML

“应该”XML 问题可以分为两个级别:well-formedness and validity

  1. 您的 XML 确实 格式正确 。它遵循所有规则 正在 XML。它甚至遵循所有规则 命名空间格式正确。根据 XML 良构的规则,是的, 你可以有一个没有 s: 前缀的 h 元素。 (根据规则 namespace-well-formedness,你也可以——你只是不能 具有未声明的 d 命名空间前缀的 d:h 元素。)

  2. 您的 XML 可能 有效 ,也可能无效。在 XML 术语中,有效 暗示它遵循模式给出的规则(通常是 XSD; 不太常见的 DTD、Relax NG、Schematron 等)。根据有效期规则 由 XML 模式给出,您可能有也可能没有 h 元素 在那个位置——我们必须有一个 XML 模式才能知道。

XML 命名空间

为了你的XML,

<s:root xmlns:s="help.com">
  <h></h>
</s:root>
  • roothelp.com 命名空间中。
  • h 不在命名空间中。

为此XML,

<root xmlns="help.com">
  <h></h>
</root>
  • roothelp.com 命名空间中。
  • h 也在 help.com 命名空间中,因为 xmlns="help.com" 声明 应用于 root 和所有后代元素的 默认命名空间 缺少命名空间声明。