Horst (pD*) 与 OWL2-RL 相比

Horst (pD*) compared to OWL2-RL

我们正在使用 GraphDB 8.4.0 作为大型数据集成项目的三元组存储。我们想利用推理能力,并试图在使用 HORST (pD*) 和 OWL2-RL 之间做出决定。
然而,描述这些的文献相当密集。我 认为 我知道 OWL2-RL 更“强大”,但我不确定是怎么回事。任何人都可以提供一些例子来说明这两个推理器之间的区别吗? OWL2-RL 推断出了哪些类型的陈述,但 HORST 却没有(反之亦然)?

Brill,GraphDB 内部有一个规则引擎,它支持不同的推理配置文件,具体取决于所选的规则集。预定义的规则集是分发的一部分 - 查看文件夹 configs/rules 中的 PIE 文件。一个人也可以采用现有配置文件之一并根据她的需要对其进行定制(例如删除规则,这是不必要的)。

OWL2 RL 和我们所说的 OWL-Horst (pD*) 之间的根本区别在于 OWL2RL 突破了 OWL 构造的极限可以使用这种类型的蕴含规则来支持。 OWL Horst 仅限于 RDFS (subClassOf, subS属性Of, domain and range) 加上过去流行的 OWL Lite: sameAs, equivalentClass, equivalentProperty, SymmetricProperty, TransitiveProperty, inverseOf,FunctionalProperty,InverseFunctionalProperty。还部分支持:intersectionOf、someValuesFrom、hasValue、allValuesFrom。

什么OWL 2 RL 在上面添加的是对 AsymmetricProperty、IrreflexiveProperty、属性ChainAxiom、AllDisjointProperties、hasKey、unionOf、complementOf、oneOf、differentFrom、AllDisjointClasses 和所有 属性基数原语。它还添加了对 intersectionOf、someValuesFrom、hasValue、allValuesFrom 的更完整支持。请注意,OWL 2 RL 对于其中某些属性支持的推理存在局限性,例如对于特定的 class 表达式(OWL 限制)应该或不应该进行什么类型的推理。如果您选择 OWL 2 RL,请检查规范中的表 5-8,https://www.w3.org/TR/owl2-profiles/#OWL_2_RL. GraphDB's owl-2-rl data set is fully compliant with it. GraphDB is the only major triplestore with full OWL 2 RL compliance - see the this table (https://www.w3.org/2001/sw/wiki/OWL/Implementations) 它以其以前的名称 OWLIM.

出现

我的建议是对大型数据集使用 OWL Horst,因为使用 OWL 2 RL 进行推理可能要慢得多。这取决于您的 ontology 和数据模式,但根据经验,您可以预期 loading/updates 使用 OWL 2 RL 会慢 2 倍,即使您没有广泛使用它“昂贵”的基元(例如 属性 链)。查看 RDFS+ 和 OWL 2 RL 基准加载速度之间的差异:http://graphdb.ontotext.com/documentation/standard/benchmark.html

最后,我建议您使用预定义规则集的“优化”版本。这些版本排除了一些 RDFS 推理规则,这些规则对大多数应用程序没有用,但会增加大量推理开销,例如推断语句的主语、谓语和宾语是 rdfs:Resource

的实例的那个
Id: rdf1_rdfs4a_4b 
     x  a  y
    -------------------------------
     x  <rdf:type>  <rdfs:Resource>
     a  <rdf:type>  <rdfs:Resource>
     y  <rdf:type>  <rdfs:Resource>

如果您想保持 100% 符合 W3C 规范,您应该继续使用未优化的版本。

如果您需要进一步的帮助,请写信给支持@ontotext.com

经过一番思考,我想出了一个具体的例子。口腔健康与疾病 Ontology (http://purl.obolibrary.org/obo/ohd.owl) 包含三个相互关联的实体:

  • 一颗修复的牙齿
  • 作为修复牙齿一部分的修复牙齿表面
  • 创建修复牙齿表面的牙齿修复程序(例如,当您在牙齿中放置填充物时)

定义这些实体的公理是(使用伪曼彻斯特语法):

restored tooth equivalent to Tooth and has part some dental restoration material
restored tooth surface subclass of part of restored tooth
filling procedure has specified output some restored tooth surface

has specified output关系是has participant关系的子属性,has participant关系包含属性链:

has_specified_input o 'is part of'

这个属性链的原因是推理者可以推断,如果一个牙齿表面参与了一个程序,那么该表面所属的整个牙齿都参与了该程序,而且,牙齿所属的患者也参与了手术(由于一部分的传递性)。

作为一个具体的例子,让我们定义一些个体(使用伪 rdf):

:patient#1 a :patient .
:tooth#1 a :tooth; :part-of :patient#1
:restored-occlusal#1 a :restored-occlusal-surface; :part-of tooth#1 .
:procedure#1 :has-specified-output :restored-occlusal#1 .

假设您要查询所有修复的牙齿:

select ?tooth where {?tooth a :restored-tooth}

RDFS-Plus 推理不会找到任何已修复的牙齿 b/c 它不会推理出等效的 类。但是,OWL-Horst 和 OWL2-RL 会找到这样的牙齿。

现在,假设您要查找所有接受(即参与)牙齿修复手术的患者:

select ?patient where {
    ?patient a patient: .
    ?proc a tooth_restoration_procedure:; has_participant: ?patient .
}

同样,RDFS-Plus 不会找到任何患者,OWL-Horst b/c 也不会找到此推论需要对 has participant 属性 链进行推理。需要 OWL2-RL 才能进行此推断。

希望这个例子对感兴趣的人有所帮助reader :).

欢迎提出意见以改进示例。请将任何评论保留在试图使示例更清晰的范围内。它的目的是深入了解这些不同级别的推理的作用,而不是就哪种推理机最合适提出建议。

除了 Atanas(我们的 CEO)所写的内容和您的优秀示例之外,http://graphdb.ontotext.com/documentation/enterprise/rules-optimisations.html 还提供了一些如何优化规则集以使其更快的想法。

其中两个想法是:

  • ptop:transitiveOver 比 owl:TransitiveProperty 快:传递链长度上的二次与三次复杂度
  • ptop:PropChain(一个 2-place 链)比一般的 owl:propertyChainAxiom(n-place 链)更快,因为它不需要展开底层表示的 rdf:List owl:propertyChainAxiom.

在某些情况下,您可以将标准 OWL 构造转换为这些自定义构造,以同时 符合标准并加快速度:

  • 使用规则TransitiveUsingStep;如果每个 TransitiveProperty p(例如 skos:broaderTransitive)都定义在一个步骤 属性 s(例如 skos:broader)上并且您不插入 p直接
  • 如果您仅使用两步 owl:propertyChainAxiom 然后使用以下规则将它们转换为自定义,并使用规则 ptop_PropChain:
  • 进行推断
Id: ptop_PropChain_from_propertyChainAxiom
  q <owl:propertyChainAxiom> l1
  l1 <rdf:first> p1
  l1 <rdf:rest> l2
  l2 <rdf:first> p2
  l2 <rdf:rest> <rdf:nil>
  ----------------------
  t <ptop:premise1>   p1
  t <ptop:premise2>   p2
  t <ptop:conclusion> q
  t <rdf:type> <ptop:PropChain>

http://rawgit2.com/VladimirAlexiev/my/master/pubs/extending-owl2/index.html 描述了扩展 属性 构造的更多想法,并有插图。

如果我们能提供进一步帮助,请告诉我们。