以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  OWL的存储方法的选择[讨论]  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=20862)


--  作者:jiexincao
--  发布时间:8/3/2005 11:01:00 AM

--  OWL的存储方法的选择[讨论]
目前对于OWL(包括其他的本体语言)的存储的方法似乎有三种:
1.纯文本,如OWL文件;
2.数据库;
3.专门的管理工具。

其中纯文本的方式似乎最简单又最复杂:简单是因为使用工具如Protege可以直接生成OWL文件,并且我们可以直接使用protege对所建立的OWL文件进行管理。当然我们也可以使用jena进行开发。采用这种方式对于OWL的建立与维护、推理、查询均需要也有工具的支持或者自行使用jena开发。

数据库方式:protege和jena都支持将本体放到数据库中进行存储,其他的还有一些软件,比如说3store(http://www.aktors.org/technologies/3store/) 提供一些C语言库实现使用MySQL存储管理RDF,还提供其他的一系列的功能。

专门的管理工具:目前也有一些开源软件比如说OMM(http://www.ontotext.com/omm/index.html)支持对RDF、OWL的存储管理,还提供各种接口,可以使用查询语言对RDF或者OWL进行查询。

这三种方式似乎各有优点,我们究竟该选择哪一种呢?当然这些选择需要基于特定的应用背景,请大家来讨论讨论:什么样的情况该选择怎样的存储方式,这几种存储方式还有哪些优缺点。



--  作者:zhenchao0120
--  发布时间:12/30/2005 6:24:00 PM

--  
ding
--  作者:jiachong
--  发布时间:12/30/2005 8:49:00 PM

--  
前两种了解一点
感觉各有用途
xml表示方式适用于直接的表示和存储
数据库方式适用于基于本体知识查询的应用(例如用来辅助信息的描述和检索),直接对数据库三元组查询速度比较快
--  作者:jessica_w3
--  发布时间:3/3/2006 12:52:00 AM

--  
汗,现在就只摸过纯文本滴


--  作者:dpyk
--  发布时间:3/3/2006 1:22:00 AM

--  
好主题,值得关注
--  作者:surel
--  发布时间:3/4/2006 3:16:00 PM

--  
这个问题有提过,到底取何种存储方式呢?
个人觉得如果存储在关系数据库中,是不是与共享矛盾?
期待大家讨论。。。。。。
--  作者:qsz888_2006
--  发布时间:3/5/2006 11:10:00 PM

--  
这个问题期待着高手的解答,我现在刚开始看!!但是对于jena解析owl,rdf文件不是很懂!还有rdql,sparql有甚区别阿?
--  作者:evenbetter
--  发布时间:3/15/2006 10:54:00 AM

--  
个人感觉还是使用文件的方式比较好,.owl文件是存储本体的一个标准
--  作者:jpz6311whu
--  发布时间:3/15/2006 12:24:00 PM

--  
如果数据量小,哪种都无所谓吧。对于海量数据本体库,恐怕数据库还是比较好的持久化方式,特别在I/O效率上面
--  作者:trureal
--  发布时间:3/15/2006 4:30:00 PM

--  
有些文章提到可以把protege 建立的本体库 加载到MySQL数据库中,是不是就说明用一般的数据库就完全可以表示OWL表示的本体关系了呢?迷惑中......
--  作者:awh1979
--  发布时间:3/15/2006 5:00:00 PM

--  
现在很多文章都介绍了关于RDF/OWL的存储。目前比较流行的还是借用关系数据库的技术,将本体不失语义存放在数据库中,主要分为水平存放和垂直存放,两种方式要建的关系表是不一样的。存放在关系数据库中的最大好处是,便于查找,可存放大本体,查询效率高等。但是存在本体查询语言到SQL的转换问题。用文本存放通常比较简单,但是适合本体比较小的时候,如果很大则会效率比较低,而且不适合本体大规模应用的情况。还有的人用基于图的面向对象数据库来存放,个人认为这不是发展方向。请大家批评指正!
--  作者:evenbetter
--  发布时间:3/16/2006 9:54:00 AM

--  
个人感觉关系数据库之所以可以用来存储本体是因为本体的相关理论还不够成熟
关系数据库从诞生之日就不是一个本体应有的存储方式,
等本体的相关研究完善了之后,很可能就会出现:语义数据库之类的了

现在来说,应该还是以.owl文件的方式存储比较好
因为数据库之所以好用是因为数据库的发展历史用几十年了,围绕它的中间软件有很多,使得对这个格式化的数据的存储效率很高,owl文件也是格式化的数据,只要有人愿意在这方面下功夫,难保以后owl文件(数据库的实际存储也是以文件的形式)的存储效率要和数据库一样高


--  作者:englefly
--  发布时间:3/16/2006 10:43:00 AM

--  
12 楼的说得有理
--  作者:baojie
--  发布时间:3/16/2006 2:22:00 PM

--  
数据库存储只是一种语法表现,和XML,三元组,DL抽象描述一样,不过是OWL的描述方式。

打个比方说,一篇文章可以写在纸上,记录在光盘上,刻在石头上。这不意味着纸,光盘,石头具有表达自然语言的能力。


--  作者:baojie
--  发布时间:3/17/2006 7:24:00 PM

--  
以下是引用evenbetter在2006-3-16 9:54:00的发言:
因为数据库之所以好用是因为数据库的发展历史用几十年了,围绕它的中间软件有很多,使得对这个格式化的数据的存储效率很高,owl文件也是格式化的数据,只要有人愿意在这方面下功夫,难保以后owl文件(数据库的实际存储也是以文件的形式)的存储效率要和数据库一样高

OWL-DL的存储在现有理论框架下绝无可能达到数据库的效率。要知道,SQL查询可以有O(log(n))的时间复杂性。即使是最简单的ALC描述逻辑,也是多项式空间复杂性,至少是指数时间的复杂性。更复杂的语言如SHOIQ(D) i.e. OWL-DL 要NExpTime。这个内在的矛盾,恐怕不是短期可以解决的。


--  作者:djwhn
--  发布时间:3/18/2006 11:12:00 AM

--  
保存在MySQL中,查询的界面比较乱,应该也可以保存在SQL SERVER数据库中吧
--  作者:searchwang
--  发布时间:3/18/2006 9:01:00 PM

--  
关注
--  作者:evenbetter
--  发布时间:3/27/2006 11:28:00 AM

--  
以下是引用baojie在2006-3-17 19:24:00的发言:
[quote]以下是引用evenbetter在2006-3-16 9:54:00的发言:
  因为数据库之所以好用是因为数据库的发展历史用几十年了,围绕它的中间软件有很多,使得对这个格式化的数据的存储效率很高,owl文件也是格式化的数据,只要有人愿意在这方面下功夫,难保以后owl文件(数据库的实际存储也是以文件的形式)的存储效率要和数据库一样高
[/quote]

OWL-DL的存储在现有理论框架下绝无可能达到数据库的效率。要知道,SQL查询可以有O(log(n))的时间复杂性。即使是最简单的ALC描述逻辑,也是多项式空间复杂性,至少是指数时间的复杂性。更复杂的语言如SHOIQ(D) i.e. OWL-DL 要NExpTime。这个内在的矛盾,恐怕不是短期可以解决的。


呵呵,是啊,本体内在的逻辑性本身就要比数据库那种简单的表逻辑要复杂的很多,所以这也是我认为owl用数据库来存储不合适的原因

等吧,总会有种比较好的语义数据结构的


--  作者:kaola
--  发布时间:4/3/2006 9:53:00 PM

--  
不错,有见解
--  作者:she
--  发布时间:4/4/2006 10:04:00 AM

--  
1.如果本体的概念和实例都比较小的话,像我们一般做实验系统,采用文件存储也许够了,而且一般的开发工具JENA和Sesame都会将其导入到内存中,速度自然要比数据库存储要快很多,但是有时候即使这样,如果要支持高级别的推理,就回碰到内存溢出的问题,本人用Jena就曾碰到过out of memory的异常。

2.如果是海量数据的话,肯定是要选择数据库存储,这种方式对本体的大小没有限制的,但是要牺牲速度为代价,进行数据库存储并不是要我们去设计数据库结构,各种开发工具都有自己优化的数据库存储结构。

3.RDQL和SPARQL的区别:RDQL是Jena最初支持的RDF查询语言,但是RDQL有很多方面的限制性,而且Jena开发者已明确在后续的Jena的版本中只是会保留其原有功能,不会对其优化或增强;SPARQL是w3c的working draft,很可能成为推荐标准,其是综合各种查询语言如RQL,D2RQ,SeRQL基础上的,其功能是很强大,并且得到Jena开发者大力支持。所以如果可能的话,应该尽量选择SPARQL。
关于rdf的各种查询语言的性能比较,推荐一篇文章:http://www.aifb.uni-karlsruhe.de/WBS/pha/rdf-query/rdfquery.pdf

以后偶的一些看法,欢迎拍砖!


--  作者:guopanhong
--  发布时间:4/4/2006 5:47:00 PM

--  
楼上说的非常有理,向你学习
--  作者:gxbt
--  发布时间:4/7/2006 5:26:00 PM

--  
谢谢
--  作者:anew88
--  发布时间:4/10/2006 9:32:00 AM

--  
以下是引用awh1979在2006-3-15 17:00:00的发言:
现在很多文章都介绍了关于RDF/OWL的存储。目前比较流行的还是借用关系数据库的技术,将本体不失语义存放在数据库中,主要分为水平存放和垂直存放,两种方式要建的关系表是不一样的。存放在关系数据库中的最大好处是,便于查找,可存放大本体,查询效率高等。但是存在本体查询语言到SQL的转换问题。用文本存放通常比较简单,但是适合本体比较小的时候,如果很大则会效率比较低,而且不适合本体大规模应用的情况。还有的人用基于图的面向对象数据库来存放,个人认为这不是发展方向。请大家批评指正!


awh1979,你好,你有没有搞过本体查询语言到SQL的转换吗?我正在想这个事,多多交流:)如果有相关文章,可以的话发我一份,anewbaba@163.com,谢谢。
--  作者:newphoneix
--  发布时间:4/10/2006 10:03:00 AM

--  
借用人气问一下:
关于本体存储粒度的问题 。
就是在上面提到的三种工具,是不是能够对本体进行很好地管理.
谢谢

(背景:基于本体的答疑系统中,对领域知识的存储。因为搜索算法在不同的本体的粒度下面可能产生的效果也不同(没有经过实验,只是一种猜测))


--  作者:zopey_li
--  发布时间:4/11/2006 10:04:00 AM

--  
对于本体构建当中,protrge,gena,sesame,RDQL,SPARQL等都扮演了一种什么样的角色?给我的理解就是PROTEGE就是构建本体的,可以在里面输入一些东东而已。我们构建的目的是不是最终的查询,也就是具体的应用呢?可是怎么查询,用什么语言,在哪查?


有哪位能给个说明,指点一下!谢谢。老师一催再催,我快不行了,55555~~~~


--  作者:cxh0624
--  发布时间:11/9/2006 10:58:00 AM

--  
我困惑的是,把本体存入到数据库后,该如何操作撒。。就当操作数据库一样操作吗?
只能存到MYSQL吗?网络上几乎找不到存到其他数据库的讲解?真郁闷撒!!!
--  作者:myxiangrong2000
--  发布时间:11/19/2006 11:23:00 AM

--  
关注中
谢谢!!
--  作者:coco
--  发布时间:11/20/2006 8:47:00 PM

--  
好啊,支持
--  作者:yongzhu
--  发布时间:11/20/2006 10:02:00 PM

--  
好帖子,收藏了
--  作者:fqyuwhb
--  发布时间:11/21/2006 9:09:00 AM

--  
正在为OWL导入数据库发愁哪!
owl的数据量大的话,用protege打开奇慢. 而且数据量超过几M,就会出现heap space的问题.

所以考虑通过protege的数据库API接口,将OWL直接导入数据库.
Class OWLDatabaseModel 这个class看起来挺复杂的,也不知道是不是只要加载这个包,就可以导入数据库了.

不知道谁对OWL海量语料导入数据库(象SQL之类)有经验?
欢迎赐教啊!!!!


--  作者:jiachong
--  发布时间:11/22/2006 9:59:00 AM

--  
现在讨论本体的数据库存储是不是有点超前了
面向对象技术发展了这么多年,对象的数据存储还是要靠关系数据库,面向对象数据库到现在也没成熟吧
--  作者:fqyuwhb
--  发布时间:11/22/2006 10:51:00 AM

--  
讨论本体的数据库存储 是 应用的需要.
因为一个可以实用的本体数据库 其数据量必然是十分庞大的.
为了查询和处理的方便,采用数据库存储应该是一条必然之路.

有在这条路上走过的兄弟姐妹,麻烦指点一二..

谢谢


--  作者:huilangjiejie
--  发布时间:1/26/2007 4:04:00 PM

--  
本体用于信息检索,构建完本体之后,必须把本体导入数据库中吗,我导入mysql中,为什么一个实例表中却出现了好多数据,然后再具体怎么实施呢,学习中...
--  作者:YinglongMa
--  发布时间:2/2/2007 9:23:00 PM

--  
jena也可以完成这样的事情!海量数据不得不选择persistent 存储方式,至于小数量的文本则可以考虑考虑。
--  作者:YinglongMa
--  发布时间:2/2/2007 9:25:00 PM

--  
jena也可以完成这样的事情!海量数据不得不选择persistent 存储方式,至于小数量的信息则可以考虑考虑文本方式。
--  作者:conan_bit
--  发布时间:2/2/2007 9:41:00 PM

--  
以下是引用huilangjiejie在2007-1-26 16:04:00的发言:
本体用于信息检索,构建完本体之后,必须把本体导入数据库中吗,我导入mysql中,为什么一个实例表中却出现了好多数据,然后再具体怎么实施呢,学习中...


我也做到了这部,不知道该怎么对数据库进行操作.
另外,还想问问各位,本体和本体的实例是否应该分开存储呢?比如:本体存在文本中,而实例存储在数据库中.因为实例可能很多.但是这样使用Jena对本体进行查询后,如何再从数据库中得到实例呢?
初学者,可能有很多理解的不对,还望各位前辈不吝赐教啊!
--  作者:dove_lee2008
--  发布时间:2/3/2007 5:13:00 PM

--  
本体数据不会象现在关系数据库中处理的事务数据一样会海量的扩展,我认为,应该建立更复杂的轻量级数据存储机制来实现.
--  作者:flyingFang
--  发布时间:2/12/2007 5:44:00 PM

--  
期待新型存储机制的到来
--  作者:wymautumn
--  发布时间:3/28/2007 10:22:00 PM

--  
呵呵
我刚刚接触本体
--  作者:wjwenoch
--  发布时间:4/6/2007 6:37:00 AM

--  
好像现在还是直接文本存取的比较多吧。。。
--  作者:zj007zj007
--  发布时间:4/6/2007 8:37:00 AM

--  
新生事物总是问题多多啊。
--  作者:wskfn
--  发布时间:4/6/2007 7:45:00 PM

--  
ding
--  作者:whale
--  发布时间:4/11/2007 11:24:00 PM

--  
个人经验:50MB一下的放在内存即可,256MB内存也可以胜任!
               50MB以上的放在关系数据库里边,用Jena带MySQL,用SPARQL查。
--  作者:hunterdong
--  发布时间:7/23/2007 5:01:00 AM

--  
关于轻量级的存储,让我联想起ldap!

除了轻量级目录访问协议,不知道还有没有重量级!


--  作者:todingding
--  发布时间:8/3/2007 7:43:00 PM

--  
我认为领域本体本身(包括实例本身)适宜存储在OWL文件中,而我们用本体的目的,存储与本体相关的知识内容应该存储在关系数据库中。
--  作者:笑雨轩主
--  发布时间:8/7/2007 10:33:00 AM

--  
大规模的应用RDF or OWL资源,放在relational database肯定是不好的,RDF 的triples如果放在表里那表有多长,多窄,插入删除,查询的效率有多低啊.更何况,数据模式也不一样啊,从RDF MODEL到relational model 的映射,要损失很多RDF数据的特性啊.文件就更成问题啦,一个复杂点的查询,效率还不慢死啦.
--  作者:starrainlove
--  发布时间:11/1/2007 10:05:00 PM

--  
受不了了,我是新人,越看越糊涂,那位大侠整理一下给个清晰的解释啊
--  作者:topyn
--  发布时间:11/4/2007 1:48:00 AM

--  
在OBO Download Matrix(http://www.berkeleybop.org/ontologies/),他们很多生物医学方面的本体都采用OBO格式存储,其中一个疾病本体,OBO格式15M,OWL格式142M,当时我用Protege打开这个OWL文件,把Protege的heap设为1G溢出,设到1.5G可以打开,但是等了n分钟,Protege共载入了185万个三元组,之后开始计算,实在等不住了,就放弃了。
而这个15M OBO本体使用OBO-Edit打开很快(只要几秒钟)。

感觉本体到实际应用还有段距离,有太多的问题还没有解决。


--  作者:yujianchi
--  发布时间:11/13/2007 11:24:00 PM

--  
我用过一个RDF API, 叫做SemWeb, 它后台的数据库支持原理是这样的
一共有3个表, 第一个叫_statements, 第二个_entities, 第三个 _literals
entities表存储所有的entity, 包括subject, predicate 和有URI的object,以blob的形式,literal存储所有的literal值。 Statements表是一个辅助表,里面5列,subject, predicate,objecttype, object, meta。每个subject predicate 和object的值就是指向另外两个表的ID, objecttype表示是URI资源还是Literal. 这种结构比较灵活,添加任何statement不需要对表作更改,搜索的效率也很高
--  作者:nana1812
--  发布时间:8/29/2008 4:46:00 PM

--  
学习中
--  作者:hrballen
--  发布时间:8/31/2008 4:09:00 PM

--  
把本体存入数据库后,在添加时还得通过对本体操作,然后重新存入数据库,还是直接就可以对数据库操作?我往数据库倒入后,看看了看里面的表,感觉很乱,不知存入数据库究竟有什么好处?请高手指教
--  作者:twwwgauts
--  发布时间:9/9/2008 9:23:00 PM

--  
有不少观点值得进一步学习,顶
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
218.750ms