考虑两个具有不同推理规则集的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:domain和rdfs:range推断出以下类断言:
ex:someHuman rdf:type ex:Humanex:somePet rdf:type ex:Petrdfs:domain和rdfs:range是RDFS属性,因此它们应该被推断为回购A。而且由于RDFS是RDFS的扩展,我认为它们也会在回购B中被推断出来。
然而,这些tripels只能用规则集RDFS (Repo A)推断。如果我执行以下SPARQL查询,我只能在Repo A中得到一个结果,而在Repo B中没有结果。
PREFIX ex: <http://www.example.com#>
SELECT ?pet WHERE {
?pet a ex:Pet.
}有人能告诉我,为什么上面的两个规则只能用RDFS规则集来推断,而不是使用RDFS-Plus规则集?
发布于 2020-12-07 10:30:31
把我的解决方案作为一个答案,这样将来有这个问题的人就不必深入了解上面的评论了。
正如@DamyanOgnyanov在对我的问题的评论中指出的那样,基于rdfs:domain和rdfs:range推断类型的必要规则是,在GraphDB的RDFS和RDFS(优化)规则集中没有包括。然而,它们包含在RDFS规则集中,这是违反直觉的,因为RDFS应该是RDFS-Plus的基础。
为了使RDFS规则集成为RDFS规则集的适当扩展,并获得对rdfs:domain和rdfs:range的支持,我在RDFS中添加了以下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此外,我还添加了从RDFS到RDFS的I( rdfs6、rdfs7、rdfs12、rdfs13 )的规则。
I没有添加 rules rdfs5、rdfs9和rdfs11。规则rdfs5和rdfs11由传递属性规则覆盖,rdfs9由关于psys:transitiveOver的公理和规则覆盖。
编辑:当我用编辑的RDFS规则集创建一个新的存储库时,GraphDB没有接收到这些更改。我必须选择“上载自定义规则集”并上传我所编辑的规则集(即RDFS规则集,该规则集仍然具有默认名称)。
https://stackoverflow.com/questions/65091666
复制相似问题