电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> XML专区>>XML教程第16章 XLink -2:

XML教程第16章 XLink -2

来源:远方网络 | 2006-2-26 | (有1880人读过)

16.2.3.2 actuate特性

链接元素的actuate特性有两个可能的值:user和auto。user值为缺省值,它指定仅当用户请求时,才切断链接。另一方面,如果链接元素的actuate特性设置成auto,则在同一个链接元素的其他目标资源被切断时,都要切断此链接。

正如合法文档中的所有特性一样,对于出现链接的链接元素,actuate特性必须在DTD的<!ATTLIST>声明语句中声明。例如:

<!ELEMENT WEBSITE (#PCDATA)>

<IATTLIST WEBSITE

xlink:form CDATA #FIXED "simple"

href CDATA #REQUIRED

show (new | replace | embed) "new"

actuate (user | auto) "user"

>

16.2.3.3 behavior特性

behavior特性用来将任意格式的任意数据传递给读入此数据的应用程序中。应用程序使用这些数据来对如何进行链接作出附加说明。例如,如果要指定在切断链接时,播放声音文件fanfare.au,可按下面进行编写:

<COMPOSER xlink:form="simple"

target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://www.users.interport.net/-beand/"

behavior="sound: fanfare.au">

Beth Anderson

</COMPOSER>

用于DTD的快捷方式

由于特性名及类型都是标准化的,如果在一篇文档中有多个链接元素,那么将特性声明变成参数实体引用,并只在每个链接元素的声明中重复这种引用常常是方便的。例如:

<!ENTITY % link-attributes

"xlink:form CDATA #FIXED ¢ simple¢

href CDATA #REQUIRED

behavior CDATA #IMPLIED

content-role CDATA #IMPLIED

content-title CDATA #IMPLIED

role CDATA #IMPLIED

title CDATA #IMPLIED

show (new | replace | embed) ¢ new¢

actuate (use | auto) ¢ use¢

behavior CDATA #IMPLIED"

>

<!ELEMENT COMPOSER (#PCDATA)>

<!ATTLIST COMPOSER

%link-attributes;

>

<!ELEMENT AUTHOR (#PCDATA)>

<!ATTLIST AUTHOR

%link-attributes;

>

<!ELEMENT WEBSITE (#PCDATA)>

<!ATTLIST WEBSITE

%link-attributes;

>

但是,这样就要求读入XML文件的应用程序理解带有值为sound:fanfare.au的behavior特性即意味着当切断链接时,应播放fanfare.au声音文件。大多数(或许所有的)应用都不能理解这种含义。但是,它们可以将behavior特性当作易于使用的保存它们确实能够理解的非标准信息的地点。

正如合法文档中的所有特性一样,对于出现链接的链接元素,其behavior特性必须在DTD中声明才行。例如:下面的COMPOSER元素可按下面方式声明:

<!ELEMENT COMPOSER (#PCDATA)>

<!ATTLIST COMPOSER

xlink:form CDATA #FIXED "simple"

href CDATA #REQUIRED

behavior CDATA #IMPLIED

>



16.3 扩展链接

简单链接的效果或多或少地与HTML中已经熟悉了的标准链接类似。每个简单链接都包含一个本地资源和对一个远程资源的引用。本地资源为链接元素的内容,而远程资源则为链接的目标。

但是,扩展链接(Extended link)实质上超越了HTML链接所能达到的程度,以便在许多文档和外联链接之间包括多方向的链接。扩展链接由xlink:form特性来指定,其值为extended,如:

<WEBSITE xlink:form="extended">

扩展链接的第一个作用就是指向多个目标。为此,扩展链接将目标保存在链接元素的子locator元素中,而不像简单链接那样保存在链接元素的唯一的href特性中。例如:

<WEBSITE xlink:form="extended">Cafe au Lait

<locator target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://metalab.unc.edu/javafaq/">

North Carolina

</locator>

<locator

target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://sunsite.univie.ac.at/jcca/mirrors/javafaq/">

Austria

</locator>

<locator target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://sunsite.icm.edu.pl/java-corner/faq/">

Poland

</locator>

<locator target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://sunsite.uakom.sk/javafaq/">

Slovakia

</locator>

<locator target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://sunsite.cnlab-switch.ch/javafaq/">

Switzerland

</locator>

</WEBSITE>

本例中的链接元素WEBSITE本身和各locator子元素都可以有特性。链接元素只有适用于整个链接以及本地资源的特性,如content-title和content-role。locator元素具有应用于特定的远程资源(locator元素链接于这些资源)的特性,如role和title。例如:

<WEBSITE xlink:form="extended" content-title ="Cafe au Lait"

content-role="Java news">

<locator target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://metalab.unc.edu/javafaq/"

title="Cafe au Lait" role=".us"/>

<locator

target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://sunsite.univie.ac.at/jcca/mirrors/javafaq/"

title="Cafe au Lait" role=".at"/>

<locator target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://sunsite.icm.edu.pl/java corner/faq/"

title="Cafe au Lait" role=".pl"/>

<locator target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://sunsite.uakom.sk/javafaq/"

title="Cafe au Lait" role=".sk"/>

<locator target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://sunsite.cnlab-switch.ch/javafaq/"

title="Cafe au Lait" role=".ch"/>

</WEBSITE>

actuate、behavior和show(如果存在)属于各个locator元素。

在有些情况下,如上面的实例所示,各定位符(locator)指向同一页面和镜像副本,对于各个locator元素来说,远程资源特性可以相同,都指向链接元素。在此情况下,可以在链接元素中使用远程资源特性。这些特性应用于各个locator子元素(对于同一个特性各子元素声明为相同的值)。例如:

<WEBSITE xlink:form="extended" content-title="Cafe au Lait"

content-role="Java news" title="Cafe au Lait">

<locator target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://metalab.unc.edu/javafaq/" role=".us"/>

<locator

target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://sunsite.univie.ac.at/icca/mirrors/javafaq/"

role=".at"/>

<locator target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://sunsite.icm.edu.pl/java-corner/faq/"

role=".pl"/>

<locator target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://sunsite.uakom.sk/javafaq/" role=".sk"/>

<locator target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://sunsite.cnlab switch.ch/javafaq/"

role=".ch"/>

</WEBSITE>

DTD的另一种快捷方式

如果有多个链接和locator元素,那么在DTD的参数实体中定义通用的特性可能有好处,而这样又可以重新用于不同的元素。例如:

<!ENTITY % remote-resource-semantics.att

"role CDATA #IMPLIED

title CDATA #IMPLIED

show (embed | eplace | new) #IMPLIED ¢ replace¢

actuate (auto | use ) #IMPLIED ¢ use¢

behavior CDATA #IMPLIED"

>

 

<!ENTITY % local- resource-semantics.att

"content-title CDATA #IMPLIED

content-role CDATA #IMPLIED"

>

 

<!ENTITY % locator.att

"href CDATA #REQUIRED"

>

 

<!ENTITY % link-semantics.att

"inline (true | false) ¢ true¢

role CDATA #IMPLIED"

>

 

<!ELEMENT WEBSITE (locator*) >

<!ATTLIST WEBSITE

xlink:form CDATA #FIXED "extended"

%local-resource-semantics.att;

>

 

<!ELEMENT locator EMPTY>

<!ATTLIST locator

xlink:form CDATA #FIXED "locator"

%locator.att;

%link-semantics.att;

>

就像通常的那样,在合法的文档中,链接元素及其所有可能的特性都必须在DTD中声明。例如,下面声明上面实例中使用的WEBSITE和locator元素及其特性:

<!ELEMENT WEBSITE (locator*) >

<!ATTLIST WEBSITE

xlink:form CDATA #FIXED "extended"

content-title CDATA #IMPLIED

content-role CDATA #IMPLIED

title CDATA #IMPLIED

>

<!ELEMENT locator EMPTY>

<!ATTLIST locator

xlink:form CDATA #FIXED "locator"

href CDATA #REQUIRED

role CDATA #IMPLIED

>

16.4 外联链接

迄今为止所考虑的链接(简单和扩展)都是内联链接。内联链接(如在HTML中熟悉的A元素)使用内联元素的内容作为包含链接的文档部分。通过这种方式展示给读者。

XLink也可以是外联方式。外联链接可能不存在于它所连接的任何文档中,而是将链接保存在各个独立的链接文档中。例如,使用这种方法来维护幻灯片放映是很有用的,因为在幻灯片放映过程中,各幻灯片都需要前后链接。改变链接文档中的幻灯片顺序,即可以改变每页上的前后链接的目标,而无需编辑幻灯片本身。

要将链接标记为外联,可将inline特性设置成false值。例如,下面的简单的外联链接使用空元素来描述Web站点。空元素没有任何内容;在链接的情况下,它没有本地资源。所以,它没有描述本地资源的content-role和content-title特性。但像下面的这个例子那样,可以有描述远程资源的role和title特性。

<WEBSITE xlink:form="simple" inline="false"

target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://metalab.unc.edu/xml/"

title = "Cafe con Leche" role="XML News"/>

由于到目前为止所看到的所有链接都是内联链接,所以链接隐式地具有值为true(缺省值)的inline属性。

简单的外联链接(如上面的例子)都是相当少见的。极其常用并且非常有用的是外联扩展链接,如下面所示:

<WEBSITE xlink:form="extended" inline="false">

<locator target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://metalab.unc.edu/javafaq/" role=".us"/>

<locator

target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://sunsite.univie.ac.at/jcca/mirrors/javafaq/"

role=".at"/>

<locator href "http://sunsite.icm.edu.pl/java-corner/faq/"

role=".pl"/>

<locator target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://sunsite.uakom.sk/javafaq/" role=".sk"/>

<locator target="_blank" href="http://www.cncfan.com/outurl.asp?url=http://sunsite.cnlab-switch.ch/javafaq/"

role=".ch"/>

</WEBSITE>

有些链接(如上面的链接)可能保存在已知位置的Web服务器上的独立文件中,在此位置浏览器可以找到并且询问此链接,以便确定对浏览器正在寻找最近的页面镜像。但是,外联性就是该元素不出现在激活链接的文档中。

这样就将样式单的提取扩大到链接域。样式单完全与其描述的文档分离,并且提供的规则可以用来修改文档向读者显示的方式。包含外联链接的链接文档与它所连接的文档分离,但仍给读者提供必要的链接。这种方法有几个优点,其中包括可以使更多面向展示的标记保持与文档分离,以及允许只读文档的链接。

样式单链接的范围比外联链接要广得多。目前还没有如何将“链接单(link sheet)"加到XML文档中的一般性的建议,更不用说如何确定文档中的哪个元素与哪个链接相关联。

显而易见,可以将<?xml-linksheet?>处理指令加到文档的前言中,以指定在何处找到链接。链接单本身可以使用类似于XSL的内容来选择模式,以便将链接映射到各XML元素中。甚至选择符也会成为locator元素的role特性的值。



16.5 扩展链接组

扩展链接组(extended link group)元素包含连接一组特定文档的链接。依靠扩展链接文档元素,组中的每个文档都作为目标来定位。应用程序负责推定如何激活组成员中的连接、并怎么理解这种连接。

我不得不提醒读者,在撰写这本书时,应用程序支持链接组最多只是一种假定。尽管我可以显示如何书写这样的链接,但真正执行并支持可能还需要一段时间。有些细节无法确定,很可能以销售商指定的方式执行,至少开始就是如此。还有,这些链接能够获得比HTML更为复杂的链接。

16.5.1 一个实例

例如,我已经将我讲授的Java课程的注解放在我的Web站点上。图16-1显示前言页。这个特别的课程由13个课时组成,每个课时含有30~60页的注解。然后为各个课时提供一张目录。这几百页组成整个站点,其中的每一页都与前面文档、下个文档以及每周目录(顶端链接)相链接,如图16-2所示。把这些页放在一起,这样总计多达几千页,这些页可以在文档内相互连接。

图16-1 用于类Web站点的前言页显示13个星期的讲稿注解

可能相互连接数随着文档数量呈指数增长。每当一个文档移动、改名或分成更小的块时,就需要在页面上、在这组文档的前和其后的页面上以及每周目录上调整链接。坦率地说,这项工作比原先的更加艰苦,所以这妨碍了对课程注解的必要的修改和更新。

图16-2 显示Previous、Next和Top链接的一页讲稿注解

如果HTML支持的话,要做的更有意义的事就是将连接保存在独立的文档中。然后编辑此文档,就可以重新组织页。HTML链接不支持这种方式,但XLink却支持。不是以内联的方式将链接保存在HTML文件中,而是将它们通过外联的方式保存在组元素中。例如:

<COURSE xlink:form="group">

<CLASS xlink:form="document" href="weekl/index.xml"/>

<CLASS xlink:form="document" href="week2/index.xml"/>

<CLASS xlink:form="document" href="week3/index.xml"/>

<CLASS xlink:form="document" href="week4/index.xml"/>

<CLASS xlink:form="document" href="week5/index.xml"/>

<CLASS xlink:form="document" href="week6/index.xml"/>

<CLASS xlink:form="document" href="week7/index.xml"/>

<CLASS xlink:form="document" href="week8/index.xml"/>

<CLASS xlink:form="document" href="week9/index.xml"/>

<CLASS xlink:form="document" href="week10/index.xml"/>

<CLASS xlink:form="document" href="weekll/index.xml"/>

<CLASS xlink:form="document" href="weekl2/index.xml"/>

<CLASS xlink:form="document" href="weekl3/index.xml"/>

</COURSE>

这样就将COURSE元素定义成扩展链接组,此组由13个扩展链接文档元素(即CLASS元素)组成。

16.5.2 steps特性

应用程序使用链接组可以做的事情之一是,预加载链接组中的所有文档。这些文档可以包含它们各自的链接组。例如,上面的每个CLASS元素都引用一个特定星期的站点目录,如图16-3所示。然后这些文档就可以加载。例如,文件week6/index.xml就包含这种链接组:

<CLASS xlink:form="group">

<SLIDE xlink:form="document" href="O1.xml"/>

<SLIDE xlink:form="document" href="02.html"/>

<SLIDE xlink:form="document" href="06.html"/>

<SLIDE xlink:form="document" href="12.html"/>

<SLIDE xlink:form="document" href="13.html"/>

<SLIDE xlink:form="document" href="16.html"/>

<SLIDE xlink:form="document" href="17.html"/>

<SLIDE xlink:form="document" href="19.html"/>

<SLIDE xlink:form="document" href="21.html"/>

<SLIDE xlink:form="document" href="22.html"/>

<SLIDE xlink:form="document" href="24.html"/>

</CLASS >

图16-3 显示周讲稿注解的目录页面

现在假定有一个文档反过来引用原文档。这有可能触发无限的回归,即重复加载同一个文档,直到应用程序将内存耗尽为止。为了防止这种情况的发生,组元素可以包含steps特性,用它来指定递归跟随链接组的层数。例如,要指定预加载不能达到当前文档三层以上,可以这样来编写:

<group xlink:form="group" steps="3">

坦率地说,我不敢确定steps特性有多重要。要使应用程序注意何时它已经到达某个文档,但根本不再次处理此文档并非困难。我认为,更好的方法是,由XML处理器而不是网页作者来防止递归。

steps特性可以用来限制预发生加载的数量。例如,在课时注解实例中,尽管有可能他或她想打印或复制所有的课程注解,不可能任何人一次要阅读整个内容。在任何情况下,将steps特性设置为1,就可以将横穿的深度限制为指定的页面而不是课程中的几百页。

就像常常要做的那样,这些元素及其特性必须在它们的任何合法文档的DTD中声明。实际上,xlink:form是固定的,所以不需要包括在元素的实例中。例如:

<!ELEMENT CLASS (document*)>

<!ATTLIST CLASS

xlink:form CDATA #FIXED "group"

steps CDATA #IMPLIED

>

<!ELEMENT SLIDE EMPTY>

<!ATTLIST SLIDE

xlink:form CDATA #FIXED "document"

href CDATA #REQUIRED

>



16.6 重命名XLink特性

XLink有十个特性,这在前节中已经讨论过。现列于下面:

xlink:form

href

steps

title

role

content-title

content-role

show

actuate

behavior

可以想像,这些特性之一或多个已用作特定XML应用程序中的特性名。title特性似乎特别要加以考虑。只有一个特性不能用于其他用途,这就是xlink:form。

XLink规范预料到这个问题,所以可以利用xml:attributes特性将XLink特性重新命名为更便于使用的名称。在DTD的<!ATTLIST>中将此特性声明为一个固定的属性,类型为CDATA,而值为以空格分开的标准名和新名对的列表。

这种问题可以使用命名域(在第18章中讨论)来解决。如果在未来的XLL草案中将此结构整个地删除,并用简单的命名域作前缀(如xlink:)时,我并不感到惊讶。

例如,本章展示的链接元素有点滑稽,因为标准名都是小写字母,而本书的约定都是用大写字母。按照下面的方法,使用声明语句,就很容易将XLink特性变成大写字母:

<!ELEMENT WEBSITE (#PCDATA)>

<!ATTLIST WEBSITE

xlink:form CDATA #FIXED "simple"

xml:attributes CDATA #FIXED

"href HREF show SHOW actuate ACTUATE"

HREF CDATA #REQUIRED

SHOW CDATA (new | replace | embed) "new"

ACTUATE CDATA (user | auto) user

>

现在就可以更谐调地重新编写WEBSITE例子:

<WEBSITF HREF="http://www.microsoft.com/" SHOW="new">

Check this out, but don t leave our site completely!

</WEBSITE>

上面的ATTLIST声明只改变WEBSITE元素的特性。如果要在其他多个例子中用同样的方式改变这些特性,最容易的方法就是使用参数实体:

<!ENTITY LINK_ATTS

xlink:form CDATA #FIXED "simple"

xml:attributes CDATA #FIXED

"href HREF show SHOW actuate ACTUATE"

HREF CDATA #REQUIRED

SHOW CDATA (new | replace | embed) "new"

ACTUATE CDATA (user | auto) "user" >

<!ELEMENT WEBSITE (#PCDATA)>

<!ATTLIST WEBSITE %LINK_ATTS:>

<!ELEMENT COMPOSER (#PCDATA)>

<!ATTLIST COMPOSER %LINK_ATTS;>

<!ELEMENT FOOTNOTE (#PCDATA)>

<!ATTLIST FOOTNOTE %LINK_ATTS;>

16.7 本章小结

在本章中学习了XLink。特别是学习了如下内容:

XLink可以做HTML链接能够做的任何事情,并还会更多,但不为当前的应用程序所支持。

简单链接特别类似于HTML链接,但不受单个<A>标记的限制。

链接元素使用xlink:form和href来指定。

链接元素使用content-title和content-role来描述本地资源。

链接元素使用title和role来描述链接的远程资源。

链接元素使用show特性来告诉应用程序当激活链接时应如何显示内容,如打开一个新的窗口。

链接元素使用behavior特性来将详细的、由应用程序决定的有关如果准确地切断此链接的信息提供给应用程序。

链接元素使用actuate特性来告诉应用程序没有明确的用户请求是否应切断链接。

扩展链接可以在链接元素中包括多个URI。目前,由应用程序来决定如何在不同的可能性中挑选。

扩展链接组元素包含连接特定一组文档的链接列表。

可在DTD中使用xml:attributes特性来对标准的XLink特性(如href和title)重新命名。

在下一章中,将会看到如何使用XPointer来链接远程文档,而且如何与远程文档的特指元素进行链接。





XML专区热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号