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
假设您做了一些疯狂的事情并将您的面向对象模型存储为 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