Sparql Skos:Broader

yms*_*aap 4 sparql dbpedia skos

我正在对DBpediaset进行SPARQL查询,但是由于查询限制,我遇到了一些问题(由于缺乏详细的SPARQL知识):

我首先“让”所有音乐艺术家:

?person rdf:type <http://dbpedia.org/ontology/MusicalArtist> .
Run Code Online (Sandbox Code Playgroud)

但是我想将其限制为更广泛的类别Category:American_musicians(通过遍历skos:broader?):如何?

* =虽然问题很具体,但是当我想运行sparql查询时,我已经多次遇到了这个问题。

小智 5

使用SPARQL 1.1中的属性路径可以使此操作更容易

SELECT DISTINCT ( ?person )
WHERE
{
  ?person rdf:type dbpedia-owl:MusicalArtist .
  ?person skos:subject  skos:broader* category:American_musicians  .
}
Run Code Online (Sandbox Code Playgroud)

在这里,它显示可以通过该skos:broader属性访问的所有祖先。


gle*_*ald 1

没有真正好的方法来做到这一点,但这里有一个详细的方法:

SELECT DISTINCT ( ?person )
WHERE
{
  ?person rdf:type dbpedia-owl:MusicalArtist .
  {
    ?person skos:subject [ skos:broader category:American_musicians ] .
  } UNION {
    ?person skos:subject [ skos:broader [ skos:broader category:American_musicians ] ] .
  } UNION {
    ?person skos:subject [ skos:broader [ skos:broader [ skos:broader category:American_musicians ] ] ] .
  } UNION {
    ?person skos:subject [ skos:broader [ skos:broader [ skos:broader [ skos:broader category:American_musicians ] ] ] ] .
  } UNION {
    ?person skos:subject [ skos:broader [ skos:broader [ skos:broader [ skos:broader [ skos:broader category:American_musicians ] ] ] ] ] .
  } UNION {
    ?person skos:subject [ skos:broader [ skos:broader [ skos:broader [ skos:broader [ skos:broader [ skos:broader category:American_musicians ] ] ] ] ] ] .
  } UNION {
    ?person skos:subject [ skos:broader [ skos:broader [ skos:broader [ skos:broader [ skos:broader [ skos:broader [ skos:broader category:American_musicians ] ] ] ] ] ] ] .
  }
}
Run Code Online (Sandbox Code Playgroud)

为了确定需要多少级别,您可以将 SELECT DISTINCT 更改为 SELECT COUNT DISTINCT,并在计数停止增加时停止添加级别。