XML鏈接語言
發(fā)布時間:2008-08-21 閱讀數(shù): 次 來源:網(wǎng)樂原科技
當(dāng)前的主流瀏覽器Netscape Navigator和Internet Explorer 對XLink的支持非常弱,在Netscape Navigator 6.0的預(yù)覽發(fā)行版中可以發(fā)現(xiàn)對簡單XML鏈接的支持,但是其支持的部分并不完全符合最新的規(guī)范;Internet Explorer 5.5沒有提出對XLink的支持。如果要在瀏覽器中顯示鏈接,可以利用XSLT 將XML鏈接轉(zhuǎn)化為 HTML鏈接加以顯示。
XML鏈接與HTML鏈接
在HTML中,常用標記表示鏈接。通過標記,可以從一個文件鏈接到另一個文件,或者鏈接到文件
的某一部分。另外,標記<IMG>和<OBJECT>允許圖形等對象直接嵌入文件。XML鏈接完全不同,它沒有
專門的鏈接元素,需要通過指定元素屬性來表示鏈接,只要元素包含xlink:type屬性,且取值為
"simple"或"extended",該元素就是鏈接元素,其中xlink是代表XLink命名空間的前綴,當(dāng)前版本
的URI是"http://www.w3.org/1999/xlink",根據(jù)xlink:type屬性的取值,可以將XML鏈接劃分為簡
單XML鏈接和擴展XML鏈接。簡單XML鏈接的xlink:type固定取值為"simple",擴展XML鏈接的xlink:
type固定取值為"extended"。
簡單XML鏈接
簡單XML鏈接與HTML鏈接非常相似,它在鏈接元素和目標資源間建立鏈接。下面是一個簡單XML鏈接的元素定義,其中包含xlink前綴的屬性都是鏈接屬性,在鏈接屬性外,鏈接元素還可以有任意屬性和任意內(nèi)容。
<!ELEMENT SimpleLink (#PCDATA)>
<!ATTLIST SimpleLink
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"
xlink:type (simple) #FIXED "simple"
xlink:href CDATA #REQUIRED
xlink:role CDATA #IMPLIED
xlink:title CDATA #IMPLIED
xlink:show (embed | replace | new) "replace"
xlink:actuate (onLoad | onRequest) "onRequest"
>
xlink:href屬性是目標資源的URL,可以是絕對URL、相對URL或文件片段,相對URL必須接收XML Base中指定的絕對路徑,XLink處理程序?qū)ML Bae和相對URL合并起來形成目標資源的URL,而文件片段則由XPointer指定。xlink:role和xlink:title是用于描述目標資源的屬性,統(tǒng)稱為語義屬性。xlink:role用于機器閱讀,如搜索引擎的爬蟲等,而xlink:title用于人工閱讀;xlink:show和xlink:actuate用于描述鏈接激活時的行為,統(tǒng)稱為行為屬性。xlink:show表示鏈接激活時的目標資源的顯示環(huán)境,取值"embed"表示在當(dāng)前窗口嵌入顯示,"replace"表示在當(dāng)前窗口顯示目標資源,替換原來的顯示內(nèi)容,"new"表示新開窗口顯示目標資源,xlink:actuate是指鏈接的激活時機,"onLoad"是指文件加載時直接激活鏈接資源,"onRequest"是指在文件加載后,用戶發(fā)出鏈接激活的命令才激活,如用戶點擊了鏈接等。
利用上面的元素聲明,定義元素SimpleLink的實例如下。
<SimpleLink >
xmlns:xlink = "http://www.w3.org/1999/xlink"
xlink:href = "http://www.xlinksample.com/simplelink.xml"> This is a simple
xlink!
</SimpleLink>
擴展XML鏈接
擴展XML鏈接可以在多個資源(尤其是只讀資源)之間建立多向的鏈接。擴展XML鏈接元素的構(gòu)造,很大程度取決于用戶,但通常包括一個資源集合和一個連接集合,連接集合元素表示資源集合元素間的連接。資源集合中可以包括本地資源和遠程資源,如果資源是XML鏈接元素的組成部分,該資源是本地資源;否則就是遠程資源,如其他的XML文件或本文件的其它元素。
下例是一個擴展XML鏈接的DTD聲明,其中ExtendedLink元素是擴展XML鏈接元素,它包含零到多個Local元素、Remote元素和Arc元素。其中Local元素表示本地資源;Remote元素表示遠程資源;Arc元素表示這些資源間的連接,稱為鏈接弧。需要指出的是,這些元素的名稱并不重要,真正對鏈接起作用的并不是元素名稱,而是這些元素所具有的XLink屬性。
<!ELEMENT ExtendedLink (Local | Remote | Arc)*>
<!ATTLIST ExtendedLink
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"
xlink:type (extended) #FIXED "extended"
xlink:role CDATA #IMPLIED
xlink:title CDATA #IMPLIED>
<!ELEMENT Local ANY>
<!ATTLIST Local
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"
xlink:type (resource) #FIXED "resource"
xlink:role CDATA #IMPLIED
xlink:title CDATA #IMPLIED
xlink:label NMTOKEN #IMPLIED>
<!ELEMENT Remote ANY>
<!ATTLIST Remote
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"
xlink:type (locator) #FIXED "locator"
xlink:href CDATA #REQUIRED
xlink:role CDATA #IMPLIED
xlink:title CDATA #IMPLIED
xlink:label NMTOKEN #IMPLIED>
<!ELEMENT Arc (#PCDATA)>
<!ATTLIST Arc
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"
xlink:type (arc) #FIXED "arc"
xlink:from NMTOKEN #IMPLIED
xlink:to NMTOKEN #IMPLIED
xlink:arcrole CDATA #IMPLIED
xlink:title CDATA #IMPLIED
xlink:show (embed | replace | new ) "replace"
xlink:actuate (onLoad | onRequest) "onRequest">
從上面我們可以看出,無論是鏈接元素自身、資源元素還是鏈接弧元素,都包含了XLink命名空間的屬性,另外它們也可以包含其他內(nèi)容和屬性。對于本地資源元素,xlink:type屬性固定取值為"resource",遠程資源元素的xlink:type屬性固定取值為"locator",鏈接弧的xlink:type屬性固定取值為"arc"。其中xlink:role(xlink:arcrole)和xlink:title屬性的含義與簡單XML鏈接中相類似,只不過描述的是自己所在的資源元素或鏈接弧。Remote元素中的xlink:href屬性是指遠程資源的URL。Local和Remote中的xlink:label是指資源的標識,在Arc元素中的xlink:from和xlink:to屬性的取值必須是某個xlink:label的取值,表示從xlink:from標識的資源到xlink:to標識的資源的鏈接。由于xlink:label并不是唯一標識,所以一個Arc元素可能表示了多個資源間的鏈接。xlink:from和xlink:to屬性都可以省略,表示鏈接包含的所有資源都參與鏈接,xlink:from、xlink:to和xlink:label稱為遍歷屬性。
利用上面的元素聲明,定義元素ExtendedLink的實例如下。
<ExtendedLink xmlns:xlink = "http://www.w3.org/1999/xlink">
<Local
xlink:role="department" xlink:title = "系別" xlink:label="department">
計算機系
/Local>
Remote
xlink:href = "http://www.xlinksample.com/teacher.xml"
xlink:role = "teacher" xlink:title = "老師:張三" xlink:label = "teacher">
張三
</Remote>
<Remote
xlink:href = "http://www.xlinksample.com/DataStructure.xml"
xlink:role = "course" xlink:title = "數(shù)據(jù)結(jié)構(gòu)" xlink:label = "course">
數(shù)據(jù)結(jié)構(gòu)
</Remote>
<Remote
xlink:href = "http://www.xlinksample.com/OperatingSystem.xml"
xlink:role = "course" xlink:title = "操作系統(tǒng)" xlink:label = "course">
操作系統(tǒng)
</Remote>
<Arc
xlink:from = "teacher" xlink:to = "department"
xlink:arcrole = "belonged" xlink:title = "屬于">
教師所屬系
</Arc>
<Arc
xlink:from = "teacher" xlink:to = "course"
xlink:arcrole = "teach" xlink:title = "教師開課">
教師開課安排
</Arc>
</ExtendedLink>
XML Base
XML Base是用于指定相對URL的絕對路徑,與HTML中的BASE標記功能相似,不同的是,XML Base的指定是通過元素的xml:base屬性指定的,前綴xml是用于表示命名空間"http://www.w3.org/XML/1998/namespace"。XML Base的作用范圍是包括其所有后代元素的整個元素,除非在后代元素指定了新的XML Base。