首页 > 解决方案 > 如何从此查询中仅获取名称?

问题描述

请对此查询仅获取名称并忽略所有网址有任何帮助吗?

<?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 )  );
?>

标签: phpsparqlwikidata

解决方案


那么,您是否有权直接操作该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从返回值看,标签没有数据。如果您将以下 url 插入浏览器,您将获得包含整个字符串的文件:

https://query.wikidata.org/sparql?query=%27SELECT%20%3Fname%20WHERE%20%7B%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22%5BAUTO_LANGUAGE %5D%2Cen%22.%20%7D%20%3Fdisc_jockey%20wdt%3AP106%20wd%3AQ130857.%20OPTIONAL%20%7B%20%3Fdisc_jockey%20wdt%3AP2561%20%3Fname.%20%7D%20% 7D%27

如果您查看该文件,您将看到没有“ name” xml 节点。where子句有可能不正确吗?

如果你删除?disc_jockey ?disc_jockeyLabel你会收到一个空白的结果集。它包含正确数量的记录,只是没有要显示的节点,因为name它似乎不是节点之一。

https://query.wikidata.org/sparql?query=SELECT%20%3Fname%20WHERE%20%7B%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22%5BAUTO_LANGUAGE% 5D%2Cen%22.%20%7D%20%3Fdisc_jockey%20wdt%3AP106%20wd%3AQ130857.%20OPTIONAL%20%7B%20%3Fdisc_jockey%20wdt%3AP2561%20%3Fname.%20%7D%20%7D

我感到困惑还是缺少什​​么?

可能,您真的只想要disc_jockeyLabel?

https://query.wikidata.org/sparql?query=SELECT%20%3Fdisc_jockeyLabel%20WHERE%7BSERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22%5BAUTO_LANGUAGE%5D%2Cen% 22.%20%7D%3Fdisc_jockey%20wdt%3AP106%20wd%3AQ130857.%20OPTIONAL%20%7B%20%3Fdisc_jockey%20wdt%3AP2561%20%3Fname.%20%7D%7D

检索此信息后,您可以遍历它们以收集所有文字节点。


推荐阅读