我无法找到一些使用 SWRL 和 Jena 的简单代码示例
佩莱,或者至少使用 SWRL?我研究了 Pellet 文档中的一些示例,但没有关于使用 SWRL 的示例。网络上的大多数示例都不完整且令人困惑。
我找到的唯一解决方案是使用 Jess 规则引擎,但它不是免费的,并且需要商业许可。我发现 Pellet 支持 SWRL 规则,但找不到运行示例。
我发现的唯一例子是这个,但我不明白:
OWLOntologyManager m = create();
OWLOntology o = m.createOntology(example_iri);
// Get hold of references to class A and class B.
OWLClass clsA = df.getOWLClass( IRI.create(example_iri + "#A" ));
OWLClass clsB = df.getOWLClass(IRI.create(example_iri + "#B" ));
SWRLVariable var = df.getSWRLVariable(IRI.create(example_iri + "#x" ));
SWRLClassAtom body = df.getSWRLClassAtom(clsA, var);
SWRLClassAtom head = df.getSWRLClassAtom(clsB, var);
SWRLRule rule = df.getSWRLRule(Collections.singleton(body),
Collections.singleton(head));
m.applyChange(new AddAxiom(o, rule));
颗粒规则和耶拿规则非常不同™
简而言之,Pellet 支持 SWRL 规则。如果你有一个包含 SWRL 规则的本体并要求 Pellet 对其进行推理,它会考虑它们。
耶拿有自己的规则语言,在文档页面中有描述,推理器和规则引擎:Jena 推理支持 http://jena.apache.org/documentation/inference/。它支持前向和后向链接规则。
然而,尽管 Pellet 和 Jena 都支持规则概念,但 SWRL 规则和 Jena 规则的预期领域却截然不同。 SWRL 规则是 OWL 级别的构造; SWRL 规则中的一元谓词是类表达式,二元谓词是对象和数据属性。此外,SWRL 规则仅匹配指定的个人;它们与仅推断存在的个体不匹配。另一方面,Jena 规则是 RDF 级别的,并且设计用于在 RDF 图上工作。虽然 RDF 和 OWL 经常一起使用(例如,OWL 数据在 RDF 中序列化),但两者在概念上是不同的。可以实现不使用 RDF 的 OWL 推理器,并且可以构建不使用 RDF 图的 SWRL 引擎。
耶拿还是 OWL API?
您所显示的代码,基于是否存在OWL本体管理器 http://owlapi.sourceforge.net/javadoc/org/semanticweb/owlapi/model/OWLOntologyManager.html,基于 OWL API,而不是 Jena 的 API。 OWL API 将具有更直接的功能来处理 OWL 和 SWRL 规则,而 Jena 则不会。 (Jena 的 OntModels 与 OWL1 配合良好,但对 OWL2 的支持并不完整(并且仍然“向贡献者开放”)。
您可能会发现使用 Protégé 等编辑器创建规则比使用 OWL API 或尝试使用 Jena 的 API 更容易。马丁·库巴 (Martin Kuba) 写了一篇非常好的文章OWL2 和 SWRL 教程 http://dior.ics.muni.cz/~makub/owl/这可以帮助你。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)