Meego上Semantic social desktop的基礎Ontology(學習筆記)

一:Ontologies ,tracker 的簡介

當今的Linux桌面應用開發,信息基於應用來組織和管理,每個應用保存本應用定義的數據格式 和存儲在各自的目錄中,每個應用數據是單獨的信息孤島。這種現狀導致應用間的數據聯合實現非常苦難或者說是不可能。於是在整個Desktop範圍內搜索應 用數據,重組應用,提供顯示用戶最近使用的文件等功能難以實現。

解決的方法是在應用間共享數據,統一數據格式定義(the same schema),構建一個統一的存儲中心,各種應用按照統一的數據格式定義對數據進行增刪改查操作,一類應用僅僅從數據存儲中心獲取數據(例如RSS Reader),一類應用負責將數據插入數據存儲中心,還有一類應用將同時從數據存儲中心讀/寫,例如 記事本程序。這種統一的數據格式定義叫做Ontology. 該技術作爲Tracker桌面搜索引擎的基礎,爲Meego、Maemo所用,相關介紹可以下載資源http://download.csdn.net/source/2388213進行學習。

二:Ontologies
Ontology是對現實世界的抽 象定義模型,Ontology主要由概念:concepts(又叫Classes和Categories,下面有時稱爲類)和屬 性:Properties 組成。concept是現實世界抽象的實體,Properties爲一個基本的類型取值type(String 或者Integer)或者表示鏈接兩個concept,後者表示一個concept爲另一個concept的某個Property的取值。每個 Propertiy都有一個domain和range,用以表達那個concept可以擁有此property和什麼concept/type能夠作爲其 取值。

舉例來說:對RSS進行建模,FeedChannel和FeedMessage是兩個concepts。前者表示訂閱的URI,後 者表示RSS的消息項。這兩個concept使用一個property:hasEntry關聯起來,hasEntry的domain是 FeedChannel,range是FeedMessage。

繼承
在ontology中,我們可以定義concept之間和 property之間的繼承關係,如果我們將一個concept定義爲另一concept的子concept,它將擁有本身的所有properties以 及從父親上面定義的properties。

在實踐中,“concept的父親”用在的查詢中歸類相似的“事物”,例如,Message爲 FeedMessage的父親,我們可以請求FeedMessage的所有實例,也可以請求FeedMessage的父親Message的所有實例。在後 一種情況中,我們獲取了Message的所有實例以及其所有兒子及兒子派生的concept包括FeedMessage的所有實例。請參考圖:

Properties 也有繼承,相對於父property,子property將重新限制其domain和range域。子property的range/domain兩個域 的取值只能是父親Property定義的concept/type範圍,例如,可以將父親定義的concept換成子concept。此處有一個樣例圖:


我 們定義了一個父類 InfomationElement,和兩個子類Document 和Media。 父類有一個property :useageCount,domain/range分別爲InfomationElement/Integer,我們繼承該property,修正該 property的含義,我們爲Document創建了一個子屬性viewCount和爲Media創建了一個子屬性playCount。對 viewCount來說,其domain取值從InfomationElement修正爲Document,對playCount來說其domain修正 爲Media。

從上面分析可以看出,我們提供子Property來更精確的修正父property的含義,子property“覆蓋”了 父property的定義。例如,如果設置playCount=3,則其usageCount=3。在查詢中,對父property的請求包含了對子類的 請求。如果查詢請求查詢所有usageCount大於3的對象,我們將能夠獲得所有Media對象其playCount大於3 +所有Document對象其viewCount大於3+所有的InfomationElement對象其usageCount大於3。

三:RDF,URI, 以及Ontology的序列化技術

在生成ontology的真實數據數據之前,我們需要學習一下RDF。
RDF(Resource Description Framework:http://www.w3.org/TR/REC-rdf-syntax/#statements)是一種通用語言,用於描述 web的信息。在RDF中,其基本是三個概念組成的三元組:主體(subject)、賓語(predicate)、取值(object),表 示:"subject 有一個predicate 取值爲 object " 例如:“http://www.example.org/index.html   has a creator whose value is John Smith ”,紅色的字體部分爲三元組。由於中文翻譯不一定準確,下面沿用英文單詞說法。

例如,下圖使用RDF表達爲:


# These are just triplets. This is NOT turtle or any defined format
#
# Subject                             Property/predicate                Object
-----------------------------------   ------------------                -------------------------------------
<http://maemo.org/news/planet-maemo/>   <http://a.org/hasEntry>             <http://zee-nix.b.../...-released.html>

<http://zee-nix.b.../...-released.html> <http://a.org/creationDate>         "2009-06-03T05:17:00"

<http://zee-nix.b...-released.html>     <http://a.org/title>                "GUPnp 0.12.8 release"

 

Ontology的用RDF進行表達,主語和賓語使用uri來唯一表達,例子如下:

 

可以寫成:

 

# FeedChannel is a Concept (Class in RDF)
# Replacing "http://www.w3.org/2000/01/rdf-schema#" with "rdfs:"
<http://a.org/FeedChannel> rdfs:type <http://www.w3.org/2000/01/rdf-schema#Class>
# FeedMessage is a Concept (Class in RDF)
<http://a.org/FeedMessage> rdfs:type <http://www.w3.org/2000/01/rdf-schema#Class>
# hasEntry is a Property, with FeedChannel as domain, and FeedMessage as range
<http://a.org/hasEntry> rdfs:type <http://www.w3.org/1999/02/22-rdf-syntax-ns#Property>
<http://a.org/hasEntry> rdfs:domain <http://a.org/FeedChannel>
<http://a.org/hasEntry> rdfs:range <http://a.org/FeedMessage>

 

一般RDF有向圖可以選用XML作爲序列化描述語言,由於XML描述太複雜並且解 釋的成DOM樹效率不高和佔用的空間較大,Ontologies使用了一種更加緊湊的語言Turtle,按照 Ontology文檔的說法,Turtle相比XML更加易讀、易解釋(不需要遍歷完整個文檔才能生成DOM樹)、並且可以在文件尾部添加新的三元組項 (XML文本不行)。

1、URIS放置在"<>"之間
2、每個三元組一行以"."結尾。
3、有唯一的 predicate "a",用以表示某一對象(資源)是某個概念Concept(Class)的實例
4、同一個subject的多個三元組可以 簡化,以“;”分隔每個三元組,寫法如下:
 <file:///home/ivan/a.mp3> a nmm:MusicPiece ;
                           nmm:artistName "Test song 1" ;
                           nmm:length 120 .
5、同一個subject的同一個 predicate的多個三元組可以簡化,以“,”分隔。
<file:///home/ivan/a.mp3> a nmm:MusicPiece, nfo:FileDataObject ;
                           nmm:artistName "Test song 1" ;
                           nmm:length 120 .

 

主要原文資料:http://live.gnome.org/Tracker/Documentation/AppDevelopersManual

發佈了46 篇原創文章 · 獲贊 10 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章