尽管这个问题对于 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。基本概念是模型(它比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,您实际上会将本体视为一组公理,而不是一组恰好编码某些公理的三元组。如果您已经熟悉 OWL 规范,并且很乐意谈论 ObjectPropertyAssertions 之类的内容,那么您可能会发现 OWL API 更自然一些。
Protégé-OWL API 也是以 OWL 和 RDF(S) 为中心的
来自Protégé-OWL API 程序员指南:
Protege-OWL API 是用于 Web 本体语言 (OWL) 和 RDF(S) 的开源 Java 库。API 提供类和方法来加载和保存 OWL 文件,查询和操作 OWL 数据模型,以及执行基于描述逻辑引擎的推理。此外,API 针对图形用户界面的实现进行了优化。
Protégé-OWL API的主页也有一些它提供的类的漂亮图表。其中最完整的一个表明 RDF(S)和OWL 实体 都有类。
Protégé-OWL(工具,而不是 API)是建立在 Protégé-OWL API 之上的图形本体编辑器。您可以为其开发插件,这可能是您的最佳选择。