首頁‎ > ‎電子期刊‎ > ‎Semantic MediaWiki‎ > ‎

再談Semantic MediaWiki(中)


作者:張騉翔



自訂型態

Semantic MediaWiki允許我們自訂型態,可以針對不同的量尺進行自動轉換;底下我們自訂一個型態Power,步驟如下:

  • 首先建立一個頁面Type:Power,在此頁面輸入以下語法,Corresponds to是特別的屬性,用在定義自訂型態的量尺,在以下語法當中Watt為基準量尺,而kW前的0.001代表1單位的Watt對應到0.001 kW;而相同的1單位的Watt對應到0.0013410220 hp。
 
 
 [[Corresponds to:=1 W, Watt, Watts]].
[[Corresponds to:=0.001 kW, KW]].
[[Corresponds to:=0.0013410220 hp, HP]].

底下為結果頁面載圖以方便讀者參考。

  • 接下來我們宣告一個屬性頁面為Attribute:Engine power;其中的內容如下方,首先宣告此屬性與Type:Power的關係為Has type,並且在其中可以宣告顯示時的量尺。
 
 [[Has type::Type:Power]] 宣告型態為Power
[[Main display unit:=Watts]] 主要顯示量尺為Watt,並且顯示為Watts。
[[display unit:=KW]] 次要顯示量尺為kW,並且顯示為KW。
[[display unit:=HP]] 次要顯示量尺為hp,並且顯示為HP。

底下為結果頁面載圖以方便讀者參考。
  • 在使用時以下九種方式皆可。
 
 [[Engine power:=5 W]]
[[Engine power:=5 Watt]]
[[Engine power:=5 Watts]]
[[Engine power:=5 kW]]
[[Engine power:=5 KW]]
[[Engine power:=5 hp]]
[[Engine power:=5 HP]

底下為結果頁面載圖以方便讀者參考。

日期型態的說明

日期型態相當常用到,在顯示可以顯示日期的部份,此部份詳細請參考PHP手冊的strtime函式;舉例在下面的查詢會將分類為會議的頁面選取出來,並顯示會議的開始時間,而在開始時間查詢語法部份[[開始時間:=*%H:%M (%a)]],在後面的語法%H:%M (%a)選擇顯示小時、分鐘以及星期。

 
 <ask>
[[Category:會議]]
[[開始時間:=*%H:%M (%a)]]
</ask>


在做查詢時日期可以進行大於、等於及小於的比較;以下查詢將頁面有開始時間的頁面選取出來,並且開始時間要大於今日,其中 {{CURRENTYEAR}}-{{CURRENTMONTH}}-{{CURRENTDAY}}為MediaWiki的日期變數,組合起來成為今日日 期。

 
 <ask mainlabel="會議" link="all">
[[開始時間:=>{{CURRENTYEAR}}-{{CURRENTMONTH}}-{{CURRENTDAY}}
[[開始時間:=*%H:%M]]
[[結束時間:=*%H:%M]]
</ask>


針對日期Semantic MediaWiki有特別設計的Timeline及Eventline顯示方式;其中Timeline適合只有開始時間及結束時間的活動,在查詢時 Semantic MediaWiki會抓取第一個顯示時間當做開始時間以及第二個顯示時間當做結束時間。

若要使用Timeline顯示方式需在查詢語法加上屬性,其中format設定為timeline、timelinebands是顯示的時間序列,本列為顯示週及月、timelineposition設定為以今天當成顯示的基準、timelinesize為顯示大小。

Eventline主要用於有多段時間的會議,但目前在Semantic MediaWiki的說明此功能尚不穩定故暫不使用,讀者有興趣可以參考Inline Queries的說明。

 
 <ask format="timeline" link="all" timelinebands="WEEK,MONTH"  timelineposition="today" timelinesize="400px" >
[[Category:會議]]
[[會議主持:=*|會議主持]]
[[開始時間:=*|開始時間]]
[[結束時間:=*|結束時間]]
</ask>


 Semantic Template

對於剛接觸Semantic MediaWiki的人而言,Semantic MediaWiki的語法雖然已經相當簡單,但是還有學習上的曲線,藉由Semantic Template再加上MediaWiki工具列的設計,可以再進一步簡化Semantic MediaWiki的使用。

要讓Semantic MediaWiki支援在MediaWiki的Template中使用Semantic語法需要將Semantic MediaWiki中的SMW_Settings.php設定檔參數設為true。

 
 $smwgEnableTemplateSupport = true;

所謂的Semanitc Template就是一般MediaWiki Template,但是將Semantic Template的選項打開後;可以將參數值帶入到Template裡的Semantic語法,底下我們以通訊錄的範例來說明Semantic Template的使用。

建立通訊錄Template

第一步我們先建立通訊錄的Template,建立頁面名稱為Template:通訊錄,並參考以下內容;其中三個大括號如{{{生日}}}是 Template變數,在引用Template時我們會帶入實際的值。另外一個使用Template的好處是當Template內容改變時所有引到到此 Template的頁面其內容也會為之改變,所以易於做標準化管理。

 
{| class="wikitable"
! 欄位名稱
| 欄位值
|-
! 生日
| [[生日:={{{生日}}}]]
|-
! 電子郵件
| [[電子郵件:={{{電子郵件}}}]]
|-
! 行動電話
| [[行動電話:={{{行動電話}}}]]
|-
! 住家電話
| [[住家電話:={{{住家電話}}}]]
|-
! 住家地址
| [[住家地址:={{{住家地址}}}]]
|-
! 工作電話
| [[工作電話:={{{工作電話}}}]]
|-
! 工作地址
| [[工作地址:={{{工作地址}}}]]
|-
! 工作傳真
| [[工作傳真:={{{工作傳真}}}]]
|-
! 個人網站
| [[個人網站:={{{個人網站}}}]]
|-
! 身份證
| [[身份證:={{{身份證}}}]]
|-
! 郵遞地址
| [[郵遞地址:={{{郵遞地址}}}]]
|-
! 戶籍地址
| [[戶籍地址:={{{戶籍地址}}}]]
|}

[[Category:資源]]

引用Template

第二步我們引用Template,新增一個頁面,在此範例頁面名稱為王小明,內容如下;其中通訊錄為Template名稱對應到Template:通訊錄這個頁面;而其中用 | 隔開的是變數名稱及值,例如生日就會對應到Template中的{{{生日}}}變數。

有關工具列的詳細說明,可以參考筆者MediaWiki網站架設進階設定一文。

 
{{通訊錄
|生日=1999/4/5
|電子郵件=N/A
|行動電話=22224344
|住家電話=N/A
|住家地址=N/A
|工作電話=N/A
|工作地址=N/A
|工作傳真=N/A
|個人網站=N/A
|身份證=N/A
|郵遞地址=N/A
|戶籍地址=N/A
}}


新增工具列

第三步我們修改MediaWiki:Common.js這個檔案的內容,在工具列程式碼部份加入以下程式;加入以下程式後在編輯時會新增一個新的按鈕,可以點下後新增引用Template的內容讓Semantic MediaWiki的使用又更加簡化:

  
 
 mwCustomEditButtons[mwCustomEditButtons.length] = {
"imageFile": "http://farm1.static.flickr.com/208/510566005_f1fe86f513_o.png",
"speedTip": "輸入通訊錄範例",
"tagOpen": "{{",
"tagClose": "}}",
"sampleText": "通訊錄\n|生日=N/A\n|電子郵件=N/A\n|行動電話=N/A\n|住家電話=N/A\n|住家地址=N/A\n|工作電話=N/A\n|工作地址=N/A\n|工作傳真=N/A\n|個人網站=N/A\n|身份證=N/A\n|郵遞地址=N/A\n|戶籍地址=N/A\n"};


底下為筆者做完上述步驟編輯時的畫面給筆者參考,在編輯時點選上面工具列最右邊的圖示就會直接顯示引用通訊錄Template的內容,只需填寫變數值即可,相當方便。


在使用Semantic MediaWiki時讀者可能會發覺到有時新增的內容不會立即反應到Semantic Query的結果上,底下針對Refresh的機制做說明:

  1. 當我們新增屬性(Attribute)及關係(Relation)時,需要先將屬性的型態進行設定,那麼在存檔才會將屬性值及關係值實際寫入資料庫,在做Semantic Query時才會查詢出來。
  2. 當引用Template的時只需要用瀏覽器的Refresh功能即會重新引用Template內容;但是若有新增屬性或關係時仍要重新存檔才會實際寫入到資料庫。
  3. 採用Semantic Query查詢時,需用MediaWiki的Refresh連結才能更新內容;底下提供更新本頁的連結給讀者參考,只需要將此連結放至到任何頁面即可點選更新內容。
 
[{{SERVER}}{{SCRIPTPATH}}/index.php?title={{FULLPAGENAMEE}}&action=purge 更新本頁]

Comments