aui*_*ino 11 entity subclass instance sparql
我将在SPARQL中获取C的C类和子类(直接或间接)的所有实例.
我可以用这种方式得到C的所有直接子类:
SELECT ?entity
WHERE {
?subclass rdfs:subClassOf :C .
?entity rdf:type ?subclass .
}
Run Code Online (Sandbox Code Playgroud)
但我不能得到间接子类的实例,也不能得到任何C的实例.
据我所知(我已经预先计算了它们)所有子类(C的直接和间接),我可以构建一个动态查询,是否可以构建如下的查询?
SELECT ?entity
WHERE {
?entity rdf:type in <list>.
}
Run Code Online (Sandbox Code Playgroud)
谢谢大家.
编辑:
我刚刚解决了它,即使是以一种不优雅的方式.
SELECT ?entity
WHERE {
{ ?entity rdf:type :C }
UNION { ?entity rdf:type :SubClass1 }
UNION { ?entity rdf:type :SubClass2 }
UNION { ?entity rdf:type :SubClass3 }
}
Run Code Online (Sandbox Code Playgroud)
Wil*_*nly 27
更好的解决方案是在SPARQL 1.1中使用属性路径表达式
这将被重写为:
SELECT ?entity
WHERE {
?entity rdf:type ?type.
?type rdfs:subClassOf* :C.
}
Run Code Online (Sandbox Code Playgroud)
根据SPARQL 1.1规范,正确的方法是:
SELECT ?entity
WHERE {
?entity rdf:type/rdfs:subClassOf* :C
}
Run Code Online (Sandbox Code Playgroud)
如果没有对属性路径的支持,就无法表达任意长度的类层次结构。
| 归档时间: |
|
| 查看次数: |
17643 次 |
| 最近记录: |