我正在尝试使用OpenRDF的Sesame在Java中创建一些语句及其反转。我也关注the tutorial in the Sesame 2.7 documentation。假设我创建了以下URI和语句,并将它们添加到Sesame存储库中:
RepositoryConnection connection;
ValueFactory factory = ValueFactoryImpl.getInstance();
Resource author_1 = new createURI("http://www.author.org/author_1");
Resource article_1 = new createURI("http://www.title.org/article_1");
URL wrote = factory.createURI("http://www.paper.org/wrote");
URL writtenby = factory.createURI("http://www.paper.org/writtenby");
Statement statement_1 = factory.createStatement(author_1, wrote, article_1);
connection.add(statement_1);
上面的代码用于创建描述作者撰写文章的陈述。在OpenRDF Workbench中,我可以看到这个陈述。我要做的是使用OWL.INVERSEOF
进行反向,以便article_1
编写author_1
,如下所示:
connection.add(writtenby, OWL.INVERSEOF, wrote);
当我运行项目并返回OpenRDF Workbench时,我看到以下声明:
<http://www.author.org/author_1>, http://www.paper.org/wrote, http://www.title.org/article_1>
<http://www.paper.org/writtenby>, <http://www.w3.org/2002/owl#inverseOf>, <http://www.paper.org/wrote>
当我点击<http://www.paper.org/writtenby>
时,我找不到article_1 is written by author1
的反义词,但我可以找到author_1 wrote article_1
。我的做法是反向错误还是我误解了这个概念?非常感谢您的帮助。
答案 0 :(得分:2)
就像约书亚所说的那样。 OpenRDF / Sesame不支持这种推理。我认为它在加载过程中只支持某种基本的RDF / S推理。它(仍)不支持我认为的自定义规则。
您可以通过OWLIM使用芝麻来实现您的要求。 OWLIM-Lite和OWLIM-SE确实支持OWL推理(基于规则,正向链接,物化)。有一些predefined rule sets supported by OWLIM。你可能想要owl-max
。
根据您要实现的目标,您可能希望使用真正的OWL推理器,例如Pellet。但是,Sesame不支持Pellet ......