想象一下,你做了一些疯狂的事情,并将面向对象的模型存储为RDF图。
显示了继承层次结构和关联属性的简化示例。
实际上,如果将一些UML类图转换为RDFS,则会获得such graph structure。
问题是:什么SPARQL查询可以提供实例化" C类和#34;的特定资源所需的所有谓词 - 对象对。换句话说:如何在整个继承链中获得所有谓词 - 对象对(仅单个继承)。
答案 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