xml:base属性为XML中相对URI提供可嵌套、可继承的基准地址,支持层级覆盖,其解析行为依赖应用程序对RFC 3741的支持。
xml:base 属性用于为 XML 文档中相对 URI 的解析提供基准地址,类似 HTML 中的 ,但更灵活、可嵌套。
定义相对 URI 的解析起点
XML 中很多机制(如 XInclude、XLink、实体引用、自定义链接属性)会用到相对 URI。没有 xml:base 时,这些相对路径默认以整个文档的物理位置(即加载该 XML 文件的 URL 或文件路径)为基准解析。
加上 xml:base="https://example.com/data/" 后,其所在元素及其所有后代中出现的相对 URI(如 pick3.xml)就会被解析为 https://example.com/data/pick3.xml。
支持层级覆盖,作用域精确
xml:base 可以出现在任意元素上,且具有继承性和就近覆盖特性:
- 父元素设了
xml:base="a/",子元素设了xml:base="b/",那么子元素内部的相对 URI 就以b/为基准 - 不设置时,沿用最近的祖先声明;无祖先声明时,回退到文档基址(document base URI)
- 这使得模块化 XML(比如被 XInclude 引入的片段)能自带独立的路径上下文,避免硬编码或部署位置依赖
实际使用注意点
xml:base 本身只是声明,是否生效取决于处理该 XML 的应用程序是否支持并实现了 RFC 3741(XML Base 规范):
- XInclude 处理器必须识别 xml:base,并据此解析
href值 - DOM 解析器(如 Java 的 DocumentBuilder)通常不自动解析或重写 URI,需应用层手动调用
resolveURI()类方法 -
浏览器对 XHTML 中 xml:base 的支持有限
,主要在 XML 文档(application/xml)上下文中可靠 - 值必须是合法 URI,空字符串或非法格式会导致解析失败
一个简单示例
以下 XML 中:
其中:
— module.xml 解析为 http://example.org/base/module.xml
— doc.pdf 解析为 http://example.org/base/sub/doc.pdf

,主要在 XML 文档(application/xml)上下文中可靠






