【问题标题】:Using SWRL with Jena and Pellet将 SWRL 与 Jena 和 Pellet 一起使用
【发布时间】:2013-06-25 19:42:51
【问题描述】:

我找不到一些使用 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));

【问题讨论】:

    标签: jena semantic-web pellet swrl


    【解决方案1】:

    SWRL 规则适用于 Pellet API。我使用 Protégé 创建了本体和 SWRL 规则,并且能够使用 Java 代码动态创建 OWL 个体。整个本体在以下代码中用作aggregatedOwl。此代码加载本体(基础 OWL + 个体,如果有的话 + SWRL 规则)并在其上运行 Pellet 推理器并将推断结果保存在字符串中。

    import org.semanticweb.owlapi.apibinding.OWLManager;
    import org.semanticweb.owlapi.io.StringDocumentTarget;
    import org.semanticweb.owlapi.model.OWLAxiom;
    import org.semanticweb.owlapi.model.OWLOntology;
    import org.semanticweb.owlapi.model.OWLOntologyCreationException;
    import org.semanticweb.owlapi.model.OWLOntologyManager;
    import org.semanticweb.owlapi.model.OWLOntologyStorageException;
    import org.semanticweb.owlapi.util.InferredAxiomGenerator;
    import org.semanticweb.owlapi.util.InferredOntologyGenerator;
    import org.semanticweb.owlapi.util.InferredPropertyAssertionGenerator;
    import com.clarkparsia.pellet.owlapiv3.PelletReasoner;
    import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory;
    
    try {
        manager = OWLManager.createOWLOntologyManager();
    
        InputStream owlInputStream = new ByteArrayInputStream(aggregatedOwl.getBytes("UTF-8"));
        inferredOntology = manager.loadOntologyFromOntologyDocument(owlInputStream);
    
        PelletReasoner reasoner = PelletReasonerFactory.getInstance().createReasoner(inferredOntology);
        reasoner.getKB().realize();
    
        List<InferredAxiomGenerator<? extends OWLAxiom>> axiomGenerators = new ArrayList<InferredAxiomGenerator<? extends OWLAxiom>>();
        axiomGenerators.add( new InferredPropertyAssertionGenerator() );
    
        InferredOntologyGenerator iog = new InferredOntologyGenerator(reasoner,axiomGenerators);
        iog.fillOntology(manager, inferredOntology);
    
        // Save the new ontology
        OutputStream owlOutputStream = new ByteArrayOutputStream();
        manager.saveOntology(inferredOntology, owlOutputStream);
        inferredData = owlOutputStream.toString();
    }
    catch ( Exception e ) {
        throw new Exception("Exception occurred in applying reasoner");
    }
    

    希望对你有帮助。

    【讨论】:

    • 我发现您的代码令人困惑!您在导入中混合了 Jena 和 OwlApi,而您没有使用任何 Jena 导入。
    • 感谢您的指出,我没有从我的代码 sn-p 中删除不必要的导入。我编辑了我的答案。希望现在没事。
    【解决方案2】:

    Pellet Rules 和 Jena Rules are very different™

    简短的回答是 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 引擎。

    耶拿还是 OWL API?

    基于OWLOntologyManager 的存在,您显示的代码基于 OWL API,而不是 Jena 的 API。 OWL API 将具有更直接的功能来处理 OWL 和 SWRL 规则,而 Jena 不会。 (Jena 的 OntModel 与 OWL1 配合得很好,但对 OWL2 的支持并不完整(并且仍然“对贡献者开放”)。

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

    【讨论】:

    • 我已经用 Protege 4.3 测试了一些 SWRL 规则,它是否适用于 Pellet。其次,SWRL 的替代方案是什么
    • @AliAhmad Protégé 4.3 与 Pellet 一起使用,据我所知。有基于 SPARQL 的 SPIN rules。 (我没有使用过这些,也无法真正评论它们。)
    • @alex 顺便说一句,我不记得 protege 4 是否支持 SWRL,但我认为它。但是,我认为默认情况下不会显示相应的选项卡。它需要打开(类似“显示视图”之类的菜单),并且没有明显的名称,它只是称为“规则”。
    • @Alex 啊,是的,找到了。请参阅 [Protege 4 OWL FAQ](protegewiki.stanford.edu/wiki/Protege-OWL_4_FAQ], How do I edit/use SWRL rules in Protege? 中的最后一个条目。它以“创建一个新选项卡(窗口-> 视图-> 创建新选项卡...)的过程开始,称为规则, SWRL 或任何你喜欢的”。
    • @JoshuaTaylor 但该规则编辑器选项卡似乎与 SWRL 规则不一致。请看一下here
    猜你喜欢
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多