在从该查询中仅获取名称而不理会所有网址时,是否有任何帮助?
<?php
$endpointUrl = 'https://query.wikidata.org/sparql';
$sparqlQuery = <<< 'SPARQL'
SELECT ?disc_jockey ?disc_jockeyLabel ?name WHERE {
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
?disc_jockey wdt:P106 wd:Q130857.
OPTIONAL { ?disc_jockey wdt:P2561 ?name. }
}
SPARQL;
echo file_get_contents( $endpointUrl . '?query=' . urlencode( $sparqlQuery ) );
?>
答案 0 :(得分:0)
那么,您是否有权直接操作该 sql SPARQL字符串?如果是这样,只需从查询中删除?disc_jockey ?disc_jockeyLabel
:
<?php $endpointUrl = 'query.wikidata.org/sparql'; $sparqlQuery = <<< 'SPARQL' SELECT ?name WHERE { SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } ?disc_jockey wdt:P106 wd:Q130857. OPTIONAL { ?disc_jockey wdt:P2561 ?name. } } SPARQL; echo file_get_contents( $endpointUrl . '?query=' . urlencode( $sparqlQuery ) );
还是我误解了你的问题?
从返回值的外观看,name
标记没有数据。如果将以下网址插入浏览器,则将获得包含整个字符串的文件:
如果查看该文件,将看到没有“ name
” xml节点。
如果删除?disc_jockey ?disc_jockeyLabel
,则会收到空白结果集。它包含正确数量的记录,因为name
似乎不是节点之一,所以没有要显示的节点。
我感到困惑还是缺少什么?
可能您真的只需要disc_jockeyLabel
吗?
一旦检索到此信息,就可以遍历它们,收集所有文字节点。