跳转至内容

XML - 数据交换管理/XLink

来自维基教科书,开放的书籍,开放的世界



上一章 下一章
XPath CSS



学习目标

  • 学习在 XML 中实现 XLink 的不同技术
  • 创建自定义 XLink
  • 了解各种 XLink 参数背后的功能

赞助商

佐治亚大学

特里商学院

管理信息系统系



通过使用统一资源标识符 (URI),XLink 允许将元素插入 XML 文档中,从而在资源之间创建链接,例如文档、图像、文件和其他页面。XLink 的概念类似于 HTML 超链接,但功能更强大、更灵活。

本章将概述 XLink 语法。它还将介绍一些 XLink 的基本概念。有关完整的 XLink 规范,请参阅最新版本的标准,网址为

http://www.w3.org/TR/xlink

XLinks 在两个或多个资源之间创建链接关系。它们允许在链接中指定任何 XML 元素、图像、文本或标记文件。

通过使用类似于 XSL 样式表的集中化格式的方法,XLinks 允许将文档的超链接隔离并集中在单独的文档中。随着链接文档的地址发生变化,XLink 仍然可以正常工作。

使用 XLink 需要声明 XLink 命名空间。此命名空间提供了用于类型、href、角色、arcrole、标题、显示、激活、标签、从和到的全局属性。以下示例将在 tourGuide 元素中使前缀 xlink 可用。

<tourGuide
  xmlns:xlink="http://www.w3.org/1999/xlink">
  ...
</tourGuide>
[编辑 | 编辑源代码]

下表概述了可以与 xlink 命名空间一起使用的属性。全局属性是类型、href、角色、arcrole、标题、显示、激活、标签、从和到。该表还包括有关如何使用属性的说明。


示例 1:全局属性表

属性

描述和有效值

类型

描述项目的含义

  • 简单 - 类似于 html 链接的基本格式
  • 扩展 - 比简单类型更复杂,具有多功能格式
  • 资源 - 提供本地资源
  • 定位器 - 提供远程资源
  • 弧 - 提供从一个资源遍历到另一个资源的能力
  • 标题 - 链接的可读名称或说明

href

资源的位置

  • 值为 URI

角色

XLink 内容的描述

  • 值为 URI
  • 描述扮演该角色的元素

arcrole

XLink 内容的描述

  • 值为 URI
  • 描述弧两侧之间的关系

标题

显示的名称,通常是链接的简短描述

显示

描述 XLink 激活并加载后浏览器的行为

  • 新 - 在新窗口或框架中加载
  • 替换 - 在同一窗口或框架中加载
  • 嵌入 - 替换当前项目
  • 其他 - 查找其他地方的信息
  • 无 - 未指定

激活

指定何时检索资源或链接处理发生

  • 按需 - 当用户请求链接时
  • 加载时 - 当页面加载时
  • 其他 - 查找其他地方的信息
  • 无 - 未指定

标签、从和到

指定链接方向



XML 架构

[编辑 | 编辑源代码]


以下 XML 架构定义了一个旅行指南,其中包含至少一个城市。每个城市包含一个或多个景点。每个景点的名称都是一个 XLink。

示例 2:TourGuide 的 XML 架构

<?xml version="1.0" encoding="UTF-8"?>
<!--
      Document   : TourGuide.xsd
      Created on : February 28, 2006
      Author     : Billy Timmins
-->
<!--
      Declaration of usage of xlink Namespace
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified"
            xmlns:xlink="http://www.w3.org/1999/xlink">  
    <xsd:element name="tourGuide">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="city" type="cityDetails" minOccurs="1" maxOccurs="unbounded" />
            </xsd:sequence>
        </xsd:complexType>
     </xsd:element>
     <!--
     This section will contain the City details
     -->
     <xsd:complexType name="cityDetails">
         <xsd:sequence>
           <xsd:element name="cityName" type="xsd:string"/>
           <xsd:element name="adminUnit" type="xsd:string"/>
           <xsd:element name="country" type="xsd:string"/>
           <xsd:element name="continent">
                <xsd:simpleType>
                  <xsd:restriction base="xsd:string">
                  <xsd:enumeration value="Asia"/>
                  <xsd:enumeration value="Africa"/>
                  <xsd:enumeration value="Australia"/>
                  <xsd:enumeration value="Europe"/>
                  <xsd:enumeration value="North America"/>
                  <xsd:enumeration value="South America"/>
                  <xsd:enumeration value="Antarctica"/>
                  </xsd:restriction>
                </xsd:simpleType>
            </xsd:element>
            <xsd:element name="population" type="xsd:integer"/>
            <xsd:element name="description" type="xsd:string"/>
            <xsd:element name="attraction" type="attractionDetails" minOccurs="1" maxOccurs="unbounded"/>
         </xsd:sequence>
     </xsd:complexType>
     <xsd:complexType name="attractionDetails">
         <xsd:sequence>
         <!--   
         Note use of xlink
         -->
            <xsd:element name="attractionName" xlink:type="simple"/>
            <xsd:element name="attractionDescription" type="xsd:string"/>
            <xsd:element name="attractionRating" type="xsd:integer"/>
        </xsd:sequence>
     </xsd:complexType>
</xsd:schema>

XML 文档

[编辑 | 编辑源代码]


以下 XML 文档显示了如何在 XML 文档中使用在 XML 架构中定义的 XLink attractionName。请注意,为了定义链接的网站,必须在属性标签中包含 xlink:href=""。

示例 3:TourGuide.xsd 的 XML 文档(使用 XLink)

<?xml version="1.0" encoding="UTF-8"?>
<!--
      Document   : SomeTourGuide.xml
      Created on : February 28, 2006
      Author     : Billy Timmins
-->
<!--
      Declaration of usage of XLink Namespace
-->
<?xml-stylesheet href="TourGuide.xsl" type="text/xsl"?>
<tourGuide xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xlink="http://www.w3.org/1999/xlink" xsi:noNamespaceSchemaLocation="TourGuide.xsd">
    <city>
        <cityName>Atlanta</cityName>
        <adminUnit>Georgia</adminUnit>
        <country>USA</country>
        <continent>North America</continent>
        <population>425000</population>
        <description>Atlanta is the capital of and largest city in the U.S. state of Georgia.</description>
        <attraction>
            <!--
            Declaration of XLink and associated link
            -->
            <attractionName xlink:href="http://www.georgiaaquarium.org/"> Georgia Aquarium </attractionName>
            <attractionDescription>World’s Largest Aquarium</attractionDescription>
            <attractionRating>5</attractionRating>
        </attraction>
        <attraction>
            <!--
            Declaration of XLink and associated link
            -->
            <attractionName xlink:href="http://www.high.org/"> High Museum of Art </attractionName>
            <attractionDescription>The High Museum of Art, founded in 1905 as the Atlanta Art Association, is the leading art museum in the Southeastern United States.</attractionDescription>
            <attractionRating>4</attractionRating>
        </attraction>
        <attraction>
            <!--
            Declaration of XLink and associated link
            -->
            <attractionName xlink:href="http://www.underground-atlanta.com/"> Underground Atlanta </attractionName>
            <attractionDescription> Go beneath the streets of a bustling downtown, to the heart of a great American city.  Underground Atlanta is at the center of it all.</attractionDescription>
            <attractionRating>2</attractionRating>
        </attraction>        
    </city>
    <city>
        <cityName>Tampa</cityName>
        <adminUnit>Florida</adminUnit>
        <country>USA</country>
        <continent>North America</continent>
        <population>303000</population>
        <description>Tampa is a major United States city located in Hillsborough County, on the west coast of Florida.</description>
        <attraction>
            <!--
            Declaration of XLink and associated link
            -->
            <attractionName xlink:href="http://www.buschgardens.com/buschgardens/fla/default.aspx"> Bush Gardens </attractionName>
            <attractionDescription>The nation's fourth largest zoo, Bush Gardens is where you can see African animals roaming free and an exciting amusement park featuring its world-famous rides like Kumba and the new inverted roller-coaster, Montu.</attractionDescription>
            <attractionRating>5</attractionRating>
        </attraction>
        <attraction>
            <!--
            Declaration of XLink and associated link
            -->
            <attractionName xlink:href="http://www.plantmuseum.com/"> Henry B. Plant Museum </attractionName>
            <attractionDescription>Discover a museum which transports you to turn-of-the-century Florida.</attractionDescription>
            <attractionRating>1</attractionRating>
        </attraction>      
    </city>
</tourGuide>

XML 样式表

[编辑 | 编辑源代码]


以下 XML 样式表显示 XML 文档的内容。

示例 4:TourGuide 的 XML 样式表

<?xml version="1.0" encoding="UTF-8"?>
<!--
      Document   : TourGuide.xsl
      Created on : February 28, 2006
      Author     : Billy Timmins
-->
<!--
      Declaration of usage of XLink Namespace
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xlink="http://www.w3.org/1999/xlink" exclude-result-prefixes="xlink" version="1.0">
    <xsl:output method="html"/>
    <!--
    Attribute XLink defined as an href of simple type
    -->
    <xsl:template match="*[@xlink:type = 'simple' and @xlink:href]">
        <a href="{@xlink:href}">
            <xsl:apply-templates/>
        </a>
    </xsl:template>
    <xsl:template match="/">
        <html>
            <head>
                <title>Tour Guide XLink Example</title>
            </head>
            <body>
                <h2>Cities</h2>
                <xsl:apply-templates select="tourGuide"/>
            </body>
        </html>
    </xsl:template>
    <!-- 
    template for handling a link 
    -->
    <xsl:template match="attractionName">
        <a href="{@xlink:href}">
            <xsl:value-of select="."/>
        </a>
    </xsl:template>
    <xsl:template match="tourGuide">
        <table border="1" width="100%">
            <xsl:for-each select="city">
                <tr>
                    <td>
                        <br/>
                        <xsl:text>City: </xsl:text>
                        <xsl:value-of select="cityName"/>
                        <br/>
                        <xsl:text>County: </xsl:text>
                        <xsl:value-of select="adminUnit"/>
                        <br/>    
                        <xsl:text>Continent: </xsl:text>
                        <xsl:value-of select="continent"/>
                        <br/>
                        <xsl:text>Population: </xsl:text>
                        <xsl:value-of select="population"/>
                        <br/>
                        <xsl:text>Description: </xsl:text>
                        <xsl:value-of select="description"/>
                        <br/>              
                        <br/>
                    </td>
                </tr>
                <tr>
                    <td>
                        <xsl:text>Attraction: </xsl:text>
                    </td>
                    <td>
                        <xsl:text>Attraction Description: </xsl:text>
                    </td>
                    <td>
                        <xsl:text>Attraction Rating: </xsl:text>
                    </td>
                </tr>
                <xsl:for-each select="attraction">
                    <tr>
                        <td>
                            <!--
                            application of the template
                            -->
                            <xsl:apply-templates select="attractionName"/>
                        </td>
                        <td>
                            <xsl:value-of select="attractionDescription"/>
                        </td>
                        <td>
                            <xsl:value-of select="attractionRating"/>
                        </td>
                    </tr>
                </xsl:for-each>
            </xsl:for-each>
        </table>
    </xsl:template>
</xsl:stylesheet>
XLink 是一个极其通用的规范,它标准化了链接到其他数据源的过程。XLink 不仅支持类似于 HTML 中的锚标签的单向链接,而且还可以用于创建双向链接。此外,XLink 允许从任何 XML 元素链接。这给了开发人员很大的自由度。
华夏公益教科书