Sparql 不同蕴涵机制的Jena效应

Sparql 不同蕴涵机制的Jena效应,sparql,jena,inference,Sparql,Jena,Inference,我正在尝试sparql和蕴涵的使用 我举了一个例子 我试着把它们放在耶拿 OntClass book1= model.createClass(NS+"book1"); OntClass book2=model.createClass(NS+"book2"); OntClass book3=model.createClass(NS+"book3"); OntClass publication=model.createClass(NS+"publication

我正在尝试sparql和蕴涵的使用

我举了一个例子

我试着把它们放在耶拿

     OntClass book1= model.createClass(NS+"book1");
     OntClass book2=model.createClass(NS+"book2");
     OntClass book3=model.createClass(NS+"book3");
     OntClass publication=model.createClass(NS+"publication");
     OntClass article=model.createClass(NS+"article");
     OntClass mit=model.createClass(NS+"MIT");

     ObjectProperty a = model.createObjectProperty(NS+"a");
     ObjectProperty publishes = model.createObjectProperty(NS+"publishes");

     book1.addProperty(a, publication);
     book2.addProperty(a, article);
     publication.addSubClass(article);

     publishes.addRange(publication);
     mit.addProperty(publishes, book3);
其中model是类型OntModel

我使用了与问题类似的查询

     "PREFIX table: "I have correct namespace here"+
     "SELECT *"+
    "WHERE"+
    "{"+
    " ?x ?y table:publication  ."+
    "}";
模型是这样创建的。希望您的模型规格是好的

OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_RDFS_INF, null);
我从查询中获得as结果


 x                                                           y               
| http://www.example.com/ontologies/sample.owl#publishes   | rdfs:range                                       |
| http://www.example.com/ontologies/sample.owl#article     | rdfs:subClassOf                                  |
| http://www.example.com/ontologies/sample.owl#book1       | http://www.example.com/ontologies/sample.owl#a |
| http://www.example.com/ontologies/sample.owl#publication | rdfs:subClassOf                                  |
| http://www.example.com/ontologies/sample.owl#book3       | rdf:type                                         |   

有没有人能给我举个例子,不管有没有蕴涵,一个不能尝试的代码,都能得到正确的结果。

你的本体看起来有点可疑

book1
book2
book3
mit
不是类,而是个体。您应该为书籍使用
model.createIndividual(NS+“bookX”,publication)
,并为“organization”或类似内容创建一个类,然后作为该类的个人创建
mit
。请注意,
createIndividual
已经负责将类型分配给个人,因此您不需要处理“
a
”属性。您应该先解决这些问题,然后重试并更新您的问题


关于蕴涵:查看查询结果的最后一行。你没有说
book3
是一本书,但这句话无论如何都在那里。这是因为它被其他语句所包含,这就是为什么RDFS推理引擎在查询模型时使语句可见。由于
publishes
上的范围,该语句是必需的:所有正在发布的内容都必须是
publication

thx类型,工作正常。我按照你的想法改变了模型。无推理返回book1(加上发表的文章和文章),有推理返回3本书。谢谢。把书当作课程是一个严重的错误,但是我很生气我没有得到同样的结果,我甚至没有检查书3