在 Sesame 中,如何导出 RDFS/OWL 个在主题位置具有 RDF 文字的物化结果?
In Sesame, how does one derive RDFS/OWL materialization results that have an RDF literal in the subject position?
我在 Sesame 2.8.5. I want to automatically deduce (3) from (1) and (2) (using Turtle notation here). This is defined as rule rdfs3 in the RDF 1.1 specification and as rule prp-rng in the OWL-RL specification 中遇到 RDFS 蕴含问题。
(1) foaf:givenName rdfs:range xsd:string .
(2) ex:wouter foaf:givenName "Wouter" .
(3) "Wouter" a xsd:string .
我已经使用 ForwardChainingRDFSInferencer
class 在 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 .
我的问题是:如果因为RDF三元组的主语位置不允许出现字面量而无法导出事实3,那么如何执行完整的RDFS and/or OWL 在Sesame中实现(符合上述规范)?
RDF 中的主题位置不允许使用文字。因此,事实 3 不是合法的 RDF 三元组,因此 Sesame 的推理机不会推导出它。这并不意味着 Sesame 的推理器是不完整的:它导出了所有可以合法导出的 RDFS 相关事实。或者,如果您想争辩说这确实构成了不完整性,那么这意味着任何实现 RDFS 蕴涵的 RDF 推理器根据定义是不完整的,因为它无法在 RDF 中推导出此类事实标准。
请注意,RDF 语义规范在讨论在主题位置使用文字的可能性(并制作您想要的蕴涵类型)时明确引用了 "generalized RDF" 的概念 - 然而这个概念本身就是一个假设标准的延伸,本身并不规范。
所以,长话短说:如果你想在主题位置使用文字,你就不是在做 RDF,也不能使用 Sesame(或任何其他符合标准的 RDF 框架)。
我在 Sesame 2.8.5. I want to automatically deduce (3) from (1) and (2) (using Turtle notation here). This is defined as rule rdfs3 in the RDF 1.1 specification and as rule prp-rng in the OWL-RL specification 中遇到 RDFS 蕴含问题。
(1) foaf:givenName rdfs:range xsd:string .
(2) ex:wouter foaf:givenName "Wouter" .
(3) "Wouter" a xsd:string .
我已经使用 ForwardChainingRDFSInferencer
class 在 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 .
我的问题是:如果因为RDF三元组的主语位置不允许出现字面量而无法导出事实3,那么如何执行完整的RDFS and/or OWL 在Sesame中实现(符合上述规范)?
RDF 中的主题位置不允许使用文字。因此,事实 3 不是合法的 RDF 三元组,因此 Sesame 的推理机不会推导出它。这并不意味着 Sesame 的推理器是不完整的:它导出了所有可以合法导出的 RDFS 相关事实。或者,如果您想争辩说这确实构成了不完整性,那么这意味着任何实现 RDFS 蕴涵的 RDF 推理器根据定义是不完整的,因为它无法在 RDF 中推导出此类事实标准。
请注意,RDF 语义规范在讨论在主题位置使用文字的可能性(并制作您想要的蕴涵类型)时明确引用了 "generalized RDF" 的概念 - 然而这个概念本身就是一个假设标准的延伸,本身并不规范。
所以,长话短说:如果你想在主题位置使用文字,你就不是在做 RDF,也不能使用 Sesame(或任何其他符合标准的 RDF 框架)。