在Sesame中,如何派生在主题位置具有RDF文字的RDFS/OWL实体化结果



我在Sesame 2.8.5中遇到了RDFS的问题。我想从(1)和(2)中自动推导出(3)(这里使用Turtle符号)。在RDF 1.1规范中定义为规则rdfs3,在OWL-RL规范中定义为规则prp-rng

(1) foaf:givenName rdfs:range     xsd:string .
(2) ex:wouter      foaf:givenName "Wouter"   .
(3) "Wouter"       a              xsd:string .

我在Sesame中使用ForwardChainingRDFSInferencer类实现了这一点,如下所示:

public static void main(String[] args) throws RepositoryException, RDFHandlerException {
  Repository r = new SailRepository(new ForwardChainingRDFSInferencer(new MemoryStore()));
  r.initialize();
  ValueFactory f = r.getValueFactory();
  RepositoryConnection c = r.getConnection();
  try {
    c.add(FOAF.GIVEN_NAME, RDFS.RANGE, XMLSchema.STRING);
    c.add(f.createURI("http://example.org/", "wouter"), FOAF.GIVEN_NAME, f.createLiteral("Wouter", XMLSchema.STRING));
    RepositoryResult<Statement> s = c.getStatements(null, null, null, true);
    Rio.write(Iterations.addAll(s, new LinkedHashModel()), System.out, RDFFormat.TURTLE);
  } finally {c.close();}
}

输出包含许多推断的事实,如(4),但不包括事实(3)。

(4) ex:wouter a rdfs:Resource .

我的问题是:如果事实3不是派生的,因为文字不允许出现在RDF三元组的主题位置,那么如何可能在Sesame中执行完整的RDFS和/或OWL物化(符合上述规范)?

在RDF的主题位置中不允许文字。因此,事实3不是合法的RDF三元组,因此Sesame的推理器不派生它。这并不意味着Sesame的推理器是不完整的:它推导出了所有与rdfs相关的、可以合法推导的事实。或者,如果您认为这确实构成了不完备性,那么这意味着任何实现RDFS蕴涵的RDF推理器根据定义都是不完备的,因为它将无法在RDF标准中推导出这样的事实。

请注意,RDF语义规范在讨论在主题位置上使用字面量的可能性(以及您想要的隐含类型)时明确地提到了"广义RDF"的概念——然而,这个概念本身是标准的假设扩展,本身并不规范。

所以,长话短说:如果你想在主题位置上使用文字,你就不是在做RDF,而且你不能使用Sesame(或任何其他符合标准的RDF框架)。

最新更新