2 文獻探討
2.4 XTM語法
XTM (XML Topic Maps) 是一種採用 XML 標記語言,由 TopicMaps.Org[12]
負責訂定,2001 年初發佈 XTM 第一版,2001 年 10 月,XTM DTD 被 ISO 13250 所採納[5]。XTM 目前已被廣泛用來定義主題地圖知識呈現架構的語法規範,總
共包含 19 個標籤 [6]。本章介紹 XTM 整體架構以及各部分的語法和用途,並 以程式碼剖析引擎匯出的 XTM 檔案內容舉例說明。
2.4.1 XTM 整體架構
每一個XTM 檔案中一定包含根元素<topicMap>,用來指定這是一份主題地 圖文件,<topicMap>之下包含<topic>、<association>、<mergeMap>三個子元素,
分別描述主題、關聯和主題地圖之間的合併。
在<topic>元素之下,包含<instanceOf>、<subjectIdentity>、<baseName>、
<occurrence> 四個子元素: <instanceOf> 指定主題所屬的主題類別;
<subjectIdentity>表示主題所代表的概念意涵;<baseName>呈現主題的名稱;
<occurrence>指引和主題相關的資源。此類和<topic>元素相關的XTM 語法將在 第二節加以詳細說明。
在<association>元素之下,包含<scope>、<member>、<instanceOf>三個子元 素:<scope>指定關聯適用的範圍;<member>標示關聯中包含的主題成員;
<instanceOf>指定關聯所屬的關聯類別。此類和<association>元素相關的XTM 語 法將在第三節加以詳細說明。
在使用<mergeMap>元素時,有些必須遵守的原則,我們將在第四節加以說 明。圖2.4是XTM 標籤結構圖,標示出所有標籤元素應該出現的位置,呈現XTM 語法規範之架構全貌。
圖 2.4 XTM 標籤結構圖[17]
2.4.2 <topic>元素相關語法
2.4.2.1 <subjectIdentity>元素及其結構
<subjectIdentity>用來表達主題所代表的概念意涵,其下可利用<topicRef>、
<subjectIndicatorRef>、<resourceRef>三個子元素來指引主題所代表的意義。
這三個子元素內皆具有Xlink 屬性 [3],用來指引URI 連結。
<topicRef>連結的目標必須是主題,表示此主題和本身所描述的主題是同義詞;
而<subjectIndicatorRef >則連結主題指引 (Subject Indicator)。主題指引是指能清 楚代表主題概念的資源,為了方便主題地圖之間的交換與合併,明確的主題指引 非常重要,一些重要的主題指引已被公開成為標準的公用資源,稱為 “Published Subject Indicator”,簡稱PSI,例如 “superclass”、“subclass”、“superclass-subclass relationship” 表示階層關係的主題概念都已被制定成為PSI。<topicRef>和
<subjectIndicatorRef >的差別在於<subjectIndicatorRef >連結的目標可為某個外部 網頁,而<topicRef>則必須連結內部的主題或PSI。
另外,當資源本身即是主題所代表的概念時,我們用<resourceRef>來指引。
<subjectIdentity>的用法舉例說明如下:
<topic id="Source">
...
</topic>
<topic id="Source">
<subjectIdentity>
<topicRef xlink:href="# Program"/>
</subjectIdentity>
</topic>
上例中, 主題 “Source” 藉由<topicRef> 指引其概念等同於另一主題 “Program”。
<topic id="Table">
<subjectIdentity>
<sujectIndicatorRef
xlink:href="http://localhost/SCPE/#table "/>
</subjectIdentity>
</topic>
上例中,主題“Table” 藉由<subjectIndicatorRef>指引其概念為一PSI 所代表 的意義。
<topic id=" lettuce">
<subjectIdentity>
<resourceRef
xlink:href=" HTTP://LOCALHOST/Farm/images/ lettuce.jpg"/>
</subjectIdentity>
</topic>
上例中,主題 “lettuce” 透過<resourceRef>參考到一外部連結為程式碼的說 明網頁,表示 “lettuce” 這個主題的概念就是圖片 “lettuce(萵苣)”。
2.4.2.2 <instanceOf>元素及其結構
<instanceOf>用來指定主題所屬的類別。由於在主題地圖中,類別本身通常 也被定義成主題16,所以<instanceOf>的作用即在表達主題與類別主題之間的階 層關係。其下包含<topicRef>和<subjectIndicatorRef>兩個子元素可供選用,因前 一小節已提及這兩個子元素的用法,此處不再贅述。舉例說明如下:
<topic id=" Source">
...
</topic>
<topic id="SRC001">
<instanceOf>
<topicRef xlink:href="#Source"/>
</instanceOf>
<baseName>
<baseNameString>程式原始碼名稱</baseNameString>
</baseName>
</topic>
上例中,主題 “SRC001” (程式原始碼名稱) 透過<instanceOf>參考到另一主 題“Source”,表示 “SRC001” 屬於 “Source” 這個主題類別。
2.4.2.3 <baseName>元素及其結構
<baseName>用來呈現主題的名稱,其下包含<scope>、<baseNameString>和
<vatiant>三個子元素。<scope>用來指示此名稱適用的範圍,透過<topicRef>、
<subjectIndicatorRef>、<resourceRef>三個子元素參考到能表示其範圍的主題或概 念;<baseNameString>導引出主題名稱字串;<vatiant>提供主題名稱的其他型式,
利用其下的<parameters>指定<variantName>元素內名稱的用途,例如顯示用、排 序用等。舉例說明如下:
<topic id="SRC002">
<baseName>
<scope><topicRef xlink="#current-name"></scope>
<baseNameString>新的網頁抬頭名稱-修改日期</baseNameString>
<variant>
<parameters><topicRef xlink="#sort"/></parameters>
<variantName>
<resourceData>修改日期, 新的網頁抬頭名稱</resourceData>
</variantName>
</variant>
</baseName>
<baseName>
<scope><topicRef xlink="#old-name"></scope>
<baseNameString>舊的網頁抬頭名稱-修改日期</baseNameString>
</baseName>
</topic>
上例中,主題 “SRC002” 具有兩組名稱—「新的網頁抬頭名稱-修改日期」
和「舊的網頁抬頭名稱-修改日期」,它們的使用範圍分別定義在<scope>元素中,
「新的網頁抬頭名稱-修改日期」是現今通用的稱呼 (current-name),而「舊的網 頁抬頭名稱-修改日期」則是舊稱 (old-name)。在「嘉義市」這個主題名稱之下,
又利用<variant>指定在排序 (sort) 時,要以「修改日期, 新的網頁抬頭名稱」這 個名稱來排序。
2.4.2.4 <occurrence>元素及其結構
<occurrence>的功用是指引和主題相關的資源,資源的型態分為兩種:可定 址的檔案或網路資源,以及字串資料。第一種透過<resourceRef>元素來指引URI 連結,第二種則用<resourceData>來顯示文字。此外,<scope>可用來指定資源的 使用範圍,<instanceOf>則用來表示資源的類別。舉例說明如下:
<topic id=" NOTE001">
<baseName>
<baseNameString>原始碼001說明</baseNameString>
</baseName>
<occurrence>
<instanceOf>
<topicRef xlink:href="#RefData"/>
</instanceOf>
<resourceData>
程式原始碼001說明文字
</resourceData>
</occurrence>
<occurrence>
<instanceOf>
<topicRef xlink:href="#RefURL"/>
</instanceOf>
<resourceRef
xlink:href="http://140.113.39.172/comic/OBJ0022_01.gif"/>
</occurrence>
</topic>
上例中, 主題 “NOTE001” 具有兩項相關資源, 一項是文字介紹 (RefData),記錄於<resourceData>元素中;另一項則是外部網頁(RefURL),透 過<resourceRef>提供連結。
2.4.3 <association>元素相關語法
<association>元素中包含三個部分:<scope>、<instanceOf>和<member>。
<scope>用來指定關聯適用的範圍,<instanceOf>用來說明關聯所屬的關聯類別,
因前一節已提及這兩個元素的用法,本節僅針對<member>加以說明。
<member>用來描述關聯中包含的主題成員,此元素中可利用<roleSpec>來指 定每個成員所扮演的角色,並以<topicRef>、<resourceRef>、<subjectIndicatorRef>
加入主題成員。舉例說明如下:
<topic id="SRC001">
<baseName>
<baseNameString>原始碼一</baseNameString>
</baseName>
</topic>
<topic id="TBL001">
<baseName>
<baseNameString>資料表一</baseNameString>
</baseName>
</topic>
<association>
<instanceOf>
<topicRef xlink:href="#INSERT"/>
</instanceOf>
<member>
<roleSpec>
<topicRef xlink:href="#locate"/>
<roleSpec>
<topicRef xlink:href="#SRC001"/>
</member>
<member>
<roleSpec>
<topicRef xlink:href="#exit"/>
<roleSpec>
<topicRef xlink:href="#TBL001"/>
</member>
</association>
上例中的關聯利用<instanceOf>元素指定其關聯類別為「新增」(INSERT),
並透過<member>加入兩個成員,第一個成員的角色為「位於」(locate),參考 到的主題是原始碼一;第二個成員的角色為「存在」(exist),參考到的主題是資 料表一。
2.4.4 <mergeMap>元素相關語法
從名稱上便很容易看出<mergeMap>是用來將兩個不同的主題地圖予以合 併,而合併必然會將數個相同的主題併成一個,連帶影響結合主題的關聯。在處 理合併的問題時,有兩種合併的規則:[2]
1. 依據主題名稱的合併規則 (Topic Naming-constraint-based Merging
Rule):若兩個主題具有相同名稱 (baseName),且其適用範圍 (scope) 亦 相同,則這兩個主題會被合併。
2. 依據主題意涵的合併規則 (Subject-based Merging Rule):若兩個主題具 有相同的概念、意涵,亦即在<subjectIdentity>元素中指向相同的主題或 資源時,則這兩個主題會被合併。
以下我們透過三個例子,分別說明合併的語法以及依據兩種合併規則進行合
併的結果。
2.4.4.1 合併的語法
以下是將兩個主題地圖加以合併的例子:
<mergeMap xlink:href="http://localhost/merge.xtm">
<topicRef xlink:href="#person"/>
<topicRef xlink:href="#place"/>
</mergeMap>
<topic id="person">
……
</topic>
<topic id="place">
……
</topic>
上例中,我們在<mergeMap>元素裡利用Xlink 指引出將要合併的外部主題 地圖 “merge.xtm”,並將位於目前主題地圖上的兩個主題— “person” 和 “place”
加入 “merge.xtm” 的 scope,此舉的目的是為了釐清兩個主題地圖間彼此的 scope,亦即確認其 “namespaces”,以避免因為「依據主題名稱的合併規則」而 造成錯誤的合併。
2.4.4.2 依據主題名稱的合併
就合併而言,除了不同主題地圖間的主題合併,也有同一主題地圖中不同主 題的合併。以下是同一主題地圖中依據主題名稱合併的例子:
[合併前]
<topicMap>
<topic id="SRC001">
<baseName>
<baseNameString>程式碼一</baseNameString>
</baseName>
<occurrence>
<resourceRef
xlink:href="http://localhost/SRC/SRC001.aspx"/>
</occurrence>
<baseName>
<baseNameString>程式碼一</baseNameString>
</baseName>
<baseName>
<baseNameString>另一個名稱</baseNameString>
</baseName>
<occurrence>
<resourceRef
xlink:href="http://localhost/SRC/SRC001.aspx"/>
</occurrence>
<occurrence>
<resourceRef
xlink:href="http://localhost/SRC/SRC002.aspx"/>
</occurrence>
</topic>
<association>
<member>
<roleSpec><topicRef xlink:href="#place"/></roleSpec>
<topicRef xlink:href="#SCR003"/>
</member>
<member>
<roleSpec><topicRef xlink:href="#goods"/></roleSpec>
<topicRef xlink:href="#NOTE001"/>
</member>
</association>
</topicMap>
上例中,合併前的兩個主題 “SCR001” 和 “SCR002” 都包含「宜蘭縣」這 個主題名稱,且因沒有指定scope,視為具有相同的適用範圍,故合併成為主題
“SCR003”。而原本和 “SCR001” 及 “SCR002” 有關聯的主題 “NOTE001”,則 將關聯對象改成 “SCR003”。
2.4.4.3 依據主題意涵的合併
以下是在同一主題地圖中,兩個具有相同意涵的主題進行合併的例子:
[合併前]
<topicMap>
</topicMap>
上例中,合併前的兩個主題 “SRC051” 和 “SRC052”,在其<subjectIdentity>
元素中都具有指向 “http://localhost/SRC/SRC051.aspx” 的指標,表示它們具有相 同的意涵,故合併成為主題 “PER18”。