表示 OWL 类 的部分(分体)传递性的最佳方法?

Best way to represent part-of (mereological) transitivity for OWL classes?

我有基于框架的本体论背景,其中 classes 表示概念,并且对 class:class 关系的断言没有限制。

我现在正在使用 OWL2 ontology 并尝试确定 best/recommended 表示“规范部分”关系的方式 - 从概念上讲,这些关系是根据定义,每个 class(即所有实例)所代表的事物为真。部分关系是可传递的,我想利用这一点,以便我能够查询 ontology 以获取“(规范的)X 的所有部分”。

例如,我可能要表示:

然后使用 SPARQL 传递查询汽车零件,取回发动机和活塞。请注意,我希望以后能够表示个别汽车(并能够通过参考它们的 rdf:type 来推断它们的零件),当然我希望能够表示子 classes汽车也是如此,所以我无法将上述 classes 建模为个体 - 它们必须是 classes.

看来我有3个选择使用OWL,none比较理想。是否推荐其中之一(或不推荐),我是否遗漏了任何一个?

  1. OWL 限制公理:
rdfs:subClassOf(engine, someValuesFrom(partOf, car))
rdfs:subClassOf(piston, someValuesFrom(partOf, engine))

上面的主要缺点是 SPARQL 无法通过 partOf 关系传递查询,因为它嵌入在 OWL 限制中。我需要 SPARQL 中的某种通用递归功能 - 或者我需要以下规则,据我所知,它不是任何标准 OWL 配置文件的一部分:

前提(正文):
subClassOf(B, (P 一些 A) ^
subClassOf(C, (P 一些 B) ^
传递属性(P)

结果(头):
subClassOf(C, (P some A))

  1. OWL2 双关语: 通过断言对象-[=75,我可以有效地表示 classes 的规范实例上的 partOf 关系=] 直接在 classes 上。不过,我不确定这是否会透明地与 SPARQL 一起工作,因为 partOf 关系将在实例上断言(通过双关语)并且任何 subClassOf 关系将在 classes 上断言。因此,例如,如果我有一个 subclass six_cylinder_engine,则以下 SPARQL 片段将不会绑定 six_cylinder_engine:
?part (rdfs:subClassOf*/partOf*)+ car
  1. 注解 属性: 我可以断言 partOf 作为 class 上的注解 属性,其值也是 classes。我认为这可行(减去传递性,但我可以像上面的查询一样使用 SPARQL 路径轻松地恢复它),但它似乎滥用了注释属性的预期用途。

我认为您对问题和不同方法的 advantages/disadvantages 进行了很好的分析。不知道有人是气馁还是鼓励。恕我直言,这个问题没有得到足够的重视,并且在某些领域比其他领域更严重(我在经常使用部分的生物本体中工作,因此这非常重要)。

对于 1,您的规则是有效的并且符合 OWL 语义。还有其他方法可以使用 OWL 推理器以及 RDF 级推理器来实现这一点。例如,使用 ROBOT command line wrapper to the OWLAPI, you can run the reason command using an Expression Materializing Reasoner。例如

robot reason --exclude-tautologies true --include-indirect true -r emr -i engine.owl -o engine-reasoned.owl

这将为您提供一个可以使用非传递 SPARQL 查询进行查询的公理 piston subClassOf partOf some car

--exclude-tautologies 删除了对 owl:Thing 的推论,--include-indirect 将包括传递推论。

对于选项 2,您必须小心,因为您可能会引入不正确的推论。例如,假设有一些没有活塞的引擎,即 engine SubClassOf inverse(part_of) some piston 成立。然而,在你双关语的影子世界中,这个 被包含。这可能是问题,也可能不是问题,具体取决于您的用例。

你的 2 的一个变体是引入不同的映射规则,用于将 OWL T-Tbox 分层到 RDF 上,如我的 OWLStar 提案中所述。有了这个提议,存在主义将被映射到直接三元组,但还有另一种机制(例如具体化)来指示预期的量化。这允许编写既安全(没有不需要的推论)又完整(对于 OWL-RL 中可表达的任何内容)的规则。这里没有双关语(根据 OWL 解释的替代 RDF)。您还可以使用您编写的完全相同的传递 SPARQL 查询来获得所需的结果。