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>
带前缀的命名空间只应用于使用该前缀的元素和属性。
命名空间的作用域
- 命名空间声明在声明它的元素及其所有后代元素中有效
- 子元素可以覆盖父元素的命名空间声明
- 未声明命名空间的元素属于"无命名空间"
命名空间的最佳实践
- 使用唯一的 URI:命名空间 URI 应该是唯一的,通常使用 URL 格式
- 选择有意义的前缀:前缀应该简短且易于理解
- 避免过度使用:只在必要时使用命名空间
- 保持一致性:在整个文档中使用相同的命名空间声明
实际应用示例
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 前缀用于自定义的业务逻辑元素,两者互不干扰。