Requetes sparql: Difference between revisions

From wikibase
Line 62: Line 62:
   FILTER(STRSTARTS(STR(?propriete), STR(wdt:)))
   FILTER(STRSTARTS(STR(?propriete), STR(wdt:)))
    
    
   # Récupère le label de la propriété en français, anglais
   # Récupère le label de la propriété en français
   SERVICE wikibase:label { bd:serviceParam wikibase:language "fr,en".    ?propEntite rdfs:label ?proprieteLabel .
   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, anglais
   # Si la valeur est un item, récupère son label en français
   OPTIONAL {
   OPTIONAL {
     ?valeur rdfs:label ?valeurLabel .
     ?valeur rdfs:label ?valeurLabel .

Revision as of 11:17, 23 March 2026

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 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 {
  ?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". }
}

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

Try it!


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

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 de la propriété 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é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". }
}

Try it!

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

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 de la propriété 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 de la propriété 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é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)

Try it!


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)

Try it!


Requêtes SPARQL avec des filtres

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

Try it!


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

Try it!


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

Try it!


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)

Try it!


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)

Try it!


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)

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 de la propriété 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é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)

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

Try it!


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

Try it!