推理不会给出与 * 相同的结果
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 Y
和 Y someProperty Z
,那么它会遵循 X someProperty Z
。
如果你想要那种推理支持,你要么需要一个自定义规则推理器(Sesame 对此有一些有限的支持,SPIN rules 形式的改进支持即将推出),或者你需要移动到 ontology 语言的下一个表现力级别,即 OWL(在这种情况下,需要与 Sesame 兼容的 OWL 推理器,如 Ontotext GraphDB 或 Stardog)。或者,只需在查询时解决它(例如通过使用可传递的 属性 路径)。
我正在像这样启用前向链接:
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 Y
和 Y someProperty Z
,那么它会遵循 X someProperty Z
。
如果你想要那种推理支持,你要么需要一个自定义规则推理器(Sesame 对此有一些有限的支持,SPIN rules 形式的改进支持即将推出),或者你需要移动到 ontology 语言的下一个表现力级别,即 OWL(在这种情况下,需要与 Sesame 兼容的 OWL 推理器,如 Ontotext GraphDB 或 Stardog)。或者,只需在查询时解决它(例如通过使用可传递的 属性 路径)。