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
-----------------------------------   ------------------                -------------------------------------
               

         "2009-06-03T05:17:00"

                     "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:"
rdfs:type
# FeedMessage is a Concept (Class in RDF)
rdfs:type
# hasEntry is a Property, with FeedChannel as domain, and FeedMessage as range
rdfs:type
rdfs:domain
rdfs:range

 

一般RDF有向图可以选用XML作为序列化描述语言,由于XML描述太复杂并且解 释的成DOM树效率不高和占用的空间较大,Ontologies使用了一种更加紧凑的语言Turtle,按照 Ontology文档的说法,Turtle相比XML更加易读、易解释(不需要遍历完整个文档才能生成DOM树)、并且可以在文件尾部添加新的三元组項 (XML文本不行)。

1、URIS放置在"<>"之间
2、每个三元组一行以"."结尾。
3、有唯一的 predicate "a",用以表示某一对象(资源)是某个概念Concept(Class)的实例
4、同一个subject的多个三元组可以 简化,以“;”分隔每个三元组,写法如下:
  a nmm:MusicPiece ;
                           nmm:artistName "Test song 1" ;
                           nmm:length 120 .
5、同一个subject的同一个 predicate的多个三元组可以简化,以“,”分隔。
a nmm:MusicPiece, nfo:FileDataObject ;
                           nmm:artistName "Test song 1" ;
                           nmm:length 120 .

 

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

你可能感兴趣的:(semantic,meego,social,properties,domain,存储)