Как я могу получить только имя из этого запроса? - PullRequest
0 голосов
/ 18 октября 2018

Помогите, пожалуйста, получить только имя из этого запроса и игнорировать все URL?

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

1 Ответ

0 голосов
/ 18 октября 2018

Итак, у вас есть доступ, чтобы напрямую манипулировать этой 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 ) );

Или я неправильно понял ваш вопрос?

Судя по возвращаемому значению, данных для * нет1009 * тег.Если вы вставите следующий 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

Как только вы получите эту информацию, вы можете перебирать их, собирая всебуквальные узлы.

...