以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  推理出来的triple对下一步推理的影响?[求助]  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=76043)


--  作者:dulm
--  发布时间:7/15/2009 10:25:00 PM

--  推理出来的triple对下一步推理的影响?[求助]
我在OWLMINI的规则集内加了条规则
[rulefile1: (?a test:interestOf ?b), (?c rdfs:subClassOf ?b) -> (?a test:interestOf ?c)]


TBOX
B subclassof A
test:interestOf 是 test:tinyInterestOf 的父属性

(1)
有ABOX
cc test:interestOf  A

可以推出
cc test:interestOf  B

(2)
有ABOX
cc test:tinyInterestOf  A

可以推出
cc test:interestOf  A
但是没有推出
cc test:interestOf  B


这看似是推理出来的triple对后续推理无效。就是推理出来的cc test:interestOf  A没起作用。
但是在第一种情况中我加了C subclassof B.可以推出cc test:interestOf  C。这说明推理出来的C subclassof A起作用了。

迷惑啊,原因是什么?还有怎么能让jena在情况2中推理出cc test:interestOf  B?


--  作者:iamwym
--  发布时间:7/16/2009 2:09:00 PM

--  
楼主搞混了instance和class的区别,abox里面怎么去定义cc和一个class的关系呢?假设你说cc是一个instance,那么cc test:interestof A是不成立的,必须是一个cc test:interestof aa,aa是一个instance。而如果cc是一个class,那么你这个abox定义就完全是不合法的。
--  作者:dulm
--  发布时间:7/16/2009 6:45:00 PM

--  
以下是引用iamwym在2009-7-16 14:09:00的发言:
楼主搞混了instance和class的区别,abox里面怎么去定义cc和一个class的关系呢?假设你说cc是一个instance,那么cc test:interestof A是不成立的,必须是一个cc test:interestof aa,aa是一个instance。而如果cc是一个class,那么你这个abox定义就完全是不合法的。

http://bbs.w3china.org/dispbbs.asp?boardID=2&ID=70225

我是特地这么定义的。
在protege里也不可以直接写cc test:interestof A,因为A是class,我都是直接建一个和A的URI相同的resource来引用的。因为URI相同了,在RDF里又都是resource所以对推理也没影响。

而且jena的推理应该不管abox和tbox的区别的,只考虑符合rule的body的triple是否存在,如存在就添加head的triple的。
我现在应该怎么做才能让它顺利推理出来?


--  作者:dulm
--  发布时间:7/17/2009 11:09:00 PM

--  
只能改成两次推理才行了,在第一次的owl普通rule推出的ontmodle上,再用自己的rule推理一次。

或者把规则改成后向的。原理与上面推理两次类似,jena的“前后混合推理”是在前向推理的基础再作后向推理,也保证了前向推理出来的cc test:interestOf  A在后向推理中必然起作用。

http://bbs.w3china.org/dispbbs.asp?boardID=2&ID=72508
用这两种方法这里第4条的问题还存在,就外层推理出来的triple不会触发内层的规则。


但是还是不清楚不分内外层,所有rule混在一起推一次为什么会不起作用

[此贴子已经被作者于2009-7-18 0:13:07编辑过]

--  作者:Humphrey
--  发布时间:7/18/2009 10:58:00 AM

--  
没做过这么复杂的,但是好像跨越类的层次进行推理是不能一步实现的。
就像查询一样,由A到B,再从B到C那么它只能按照这样的“路径”来走。如果直接就从A跳到C就不行了,这个过程应该是反映在程序中的。不知道楼主说的和我说的是不是一回事儿。
如果楼主有了更好的实现方法别忘了给我展示一下啊!
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
2,768.066ms