发新话题
打印

语义web和OWL的方法学大摆迷魂阵

语义web和OWL的方法学大摆迷魂阵

经过这几天研究,开发语义web的全过程业已搞清,jena并非应用程序,而是API( 应用程序编程接口,Application Programming Interface)。所以开发语义web的全过程:

(1)开发java程序;利用(2)jena接口;(3)显示,建立,阅读,操作推理XML,RDF,OWL等.

TOP

语义web和OWL的方法学大摆迷魂阵

Jena is a Java framework for building Semantic Web applications. It provides a programmatic environment for RDF, RDFS and OWL, SPARQL and includes a rule-based inference engine.

http://jena.sourceforge.net/

Introduction to Jena

 http://www-128.ibm.com/developerworks/java/library/j-jena/




此帖由 linforest 在 2006-09-24 22:02 进行编辑...
LOINC International @ Regenstrief Institute
CLISOL @ CHISS
LOINC Introduction @ OpenClinical
LexGrid Project @ Mayo

TOP

语义web和OWL的方法学大摆迷魂阵

接触Semantic Web的时间还不是很长,所以现在写的这方面内容算是笔记性质,很可能存在很多误解,欢迎指出或讨论

一般来说,我们在Protege这样的编辑器里构建了本体,就会想在应用程序里使用它,这就需要一些开发接口。用程序操作本体是很必要的,因为在很多情况下,我们要自动生成本体,靠人手通过Protege创建所有本体是不现实的。Jena是HP公司开发的这样一套API,似乎HP公司在本体这方面走得很靠前,其他大公司还在观望吗?

可以这样说,Jena对应用程序就像Protege对我们,我们使用Protege操作本体,应用程序则是使用Jena来做同样的工作,当然这些应用程序还是得由我们来编写。其实Protege本身也是在Jena的基础上开发的,你看如果Protege的console里报异常的话,多半会和Jena有关。最近出了一个Protege OWL API,相当于对Jena的包装,据说使用起来更方便,这个API就是Protege的OWL Plugin所使用的,相信作者经过OWL Plugin的开发以后,说这些话是有一定依据的。

题目是说用Jena处理OWL,其实Jena当然不只能处理OWL,就像Protege除了能处理OWL外还能处理RDF(S)一样。Jena最基本的使用是处理RDF(S),但毕竟OWL已经成为W3C的推荐标准,所以对它的支持也是大势所趋。

好了,现在来点实际的,怎样用Jena读我们用Protege创建的OWL本体呢,假设你有一个OWL本体文件(.owl),里面定义了动物类(http://www.zoo.com/ont/Animal,注意这并不是一个实际存在的URL,不要试图去访问它),并且它有一些实例,现在看如下代码:

OntModel m = ModelFactory.createOntologyModel();
File myFile = ...;
m.read(new FileInputStream(myFile), "");
ResIterator iter 
= m.listSubjectsWithProperty(RDF.type, m.getResource("http://www.zoo.com/ont/Animal"));
while (iter.hasNext()) {
    Resource animal 
= (Resource) iter.next();
    System.out.println(animal.getLocalName());
}

和操作RDF(S)不同,com.hp.hpl.jena.ontology.OntModel是专门处理本体(Ontology)的,它是com.hp.hpl.jena.rdf.model.Model的子接口,具有Model的全部功能,同时还有一些Model没有的功能,例如listClasses()、listObjectProperties(),因为只有在本体里才有“类”和“属性”的概念。

上面的代码很简单,从ModelFactory创建一个OntModel,从指定文件把模型读到内存里。再下面的代码是一个例子,作用是取出模型中所有Animal的实例(Individual,也叫个体),并打印它们的名称。要从OntModel里取实例,也可以用listIndividuals()方法,只不过你得在得到的实例中判断它们是不是Animal的实例,我觉得不如用上面这种简易查询的方式来得方便。

Jena里扩展了很多Iterator,比如ResIterator、StmtIterator和NodeIterator等等,刚开始用会觉得很别扭,好象还不如都用java标准的Iterator,不知道Jena的设计者是怎么考虑的。要熟练掌握还是得对整个Jena的API有全局掌握才好。

在循环里,我们得到的每个元素都是一个Resource,因为本体里的任何东西都是资源,不论你想得到Subject、Property还是Object,在Jena里实际得到的都是资源(Resource),在Jena里,Property是Resource的子接口,而Jena并没有Subject或Object接口。(注:在OWL本体中,Subject->roperty->Object组成一个三元组,例如:张小刚->父亲->张大刚;或者:绵羊多利->rdf:type->动物,rdf:type是一个特殊的属性,表示前者是后者的实例)

暂时先写到这,关于在本体中引入其他本体和使用推理,下次继续。

posted on 2005-01-06 19:39 八进制
LOINC International @ Regenstrief Institute
CLISOL @ CHISS
LOINC Introduction @ OpenClinical
LexGrid Project @ Mayo

TOP

语义web和OWL的方法学大摆迷魂阵

 

时间仓促,而且这个问题包括的知识域太广,很多东西也都还在探索。

上文w3china的图片还是比较形象的。

http://bbs.w3china.org/dispbbs.asp?boardID=3&ID=33927

这个帖子也不错,虽然也有一些偏颇。

个人理解,首先是网络,URL能够标志数据唯一性,这个很重要。然后XML,把数据和结构分开了。XML对数据结构的定义,比关系型数据库要灵活,这也是早期XML存储成为问题的原因。好像当时东软的电子病历,就是存成一个个XML文件。

后面都是说结构和设计的问题,每次对结构的定义都不一样。 不同的模型可以算是结构的多种表现。

RDF是否OO,OO了多少,可以看http://www-128.ibm.com/developerworks/cn/xml/rdf/part8/index.html

RDF的一些数学方法,设计模式:

http://www.w3.org/2001/sw/BestPractices/OEP/n-aryRelations-20040623/

缺陷肯定是有的,一颗种子长成了树,这个thing,你是定义为种子,还是定义为树。OWL在时序上的一些建模方法,目前大家还在探讨。

OWL,有两个定义,一个是指ontology web language, 一个是指owl file,基于这种语言书写形成的规范。这里我们讨论第一种。

Owl RDF的关系,援引w3c的解释:

OWL Full can be viewed as an extension of RDF, while OWL Lite and OWL DL can be viewed as extensions of a restricted view of RDF. Every OWL (Lite, DL, Full) document is an RDF document, and every RDF document is an OWL Full document, but only some RDF documents will be a legal OWL Lite or OWL DL document.

 from <http://www.w3.org/TR/owl-features/>

OWL 是否等于OO 3GL(generation language)的定义,我没有看到。个人觉得,problem-oriented,还是procedure-oriented, 取决于设计的思路,无法定论。如果dyy兄有这样的文章,也请帖给大家学习。

是否需要一个类似于DBMS的冬冬,取决于你的应用。Protégé基本上目前能够满足大多的应用。目前主要用来做逻辑建模,包括前两天大家做的作业first order logic, 都属于建模的方法学。

法很多,玩模型的,做了一个template,把需要的业务数据抽象好,然后做一个interface ontology,比如patient name是你业务领域的class, textbox是你interface ontologyclass.

那么你需要表现patient name,只需要claim: patient name (class) ->represented by (relationship)-> textbox (class), 解析过后,界面上就可以出现一个textbox.也就是interface ontology的模型,类似于XML的界面编辑器,不过更加严谨。

玩逻辑的,比如逻辑题,所有的逻辑考试,都是随机的从ontology里面去题目和答案,而且维持了题目的内在关联性,成为考试题库,在线问答服务,呵呵。

玩owl数据的,比较原始的玩法,比如把business model做成owl,然后把owl中间的一些class做成数据库的field,完成和数据的存储。或者把你的数据存成一个个RDF文件,然后用sparql query之后转到数据库。

或者使用protégé,自动把owl class生成java class.并不是所有的软件都需要数据库的。

owl的网站多了,随便找一个,看看这个。

http://www.joseki.org/

技术永远是日新月异的。Cerner oracle都在做RDF这方面的研究,但是HP毕竟领先了一步,不知道IBMoracle能否赶上。Cerner 下一代的EMR,包括基因蛋白数据的,由于数据的复杂性,根本无法用ER的数据库去表达,目前比较倾向于RDF

表达错误的,请小土豆补充。




此帖由 南京猿人 在 2006-09-25 00:21 进行编辑...
选咖啡,选拿铁.少喝咖啡,多办事

TOP

语义web和OWL的方法学大摆迷魂阵

小土豆补充:

owl很多时候不是作为数据元的存储方式,而是在于逻辑的分析,长处不是数据存储的速度,而是数据分析,定位一种手段,解决速度之外,无法解决的问题。

owl的数据存储,可以通过jena的数据库来实现(三元?)。http://jena.sourceforge.net/DB/creating-db-models.html

In Jena2, all databases are multi-model and each model is, by default, stored in separate tables. Models may share database tables using the  StoreWithModel option.

选咖啡,选拿铁.少喝咖啡,多办事

TOP

语义web和OWL的方法学大摆迷魂阵

小土豆说,包老师的解说最经典,我们的都太细枝末节,比较糊涂的过程。在这之前,首先要用目前开源的owl editor来开发owl,后面就是您的思路。

(1)开发java程序;利用(2)jena接口;(3)显示,建立,阅读,操作推理XML,RDF,OWL等.

然后来做一系列的应用。关于应用的细节,我们以后在做讨论。

选咖啡,选拿铁.少喝咖啡,多办事

TOP

语义web和OWL的方法学大摆迷魂阵

[quote=南京猿人,2006-09-25 10:05]
小土豆说,包老师的解说最经典,我们的都太细枝末节,比较糊涂的过程。在这之前,首先要用目前开源的owl editor来开发owl,后面就是您的思路。

(1)开发java程序;利用(2)jena接口;(3)显示,建立,阅读,操作推理XML,RDF,OWL等.

然后来做一系列的应用。关于应用的细节,我们以后在做讨论。


[/quote]

最宝贵的是大家合作力量!

总之,到此为止"迷魂阵"已被我们论坛打破。当然我讲的仅是一个原则过程,但语义web已不再神秘。

必定还有很多具体技术和技巧问题需要解决,还需“猿人”等网友积极讨论和介绍经验。

我也会安排时间关注网友提供的每一条建议和经验。




此帖由 老包 在 2006-09-25 10:54 进行编辑...

TOP

语义web和OWL的方法学大摆迷魂阵

已进入编程阶段。年轻人加油啊!袖手旁观永远不会出现语义web,永远不会出现知识整合。

TOP

语义web和OWL的方法学大摆迷魂阵

[quote=南京猿人,2006-09-25 10:05]
小土豆说,包老师的解说最经典,我们的都太细枝末节,比较糊涂的过程。在这之前,首先要用目前开源的owl editor来开发owl,后面就是您的思路。

(1)开发java程序;利用(2)jena接口;(3)显示,建立,阅读,操作推理XML,RDF,OWL等.

然后来做一系列的应用。关于应用的细节,我们以后在做讨论。


[/quote]

是不是必须用java? 能不能用.net? 真不想再学一门语言了。(不过既然包老师都在学,看来还是有必要学的。)

用owl editor开发owl后,还需要用jena建立owl吗?jena能对owl进行什么样的推理?

thx

TOP

语义web和OWL的方法学大摆迷魂阵

http://www.kmconnection.com/DOC100100.htm

The impact of “managing knowledge” must be more than measurable; it must be predictable.

LOINC International @ Regenstrief Institute
CLISOL @ CHISS
LOINC Introduction @ OpenClinical
LexGrid Project @ Mayo

TOP

语义web和OWL的方法学大摆迷魂阵

[quote=laotao,2006-10-09 18:56]

是不是必须用java? 能不能用.net? 真不想再学一门语言了。(不过既然包老师都在学,看来还是有必要学的。)

用owl editor开发owl后,还需要用jena建立owl吗?jena能对owl进行什么样的推理?

thx


[/quote]

恐怕不一定非得JAVA,肯定可用其他语言。jena被认为是接口。但我也刚接触,所知不多。估计用owl editor不能真正达到语义操作和处理的目的。

编了10多年的程序,本来想此生告别编程了,专心理论探讨,编程由年轻人干。但不知不觉又读起语言来了。

我实际上对编程有偏爱,尤其爱C或JAVA语言等,所以动起来就放不下手了,觉得面向对象的思路非常有趣。

TOP

语义web和OWL的方法学大摆迷魂阵

首先,W3没有描述过开发的全过程和进展情况。所以只能是个估计:

语义web比传统HTMLweb无论是意义和难度都不在一个数量级上,也许甚至远远超出了倡导者们的最初想象。但web一词极容易误导大家认为只要用OWL等作好数据原文件(类似HTML文件),就可以轻而易举地用有关的类似I.E打开显示并作语义操作。我相信这方面确实做过不少工作(如pretige等)并还在努力,但远为成熟。不然何以HP公司化大力开发Jena为Java这一基础开发语言提供大量接口?

这仅是我“悟”出的情况,谁也没有清楚地告诉我。我也不想化力气去证明这情况是否属实。

因为“极难”,不是“一般的难”,所以也给我们中国人留下了机会。大家也有机会试试身手。假如象“操作系统”那种领域,我们中国人就很少有机会了。

TOP

语义web和OWL的方法学大摆迷魂阵

Protege + OWL + jena + java看起来是一套不错的知识工程工具, 不过不知道是不是一套标准的或者流行的工具。

我想也可以用Protege + CLIPS + .NET,就是用Protege编辑Ontology,然后导出为CLIPS文件,再由CLIPS进行推理并用.NET制作界面。(Protege提供了对CLIPS的支持,而CLIPS的.NET 6.24版本也已出现http://www.cpbinc.com/clips/viewtopic.php?t=2664

TOP

最近抽空看看JAVA。真的爱上了它。觉得与以前的面向过程的语言大不一样。
物质类、对象类的思想以及把它们视为与一般数据类型(整数类型,实数类型,逻辑数据类型,字符串类型)平等的概念,很有点我们“物数学”的意味。

TOP

不一定非要java,但是目前jena做得最好,而且以后因为java提倡开源,而.net提倡收费。从owl知识建模和共享的角度来看,所以java在后面还要更热门一些。
选咖啡,选拿铁.少喝咖啡,多办事

TOP

发新话题