如何将规则转换为 SWRL 代码?
How can I transform the rules to SWRL code?
假设我们有以下规则:
Course(?x), teacherOf(?y,?x), worksFor(?y,?z) => coursePresentedInUniversity(?x,?z)
pellet 或 java 中是否有任何库可以将上述规则转换为 SWRL 代码?例如,以下内容:
<swrl:Imp rdf:about="#CoursePresentedInUniversityRule">
<swrl:head rdf:parseType="Collection">
<swrl:IndividualPropertyAtom>
<swrl:propertyPredicate rdf:resource="#coursePresentedInUniversity" />
<swrl:argument1 rdf:resource="#x" />
<swrl:argument2 rdf:resource="#z" />
</swrl:IndividualPropertyAtom>
</swrl:head>
<swrl:body rdf:parseType="Collection">
<swrl:ClassAtom>
<swrl:classPredicate rdf:resource="#Course" />
<swrl:argument1 rdf:resource="#x" />
</swrl:ClassAtom>
<swrl:IndividualPropertyAtom>
<swrl:propertyPredicate rdf:resource="#teacherOf" />
<swrl:argument1 rdf:resource="#y" />
<swrl:argument2 rdf:resource="#x" />
</swrl:IndividualPropertyAtom>
<swrl:IndividualPropertyAtom>
<swrl:propertyPredicate rdf:resource="#worksFor" />
<swrl:argument1 rdf:resource="#y" />
<swrl:argument2 rdf:resource="#z" />
</swrl:IndividualPropertyAtom>
</swrl:body>
</swrl:Imp>
我知道 pellet 可以做相反的事情(使用 reasoner.getKB().getRules()
),但我不知道是否有任何东西可以将表示转换为 SWRL XML 代码。
谢谢!
您可以在 OWLAPI 的 Protégé editor then save your ontology in RDF/XML format. If you'd like to do the same in your code then you'll need to use the ManchesterOWLSyntaxParserImpl class 的表示语法中输入 SWRL 规则来解析规则。然后您可以使用 OWLAPI 以 RDF/XML 格式保存规则。
为了将字符串转换为 ontology 中的 SWRL 规则,根据 this document 应该完成一些步骤:1) 应该解析和标记字符串。 2) 应使用 SWRLRule 和 SWRLObjectProperties 创建 SWRL 规则。 3) 应用并保存 ontology 中的更改,
例如,对于teacherOf(?y,?x)
我们可以编写如下代码:
OWLObjectProperty teacherP= factory.getOWLObjectProperty(IRI
.create(ontologyIRI + "#teacherOf"));
SWRLVariable var1 = factory.getSWRLVariable(IRI.create(ontologyIRI
+ "#y"));
SWRLVariable var2 = factory.getSWRLVariable(IRI.create(ontologyIRI
+ "#x"));
SWRLObjectPropertyAtom teacherAtom = factory.getSWRLObjectPropertyAtom(
teacherP, var1, var2);
Set<SWRLAtom> SWRLatomList= new HashSet<SWRLAtom>();
SWRLatomList.add(teacherAtom);
...
SWRLRule teacherRule = factory.getSWRLRule(SWRLatomList,
Collections.singleton(headAtom));
ontologyManager.applyChange(new AddAxiom(testOntology, teacherRule ));
ontologyManager.saveOntology(testOntology);
假设我们有以下规则:
Course(?x), teacherOf(?y,?x), worksFor(?y,?z) => coursePresentedInUniversity(?x,?z)
pellet 或 java 中是否有任何库可以将上述规则转换为 SWRL 代码?例如,以下内容:
<swrl:Imp rdf:about="#CoursePresentedInUniversityRule">
<swrl:head rdf:parseType="Collection">
<swrl:IndividualPropertyAtom>
<swrl:propertyPredicate rdf:resource="#coursePresentedInUniversity" />
<swrl:argument1 rdf:resource="#x" />
<swrl:argument2 rdf:resource="#z" />
</swrl:IndividualPropertyAtom>
</swrl:head>
<swrl:body rdf:parseType="Collection">
<swrl:ClassAtom>
<swrl:classPredicate rdf:resource="#Course" />
<swrl:argument1 rdf:resource="#x" />
</swrl:ClassAtom>
<swrl:IndividualPropertyAtom>
<swrl:propertyPredicate rdf:resource="#teacherOf" />
<swrl:argument1 rdf:resource="#y" />
<swrl:argument2 rdf:resource="#x" />
</swrl:IndividualPropertyAtom>
<swrl:IndividualPropertyAtom>
<swrl:propertyPredicate rdf:resource="#worksFor" />
<swrl:argument1 rdf:resource="#y" />
<swrl:argument2 rdf:resource="#z" />
</swrl:IndividualPropertyAtom>
</swrl:body>
</swrl:Imp>
我知道 pellet 可以做相反的事情(使用 reasoner.getKB().getRules()
),但我不知道是否有任何东西可以将表示转换为 SWRL XML 代码。
谢谢!
您可以在 OWLAPI 的 Protégé editor then save your ontology in RDF/XML format. If you'd like to do the same in your code then you'll need to use the ManchesterOWLSyntaxParserImpl class 的表示语法中输入 SWRL 规则来解析规则。然后您可以使用 OWLAPI 以 RDF/XML 格式保存规则。
为了将字符串转换为 ontology 中的 SWRL 规则,根据 this document 应该完成一些步骤:1) 应该解析和标记字符串。 2) 应使用 SWRLRule 和 SWRLObjectProperties 创建 SWRL 规则。 3) 应用并保存 ontology 中的更改,
例如,对于teacherOf(?y,?x)
我们可以编写如下代码:
OWLObjectProperty teacherP= factory.getOWLObjectProperty(IRI
.create(ontologyIRI + "#teacherOf"));
SWRLVariable var1 = factory.getSWRLVariable(IRI.create(ontologyIRI
+ "#y"));
SWRLVariable var2 = factory.getSWRLVariable(IRI.create(ontologyIRI
+ "#x"));
SWRLObjectPropertyAtom teacherAtom = factory.getSWRLObjectPropertyAtom(
teacherP, var1, var2);
Set<SWRLAtom> SWRLatomList= new HashSet<SWRLAtom>();
SWRLatomList.add(teacherAtom);
...
SWRLRule teacherRule = factory.getSWRLRule(SWRLatomList,
Collections.singleton(headAtom));
ontologyManager.applyChange(new AddAxiom(testOntology, teacherRule ));
ontologyManager.saveOntology(testOntology);