推理不会给出与 * 相同的结果

Reasoning doesn't give same results with *

我正在像这样启用前向链接:

static final String inputData = "http://cgi.di.uoa.gr/~pms509/past_projects/2014-2015/hw1/kallikratis.n3";
MemoryStore store = new MemoryStore();
Repository repo = new SailRepository(new ForwardChainingRDFSInferencer(store));
System.out.println("Forward chaining enabled");
repo.initialize();

//Store file
File file = new File(inputData);
String fileBaseURI = "http://www.semanticweb.org/owl/owlapi/turtle";
RDFFormat fileRDFFormat = RDFFormat.N3;

RepositoryConnection con = repo.getConnection();
con.add(file, fileBaseURI, fileRDFFormat);
...

然后我这样查询:

"SELECT ?class "                                +
"WHERE {"                                       +
        "?rsrc geo:has_name \"foo\" . "         +
        "?rsrc geo:belongs_to ?a ."             +
"}";

然而,这 不会 给我与 geo:belongs_to* 相同的结果。正如我所料,我将只获得直接的 belongs_to 链接,而不是推断的链接!

但是我想得到相同的结果,为什么我没有?

RDFS 推理器 很好地执行 RDFS 推理——也就是说,它使用 RDF Semantics 中定义的规则进行推理。这些规则 涵盖了相对基本的内容,例如 subclass/type 继承和 domain/range 推理。因此,例如,如果您的数据有一个 class Car 并且它将 Car 定义为 Vehicle 的子 class,那么 RDFS 推理器将推断任何class Car 的实例是 也是 Vehicle.

的实例

但是这种继承适用于这些特定的关系(subclass, type, sub属性of)。在一般情况下,它不会自动推断,如果 X someProperty YY someProperty Z,那么它会遵循 X someProperty Z

如果你想要那种推理支持,你要么需要一个自定义规则推理器(Sesame 对此有一些有限的支持,SPIN rules 形式的改进支持即将推出),或者你需要移动到 ontology 语言的下一个表现力级别,即 OWL(在这种情况下,需要与 Sesame 兼容的 OWL 推理器,如 Ontotext GraphDB 或 Stardog)。或者,只需在查询时解决它(例如通过使用可传递的 属性 路径)。