2017-09-19 2 views
0

J'utilise le service de requête Wikidata (https://query.wikidata.org) pour obtenir des détails sur les films et les émissions télévisées.Wikidata: SPARQL Comment effectuer une recherche par article?

Je sais que je peux interroger pour le genre de tous les éléments qui sont instance de film (requête ci-dessous), mais je veux rechercher seulement des films spécifiques.

SELECT ?item ?itemLabel ?genreLabel 
WHERE 
{ 
    ?item wdt:P31 wd:Q11424 . 
    OPTIONAL { 
     ?item wdt:P136 ?genre 
    } 
    SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" } 
} LIMIT 10 

J'ai une liste des numéros d'article Wikidata (Q ###) pour les films et émissions de télévision que je veux obtenir des propriétés sur. Je dois interroger ces films ou séries TV spécifiques. Par exemple, si je sais que Star Wars Episode IV: Un nouvel espoir est Q17738 dans Wikidata, comment puis-je rechercher des propriétés spécifiques de celui-ci?

Répondre

0

Oui, vous pouvez obtenir des propriétés en utilisant QID, voir answer to my similar question, en utilisant le filtrage par URI.

Exemple pour votre article Q17738:

SELECT DISTINCT ?item ?itemLabel ?itemDescription (SAMPLE(?article) AS ?articleSample) 
WHERE 
    { ?article schema:about  ?item ; 
       schema:inLanguage "en" ; 
       schema:isPartOf <https://en.wikipedia.org/> 
    FILTER (?item = <http://www.wikidata.org/entity/Q17738>)  
    SERVICE wikibase:label 
     { bd:serviceParam 
        wikibase:language "en" 
     } 
    } 
GROUP BY ?item ?itemLabel ?itemDescription 

Voir cette query in WikiData. Voir aussi answer on Open Data site.

1

Il existe (au moins) deux façons de spécifier plusieurs éléments dans SPARQL.

FILTER (?item IN (...list...)): SPARQL definition

SELECT ?item ?itemLabel ?genreLabel 
WHERE 
{ 
    ?item wdt:P31 wd:Q11424 . 

    FILTER (?item IN (wd:Q17738, wd:Q181795)) 

    OPTIONAL { 
     ?item wdt:P136 ?genre 
    } 
    SERVICE wikibase:label { bd:serviceParam wikibase:language 
           "[AUTO_LANGUAGE],en" } 
} LIMIT 10 

VALUES ?item { ...list... }: SPARQL definition

SELECT ?item ?itemLabel ?genreLabel 
WHERE 
{ 
    ?item wdt:P31 wd:Q11424 . 

    VALUES ?item { wd:Q17738 wd:Q181795 } 

    OPTIONAL { 
     ?item wdt:P136 ?genre 
    } 
    SERVICE wikibase:label { bd:serviceParam wikibase:language 
           "[AUTO_LANGUAGE],en" } 
} LIMIT 10 

La différence est que IN est simplement une fonction: est l'argument dans cette liste?

VALUES est un moyen de transmettre des données à une requête. Bien que nous avons utilisé la forme simple, vous pouvez fournir complète, les données sous forme de tableau:

VALUES (?x ?y) { 
    (:uri1 1) 
    (:uri2 UNDEF) 
} 

La syntaxe est un cas particulier pour une variable, donc je ne pas avoir à écrire VALUES ?item { (wd:Q17738) (wd:Q181795) }.