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示例图中的节点。

4

1 回答 1

1

尝试改变

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

进入

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

"*" 和 "+" 的区别在于 "*" 也匹配结果 where ?parentis <http://example.com#subWant>

于 2020-05-08T16:22:27.473 回答