作者:
張騉翔Semantic Web
繼Web 2.0的熱潮之後,許多人都在猜測網路的下個趨勢是什麼;Semantic Web被視為Web 3.0的候選人之一。
目前網路資訊呈現的形式,大部份是以HTML的方式為主,HTML的語法簡單好用,主要在於描述資訊如何呈現,例如顏色、位置、大小…等,底下舉一小段HTML:
<html> <head>
<title>Google公司</title>
</head> <body>
<table> <tr><td>成立日期</td><td>1998/9/28</td> </tr> <tr><td>員工人數</td><td>12238</td> </tr> <tr><td>網站</td><td>[http://www.google.com google.com]</td> </tr> </table>
</body> </html>
|
在網路上數以億計的網頁,要尋找出有用的資訊就要藉由搜尋引擎將網頁分析出關鍵字及重要性,然後建成索引給使用者用關鍵字查詢。
資訊的組織及呈現方式大大的影響了我們的生活及工作方式,Google的使命是組織全世界的資訊,讓全球都能使用並有所裨益,其以搜尋引擎出發協助使用組織目前以HTML為主的網頁,讓網友在茫茫網海中尋找方向,進而開發其他的資訊整理工具,這樣的使命造就了世界的資訊強權。
Semantic Web的概念主要是想將目前以HTML為主的網頁,轉變成可被軟體解讀的格式,在上述以HTML組織資訊的方式並無法明確的瞭解資訊的關鍵字及結構,而需要藉由搜尋引擎的分析。底下以XML格來表達Semantic Web的想法。
<Google> <成立日期>1998/9/28</成立日期> <員工人數>12238</員工人數> <網站>google.com</網站> </Google> |
在上述範例中,若以軟體程式的角度來解析會比傳統HTML的方式來得容易多,可以明確的分析出Google的成立日期、員工人數及網站等資訊。當表達資訊的基本方式改變後,建構在其上的應用如搜尋引擎的方式也會改變,更有可能造就另一波資訊革命浪潮。
Office(Word、Excel...)->HTML->Semantic Web? |
Semantic Web(2004)的概念在Web 2.0(2005)出來之前即提出,並且相關規格也已相當完整(RDF及OWL...),然而Semantic Web並未造成網路的風潮;主要是缺乏殺手級的應用,以貼近使用者需求的應用來推廣。
Ontology,Semantic Web的核心
Ontology的概念為Semantic Web更進階的目標,主要目的除了現在網頁內容能被軟體所解析外,更希望明確標識或解析出網頁中的知識架構;Ontology主要的組成如下:
Classes
| 代表一個抽象觀念或分類,例如公司、汽車、機車、人、花…等。
|
Individuals
| 代表屬於某個特定觀念的實體,例如公司的實體有Microsoft、Google、Yahoo…等。
|
Attributes
| Individuals的屬性,包含名稱及值,如成立日期、員工人數、網站…等;舉例Google的成立日期為1998/9/28、員工人數為12238、網站為google.com。
|
Relations
| 用來描述Individuals之間的關係,例如Google之間的關係為競爭對手、Google與Youtube之間的關係為併購。
|
我們根據Ontolgy的概念來改寫上述的範例:
<classes name="公司"> <individual name="Google"> <attribute name="成立日期">1998/9/28</attribute> <attribute name="員工人數">12238</attribute> <attribute name="網站">google.com</attribute> </individual> </classes> |
藉由Ontology的描述方式,更進一步的將資訊組織成特定領域的知識;上述筆者只是以很單簡的例子來表達Semantic Web及Ontology的概念,對這個主題有興趣的讀者可以參考Amazon上的Semantic Web相關書籍。
Semantic MediaWiki
MediaWiki軟體是目前Wikipedia所採用的軟體,而Semantic MediaWiki是MediaWiki的延伸,擴充了原本的Wiki語法以用來描述Ontology。
Semantic MediaWiki=MediaWiki+Semantic Web
Semantic MediaWiki吸引筆者的地方在於它運用了原本Wikipedia成功的優勢,再加上簡單的Semantic Wiki語法;讓導入Semantic Web的概念極為容易,不需要瞭解複雜的Semantic Web規格,而著重在使用者應用層面。
有關Wiki語法以及MediaWiki的介紹可以參考筆者所撰寫的文章,本文將直接切入Semantic MediaWiki的應用核心。
安裝Semantic MediaWiki
若讀者是網站管理員,架設過MediaWiki而想要擴充至Semantic MediaWiki,可以至官方網站http://www.ontoworld.org下載來安裝,目前最新的版本為0.7,本文說明0.6版與0.7版的安裝方式。
Semantic MediaWiki 0.7版安裝方式
- 至Ontoworld的Semantic MediaWiki頁面中最下方可以找到Semantic MediaWiki在Source Forge的下載頁面。
- 將0.7版的Semantic MediaWiki版本下載後解縮。
- 將解壓縮後的Semantic MediaWiki資料夾(SemanticMediaWiki)包含了所有相關程式及文件複製到到MediaWiki的擴充資料夾,例如筆者一般的目錄為/opt/lampp/htdocs/extensions/。
- 將"include_once('extensions/SemanticMediaWiki/includes
/SMW_Settings.php');"及"enableSemantics('example.org');"兩行加入到MediaWiki的
LocalSettings.php檔案最後一行,其中example.org請改名為您機器的DNS或IP名稱。
- 用管理者身份登入MediaWiki,在Special Pages中有Admin functions for Semantic MediaWiki頁面或是網址http://yourwikisite/index.php/Special:SMWAdmin;在其中有安裝Semantic MediaWiki的按鈕,執行即可完成安裝。
Semantic MediaWiki 0.6版安裝方式
- 至Ontoworld的Semantic MediaWiki頁面中最下方可以找到Semantic MediaWiki在Source Forge的下載頁面。
- 將0.6版的Semantic MediaWiki版本下載後解縮。
- 將解壓縮後的Semantic MediaWiki資料夾(SemanticMediaWiki)包含了所有相關程式及文件複製到到MediaWiki的擴充資料夾,例如筆者一般的目錄為/opt/lampp/htdocs/extensions/。
- 將Semantic MediaWiki下的includes目錄裡的SMW_LocalSettingsTemplate.php複製更名為SMW_LocalSettings.php檔案;此為Semantic MediaWiki的設定檔,一般保持原始設定即可。
- 將此行"include_once('extensions/SemanticMediaWiki/includes/SMW_Settings.php');"加入至MediaWiki的LocalSettings.php檔案最後一行。
- 用管理者身份登入MediaWiki,在Special Pages中有Admin functions for Semantic MediaWiki頁面或是網址http://yourwikisite/index.php/Special:SMWAdmin;在其中有安裝Semantic MediaWiki的按鈕,執行即可完成安裝。
讓Semantic MediaWiki支援自訂Namespace
在Semantic MediaWiki的設定檔(0.7版為SMW_Settings.php、0.6版為SMW_LocalSettings.php)中可以設定哪些命名空間(Namespace)可以使用Semantic Wiki的語法。
$smwgNamespacesWithSemanticLinks = array( NS_MAIN => true, NS_TALK => false, NS_USER => true, NS_USER_TALK => false,
...略
); |
首先要產生自己的命名空間(Namespace)可以在MediaWiki的LocalSettings.php設定檔中加入:
$wgExtraNamespaces[100] = "通訊錄"; $wgExtraNamespaces[101] = "通訊錄_talk"; |
每個命名空間都會有對應的索引,從100開始,並且雙數是一般的命名空間,而單數則是對應的討論(Talk)命名空間;再加入好了自訂的命名空間
後,可以在上述$smwgNamespacesWithSemanticLinks參數中加入讓自訂的命名空間支援Semantic
MediaWiki:
100 => true, 101 => false, |
並且告訴Semantic MediaWiki我們有使用自訂命名空間,其索引從100開始。
$smwgNamespaceIndex = 100; |
Semantic Search的命名空間
Semantic Search可以查詢出特定的屬性值或關係值,是使用Semantic MediaWiki後常會用到的功能,預設Semantic Search只會針對MAIN及IMAGE這兩個命名空間來查詢:
$smwgIQSearchNamespaces = array(NS_MAIN, NS_IMAGE); |
Semantic MediaWiki 0.6版可以直接修改SMW_LocalSettings.php中的$smwgIQSearchNamespaces參數,加入新的命名空間:
$smwgIQSearchNamespaces = array(NS_MAIN, NS_IMAGE, NS_USER, 100); |
或是直接忽略此參數,搜尋所有的命名空間:
//$smwgIQSearchNamespaces = array(NS_MAIN, NS_IMAGE); |
而在0.7版建議直接在SMW_InlineQueries.php檔案中修改此參數。
讓Template支援Semantic MediaWiki語法
若要讓MediaWiki的模版(Template)支援Semantic MediaWiki語法,舉例Template:通訊錄的頁面內容如下:
{| class="wikitable" ! 欄位名稱 | 欄位值 |- ! 住家電話 | [[住家電話:={{{住家電話}}}]] |} |
我們想要在一般頁面中帶入參數給Template:通訊錄,需要啟用Semantic MediaWiki的參數:
$smwgEnableTemplateSupport = true; |
若是您使用的MediaWiki版本為1.1x版以上的,則啟此參數即可;若是1.9x版本以下的則需要稍微修改其原始碼,在MediaWiki的includes目錄下Parser.php檔案,用搜尋的功能找到此行程式碼:
$text = $this->replaceVariables( $text, $args );" |
並在其後加上此行程式碼即可:
wfRunHooks( 'InternalParseBeforeLinks', array( &$this, &$text ) );
|
使用Semantic MediaWiki
若您是一般使用者想要體驗Semantic MediaWiki,可以參考以下資源。
開始動手玩Semantic Wiki語法
在基礎的觀念及工具有了後,接下來讓我們來實際練習Semantic Wiki的語法;Semantic MediaWiki新增的兩種語法為Relation以及Attribute的描述。
在Class及Individual部份則是採用現有的Wiki語法,Individual是實際的文章,而Class則是則對應到
Category的概念;每個文章可以被分類到多個Category,代表這文章所代表的抽象觀念,底下以表格方式呈現Ontology與
Semantic Wiki對應的語法。
Ontology
| 對應的Semantic Wiki語法
|
Classes
| 運用原本Wiki的Category語法,舉例 [[Category:Web 2.0]]
|
Individuals
| 每篇MediaWiki中的文章對應為Individual,亦即觀念的實體;而每篇文章亦可被運用Category予以分類,代表屬於某個抽象觀念。
|
Attributes
| 新增的語法,用 [[屬性名稱:=屬性值]] 來表達文章中屬性(Attributes)的概念,舉例 [[生日:=1977年5月7日]]。
|
Relations
| 新增的語法,用 [[關係名稱::關係對象]] 來表達文章與文章間關連(Relations)的概念,舉例 [[子與父::大仲馬]],代表本頁與大仲馬的頁面關係為子與父。
|