rdfs:domain 的 RDFS-Plus 推理和 GraphDB 中的范围

RDFS-Plus Reasoning for rdfs:domain and range in GraphDB

考虑两个具有不同推理规则集的 GraphDB 存储库:

我在这两个存储库中执行了以下 SPARQL INSERT:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ex: <http://www.example.com#>
INSERT DATA { 
    ex:hasPet a owl:ObjectProperty;
        rdfs:domain ex:Human;
        rdfs:range ex:Pet.
    ex:someHuman ex:hasPet ex:somePet. 
}

在这两个存储库中,我希望通过 rdfs:domainrdfs:range,应该推断出以下 class 断言:

rdfs:domainrdfs:range 是 RDFS 属性,因此应该为 Repo A 推断它们。而且因为 RDFS-Plus 是 RDFS 的扩展,我认为它们也会在 Repo B.

中被推断出来

但是,这些三元组只能通过规则集 RDFS (Repo A) 推断出来。如果我执行以下 SPARQL 查询,我只会在 Repo A 中得到结果,而在 Repo B.

中没有结果
PREFIX ex: <http://www.example.com#>
SELECT ?pet WHERE { 
    ?pet a ex:Pet.
}

有人能告诉我为什么上面的两个三元组只能用 RDFS 规则集推断出来,而不能用 RDFS-Plus 规则集推断出来吗?

发布我的解决方案作为答案,这样以后遇到这个问题的人就不用再翻阅上面的评论了。

正如@DamyanOgnyanov 在对我的问题的评论中指出的那样,根据 rdfs:domainrdfs:range 推断类型的必要规则 不包含 GraphDB 的 RDFS-Plus 和 RDFS-Plus(优化)规则集。 然而,它们包含在 RDFS 规则集中,这是违反直觉的,因为 RDFS 应该是 RDFS-Plus 的基础。

为了使RDFS-Plus 规则集成为RDFS 规则集的适当扩展并获得对rdfs:domainrdfs:range 的支持,我在RDFS-Plus 中添加了以下RDFS 规则。规则集文件位于 <your-graphdb-folder>/configs/rules

    Id: rdfs2

      a b c [Constraint b != <rdf:type>]
      b <rdfs:domain> d
    ------------------------------------
      a <rdf:type> d


    Id: rdfs3

      a b c
      b <rdfs:range> d
    ------------------------------------
      c <rdf:type> d

此外,我还添加ID为rdfs6rdfs7rdfs12rdfs13的规则从RDFS到RDFS-Plus.

没有添加规则rdfs5rdfs9rdfs11。规则 rdfs5rdfs11 包含在传递性 属性 规则中,rdfs9 包含在关于 psys:transitiveOver.

的公理和规则中

编辑:当我使用编辑后的 ​​RDFS-Plus 规则集创建新存储库时,GraphDB 没有接受这些更改。我必须 select“上传自定义规则集”并上传我编辑过的规则集(即仍然具有默认名称的 RDFS-Plus 规则集)。