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

时间:2016-09-12 16:20:57

标签: oop inheritance sparql rdf rdfs

想象一下,你做了一些疯狂的事情,并将面向对象的模型存储为RDF图。

RDF Graph

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

实际上,如果将一些UML类图转换为RDFS,则会获得such graph structure

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

2 个答案:

答案 0 :(得分:4)

鉴于此图,类:ClassC的所有成员的谓词 - 对象对只是:

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

请记住,RDF / RDFS中没有属性继承。如果要查找ClassA的所有属性/值对以及子类的蕴含,请使用L

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

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

答案 1 :(得分:4)

使用来自@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