SPARQL-提取具有过滤条件的图的子集

问题描述 投票:1回答:1

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

示例结构:

                                         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节点。

sparql rdf skos
1个回答
0
投票

尝试更改

?parent skos:broader+ <http://example.com#subWant>

进入

?parent skos:broader* <http://example.com#subWant>

”和“ +”之间的区别在于,“”也匹配?parent<http://example.com#subWant>的结果。

© www.soinside.com 2019 - 2024. All rights reserved.