我已經構建了一個使用Jena API的應用程序,可以爲產品創建本體並擁有不同類型的產品,如運動,電子產品等。現在我所要做的就是更改某些規則。像一個規則是subClassOf
,它給你特定的類和它的父類。做一個改變,使它成爲subClassOf
會給我任何這個類的屬性或旁邊給我的父類,它會返回我的那個類的孩子。基本目標是玩jena API的公理。在JENA API中更改公理API
由於
我已經構建了一個使用Jena API的應用程序,可以爲產品創建本體並擁有不同類型的產品,如運動,電子產品等。現在我所要做的就是更改某些規則。像一個規則是subClassOf
,它給你特定的類和它的父類。做一個改變,使它成爲subClassOf
會給我任何這個類的屬性或旁邊給我的父類,它會返回我的那個類的孩子。基本目標是玩jena API的公理。在JENA API中更改公理API
由於
定義在例如etc/owl-fb-mini.rules
用於subClassOf
規則創建(或允許查詢)在底層的圖,現在涉及一些個別其祖先類(通過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規則文件。如果您希望這樣做,您需要學習Reasoners and Rule Engines文檔以及jena-core
中的現有規則文件。
實現您的例子是增加一個額外的規則到現有RDFS或OWL規則集的問題:
[andPropertiesToo: (?child rdfs:subClassOf ?parent),
(?parent ?p ?o) ->
(?child ?p ?o)
]
你可以,例如,檢索用於RDFS的一套規則,然後添加這個新規則,然後創建一個GenericRuleReasoner
其包含所有這些:
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();