SPARQL-使用过滤条件提取图的子集

SPARQL-使用过滤条件提取图的子集,sparql,rdf,skos,Sparql,Rdf,Skos,我正在尝试提取具有多层次结构的图的子集 示例结构: root / \ SubWant subNotWant / \

我正在尝试提取具有多层次结构的图的子集

示例结构:

                                         root
                                   /                     \ 
                               SubWant                   subNotWant
                             /         \                           \
                     childWant        childWant                   gCWant
                        /                 \
                       gCWant       gCNotWant
                      /
                   gGCWant
subWant
子树是我想要得到的(假设所有{'/'、'\'}或
更宽/更窄的
关系)

我目前的查询是:

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>
  }

构造
{
?skos儿童:概念;
skos:更广泛的?父母;
skos:prefLabel?childPrefLiteral。
}  
在哪里{
?儿童SKO:范围更广+;
skos:prefLabel?childPrefLiteral。
筛选器(STRBEFORE(?childPrefLiteral,“”)不在()中)
?儿童SKO:更广泛的?父母;
#筛选父项,使其仅与所需概念具有可传递的更广泛关系
?母SKO:更广泛+
}
除了不包括
subWant
节点的直接子节点外,此查询几乎可以正常工作。关于如何优雅地完成这一点,有什么建议吗?请注意最后三个
?父SKO的原因:由于节点有多个父节点(多层次),因此需要更广泛的
——请参见示例图中的
gCWant
节点。

尝试更改

?parent skos:broader+ <http://example.com#subWant>
?母SKO:更广泛+
进入

?母SKO:更广泛*

“*”和“+”之间的区别在于“*”也匹配
?父级

我非常接近!这工作,因为我想它-非常感谢!
?parent skos:broader* <http://example.com#subWant>