以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (http://bbs.xml.org.cn/index.asp)
--  『 Semantic Web(语义Web)/描述逻辑/本体 』  (http://bbs.xml.org.cn/list.asp?boardid=2)
----  利用Jena推理,其推理的规则写法?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=2&rootid=&id=75124)


--  作者:mihn
--  发布时间:5/29/2009 9:59:00 AM

--  利用Jena推理,其推理的规则写法?
望各位高手指点下,现有下面以段本体文件:

  <owl:Class rdf:ID="Leaf">
    <rdfs:subClassOf>
      <owl:Restriction>
        <owl:allValuesFrom>
          <owl:Class rdf:ID="Branch"/>
        </owl:allValuesFrom>
        <owl:onProperty>
          <owl:ObjectProperty rdf:ID="is_part_of"/>
        </owl:onProperty>
      </owl:Restriction>
    </rdfs:subClassOf>
  </owl:Class>


现在利用下面的JAVA程序输出处理,输出结果如下:
import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.util.FileManager;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;
import com.hp.hpl.jena.reasoner.rulesys.Rule;
import com.hp.hpl.jena.reasoner.rulesys.GenericRuleReasoner;

import java.util.List;
import java.io.InputStream;

public class reasoner {
public static void main(String[] args) {
  
 String filename="animal_01.owl";
 String spacename="http://www.owl-ontologies.com/Ontology1242798960.owl#";
 String name="Leaf";
  
 InputStream in=FileManager.get().open(filename);
 Model model=ModelFactory.createDefaultModel();
 model.read(in,"");
  
 List rules=Rule.rulesFromURL("file:E:\\Code\\owl1.rules");  
 GenericRuleReasoner reasoner = new GenericRuleReasoner(rules);
 reasoner.setOWLTranslation(true);               
 reasoner.setTransitiveClosureCaching(true);
    
 InfModel infmodel = ModelFactory.createInfModel(reasoner, model);
 infmodel.write(System.out, "N-TRIPLE");
  
 Resource resource_2=infmodel.getResource(spacename+name);
  ExtendedIterator iter_2=infmodel.listStatements(resource_2 ,null, (RDFNode)null);
 while(iter_2.hasNext()){
  System.out.println(iter_2.next());
 }  
}
}

E:\\Code\\owl1.rules中的规则为:
[restriction:(?a rdf:type rdfs:Class),(?b rdf:type owl:Restriction),(?b owl:onProperty ?c), (?b owl:allValuesFrom ?c),(?a rdfs:subClassOf ?b)->(?a owl:onProperty ?c), (?a owl:allValuesFrom ?c)]

程序输出的结果中只有(部分结果):
<http://www.owl-ontologies.com/Ontology1242798960.owl#Leaf> <http://www.w3.org/2000/01/rdf-schema#subClassOf> _:AX2dX768119b4X3aX1218a0fa44dX3aXX2dX8000 .

_:AX2dX768119b4X3aX1218a0fa44dX3aXX2dX8000 <http://www.w3.org/2002/07/owl#onProperty> <http://www.owl-ontologies.com/Ontology1242798960.owl#is_part_of> .

_:AX2dX768119b4X3aX1218a0fa44dX3aXX2dX8000 <http://www.w3.org/2002/07/owl#allValuesFrom> <http://www.owl-ontologies.com/Ontology1242798960.owl#Branch> .

_:AX2dX768119b4X3aX1218a0fa44dX3aXX2dX8000 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Restriction> .

我想直接得到输出结果三元组:
<http://www.owl-ontologies.com/Ontology1242798960.owl#Leaf> <http://www.w3.org/2002/07/owl#onProperty> <http://www.owl-ontologies.com/Ontology1242798960.owl#is_part_of> .

<http://www.owl-ontologies.com/Ontology1242798960.owl#Leaf> <http://www.w3.org/2002/07/owl#allValuesFrom> <http://www.owl-ontologies.com/Ontology1242798960.owl#Branch> .

可是没有输出,难道是我的推理规则写错了吗?望指点下,谢谢了,我是刚开始弄推理这部分,不太熟悉。先谢谢了!


--  作者:Lexxuan
--  发布时间:5/29/2009 10:17:00 PM

--  
错误是否在于(?b owl:onProperty ?c)和 (?b owl:allValuesFrom ?c)里都是?c
还有(?a owl:onProperty ?c)和 (?a owl:allValuesFrom ?c)也是.
你自己想要的结果里面都可以看出来不一样
--  作者:mihn
--  发布时间:5/30/2009 3:55:00 PM

--  
好像不是吧,我  ?c  只是作为一个替代,我在Jena教程里面 自带的文档看的,能请问下,像你们遇到这样的 情况,是如何解决的啊?
--  作者:mihn
--  发布时间:5/31/2009 9:16:00 AM

--  
经过楼上的朋友给出的建议,然后摸索,终于找到了解决方法,希望和大家分享:
  规则写的不正确,应该是:
  [restriction:(?a rdf:type rdfs:Class),(?b rdf:type rdfs:Class),(?c rdf:type owl:ObjectProperty),(?b owl:onProperty ?c),(?b owl:allValuesFrom ?d),(?a rdfs:subClassOf ?b)-> (?a owl:onProperty ?c),(?a owl:allValuesFrom ?d)]
--  作者:Lexxuan
--  发布时间:6/3/2009 6:22:00 AM

--  
变量是个替代,但是同变量名就是同替代了
LZ很努力,加油!
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms