对于 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。
您的 XML 确实 格式正确 。它遵循所有规则
正在 XML。它甚至遵循所有规则
命名空间格式正确。根据 XML 良构的规则,是的,
你可以有一个没有 s:
前缀的 h
元素。 (根据规则
namespace-well-formedness,你也可以——你只是不能
具有未声明的 d
命名空间前缀的 d:h
元素。)
您的 XML 可能 有效 ,也可能无效。在 XML 术语中,有效
暗示它遵循模式给出的规则(通常是 XSD;
不太常见的 DTD、Relax NG、Schematron 等)。根据有效期规则
由 XML 模式给出,您可能有也可能没有 h
元素
在那个位置——我们必须有一个 XML 模式才能知道。
XML 命名空间
为了你的XML,
<s:root xmlns:s="help.com">
<h></h>
</s:root>
root
在 help.com
命名空间中。
h
不在命名空间中。
为此XML,
<root xmlns="help.com">
<h></h>
</root>
root
在 help.com
命名空间中。
h
也在 help.com
命名空间中,因为 xmlns="help.com"
声明
应用于 root
和所有后代元素的 默认命名空间
缺少命名空间声明。
我是 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。
您的 XML 确实 格式正确 。它遵循所有规则 正在 XML。它甚至遵循所有规则 命名空间格式正确。根据 XML 良构的规则,是的, 你可以有一个没有
s:
前缀的h
元素。 (根据规则 namespace-well-formedness,你也可以——你只是不能 具有未声明的d
命名空间前缀的d:h
元素。)您的 XML 可能 有效 ,也可能无效。在 XML 术语中,有效 暗示它遵循模式给出的规则(通常是 XSD; 不太常见的 DTD、Relax NG、Schematron 等)。根据有效期规则 由 XML 模式给出,您可能有也可能没有
h
元素 在那个位置——我们必须有一个 XML 模式才能知道。
XML 命名空间
为了你的XML,
<s:root xmlns:s="help.com">
<h></h>
</s:root>
root
在help.com
命名空间中。h
不在命名空间中。
为此XML,
<root xmlns="help.com">
<h></h>
</root>
root
在help.com
命名空间中。h
也在help.com
命名空间中,因为xmlns="help.com"
声明 应用于root
和所有后代元素的 默认命名空间 缺少命名空间声明。