【问题标题】:OWL API, Jena API, Protege API, which one to use [closed]OWL API、Jena API、Protege API,使用哪一个 [关闭]
【发布时间】:2013-07-10 10:03:02
【问题描述】:

我正在尝试实现一个使用本体的基于 Eclipse 的应用程序。 (我的主题是语义注释)。我将需要向用户显示本体(作为树)并在本体类和某些模式之间建立链接。

由于我只有基本的编程技能,我现在有点不知所措,至于如何设计应用程序...... 1. 问题:使用哪些 API?我找到了 OWL API 和 Jena API。在其中一篇帖子 (Is there any library that could easily change and update OWL files?) 中,Michael 表示“OWLAPI 优于 Jena。Jena 支持 OWL,但它不是为 OWL 设计的,这使得它使用起来有点麻烦。“你如何看到这个了吗? 2. 此外,还有Protégé API。乍一看,它似乎更适合我,因为它已经提供了一些 GUI 实用程序等。但我有点困惑:在尝试查找更多信息时,我发现了这个 http://protegewiki.stanford.edu/wiki/P4APIOverview 。那里显示“正在进行中”,但该页面最后一次更改是在 2009 年。如何理解这一点?有没有人使用 Protégé API 并可以分享他/她的经验?

提前非常感谢!

【问题讨论】:

  • 这可能与 StackOverflow 无关,因为它与特定的编程问题无关。你在answers.semanticweb.com 上的运气可能会更好,不过,在那里看到this question,你也可能会遇到一些麻烦。
  • 虽然我理解您的困境,但我投票结束,因为您正在征求关于哪个最好的意见,并且没有客观基础来判断最适合您的工具。所有的库都有自己的优势,但它们都很复杂,因为 OWL 很复杂。我建议您首先花时间清楚地考虑您的应用程序会做什么;那么选择实施技术或寻求进一步的建议可能会更容易。
  • @JoshuaTaylor 您评论中的链接已损坏。你能更新一下吗?
  • @alex 答案语义网站有点不稳定,但链接没有错。不过,我不确定第二个链接应该是什么。

标签: jena owl protege owl-api


【解决方案1】:

虽然这个问题对于 StackOverflow 来说可能是题外话,但总的来说它仍然是一个重要的问题,所以这里有一些关于 Jena API 和 OWL API 之间区别的一般想法,即使它们不会让你更喜欢一个比另一个,可能会让你更好地了解在任何一种情况下你正在进入什么。我将它标记为社区 wiki,以便其他人也可以更新它。

OWL和RDF的关系

RDF 是一种基于图形的表示格式。 RDF 图是一个有向图,其节点是资源(可以是匿名的,或由 IRI 标识)和文字,其边是由 IRI 标识的有向链接。这非常简单,但是因为标识符是 IRI 并且通常可以被尊重,所以也非常有用。关于 RDF 真的没什么好说的了,因为这就是它的全部内容。它非常灵活,您几乎可以代表任何东西。

OWL,虽然设计用于语义网,因此与 RDF 数据一起使用,但实际上是一种逻辑语言,只是偶然碰巧与 RDF 相关。 OWL 本体由一组 OWL 公理组成,其中一些声明某些标识符指代个体,其中一些断言个体之间的关系(以及非个体数据,如文字),其中一些表达类的结构,等等。 OWL 的实用性源于这样一个事实,即与 RDF 一样,它使用 IRI 作为标识符,但逻辑结构可以完全独立于 RDF 存在。事实上,虽然 OWL 本体可以使用 RDF序列化,而且实际上这可能是最常用的序列化,但 OWL 也可以用 OWL/XML、OWL 功能语法、曼彻斯特 OWL 语法进行序列化,以及某人发明的任何其他序列化格式。这些格式倾向于关注 OWL 级别的构造,并且更清楚的是,本体是一组公理。

Jena API 以 RDF 为中心

Jena API 深深植根于 RDF。基本概念是Model(它比OntModel 更原始,用于做更复杂的OWL 相关工作),它为构建RDF 图提供了方便的API。使用模型,您将创建资源、添加属性等。 Jena 还包括一个基于规则的推理器,对于处理 RDF 图非常方便。

现在,OWL 可以使用 RDF 进行序列化,因此可以在 RDF 图上创建一个包装层,这样您就可以说“为我创建作为 A 和 B 交集的类”并取回资源标识该类并透明地将 OWL 序列化中需要的任何 RDF 三元组添加到该类中,以断言新类是(等效于)A 和 B 的交集。这就是 Jena OntModel API 所做的。它以一种通用的方式进行,这意味着 Jena 也可以处理其他可以在 RDF 中序列化的本体语言。 Jena OntModels 在撰写本文时仅支持 OWL1;尚不支持 OWL2 中引入的新构造。

Jena 中的 OWL 级构造只是 RDF 序列化的包装器这一事实意味着基于规则的推理在其所能实现的方面受到限制。特别是,OWL 的基于耶拿规则的推理器在逻辑上是不完整的(即,它们无法推断出 OWL 规范所说的应该推断出的所有内容)。不过,他们在日常工作中仍然做得很好。 Jena 确实提供了一个 Reasoner 接口,它允许使用其他(可能是非基于规则的)推理器,例如 Pellet

OWL API 以 OWL 为中心

OWL-API 以 OWL 为中心,您几乎不必担心 RDF(除了通过 IRI 识别事物并根据需要创建文字)。使用 OWL API,您实际上会将本体视为一组 axioms,而不是一组恰好编码一些公理的 triples。如果您已经熟悉 OWL 规范,并且可以轻松谈论 ObjectPropertyAssertions 之类的内容,那么您可能会发现 OWL API 更自然一些。

Protégé-OWL API 也是以 OWL 和 RDF(S) 为中心的

来自The Protégé-OWL API Programmer's Guide

Protege-OWL API 是用于 Web 本体语言 (OWL) 和 RDF(S) 的开源 Java 库。 API 提供类和方法来加载和保存 OWL 文件,查询和操作 OWL 数据模型,以及执行基于描述逻辑引擎的推理。此外,该 API 针对图形用户界面的实现进行了优化。

Protégé-OWL API 的主页也有一些它提供的类的漂亮图表。其中的fullest one 表明RDF(S) OWL 实体都有类。

Protégé-OWL(工具,而不是 API)是建立在 Protégé-OWL API 之上的图形本体编辑器。您可以为它添加develop 插件,这可能是您的最佳选择。

【讨论】:

  • 非常感谢 Joshua 抽出时间给出如此全面的答案。它很有帮助,基于此,我认为 OWL API(或可能是 Protégé OWL API)对我来说可能是比 JENA 更好的选择。
  • 现在(2018 年)还有一个选项:ONT-API,这是基于耶拿的 OWL-API(-api,v5)实现。例如,对于那些想要同时拥有 SPARQL 和 OWL2 的人来说可能很有用。
  • @ssz 好吧,这看起来很棒!谢谢你让我知道。我想过这样的事情,但从来没有时间/资金来真正实现它。基于 GitHub 和 SO 用户名的相似性,假设那是您的项目是否正确?如果是,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多