Requetes sparql: Difference between revisions

From wikibase
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 194: Line 194:
# Ordre décroissant DESC | ordre croissant ASC
# Ordre décroissant DESC | ordre croissant ASC
ORDER BY DESC(?nombre)
ORDER BY DESC(?nombre)
</sparql>
Principales entitées
<sparql tryit="1">
SELECT ?Categorie (COUNT(?item) AS ?Nombre)
WHERE {
  VALUES (?type ?Categorie) {
    (wd:Q6 "Personnes")
    (wd:Q7 "Collectivitées")
    (wd:Q8 "Familles")
    (wd:Q2 "Lieux")
  }
  ?item wdt:P1 ?type .
}
GROUP BY ?Categorie
</sparql>
</sparql>


Line 211: Line 228:


= Requêtes SPARQL avec des filtres =
= Requêtes SPARQL avec des filtres =
== Recherche avec une ou plusieurs lettres ==
== Recherche avec un ou plusieurs lettres ==


Récupère les entités commençant par une ou plusieurs lettres dans une langue précise (ex :"an", en français).  
Récupère les entités commençant par une ou plusieurs lettres dans une langue précise (ex :"an", en français).  
Line 250: Line 267:
</sparql>
</sparql>


== Recherche par propriété et valeur de cette propriété ==


Récupère les entités qui présentent une valeur précise (ici P29 = Q3691 soit Langue parlée = Grec moderne)<sparql tryit="1">
 
Récupère les entités qui présentent une valeur précise (ici P29 = Q3691 soit Langue d'expression = Grec ancien)<sparql tryit="1">
SELECT ?item ?itemLabel ?valeurLabel
SELECT ?item ?itemLabel ?valeurLabel
WHERE {
WHERE {
   ?item wdt:P29 wd:Q3691 .
   ?item wdt:P29 wd:Q3691 .
   SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
   SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}
</sparql>
Récupère les entités qui possèdent une propriété dont la valeur ne dépasse pas la longueur définie (ici IDREF avec moins de 9 caractères)<sparql tryit="1">
SELECT DISTINCT ?entity ?p61Value WHERE {
  ?entity wdt:P63 ?p61Value .
  FILTER(STRLEN(STR(?p61Value)) < 9)
}
}
</sparql>
</sparql>

Latest revision as of 07:43, 20 May 2026

Quelques définitions

  • Label : Nom donné à une entité (item) ou à une propriété.
  • Entité : Appelée « item » dans les requêtes. Représente une personne, un lieu, une langue ou un concept auquel on associe des informations.
  • QID : Identifiant unique permettant de reconnaître une entité sans dépendre de son label.
  • Propriété : Type de relation ou caractéristique utilisée pour décrire une entité.
  • PID : Identifiant unique permettant 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 entités et propriétés.

Dans les requêtes SPARQL

  • SELECT : Permet de choisir les informations (variables) que l’on veut afficher dans le résultat.
  • WHERE : Contient les conditions de la requête (les relations entre entités et propriétés).
  • ?variable : Une variable représente une valeur inconnue que l’on cherche à récupérer.
  • wd : Préfixe utilisé pour désigner les entités (items).
  • wdt : Préfixe utilisé pour désigner les propriétés.
  • GROUP BY : Permet de regrouper les résultats selon certaines valeurs.
  • HAVING : Permet de filtrer les résultats après un GROUP BY.
  • FILTER : Permet de filtrer les résultats selon certaines conditions.
  • FILTER NOT EXISTS : Permet de garder uniquement les résultats pour lesquels une condition n’existe pas.
  • ORDER BY : Trier les résultats
    • ASC : Trier les résultats par ordre croissant (de A à Z, de 1 à 9).
    • DESC : Trier les résultats par ordre décroissant (de Z à A, de 9 à 1).
  • UNION : Permet de combiner plusieurs conditions, équivalent de "ou".
  • OPTIONAL : Permet d’inclure une information si elle existe, sans exclure le résultat si elle est absente.
  • LIMIT : Définir le nombre de résultats à afficher.
  • DISTINCT : Permet de supprimer les doublons dans les résultats.
  • COUNT : Permet de compter le nombre de résultats.


Convention de nommage des variables

  • ?item : Représente une entité, identifiée par une URI dans la Wikibase.
  • ?itemLabel : Le nom (label) de l’entité, lisible par un humain.
  • ?propriete : Représente une propriété utilisée dans une relation, identifiée par une URI dans la Wikibase.
  • ?proprieteLabel : Le nom (label) de la propriété.
  • ?valeur : La valeur associée à une propriété pour une entité. Cette valeur peut être une entité ou une donnée (texte, date, nombre, etc.).
  • ?valeurLabel : Le nom (label) de cette valeur si elle est une entité.

Remarque : Les noms des variables sont libres, mais ces conventions sont couramment utilisées pour faciliter la lecture des requêtes.

Requêtes SPARQL de base

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 {
  # Les entités (?item) qui possèdent au moins un lien vers le Wikibase
  ?item wikibase:sitelinks [] .
  # Récupère le label en français, anglais
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}

Try it!


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 en français, anglais
    SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}

Try it!


Rechercher par propriétés

Récupère 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 en français, anglais
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}

Try it!


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 en français
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr".    ?propEntite rdfs:label ?proprieteLabel .
  }
  # Si la valeur est un item, récupère son label en français
  OPTIONAL {
    ?valeur rdfs:label ?valeurLabel .
    FILTER(LANG(?valeurLabel) IN ("fr"))
  }
}
GROUP BY ?propriete ?proprieteLabel ?valeur ?valeurLabel
ORDER BY ?proprieteLabel

Try it!


Récupère 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 en français, anglais
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}

Try it!

Récupère 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 en français, anglais
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}

Try it!


Récupère les items associés à une propriété (ex : P10 sexe et genre).

SELECT ?valeurLabel ?valeur
WHERE {
  ?item wdt:P10 ?valeur .
  # Récupère le label en français, anglais
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}
GROUP BY ?valeurLabel ?valeur

Try it!


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 en français, anglais
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}

Try it!


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 en français, anglais
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
  }
}

Try it!


Requêtes SPARQL pour des statistiques

Compter le nombre d'entités

Récupère 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 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)

Try it!


Principales entitées

SELECT ?Categorie (COUNT(?item) AS ?Nombre)
WHERE {

  VALUES (?type ?Categorie) {
    (wd:Q6 "Personnes")
    (wd:Q7 "Collectivitées")
    (wd:Q8 "Familles")
    (wd:Q2 "Lieux")
  }

  ?item wdt:P1 ?type .
}
GROUP BY ?Categorie

Try it!


Récupère 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)

Try it!


Requêtes SPARQL avec des filtres

Recherche avec un ou plusieurs lettres

Récupère les entités commençant par une ou plusieurs lettres dans une langue précise (ex :"an", en français).

SELECT ?itemLabel ?item
WHERE {
  ?item rdfs:label ?itemLabel .
  FILTER(STRSTARTS(LCASE(?itemLabel), "an"))
  # Filtre sur la langue
  FILTER(LANG(?itemLabel) = "fr")
}

Try it!


Récupère les entités qui contiennent une ou plusieurs lettres dans une langue précise (ex :"z", en français).

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")
}

Try it!


Récupère les entités finissant par une ou plusieurs lettres dans une langue précise (ex : "an", en français).

SELECT ?itemLabel ?item
WHERE {
  ?item rdfs:label ?itemLabel .
  FILTER(STRENDS(LCASE(?itemLabel), "an"))
  # Filtre sur la langue
  FILTER(LANG(?itemLabel) = "fr")
}

Try it!


Recherche par propriété et valeur de cette propriété

Récupère les entités qui présentent une valeur précise (ici P29 = Q3691 soit Langue d'expression = Grec ancien)

SELECT ?item ?itemLabel ?valeurLabel
WHERE {
  ?item wdt:P29 wd:Q3691 .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}

Try it!


Récupère les entités qui possèdent une propriété dont la valeur ne dépasse pas la longueur définie (ici IDREF avec moins de 9 caractères)

SELECT DISTINCT ?entity ?p61Value WHERE {
  ?entity wdt:P63 ?p61Value .
  FILTER(STRLEN(STR(?p61Value)) < 9)
}

Try it!


Entités par nombre de propriétés

Récupère 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 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)

Try it!


Récupère 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 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)

Try it!


Récupère 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 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)

Try it!


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 en français, anglais
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en". }
}

Try it!


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"))
}

Try it!


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"))
}

Try it!


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"))
}

Try it!


Label en double

Récupère 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)

Try it!


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 . }

}

Try it!


Entités sans aucun identifiant externe

Afficher les items (ayant pour nature de l'élément 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 .
  }
}

Try it!


Afficher les items (ayant pour nature de l'élément 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 .
  }
}

Try it!