Requetes sparql
Requêtes SPARQL
Quelques définitions
- Label : Le nom donné à un item ou une propriété.
- Item : Entités représentant une chose ou un concept ou une personne à laquelle on associe des informations.
- Qid : Identifiant unique qui permet de reconnaître une entité sans dépendre de son label.
- Propriété : Type de relation ou caractéristiques utilisé pour décrire un item.
- Pid : Identifiant unique qui permet de reconnaître une propriété sans dépendre de son label.
- Requête SPARQL : Permet d'interroger des données en utilisant des relations entre items et propriétés.
Requêtes de base
1. Lister toutes les entités ou propriétés
Récupère toutes les entités avec leur label français et anglais.
SELECT ?itemLabel ?item
WHERE {
?item wikibase:sitelinks [] .
# Récupère le label de la propriété en français, anglais
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}
Récupère toutes les propriétés avec leur label français et anglais.
SELECT ?proprieteLabel ?propriete
WHERE {
?propriete a wikibase:Property .
# Récupère le label de la propriété en français, anglais
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}
2. Rechercher par propriétés
Récupérer les entités possédant une propriété précise (ex. : P1 – nature de l’élément) et indiquer l’entité associée à cette propriété.
SELECT ?item ?itemLabel ?valeurLabel ?valeur
WHERE {
?item wdt:P1 ?valeur .
# Récupère le label de la propriété en français, anglais
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}
Récupère toutes les propriétés d'une entité précise (ex : Q1000 - Thomas Arthus).
SELECT ?propriete ?proprieteLabel ?valeur ?valeurLabel
WHERE {
wd:Q1000 ?propriete ?valeur .
# Relie l'URI de la propriété à son entité pour pouvoir récupérer son label
?propEntite wikibase:directClaim ?propriete .
# Garde uniquement les propriétés définies dans la Wikibase
FILTER(STRSTARTS(STR(?propriete), STR(wdt:)))
# Récupère le label de la propriété en français, anglais
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". ?propEntite rdfs:label ?proprieteLabel .
}
# Si la valeur est un item, récupère son label en français, anglais
OPTIONAL {
?valeur rdfs:label ?valeurLabel .
FILTER(LANG(?valeurLabel) IN ("fr", "en"))
}
}
Récupérer les items possédant simultanément plusieurs propriétés (ex : P58 - identifiant data.biblissima, P86 - identifiant GeoNames).
SELECT DISTINCT ?itemLabel ?item
WHERE {
?item wdt:P58 ?valeur1 .
?item wdt:P86 ?valeur2 .
# Récupère le label de la propriété en français, anglais
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}
Récupérer les items possédant au moins une des propriétés spécifiées (ex : P58 - identifiant data.biblissima, P86 - identifiant GeoNames.
SELECT ?itemLabel ?item
WHERE {
{ ?item wdt:P1 ?valeur . }
UNION
{ ?item wdt:P5 ?valeur . }
# Récupère le label de la propriété en français, anglais
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}
3. Recherche par label
Trouve une entité à partir de son nom (ex : Châteauroux (Indre, France)). Attention, le label doit être identique, sensible à la casse.
SELECT ?itemLabel ?item
WHERE {
?item rdfs:label "Châteauroux (Indre, France)"@fr .
# Récupère le label de la propriété en français, anglais
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}
Trouve une propriété à partir de son nom. Attention, le label doit être identique, sensible à la casse.
SELECT ?proprieteLabel ?propriete
WHERE {
?propriete rdfs:label "date de naissance"@fr .
# Récupère le label de la propriété en français, anglais
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en".
}
}
Statistiques
4. Compter le nombre d'entités
Récupérer le nombre d'entités possédant une propriété précise (ex : P1 - nature de l'élément). Trier par ordre décroissant.
SELECT (COUNT(?item) AS ?nombre) ?valeurLabel ?valeur
WHERE {
?item wdt:P1 ?valeur .
# Récupère le label de la propriété en français, anglais
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}
GROUP BY ?valeur ?valeurLabel
# Ordre décroissant DESC | ordre croissant ASC
ORDER BY DESC(?nombre)
Récupérer le nombre d'occurrences par propriété.
SELECT (COUNT(*) AS ?count) ?proprieteLabel ?propriete
WHERE {
?item ?prop ?valeur .
?propriete wikibase:directClaim ?prop .
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}
GROUP BY ?propriete ?proprieteLabel
ORDER BY DESC(?count)
Filtres
5. Recherche avec une ou plusieurs lettres
Récupérer les entités commençant par une ou plusieurs lettres dans une langue précise (ex :"an", langue française).
SELECT ?itemLabel ?item
WHERE {
?item rdfs:label ?itemLabel .
FILTER(STRSTARTS(LCASE(?itemLabel), "an"))
# Filtre sur la langue
FILTER(LANG(?itemLabel) = "fr")
}
Récupérer les entités qui contiennent une ou plusieurs lettres dans une langue précise (ex :"z", langue française).
SELECT ?itemLabel ?item
WHERE {
?item rdfs:label ?itemLabel .
# Changer la lettre entre les points
FILTER(CONTAINS(LCASE(?itemLabel), "z"))
# Filtre sur la langue
FILTER(LANG(?itemLabel) = "fr")
}
Récupérer les entités finissant par une ou plusieurs lettres dans une langue précise (ex : "an", langue française).
SELECT ?itemLabel ?item
WHERE {
?item rdfs:label ?itemLabel .
FILTER(STRENDS(LCASE(?itemLabel), "an"))
# Filtre sur la langue
FILTER(LANG(?itemLabel) = "fr")
}
6. Entités par nombre de propriétés
Récupérer les entités qui contiennent un nombre minimum de propriétés. (ex : 3).
SELECT (COUNT(?propriete) AS ?nombreProprietes) ?itemLabel ?item
WHERE {
?item wikibase:sitelinks [] .
?item ?propriete ?valeur .
FILTER(STRSTARTS(STR(?propriete), STR(wdt:)))
# Récupère le label de la propriété en français, anglais
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}
GROUP BY ?item ?itemLabel
HAVING(COUNT(?propriete) < 3)
ORDER BY ASC(?nombreProprietes)
Récupérer les entités qui contiennent un certain nombre de propriétés. (ex : 2).
SELECT (COUNT(?propriete) AS ?nombreProprietes) ?itemLabel ?item
WHERE {
?item wikibase:sitelinks [] .
?item ?propriete ?valeur .
FILTER(STRSTARTS(STR(?propriete), STR(wdt:)))
# Récupère le label de la propriété en français, anglais
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}
GROUP BY ?item ?itemLabel
HAVING(COUNT(?propriete) = 2)
ORDER BY ASC(?nombreProprietes)
Récupérer les entités qui contiennent un nombre maximum ou égal de propriétés. (ex : 6).
SELECT (COUNT(?propriete) AS ?nombreProprietes) ?itemLabel ?item
WHERE {
?item wikibase:sitelinks [] .
?item ?propriete ?valeur .
FILTER(STRSTARTS(STR(?propriete), STR(wdt:)))
# Récupère le label de la propriété en français, anglais
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}
GROUP BY ?item ?itemLabel
HAVING(COUNT(?propriete) >= 6)
ORDER BY ASC(?nombreProprietes)
7. Propriétés qui n'ont aucune entité
Identifie les propriétés qui ne sont associées à aucune entité. Utile pour contrôler la qualité des données et repérer ce qui manque dans la Wikibase.
SELECT ?proprieteLabel ?propriete
WHERE {
?propriete a wikibase:Property .
# Jamais utilisée en tant que propriété directe
FILTER NOT EXISTS {
?item ?prop ?valeur .
?propriete wikibase:directClaim ?prop .
}
# Jamais utilisée en tant que qualificatif
FILTER NOT EXISTS {
?statement ?propQual ?valeurQual .
?propriete wikibase:qualifier ?propQual .
}
# Récupère le label de la propriété en français, anglais
SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}
8. Combinaison de plusieurs propriétés avec une lettre
Récupère les items possédant deux propriétés dont le label commence par une lettre donnée (ex : "b", P58 - identifiant data.biblissima, P86 - identifiant GeoNames, langue française).
SELECT DISTINCT ?itemLabel ?item
WHERE {
?item wdt:P58 ?valeur1 .
?item wdt:P86 ?valeur2 .
?item rdfs:label ?itemLabel .
FILTER(LANG(?itemLabel) = "fr")
FILTER(STRSTARTS(LCASE(?itemLabel), "b"))
}
Récupère les items possédant deux propriétés dont le label contient une lettre donnée (ex : "y",P58 - identifiant data.biblissima, P86 - identifiant GeoNames, langue française).
SELECT DISTINCT ?itemLabel ?item
WHERE {
?item wdt:P58 ?valeur1 .
?item wdt:P86 ?valeur2 .
?item rdfs:label ?itemLabel .
FILTER(LANG(?itemLabel) = "fr")
FILTER(CONTAINS(LCASE(?itemLabel), "y"))
}
Récupère les items possédant deux propriétés dont le label finit par une lettre donnée (ex : "n", P58 - identifiant data.biblissima, P86 - identifiant GeoNames, langue française).
SELECT DISTINCT ?itemLabel ?item
WHERE {
?item wdt:P58 ?valeur1 .
?item wdt:P86 ?valeur2 .
?item rdfs:label ?itemLabel .
FILTER(LANG(?itemLabel) = "fr")
FILTER(STRENDS(LCASE(?itemLabel), "n"))
}
9. Label en double
Récupérer les entités qui partagent exactement le même label dans une langue précise pour détecter les saisies en double. Attention, cela cumule les entités et les propriétés.
SELECT ?label (COUNT(?item) AS ?nombre) (GROUP_CONCAT(?item ; separator=", ") AS ?items)
WHERE {
?item rdfs:label ?label .
FILTER(LANG(?label) = "fr")
}
GROUP BY ?label
HAVING(COUNT(?item) > 1)
ORDER BY DESC(?nombre)
10. Entités n'ayant pas une propriété
Afficher les items (P1 = Q5) qui ne possèdent pas ces propriétés.
SELECT DISTINCT ?itemLabel ?item
WHERE {
?item wdt:P1 wd:Q5 .
?item rdfs:label ?itemLabel .
FILTER(LANG(?itemLabel) = "fr")
FILTER NOT EXISTS { ?item wdt:P10 ?v . }
}
11. Entités sans aucun identifiant externe
Afficher les items (ayant n'ature de l'élement agent et personne) qui ne possèdent pas ces identifiants externes (ex : Biblissima).
SELECT DISTINCT ?itemLabel ?item
WHERE {
?item wdt:P1 wd:Q5 .
?item wdt:P1 wd:Q6 .
?item rdfs:label ?itemLabel .
FILTER(LANG(?itemLabel) = "fr")
# Vérifie qu'aucune des propriétés externes n'est présente
FILTER NOT EXISTS {
VALUES ?propExt {
wdt:P58 wdt:P59
}
?item ?propExt ?v .
}
}
Afficher les items (ayant n'ature de l'élement agent et personne)) qui ne possèdent aucun des 37 identifiants externes référencés.
SELECT DISTINCT ?itemLabel ?item
WHERE {
?item wdt:P1 wd:Q5 .
?item wdt:P1 wd:Q6 .
?item rdfs:label ?itemLabel .
FILTER(LANG(?itemLabel) = "fr")
# Vérifie qu'aucune des propriétés externes n'est présente
FILTER NOT EXISTS {
VALUES ?propExt {
wdt:P58 wdt:P59 wdt:P60 wdt:P61 wdt:P62 wdt:P63 wdt:P64
wdt:P65 wdt:P66 wdt:P67 wdt:P68 wdt:P69 wdt:P70 wdt:P71
wdt:P72 wdt:P73 wdt:P74 wdt:P75 wdt:P76 wdt:P77 wdt:P78
wdt:P79 wdt:P80 wdt:P81 wdt:P82 wdt:P83 wdt:P84 wdt:P85
wdt:P86 wdt:P87 wdt:P88 wdt:P89 wdt:P90 wdt:P91 wdt:P92
wdt:P93 wdt:P94
}
?item ?propExt ?v .
}
}
