【发布时间】:2014-05-13 05:30:45
【问题描述】:
我已经构建了一个使用 Jena API 的应用程序,让您可以为产品创建本体,并拥有不同类型的产品,如运动、电子产品等。现在我要做的是更改某些规则。就像一条规则是subClassOf,它为您提供特定的类及其父类。进行更改以使其成为subClassOf 会给我该类的任何属性,或者除了给我父类之外,它还会返回我该类的子类。基本目标是使用耶拿 API 的公理。
谢谢
【问题讨论】:
我已经构建了一个使用 Jena API 的应用程序,让您可以为产品创建本体,并拥有不同类型的产品,如运动、电子产品等。现在我要做的是更改某些规则。就像一条规则是subClassOf,它为您提供特定的类及其父类。进行更改以使其成为subClassOf 会给我该类的任何属性,或者除了给我父类之外,它还会返回我该类的子类。基本目标是使用耶拿 API 的公理。
谢谢
【问题讨论】:
subClassOf 中定义的规则,例如 etc/owl-fb-mini.rules 在基础图中创建(或允许查询)新三元组,现在将某些个体与其祖先类(通过subClassOf)相关联,而不是其直接父类.这些规则试图实现 rdfs 和 owl inference。
例如,如果您的图表包含:
<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,其 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();
【讨论】: