在JENA API中更改公理

时间:2014-05-13 05:30:46

标签: jena ontology axiom

我已经构建了一个使用Jena API的应用程序,可以让你为产品创建一个本体,并拥有不同类型的产品,如运动,电子产品等。现在我要做的就是改变某些规则。就像一个规则是subClassOf,它为您提供特定的类及其父类。进行更改以使其成为subClassOf会给我任何该类的属性,或者除了给我父类之外,它还会返回该类的子级。基本目标是使用jena API的公理。

由于

1 个答案:

答案 0 :(得分:0)

subClassOf中定义的规则,例如etc/owl-fb-mini.rules创建(或允许查询)基础图中的新三元组,现在将某个人与其祖先类相关联(通过subClassOf而不是直接的父母。这些规则试图实现rdfs和owl推理。

因此,例如,如果您的图表包含:

<urn:ex:instance> <rdf:type> <urn:ex:ClassA>
<urn:ex:ClassA>   <rdfs:subClassOf> <urn:ex:ClassB>

然后,通过基本类推理,图形的行为应该包含以下三元组,而不是:

<urn:ex:instance> <rdf:type> <urn:ex:ClassA>
<urn:ex:ClassA>   <rdfs:subClassOf> <urn:ex:ClassB>
<urn:ex:instance> <rdf:type> <urn:ex:ClassB>

如果你想改变RDF中表达的OWL或RDFS公理的解释,即你可以通过图形访问的三元组,那么你需要制作自己的版本的rdfs和/或owl规则文件。如果您希望这样做,则需要研究jena-core文档以及[andPropertiesToo: (?child rdfs:subClassOf ?parent), (?parent ?p ?o) -> (?child ?p ?o) ] 中的现有规则文件。

实现您的示例将是向现有RDFS或OWL规则集添加其他规则的问题:

GenericRuleReasoner

例如,您可以检索用于RDFS的规则集,然后添加此新规则,然后创建List<Rule>,其中final String customRule = "[andPropertiesToo: (?child rdfs:subClassOf ?parent),\n"+ "(?parent ?p ?o) ->\n"+ "(?child ?p ?o)\n"+ "]"; final List<Rule> customRules = new ArrayList<Rule>(){{ this.addAll(RDFSRuleReasoner.loadRulesLevel(RDFSRuleReasoner.SIMPLE_RULES)); try( final BufferedReader src = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(customRule.getBytes()))) ) { this.addAll(Rule.parseRules(Rule.rulesParserFromReader(src))); } }}; final RuleReasoner reasoner = (RuleReasoner)GenericRuleReasonerFactory.theInstance().create(null); reasoner.setRules(customRules); final InfModel model = ModelFactory.createInfModel(reasoner, ModelFactory.createDefaultModel()); model.prepare(); 包含所有规则:

{{1}}