如何解决使用 XML 中的非默认命名空间,每个标签都应该有一个前缀吗?
我是 XML 的初学者。我刚刚研究了命名空间,我有点挣扎,所以我的问题是在这个例子中,
<s:root xmlns:s="help.com">
<h></h>
</s:root>
我们可以在没有 <h>
前缀的情况下使用 s:
吗?
如果是,<h>
是否包含在 s:
命名空间中?
我知道这是一个愚蠢的问题,但每个人都开始愚蠢。感谢您的回答。
解决方法
(a) 是的,您的示例格式良好。
(b) h
元素不在命名空间中。无前缀元素仅在位于默认命名空间声明 (xmlns="some-url"
) 的范围内时才在命名空间中
你的问题一点也不“愚蠢”——实际上反映了先进的新兴理解。
“应该”XML
“应该”XML 问题可以在两个级别回答:well-formedness and validity。
-
您的 XML 确实格式良好。它遵循所有规则 是 XML。它甚至遵循所有存在的规则 命名空间格式良好。在 XML 格式良好的规则下,是的, 您可以拥有一个没有
h
前缀的s:
元素。 (根据规则 命名空间格式良好,你也可以——你只是不能 带有未声明的d:h
命名空间前缀的d
元素。) -
您的 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 是有效的,所以,是的,h
元素可以没有前缀 s:
,这意味着 h
位于空命名空间中,而不是与引用的命名空间相同前缀 s:
。没有前缀的后代元素隐式继承默认命名空间,但不带有前缀命名空间。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。