乐闻世界logo
搜索文章和话题

什么是 XML 命名空间,如何声明和使用它?

2月21日 14:23

XML 命名空间(Namespace)是 XML 中用于解决元素和属性名称冲突的机制。当多个 XML 文档或架构合并时,可能会出现相同名称的元素代表不同含义的情况,命名空间通过为元素和属性添加唯一标识符来解决这个问题。

命名空间的声明

命名空间使用 xmlns 属性声明,语法格式为:

xml
<root xmlns:prefix="namespaceURI"> <prefix:element>内容</prefix:element> </root>

其中:

  • xmlns 是保留属性,用于声明命名空间
  • prefix 是命名空间前缀(可选,默认命名空间不需要前缀)
  • namespaceURI 是命名空间的唯一标识符(通常是 URL)

命名空间的类型

1. 默认命名空间

xml
<root xmlns="http://example.com/ns"> <element>内容</element> </root>

默认命名空间应用于当前元素及其所有未加前缀的子元素。

2. 带前缀的命名空间

xml
<root xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:schema>...</xs:schema> </root>

带前缀的命名空间只应用于使用该前缀的元素和属性。

命名空间的作用域

  • 命名空间声明在声明它的元素及其所有后代元素中有效
  • 子元素可以覆盖父元素的命名空间声明
  • 未声明命名空间的元素属于"无命名空间"

命名空间的最佳实践

  1. 使用唯一的 URI:命名空间 URI 应该是唯一的,通常使用 URL 格式
  2. 选择有意义的前缀:前缀应该简短且易于理解
  3. 避免过度使用:只在必要时使用命名空间
  4. 保持一致性:在整个文档中使用相同的命名空间声明

实际应用示例

xml
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:m="http://www.example.com/stock"> <soap:Header> <m:Authentication> <m:Username>user</m:Username> <m:Password>pass</m:Password> </m:Authentication> </soap:Header> <soap:Body> <m:GetStockPrice> <m:StockSymbol>IBM</m:StockSymbol> </m:GetStockPrice> </soap:Body> </soap:Envelope>

在这个例子中,soap 前缀用于 SOAP 协议的元素,m 前缀用于自定义的业务逻辑元素,两者互不干扰。

标签:XML