推理并没有给出*

时间:2015-12-04 02:32:57

标签: java rdf sparql rdfs linked-data

我正在启用这样的正向链接:

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链接,而不是我所期望的推断链接!

我想得到相同的结果,为什么我不是?

1 个答案:

答案 0 :(得分:4)

RDFS推理器确实是RDFS推理 - 也就是说,它使用RDF Semantics中定义的规则。这些规则涵盖相对基本的内容,例如子类/类型继承和域/范围推断。例如,如果您的数据具有类Car并且它将Car定义为Vehicle的子类,那么RDFS推理器将推断出类Car的任何实例是也是 Vehicle的实例。

但是这种继承适用于这些特定关系(子类,类型,子属性)。它不会在一般情况下自动推断,如果X someProperty YY someProperty Z,那么它会跟随X someProperty Z

如果您需要这种推理支持,您需要一个自定义规则推理器(芝麻对此有一些有限的支持,以及SPIN rules即将推出的改进支持),或者您需要移动本体语言中的表达性的下一级别,即OWL(在这种情况下,需要与Ontotext GraphDB或Stardog一样的芝麻兼容的OWL推理器)。或者,只需在查询时解决它(例如通过使用传递属性路径)。