Semantic Template多值輸入問題Semantic MediaWiki的使用可藉由Semantic Template來簡化,然而在使用Semantic Template時會遇到一個問題,就是當我們在呼叫Semantic Template時如何將一個屬性輸入多值,舉例而言下面頁面名稱為 Template:會議 的Semantic Template在應與會人員、列席人員、未出席人員這三個屬性可以有多個屬性值,但是藉由樣版的呼叫卻無法傳入多值,有一種作法是有應與會人員一、應與會人員二....的多個變數或是這三個屬性不放置於Semantic Template而直接於引用樣版的頁面中鍵入。但上述兩種作法都顯得不夠聰明。
筆者的作法是寫了個MediaWiki的Parser Function來解決這個問題,在傳入參數的部份可以用 , 號隔開傳入多個人名,並且人名後可以加上 * 號為顯示名稱,程式會解析輸入的字串,再轉換成Semantic MediaWiki語法以解決多值輸入的問題;其用法及程式碼如下:
讀者若要使用下述的程式碼請依下面的步驟:
有了上述的程式碼後我們可以改寫呼叫Semantic Template的方式及Semantic Template及如下:
Semantic Template預設值問題我們在呼叫Semantic Template時有些欄位值使用者可能不會填,遇到這種情況,我們希望在Semantic Template中能判斷傳進來的參數是否為空值,若是空值的話希望給一個預設值。 要在樣版中判斷某個變數的值,這樣的功能需要安裝另外一個外掛ParserFunctions,其中有許多的程式語言語法可以使用;安裝好後即可判斷變數,以下的範例為判斷傳入的參數是否為空值,若為空值的話將其設為未開始。
Subquery在Semantic Query裡有種較複雜的查詢稱之為Subquery,舉例而言在Wiki頁面中描述王爸爸與王小明是父子關係,而王爺爺與王爸爸也是父子關係;那麼我們要如何下Semantic Query的語法查詢出王小明的爺爺是誰呢? 我們詳細來看王爸爸與王爺爺的頁面:
假設我們要單純的用Semantic Qeury查詢出王小明的父親,我們可以這樣下:
若我們要查詢出王小明的爺爺,藉由上述的關係,可以將選出的頁面再進行查詢,下面查詢的意思是將與王小明關係為父子關係的頁面查詢出來,所以會查詢出來是王爸爸的頁面,接下來會再查詢與王爸爸關係為父子關係的頁面查詢出來,也就是王爺爺的頁面,所以整句查詢的意思就是查詢出王小明的父親的父親,也就是王小明的爺爺:
Subquery的觀念會比較難理解,希望藉由上述的例子能讓讀者瞭解,在英文Semantic MediaWiki的說明中稱之為Chains of relations and attributes,有興趣的讀者可以再深入閱讀。 至此我們發覺雖然Semantic Query還比不上資料庫查詢語法SQL來的強大,但是藉由簡易的定義屬性(Attribute)及關係(Relation),能讓使用者易於上手,比起 喊了許多年的Semantic Web,Semantic MediaWiki給了使用者一個實務解決問題的答案。 Semantic MediaWiki系列文章結語筆者關於Semantic MediaWiki的文章共寫了五篇,從觀念性的探討、技術性的問題解決到實例分享都有;希望介紹給讀者這一個好用的工具,筆者目前是Semantic MediaWiki的深度使用者,平常整理資料都會加上Ontology,以方便自己整理及尋找。 在您看完了這一系列的文章,有幾個問題筆者想請教您,歡迎您來信告訴我您的想法:
底下是筆者整理Semantic MediaWiki系列文章的重點給您參考:
|