我试图SPARQL和使用蕴涵。

正如我所使用的示例的http:// WWW .w3.org / TR / 2010 / WD-sparql11-蕴涵-20100126 /#T112

我试图把它们在Jena。

     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);

,其中模型是类型OntModel。

和我用类似的问题

的查询
     "PREFIX table: "I have correct namespace here"+
     "SELECT *"+
    "WHERE"+
    "{"+
    " ?x ?y table:publication  ."+
    "}";

该模型是这样创建的。希望OntModelSpec是确定的。

OntModel m = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_RDFS_INF, null);

我得到从查询

的结果

 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                                         |   

谁能给我一个例子,有和没有蕴涵,所以着try代码,就可以得到结果正确。

有帮助吗?

解决方案

您本体看起来有点腥。

book1book2book3mit不是类,他们是个人。您应该使用model.createIndividual(NS + "bookX", publication)的书籍,并为“组织”或类似的一类,然后创建mit作为一个单独的那类。需要注意的是createIndividual已经采取分配型向个人护理,这样你就不会跟你“a”属性需要周围的混乱。你应该先解决这些事情,然后再试一次,更新你的问题。

关于蕴涵:看看你的查询结果的最后一行。你没有任何地方说book3是一本书,但声明是存在的反正。这是因为它是由其他语句entailed,这就是为什么RDFS推理引擎使得声明可见,当你查询模型。该语句因为publishes范围entailed:那正在发布便要承担为类型publication的一切

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top