SPARQL 主题及其所有超类的所有谓词-宾语对

SPARQL all predicate-object pairs of subject and all its superclasses

假设您做了一些疯狂的事情并将您的面向对象模型存储为 RDF 图。

显示了继承层次结构和关联属性的简化示例。

实际上,如果您将一些 UML class 图转换为 RDFS,您会得到 such graph structure。

问题是:什么 SPARQL 查询可以提供实例化 "Class C" 的特定资源所需的所有谓词-对象对。换句话说:如何获得整个继承链中的所有谓词-对象对(仅单继承)。

鉴于此图,class:ClassC 的所有成员的谓宾对很简单:

SELECT ?inst ?p ?o
WHERE {
   ?inst a :ClassC .
   Inst ?p ?o .

请记住 RDF/RDFS 中没有 属性 继承。如果您想找到 ClassA 的所有 property/values 对以及子 class 的蕴涵,那么请使用 L

SELECT ?inst ?p ?o
WHERE {
   ?cls rdfs:subClassOf* :ClassA .
   ?inst a ?cls .
   ?inst ?p ?o
}

在这方面,RDFS 有点落后于 OO 继承的预期。

根据来自@scotthenninger 的信息,以下查询完成了工作:

SELECT ?p ?o
WHERE {
   :ClassC rdfs:subClassOf* ?anySuperClass .
   ?anySuperClass ?p ?o .   
}

编辑: 类似查询获取继承链上的所有自定义属性及其范围:

SELECT ?prop ?obj
    WHERE {
       :ClassC rdfs:subClassOf* ?anySuperClass .
       ?prop rdfs:domain ?anySuperClass .   
       ?prop rdfs:range ?obj .
}

综合最终结果:

foo:ID         xsd:string
foo:name       xsd:string
rdfs:comment   xsd:string
foo:similarTo  :ClassD