XLink和XPointer技术

XLink是W3C推荐的标准,扩展了HTML链接功能,支持复杂链接,而XPointer则用于定位XML文档内部结构。XLink包括简单链接、扩展链接,通过locator、arc、resource和title元素实现。XPath则是用于在XML文档中定位节点的表达式,包含定位阶、轴、节点测试、谓词和运算符。XPointer通过元素ID、子序列或element()模式来标识文档内的特定部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XLink和XPointer技术

XLink的概念

HTML链接
  1. 跳转页面
<a href="www.baidu.com">这是一个链接</a>
  1. 页内定位
<a href="#course">点击我去course</a>
HTML链接缺点
  1. HTML链接只允许一个方向浏览
  2. 不能精确定位外部资源内部元素的位置(明明可以??
<a href="www.baidu.com#course">链接到百度的course</a>
  1. HTML链接只链接两个资源(上面提到的两个

谁说的???明明还可以发邮箱

<a href="mailto:youemail@mail.com?subject=邮件标题&body=邮件内容">告诉我们</a>
XLink概述
  • 在2001年,XLink被确定为W3C推荐标准
  • 浏览器只在最小限度支持XLink和XPointer
  • XLink定义了一个文档如何链接到另一个文档
  • XML对HTML链接功能加以扩展,支持更复杂的链接
XLink例子
<?xml version="1.0" ?>
<homepages xmlns:xlink="http://www.w3.org/1999/xlink">
	<homepage
              xlink:type="simple"
              xlink:href="www.baidu.com">
        百度
    </homepage>
</homepages>

注意:必须明确xlink的命名空间即http://www.w3.org/1999/xlink

XLink属性
属性描述
xlink:hrefURL要链接的URL
xlink:actuateonLoad onRequest other定义何时读取和显示被链接的资源
xlink:showembed new replace在何处打开链接,默认是 replace 即替换
xlink:typesimple extended …链接的类型
xlink:role字符串描述链接的功能
xlink:title字符串向用户描述链接的相关信息
Simple Link

设计目的是设计出接近HTML的链接功能

  • 用DTD来设置一个Simple Link
<!ELEMENT mylink (#PCDATA)>
<!ATTLIST mylink
	xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"
	xlink:type CDATA #FIXED "simple"
	xlink:href CDATA #REQUIRED
	xlink:show (embed | replace | new) "embed"
>

在xml中就可以直接用

<mylink xlink:href="www.baidu.com">
	设计一个简单的链接
</mylink>
图像嵌入链接

在html中可以使用

<img src="xxx.jpg" />

访问一个图像

如何利用XLink实现图像链接?

<mylink xlink:href="xxx.jpg">
	跳转到某网页
</mylink>
扩展链接

扩展链接是一个联合任意个数目的资源的链接,资源可能是远程和本地的任何组合

利用 xlink:type=extended 可以定义扩展链接

他的子元素的xlink可以是

  • Locator

  • arc

  • resource

  • title

这里的元素可以是用xlink:type 表示的

<book xmlns:xlink="http://www.w3.org/1999/xlink">
	<summary
             xlink:type="resource"
             xlink:href="intro.xml"
             xlin:title="book summary"
             >
        xxx
    </summary>
    <author
            xlink:type="locator"
            xlink:href="http://xxx.com/author.xml"
            xlink:title="author info"
            />
</book>
title

标题元素:可以作为 extended, locator, resource, arc 的子元素出现

形式为 xlink:type="title"

例:使用title元素解决国际化和本地化问题。

<name xlink:type=”title” xml:lang=”en”>Peter</name>
<name xlink:type=”title” xml:lang=”fr”>Pierre</name>
<name xlink:type=”title” xml:lang=”sp”>Pedro</name> 
locator

这个元素主要是链接用的,定义网络上的资源。也可以是本地的资源

<locator
         xlink:type="locator"
         xlink:href="www.baidu.com"
         xlink:role=""
         xlink:title="去百度一下"
         xlink:label="hhhh"
         >

</locator>
resource

这个元素主要是用于定义本地资源

<resource
          xlink:type="resource"
          xlink:href="./index.xml"
          xlink:role=""
          xlink:title="资源"
          xlink:label=""
          >

</resource>
arc

用于表示扩展xml链接资源之间的链接关系

<arc 
     xlink:type="arc"
     xlink:from="A"
     xlink:to="B"
     xlink:acturate="onRequest"
     xlink:title="next View"
     xlink:arcrole=""
     >
</arc>

感觉没什么用

XPath

还记得之前介绍的一个表格吗

  • bookstore/book 代表bookstore元素下面的book子元素

其实这就是XPath的语法

上面的写法是一种简写形式

定位阶

child::para[postion()=last()]

这个相当于之前的

/para[position()=last()];

  • child => /
  • descendant => //
  • self => .
  • parent => …
  • attribute => @
  • ancestor

示例

/mydoc//part-nbr

选择所有元素类型为mydoc 下面的所有 part-nbr

其实就是 child::mydoc/descendant::part-nbr

节点测试
  • node() 用于任意类型的节点测试

  • text() 测试文本节点

  • element() 测试元素节点

  • attribute() 测试任意属性节点

  • comment()用于选取注释节点

  • processing-instruction()所有处理指令节点

还记得处理指令是什么吗

<? xxx ?>
谓词

语法是 []

例如 child::item[postion() = 3]

选择item子元素中第三个item元素

可以简写为 child:item[3]`

还可以进一步简写为 item[3]

语法简写语法作用
child:shirtshirt筛选上下文中所有shirt子元素
child:**筛选上下文中虽有子元素
child:text()text()筛选上下文中所有文本节点
Attribute::currency@currency筛选上下文结点的currency属性
/child::clothes/child::shirt
[fn:position()=5]/child::name[fn:position]=2
/child/shirt[5]/name[2]
XPath运算符和函数
运算符

and, +, -, *, div, mod, or等

  • 数值比较 eq, ne, lt, le, gt, ge
  • 一般 =, !=, <, <=, >, >=
  • 节点比较: is, <<, >>
函数
  • count() 统计个数
  • number() 将文本转化为数字
  • substring() 截取字符串
1. => score[math lt 60]
2. => shirt/name=“金利来”
3. => book[price=“23.9”] is book[name=“操作系统”]

感觉这个也没什么用

XPointer

  • XPointer的机制用于指向XML文档的内部结构
  • 与XLink不同,文档或资源由XLink标识,文档内特定部分由XPointer标识

XPointer其实就是URL后面#的部分

例如

http://www .mysite.com/data.Xml#xpointer(expression)

可以用xpointer(xxx)来表示定位到哪个地方,xxx是一个XPath

例如 xpointer(/booklist/book[1])

本例指向第一个book元素,该元素是根元素booklist的一个子元素

通过类型ID属性标识元素

http://www .mysite.com/books.xml#xpointer(id('fiction'))

可以简化为

http://www .mysite.com/books.xml#fiction

子序列

#/1/3/2

代表第一个根元素的第三个子元素的第二个子元素

element()模式

这种模式下可以不用写 xpointer

element(intro) => id为intro的元素
element(intro/3/1) => ID为intro的元素的第三个子元素的第一个子元素
element(/1/2)根元素的第二个子元素
=> xpointer(/*[1]/*[2])
=> xpointer(/*[position()=1]/*[position()=2])
xmlns()

只是预定义一些命名空间而已

xmlns(c=http://example.org/customer) xmlns(p=http://example.org/personal-info)
xpointer(/c:customer/p:name)

XBase

定义一些相对路径

例如

<doc xml:base="https://www.baidu.com/today/">
	<link xlink:type="simple" xlink:href="new.xml">点击我</link>
    <ol xml:base="/list/">
    	<li>
        	<link xlink:type="simple" xlink:href="item1.xml"></link>
        </li>
        <li>
        	<link xlink:type="simple" xlink:href="item2.xml" xml:base="https://www.baidu.com">点击我</link>
        </li>
    </ol>
</doc>

上面的两个地址实际上会被解析成

new.xml => https://www.baidu.com/today/new.xml
item1.xml => https://www.baidu.com/list/item1.xml
item2.xml => https://www.baidu.com/item2.xml

第二种体现了继承性 (注意,xml:base 只继承host部分

第三种体现了覆盖性 (元素自己有就用元素本身的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值