0

我有一个使用 sgvizlers drucalagraph 可视化的 SPARQL 查询。我想要一个搜索容器,用户可以在其中输入音乐艺术家。在查询中,目前用户无法输入音乐艺术家。我想要这部分:

歌曲 dbpedia-owl:writer dbpedia:Eric_Clapton。

让用户输入一个变量,而不是像现在这样的 dbpedia:Eric_Clapton。我该怎么做呢?到目前为止,这是我的代码:

<div id="ex"
     data-sgvizler-endpoint="http://live.dbpedia.org/sparql" 
     data-sgvizler-query="

        SELECT ?song_label ?artist_label ?writer ?producer
WHERE {
       ?song dbpedia-owl:writer dbpedia:Eric_Clapton. ?song rdfs:label ?song_label . 
  OPTIONAL {{?song dbpedia-owl:artist ?artist} UNION {?song dbpedia-owl:musicalArtist ?artist.}}
  {?song dbpedia-owl:writer ?writer. }
  {?song dbpedia-owl:producer ?producer. } 
  {?artist rdfs:label ?artist_label .}

  #FILTER (?writer&&?artist!=dbpedia:Eric_Clapton)

  }  limit 100"
     data-sgvizler-chart="sgvizler.visualization.DraculaGraph"
    // data-sgvizler-chart-options="maxnodesize: 15; minnodesize: 2"
     style="width:100%; height:100%; border:1px solid black; display: inline-block;">

</div>
4

1 回答 1

0

该问题通过使用资源的 rdfs:label 作为查询的输入来解决:

SELECT distinct ?clapton ?clapton_label ?artist ?artistlabel where {
{
  {?artist dbpedia-owl:associatedBand ?clapton} 
UNION 
  {?artist dbpedia-owl:associatedMusicalArtist ?clapton} 
} 
?clapton rdfs:label '<?= ucwords($_GET['query']) ?>'@en. 
?clapton rdfs:label ?clapton_label . 
?artist rdfs:label ?artistlabel . 
} limit 100
于 2014-10-16T14:56:47.340 回答