• 沒有找到結果。

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”。

相關文件