2009年6月28日 星期日

[Struts2] Miscellaneous Tags

之前已經提到兩種類型的 Tags:Control TagsData Tags。在這裡我們所提到的 Tags 都不屬於前面所提到的兩種類型,所以我特別放在雜項 (miscellaneous) 討論:1) include tag, 2) URL tag 與 3) param tag。

Include Tag
如果你熟悉 JSP 的話,include tag 你應該不陌生,因為在 JSTL 中也有提供類似的 tag:<jsp:include>,不過,Struts2 提供的 include tag 擁有更多更好的功能,也具備了 JSTL 的 include tag 所沒有提供的能力。
之前我們有提過 Action tag,與現在的 include tag 有些許的不同:include tag 可以引用任何的網路 resources,包含其所屬的 web app 或是外部的 resources 等;而 action tag 只能引用自己本身所屬的 web app 中的 actions,對於外部的 actions 則無法引用。
Include tag 只有一個 attribute 可以使用:value,在 value 中我們可以指定 URL、也可以是某個 action 等,如果我們要傳送 parameter 給 include 的頁面,我們可以配合 param tag 使用 (稍後提到):
<s:include value="MyAction.action">
<s:param name="id" value="myID" />
</s:include>

URL Tag
對於 Struts2 framework 來說,轉換 URL 到目標的 action 是主要的工作,因為 URL 是瀏覽器需要解析的,而背後的工 action 對應就由 Struts2 framework 幫我們完成!在 Struts2 中提供了這樣的 URL tag 幫助我們轉換 URL,任何的 resources 我們都可以交由 URL tag 幫我們轉換。
URL 提供的 attributes,我們透過 URL tag 幫我們將 action 轉換成正確可執行的 URL,然後我們在嵌入 <a> 中:
<a href='<s:url action="myAction" />'>My Action</a>

如果我們要傳送 parameter 給目標的 URL,我們可以結合 param tag 並透過 var attribute 幫我們將 URL 暫存起來,最後在透過 property tag 幫我們取出暫存的 URL:
<s:url action="MyAction" var="tmpURL">
<s:param name="id" value="myID"/>
</s:url>
<a href='<s:property value="#tmpURL"/>'>My Action</a>

Param Tag

這個 tag 在之前就已經有稍微看過了,目的在於將 parameter 做傳送的動作,在這個 tag 中只有兩個 attributes:1) name 與 2) value。
我們可以想像就是將 key-value pattern 傳送給某個地方,就像我們在上面就提過的,我們可以和 include tag 或 URL tag 配合,產生更好用的功能!

在這裡我們討論到三個會用到但又不屬於特殊功能的 tags,這三個 tags 都算常用,而且很好用!

2009年6月27日 星期六

[Ontology] Ontology and OWL

有人可能問我,怎麼會突然想要寫點不一樣的東西勒?畢竟我以前都沒有紀錄過關於 Ontology相關的文章,我怎麼會想要轉寫 Ontology 呢?其實,昨天剛領到碩士畢業證書,回想起在碩士生涯的兩年裡,我主要學的就是 Ontology,想想我怎能不紀錄起來呢?這樣好像有違交了我兩年的指導教授,所以在這裡我決定紀錄起來!

-----以上都是廢話 以下才是正文-----

Ontology 是什麼?是一種概念,試圖將人類腦中與生活中的知識加以描述成電腦可以瞭解的東西,而這些知識都是相關於某個領域 (domain),並且定義出該 domain 中的概念 (concept) 與這些 concepts 之間的關聯 (relationship) 形成一個 domain ontology。所以,ontology 是一種知識的表示方式,在 AI 領域中試圖將這些知識,透過嚴謹的定義,讓電腦可以具有人類腦中的知識,提昇電腦的判斷能力。

目前針對 ontology 的描述方法不只一種,不過現在最普遍也最標準的方法是採用 Web Ontology Language (OWL),別問我為甚麼不是 WOL 而是 OWL。在我的碩士論文中,提出一套監控系統,採用 OWL 建立受監控的環境,讓電腦瞭解目前環境中的知識,在配合 Semantic Web Rule Language (SWRL) 進行語意式推論,提供更有效也更精準的危險偵測。

雖然 OWL 是以 XML 的形式儲存,而 XML 強調是一種人類與電腦都方便閱讀的格式,但如果其中包含了複雜的 tags,對於人類的閱讀也不是很方便!目前有一套圖形化工具 Protege,提供方便使用者修改 OWL,並且很容易的 maintain。透過這類型工具的協助下,我們可以很容易的撰寫出 OWL!

OWL 使知識具有語意,是來自於其本身提供的 restriction,使用 OWL 中定義的 restriction,使得我們撰寫出的 ontology 能具有嚴謹的關係,例如:inverseOf、disjoinWith 等,電腦可以透過 restriction 推導出語意關係。舉例來說:人在房間,房間屬於房子的一部分,房子與家等價,所以人在家中。這類型的推導來自於 description language (DL) 的定義,但是這樣的推導關係僅限於在現有的知識中,對於產生新的知識卻是沒有辦法的!所以又衍生出新的推論語言 SWRL,提供 first-order logic (FOL) 也就是一階邏輯,補足 OWL 中無法自行產生新知識的不足,SWRL 針對 OWL 提供比前身 RuleML 更好的結合性,讓 rule 與 knowledge 容易的結合,使得 maintain OWL+SWRL 可以更容易達成。

SWRL 其實也是一種 XML-based 的表示方法,也因為要直接撰寫出 XML 實為不易,Protege 也提供了 SWTLTab plug-in 協助使用者開發,使用者在 Protege 撰寫 SWRL 是以 FOL 形式撰寫,例如:father(x,y) ^ brother(x,z) -> uncle(z,y) 表示 x 是 y 的 father,x 與 z 是 brother,所以推論出 z 是 y 的 uncle。

在這裡我只想要淺淺的帶過 ontology 的概念,以後有機會在深入探討,不過還是提供一些有用的 reference:

Ontology Development 101: A Guide to Creating Your First Ontology
這篇論文主要描述如何設計與開發 ontology,對於初學者很有幫助,文章中並以簡單的範例來帶領我們開發一個 domain ontology。