我找不到使用SWRL和Jena的一些不错的简单代码示例,
造粒,还是至少使用SWRL?我已经在Pellet文档中研究了一些示例,但是没有关于使用SWRL的示例。网络上的大多数示例都是不完整且令人困惑的。

我发现的唯一解决方案是使用Jess Rule Engine,但它不是免费的,并且具有商业许可。我发现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具有自己的规则语言,在文档页面Reasoners and rule engines: Jena inference support中进行了描述。它支持正向和反向链接规则。

但是,尽管Pellet和Jena都支持规则的概念,但SWRL规则和Jena规则的预期领域却大不相同。 SWRL规则是OWL级别的构造; SWRL规则中的一元谓词是类表达式,而二元谓词是对象和数据属性。另外,SWRL规则仅在指定的个人上匹配;它们与仅推断存在的个人不匹配。另一方面,Jena规则是RDF级别的,旨在在RDF图形上使用。虽然RDF和OWL通常一起使用(例如,OWL数据在RDF中进行序列化),但两者在概念上是截然不同的。可以实现不使用RDF的OWL推理程序,并且可以构建不使用RDF图的SWRL引擎。

耶拿(Jena)还是OWL API?

您显示的代码基于OWLOntologyManager的存在,是基于OWL API而非Jena的API。 OWL API将具有更直接的功能来处理OWL和SWRL规则,而耶拿则没有。 (Jena的OntModels在OWL1上可以很好地工作,但是对OWL2的支持还不完整(并且仍然“对贡献者开放”)。

与使用OWL API或尝试使用Jena的API相比,您可能会发现使用Protégé之类的编辑器来创建规则更容易。马丁·库巴(Martin Kuba)写了一个非常好的OWL2 and SWRL Tutorial,可以在这里为您提供帮助。

10-04 18:42