微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 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

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

  2. 您的 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 举报,一经查实,本站将立刻删除。