命名空间用于限定元素名称,前缀用于简化 XML。默认情况下,有一个带有“空”uri 的命名空间。
扩展 Tomalaks 示例:
<!-- Mixing namespaces default namespace -->
<node xmlns:gc="http://other/namespace/gc"> <!-- node is in default NS -->
<child> <!-- child is still in default NS, inherited from parent - node -->
<gc:grandchild/> <!-- grandchild is in the "http://other/namespace/gc", because of gc prefix -->
</child>
<child xmlns="http://some/namespace/uri/" xmlns:gc2="http://other/namespace/gc"> <!-- node is in "http://home/namespace/uri" because of declration -->
<gc2:grandchild/> <!-- again, in "http://other/namespace/gc", despite different prefix -->
<grandchild/> <!-- yet this one is in "http://home/namespace/uri", no prefix, inherited from parent -->
</child>
</node>
这里的要点是两个“子”节点都是不同的节点。它们看起来相同,但它们的“完全限定名称”不同”。这在 XSL 中尤为重要。
孙子们也一样。gc:grandchild 和 gc2:grandchild 是相同的,它们共享相同的命名空间 URI,但使用不同的前缀。第三个孙节点不同,因为它使用从父子节点继承的命名空间。
命名空间很重要,因为它们允许您在来自不同词汇表的单个文档中“混合和匹配”xml。例如,在 XHTML 文档中嵌入 SVG 标记。使用命名空间可以防止相同的基本节点名称重叠。
对于大多数简单的 XML 问题,它们是不必要的。但是当您开始合并标准等时,它们变得非常重要。
另一个示例是在 Web 服务的 SOAP 信封中嵌入 SAML 断言。SOAP 是一种标准,SAML 是另一种标准——独立的标准和标准体,但两者都允许在其文档中插入“任意 XML”区域。命名空间将内容分开。