我正在尝试提取具有多层次结构的图的子集。
示例结构:
root
/ \
SubWant subNotWant
/ \ \
childWant childWant gCWant
/ \
gCWant gCNotWant
/
gGCWant
subWant
子树就是我想要得到的(假设所有{'/','\'}或broader/narrower
关系)
我当前的查询是:
CONSTRUCT
{
?children a skos:Concept ;
skos:broader ?parent ;
skos:prefLabel ?childPrefLiteral .
}
WHERE {
?children skos:broader+ <http://example.com#subWant> ;
skos:prefLabel ?childPrefLiteral .
filter(STRBEFORE(?childPrefLiteral, " ") NOT IN (<criteria to prune by>) )
?children skos:broader ?parent ;
# filter parent to only have transitive broader relation to desired concept
?parent skos:broader+ <http://example.com#subWant>
}
此查询几乎可以用,除了它不包括subWant
节点的直接子代。关于如何优雅地完成此操作的任何建议?注意最后一个三元组?parent skos:broader <http://example.com#subWant>
的原因是必要的,因为节点具有多个父级(多层次结构)-请参见示例图中的gCWant
节点。
尝试更改
?parent skos:broader+ <http://example.com#subWant>
进入
?parent skos:broader* <http://example.com#subWant>
“ ”和“ +”之间的区别在于,“”也匹配?parent
为<http://example.com#subWant>
的结果。