SPARQL - 使用过滤条件提取图的子集
SPARQL - extract subset of graph with filter conditions
我正在尝试提取具有多层次结构的图的子集。
示例结构:
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>
的结果。
我正在尝试提取具有多层次结构的图的子集。
示例结构:
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>
的结果。