乐途乐途
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • MyBatis
    • Spring
    • Spring MVC
    • Maven 入门
    • Maven 进阶
    • Java 设计模式
  • 缓存

    • Redis
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • MyBatis
    • Spring
    • Spring MVC
    • Maven 入门
    • Maven 进阶
    • Java 设计模式
  • 缓存

    • Redis
联系
阿里云
  • 学习路径
  • XML 基础语法

    • XML 概述
    • XML 文档结构
    • XML 元素
    • XML 属性
    • XML 语法规则
    • XML 命名空间
    • XML 注释与处理指令
  • DTD 与文档验证

    • DTD 概述
    • DTD 元素声明
    • DTD 属性声明
    • DTD 实体声明
    • DTD 元素与属性对比
    • DTD 完整示例
  • XML Schema 定义

    • XML Schema 概述
    • XSD 简单类型
    • XSD 复杂类型
    • XSD 命名空间与引用
  • XPath 节点定位

    • XPath 概述
    • XPath 路径表达式
    • XPath 谓词与函数
  • XSLT 转换

    • XSLT 概述
    • XSLT 模板与匹配
    • XSLT 控制结构
    • XSLT 输出控制
  • XML 解析技术

    • XML 解析概述
    • DOM 解析
    • SAX 解析
    • StAX 解析
    • XML 与 Java — JAXP
  • XML 在 Java 中的应用

    • Spring XML 配置
    • MyBatis XML 映射
    • pom.xml 与 Maven
    • web.xml 配置详解
  • 现代数据格式对比

    • XML 与 JSON 对比
    • XML 与 YAML 对比
  • XML 显示与浏览器集成

    • XML 在浏览器中的显示
    • XMLHttpRequest 与 AJAX
    • 服务器端 XML 处理
  • XML 进阶查询与链接

    • XQuery 查询语言
    • XLink 超链接
    • XML 验证工具使用
  • XML Web 服务(选读)

    • XML Web 服务概述
    • SOAP 协议详解
    • WSDL 服务描述
    • RSS 内容聚合
    • RDF 资源描述框架

XLink 超链接

本章定位 :理解 XLink 如何为 XML 提供超越 HTML <a> 标签的超链接能力——简单链接(simple)、扩展链接(extended)、以及 XPointer 的精确定位机制。

定义与作用

HTML 中超链接只需要 <a href="...">。XML 中没有预定义的 <a> 标签,而且 XML 允许任意元素名——浏览器无法预测哪个元素是链接。

XLink (XML Linking Language)解决了这个问题:它通过一套标准属性(在 http://www.w3.org/1999/xlink 命名空间下),将任意 XML 元素"标记"为超链接。

XPointer 是 XLink 的配套技术:它允许链接 不是指向整个文档 ,而是精确指向文档中的 某个特定位置 (如某个元素、某段文本)。

核心原理:XLink 链接模型

图解释 :XLink 提供两种链接类型——simple 类似 HTML 的 <a>,一对一跳转;extended 支持多对多关系,链接定义甚至可以存放在独立文件中。XPointer 则提供锚点的精确定位能力。

语法/结构要点

XLink 全局属性

属性值说明
xlink:typesimple / extended / locator / arc / resource / title定义 XLink 元素类型
xlink:hrefURL目标资源的 URL
xlink:shownew / replace / embed / other / none链接的打开方式
xlink:actuateonLoad / onRequest / other / none何时激活链接

xlink:show 的行为

值行为类比
new在新窗口/标签页打开HTML target="_blank"
replace在当前窗口打开(默认)HTML target="_self"
embed将目标内容嵌入当前文档HTML <img>、<iframe>
none不指定行为,由应用决定—

xlink:actuate 的时机

值时机
onLoad文档加载时自动激活
onRequest用户点击时激活(类似 HTML 链接)

XPointer 表达式

写法说明
url#xpointer(id('target'))定位到 id='target' 的元素(完整写法)
url#target定位到 id='target' 的元素(简写)
url#xpointer(//chapter[3])定位到第 3 个 chapter 元素(XPath)

完整示例

场景说明

飞翔科技的 白歌 维护一份"技术文档目录"XML。她需要在文档之间建立交叉引用——点击某个技术的描述,跳转到对应的详细规范文档。

操作前:无法互链的孤立 XML

<!-- 文档A:技术目录 catalog.xml -->
<catalog>
  <tech name="XML Schema">
    <desc>定义 XML 文档的结构约束</desc>
    <!-- 无法链接到 schema-guide.xml 的详细信息 -->
  </tech>
</catalog>

应用 XLink 后:建立超链接

catalog.xml — 使用 XLink simple 链接:

<?xml version="1.0" encoding="UTF-8"?>
<catalog xmlns:xlink="http://www.w3.org/1999/xlink">
  <tech name="XML Schema">
    <desc
      xlink:type="simple"
      xlink:href="schema-guide.xml"
      xlink:show="replace"
      xlink:actuate="onRequest">
      定义 XML 文档的结构约束(点击查看详细规范)
    </desc>
  </tech>
  <tech name="XSLT 转换">
    <desc
      xlink:type="simple"
      xlink:href="xslt-guide.xml"
      xlink:show="new"
      xlink:actuate="onRequest">
      将 XML 转换为 HTML/文本的样式表语言(新窗口打开)
    </desc>
  </tech>
</catalog>

进阶:带封面图片的图书目录

飞翔科技内部图书馆系统。每本书的描述是一个 XLink,点击可查看封面图(embed 模式)。

library.xml :

<?xml version="1.0" encoding="UTF-8"?>
<bookstore xmlns:xlink="http://www.w3.org/1999/xlink">

  <book title="XML入门指南">
    <description
      xlink:type="simple"
      xlink:href="covers/xml-guide.png"
      xlink:show="embed"
      xlink:actuate="onLoad">
      大翔撰写的最新 XML 教程,涵盖从基础语法到 XSLT 的完整内容。
    </description>
  </book>

  <book title="微服务设计">
    <description
      xlink:type="simple"
      xlink:href="covers/microservice.png"
      xlink:show="embed"
      xlink:actuate="onLoad">
      白歌基于公司实际项目经验总结的微服务架构指南。
    </description>
  </book>
</bookstore>

结果 :当 XML 被浏览器解析时,封面图片自动嵌入(show="embed")并随页面加载(actuate="onLoad")——类似 HTML 中 <img src="..."> 的效果。

XPointer:精确定位

dogs-breed.xml (目标文档):

<?xml version="1.0"?>
<dogbreeds>
  <dog breed="Rottweiler" id="Rottweiler">
    <picture url="rottweiler.jpg"/>
    <history>罗威纳犬的祖先可能是罗马牧牛犬...</history>
    <temperament>自信、勇敢、警觉,是受欢迎的保护犬...</temperament>
  </dog>
  <dog breed="FCRetriever" id="FCRetriever">
    <picture url="fcretriever.jpg"/>
    <history>平毛寻回犬是最早用于帮助渔民的犬种之一...</history>
  </dog>
</dogbreeds>

mydogs.xml (链接源,使用 XPointer 精确指向):

<?xml version="1.0"?>
<mydogs xmlns:xlink="http://www.w3.org/1999/xlink">
  <mydog>
    <name>安东</name>
    <description>安东是我最喜欢的狗,曾获得多项比赛冠军。</description>
    <fact
      xlink:type="simple"
      xlink:href="dogbreeds.xml#Rottweiler">
      罗威纳犬详细信息
    </fact>
  </mydog>
  <mydog>
    <name>布鲁托</name>
    <description>布鲁托是世界上最温柔的狗。</description>
    <fact
      xlink:type="simple"
      xlink:href="dogbreeds.xml#FCRetriever">
      平毛寻回犬详细信息
    </fact>
  </mydog>
</mydogs>

点击"安东"的 fact 链接,直接跳到 dogbreeds.xml 中 id="Rottweiler" 所在的精确位置。

操作结果

场景技术效果
文档目录互链simple XLink点击跳转到其他 XML 文档
嵌入封面图simple + show="embed"图片自动嵌入文档
精确定位XPointer #id链接到目标文档的特定元素
多对多关系extended XLink链接定义可集中管理

易错场景

忘记声明 XLink 命名空间

<!-- 错误:未声明 xmlns:xlink -->
<desc xlink:type="simple" xlink:href="doc.xml">详情</desc>
<!-- 浏览器/解析器不识别 xlink:type -->

必须在根元素(或使用元素)上声明:xmlns:xlink="http://www.w3.org/1999/xlink"。

混淆 show 值的行为

xlink:show="new"     <!-- 新窗口 -->
xlink:show="replace" <!-- 当前窗口(默认) -->
xlink:show="embed"   <!-- 嵌入当前文档 -->

embed 和 replace 完全不同的行为——前者不离开当前页面,后者替换整个文档。

XPointer 目标文档缺少 id 属性

<!-- 目标文档中元素没有 id 属性 -->
<dog breed="Rottweiler">  <!-- 没有 id -->

XPointer 的简写形式 #Rottweiler 依赖目标文档中的 id 属性。如果目标元素没有 id,必须用完整的 xpointer() 表达式。

面试考点

考点参考答案要点
XLink 和 HTML 链接有什么区别?HTML 有预定义的 <a> 标签;XML 无预定义标签,XLink 通过命名空间属性将任意元素标记为链接。XLink 还支持多向链接和外部链接定义
simple 和 extended 链接的区别?simple:一对一跳转(类似 <a>);extended:多对多关系,可定义多个定位器(locator)和遍历弧(arc),链接定义可与内容分离
XPointer 的作用?在 XLink 中精确定位目标文档的某个部分(元素、文本范围),而非整个文档
XLink 的浏览器支持状况?主流浏览器不支持 XML 文档中的 XLink,但支持 SVG 中的 XLink。XLink 更多用于 XML 编辑器和内容管理系统等专用工具
上一页
XQuery 查询语言
下一页
XML 验证工具使用