我在Sesame 2.8.5中遇到了RDFS蕴涵问题。我想从(1)和(2)中自动推导出(3)(在这里使用Turtle表示法)。这被定义为the RDF 1.1 specification中的规则 rdfs3 以及the OWL-RL specification中的规则 prp-rng 。
(1) foaf:givenName rdfs:range xsd:string .
(2) ex:wouter foaf:givenName "Wouter" .
(3) "Wouter" a xsd:string .
我使用ForwardChainingRDFSInferencer
类在Sesame中实现了这个,如下所示:
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三元组的主题位置,那么如何执行完整的RDFS和/或OWL实现(符合上述内容)在芝麻中提到的规格?
答案 0 :(得分:1)
RDF中的主题位置不允许使用文字。因此,事实3不是合法的RDF三元组,因此芝麻的推论者并没有得出它。这并不意味着Sesame的推理器是不完整的:它衍生出所有可以合法推导的RDFS事实。或者,如果您认为这确实构成了不完整性,那么这意味着任何实现RDFS Entailment的RDF推理器按照定义都是不完整的,因为它无法在RDF标准中导出这样的事实。
请注意,RDF语义规范在讨论在主题位置具有文字的可能性(以及制作所需的蕴涵类型)时,明确地引用了“广义RDF”的概念 - 但是这个概念本身就是一个假设的扩展。标准,而不是自身的规范性。
所以,长话短说:如果你想要主题位置的文字,你不是在做RDF,你不能使用Sesame(或任何其他符合标准的RDF框架)。