0

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

谢谢

4

1 回答 1

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 规则文件版本。如果您希望这样做,您将需要研究Reasoners 和 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();
于 2014-05-14T13:59:52.343 回答