我有一个SPARQL查询,我使用sgvizlers drucalagraph进行可视化。我希望有一个搜索容器,用户可以在其中输入音乐艺术家。在查询中,此时用户无法进入音乐艺术家。我想要这个部分:
?song 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>
答案 0 :(得分:0)
通过使用资源的rdfs:标签作为查询的输入来解决问题:
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