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

Semantic Forms介紹



什麼是Semantic Forms ?

Semantic FormsMediaWiki軟體的擴充套件(Extension),要搭配Semantic MediaWiki才能夠運作;而Semantic MediaWiki也是MediaWiki的擴充套件(Extension);Semantic MediaWiki提供了在MediaWiki軟體中加入Ontology語法的功能,而Semantic Forms則是用表單的方式簡化了填寫Ontology的方式。

有關MediaWiki以及Semantic MediaWiki的介紹可參考筆者撰寫之文章

安裝Semantic Forms

Semantic Forms的官方網頁在MediaWiki網站的Extension:Semantic Forms頁面;其安裝步驟如下。

  1. 在安裝前請先確定已安裝好Semantic MediaWiki。
  2. 下載Semantic Forms程式碼至MediaWiki的擴充目錄,例如筆者的是/opt/lampp/htdocs/wiki/extension。
  3. 在MediaWiki的設定檔(LocalSettings.php)中引用Semantic Forms,引用語法為include_once('extensions/SemanticForms/includes/SF_Settings.php');。
  4. 加入Semantic Forms所要使用的命名空間,預設為$sfgNamespaceIndex = 150;,請注意此行要加在引用Semantic Forms語法之上。
$sfgNamespaceIndex = 150;
include_once('extensions/SemanticForms/includes/SF_Settings.php');

在安裝好以後會增加一些Special Pages,列表說明如下。

頁面名稱 說明
Special:AddData 針對特定表單新增頁面,語法為[[Special:AddData/表單名稱/頁面名稱]]
Special:AddPage 針對特定表單新增頁面,但是讓使用者自行命名頁面名稱,語法為[[Special:AddPage/表單名稱]]
Special:CreateForm 運用介面的方式設計表單。
Special:CreateTemplate 建立樣版,在建立樣版的介面中可以選取已存在的屬性及關係。
Special:CreateProperty 用介面的方式建立屬性或是關係。
Special:EditData 針對某頁編輯資料,語法為[[Special:EditData/表單名稱/頁面名稱]]
Special:Forms 列出所有的表單。
Special:Templates 列出所有的樣版。

Semantic Forms設計觀念

Semantic MediaWiki延伸了Wiki的語法,加入了屬性([[屬性名稱:=屬性值]])以及關係([[關係名稱::目標頁面]])的語法;雖然Wiki以及新加入的語法比起HTML或是程式語言已是相當簡單,但從應用程式的操作角度來看,Wiki語法的編輯還不夠直覺,這也就是Semantic Forms專案想要解決的問題,希望讓Wiki的語法在使用上更直覺容易。

下面兩點是Semantic Forms的主要設計觀念,在稍後的小節我們會看到實際的例子來說明這樣的觀念。

  • Semantic Forms需搭配Semantic Template的使用;Semantic Forms本身並不會將使用者所輸入的資料解析成Semantic MediaWiki語法,主要負責介面的呈現並將使用者輸入的資料傳遞給Semantic Template。
  • Semantic Forms本身也是樣版,在其中可描述在Semantic Template的欄位對應到實際呈現給使用者介面的欄位。

 動手新增Semantic Forms

底下筆者以範例的方式來說明Semantic Forms的設計觀念,藉由圖片的輔助讓讀者對Semanitc Forms的有實際的感受,並加以文字的說明讓讀者有整體性的觀念。

新增屬性(Attribute)或關係(Relation)

在特殊頁面Special:CreateProperty中可以新增Semantic MediaWiki的屬性(Attribute)或是關係(Relation),與手動新增的內容相同;這個功能算是幫Semantic MediaWiki的介面做加強,以往只能用新增頁面([[Attribute:屬性名稱]]、[[Relation:關係名稱]])並鍵入內容的方式來達成,雖然對於熟悉的編輯者用手動編輯或是介面編輯差異不大,但對於初學者而言是相當直覺式的操作。



新增Semantic Template

Special:CreateTemplate中可以新增Semantic Template,所謂的Semantic Template與一般的樣版(Template)並無差異,重點是在樣版內容中增加了Semantic MediaWiki的屬性及關係,並且其值是由樣版的參數傳入;這樣的好處是使用者只要會呼叫樣版即可藉由樣版的包裝享受Semantic MediaWiki的好處,Semantic Template會將參數套入樣版中顯示最後的結果。下面是呼叫樣版的語法:

 
{{連絡人
|姓名=
|生日=
|電話=
|服務單位=
}}

下圖是建立樣版時的Semanitc Forms介面;筆者可以點選下面連結看每個欄位的詳細說明。

http://www.flickr.com/photos/kunhsiang/1438134472/


新增好的樣版內容如下,當然也可以用手動增加頁面([[Template:連絡人]] )的方式來新增或修改:

 
<noinclude>
This is the '連絡人' template. It should be called in the following format:
{{連絡人
|姓名=
|生日=
|電話=
|服務單位=
}}
Edit the page to see the template text.
</noinclude>

<includeonly>
{| border=0 cellpadding=4 cellspacing=4
! 姓名
| [[姓名:={{{姓名|unknown}}}]]
|-
! 生日
| [[生日:={{{生日|unknown}}}]]
|-
! 電話
| [[電話:={{{電話|unknown}}}]]
|-
! 服務單位
| [[服務單位:={{{服務單位|unknown}}}]]
|}
</includeonly>

新增Semantic Form

接下來進入到Semantic Forms的重點,要如何新增表單(Form),在前述兩小節談到如何新增屬性、關係以及樣版,這些是Semantic Forms的輔助功能,要是不用介面的方式也可以使用手動的方式來新增;但在表單的部份則是必須要藉由Semantic Forms的功能來達成。

詳談表單的新增方式前,讓我們再來重點式的複習一下Semantic Forms的運作流程。

步驟 內容
新增Semantic MediaWiki屬性(Attribute)或是關係(Relation)。
新增Semantic Template,要注意Semantic Forms的運作只能透過Semantic Template,而無法直接在頁面中新增Semantic MediaWiki語法。
新增Semantic Form,在Semantic Form當中會引用Semantic Template,將欄位對應到Semantic Form的介面中。
運用規劃好之Semantic Form來新增頁面。
運用Semantic Form來修改引用對應之Semantic Template頁面。

接下來我們談如何實際規劃一個Semantic Form,在Special:CreateForm頁面中可以建立Semantic Form;新增Semantic Form也有兩個步驟,第一個是選擇對應的Semantic Template,要注意的是一個Semantic Form可以對應到多個Semantic Template、第二個步驟是將Semantic Template對應到實際的Semantic Form欄位。

下圖為選擇Semanitc Template的畫面,讀者可以點入連結看各個欄位的說明。

http://flickr.com/photos/kunhsiang/1452581547

新增好Semantic Template後,我們可以設定每個欄位的屬性,例如顯示名稱、是否為必填…等等;下面的連結亦可點入看詳細的畫面說明。Semantic Forms會每個欄位預設為適合的介面型態,例如日期型別(Date)就會有日期的介面可以選擇年月日、列舉型別(Enumeration)就會將列舉值 用下拉式選單列出。

http://flickr.com/photos/kunhsiang/1453569028/


在設定好之後按下Preview即可看到Semantic Forms為我們所產生的表單語法,也是用Wiki的語法來描述;我們看到此表單語法的主要結構如下連結,並於後文詳細說明:

http://flickr.com/photos/kunhsiang/1452877987/



根據Semantic Form新增頁面

在新增好表單後,可以在Special:Forms中選擇特定的表單(Form)後方有Add data with form的連結,可以點選實際新增頁面。


下方的兩張圖是實際新增頁面及輸入表單內容的畫面,亦可透過Special:AddPage 或是Special:AddData這兩個特殊頁面來達成;其用法再說明如下:

頁面名稱 說明
Special:AddData 針對特定表單新增頁面,語法為[[Special:AddData/表單名稱/頁面名稱]]
Special:AddPage 針對特定表單新增頁面,但是讓使用者自行命名頁面名稱,語法為 | [[Special:AddPage/表單名稱]]



實際上在新增完資料儲存後會將值存為Semantic Template的型式,而Free Text的部份就會緊接著Semantic Template為一般的Wiki語法。
 
{{連絡人
|姓名=王小明
|生日=80/5/5
}}

王小明

[[Category:王家庭]]

修改頁面

在新增完頁面後會有需求修改頁面,第一種方式是透過頁面Special:EditData來達成。

 
 [[Special:EditData/表單名稱/頁面名稱]]


第二種方式可在頁面的上方加編輯標籤(Edit with Form),方法是要先將利用[[Category:分類名稱]]語法將頁面分類,然後在分類頁面[[:Category:分類名稱]]中加入以下語法。

 
 [[Has default form::Form:表單名稱]]


以下為設定好後之頁面,在右上角會有Edit with Form的標籤,點入後即可使用對應的表單編輯頁面。


Semantic Forms語法結構

Semantic Forms給了我們方便的視覺化介面來新增屬性、關係、樣版及表單,然而最重要的是Semantic Forms的表單語法,藉由此語法可以讓我們設計表單,讓Wiki的使用更上高一層,結合Semantic MediaWiki及Semantic Forms可以設計許多小型簡單的應用程式,而不需要花費很高的成本開發系統,或是做為雛型收集需求之用。

Semantic Forms的語法以{{{for template}}}及{{{end template}}}做為表單的開始及結束,緊接著在for template之後為表單對應到的樣版名稱,並且還可用 | 號來分隔出其它屬性,較為重要的屬性有:

  • label=label text:指定Semantic Form在輸入資料時的標題。
  • multiple:Semantic Template在Semantic Form中能否多筆輸入。

底下舉個例子給讀者參考。

 
{{{for template|連絡人|label=連絡人|multiple}}}

...在此區塊間描述此樣版的介面...
...最基本的描述為{{{field|姓名}}}意指將連絡人樣版裡的姓名顯示在Semantic Form介面上...

{{{end template}}}

{{{for template}}} {{{end template}}} 是Semantic Forms描述樣版的基本結構,在其中會有許多 {{{field}}} 的欄位描述,需注意的是某些特殊的欄位 如 {{{free text}}}{{{page title}}}不必包含於{{{for template}}} {{{end template}}}區塊中。

我們先針對{{{field}}}的屬性進行說明,再度提醒屬性間以 | 號隔開。

屬性 說明
input type=input type 輸入型態,用Special Page來產生Semantic Form會自動選擇權對應的輸入型態,目前有輸入型態有text、textarea、date、check、dropdown。
size=size 指定text型態的input type其輸入文字的長度。
rows=num rows 指定textarea型態的input text的輸入列。
cols=num cols 指定textarea型態的input text的輸入欄。
mandatory 是否為必填欄位。
hidden 是否為隱藏欄位。
restricted 欄位是否只有管理者能編輯。
restricted 欄位是否只有管理者能編輯。
autocomplete on=category name 指定一個Category Name,在輸入欄位名稱時會有AutoComplete的功能,將Category下的Page列出來讓使用者選擇。
default=default value 指定欄位的預設值。

除了{{{field}}}外,另外有兩個特殊欄位變數{{{page title}}}及{{{free text}}};其中{{{page title}}}用來顯示使用者所編輯的頁面名稱,如上所述不必放置於{{{for template}}}區塊之中。

{{{free text}}}用來表達除了Semantic Template之外的內容,一樣放於{{{for template}}}區塊外,可以指定的屬性有rows、cols、hidden、restricted、preload;其中preload=page title為專屬屬性,可以預先載入某個網頁內容。

 結語

筆者在接觸Semantic Forms前已經有在使用Semantic Template,在使用Semantic Forms時有個疑問,就是原先的Semantic Template套用在Semantic Forms能否不加修改就能運作正常;這部份是沒有問題可以正常運作的,除了一個小問題,就是在FreeText的部份只能加在Semantic Template後面而無法於前面也能有FreeText。

Semantic Forms是個年輕的專案,在2007年5月才開始第一版,由Yaron Koren所開發;在維基年會看到其發表,覺得Semantic Forms是未來促進Wikipeida及Semantic Web推廣重要的應用就加以研究。

Semantic Forms除了視覺化的方式來新增屬性、關係、樣版及表單外,最重要的核心就是Semantic Forms的語法,這語法比起一般程式語法如C#,甚至HTML簡單許多,當然在功能上比不上;但對於簡化Wiki的使用以及瞭解Semantic Web的實務用途有相當大的幫助。

Comments