https://logo.clearbit.com/wikipedia.orghttps://logo.clearbit.com/dbpedia.orghttps://logo.clearbit.com/wikidata.org
Recherche wikidata avec sparql

Choix de la requête :
Essayer un exemple : Charlesde VinciLouis XIVMarie CurieDupont

# Recherche de personnes ayant un article wikipedia en français
# Remplacer "__replace__" par la valeur souhaitée ('léonard de vinci", 'albert einstein', 'louis xiv', 'dupont', ...)
SELECT distinct ?item ?itemLabel ?articleLabel ?itemDescription
    (SAMPLE(?image) as ?image) # on peut avoir +eurs images (évite les doublons dans les résultats) 
    WITH {
      SELECT * WHERE {
        BIND (LCASE("__REPLACE__") AS ?searchfor1) 
        BIND (REPLACE(?searchfor1, "[àâä]", "a") AS ?searchfor2)
        BIND (REPLACE(?searchfor2, "[éèêë]", "e") AS ?searchfor)
      }
    } AS %p
    WITH {
      SELECT ?item
      WHERE {
        INCLUDE %p
        BIND (CONCAT("haswbstatement:P31=Q5 ", ?searchfor) AS ?searchstr)
        SERVICE wikibase:mwapi {
          bd:serviceParam wikibase:endpoint "www.wikidata.org" ;
            wikibase:api "Generator" ;
            mwapi:generator "search" ;
            mwapi:gsrsearch ?searchstr ; # Full-text search in wiki.
            mwapi:gsrnamespace "0" ;
            mwapi:language "fr" ;
            wikibase:limit 100 ;
            mwapi:gsrprop "" .
          ?item wikibase:apiOutputItem mwapi:title .
        }
      }
    } AS %i
    WHERE {
      INCLUDE %i
      INCLUDE %p
      #   Filtre sur le label. L'article concerné doit contenir la recherche initiale dans son titre
      #   Si on filtre sur le nom : 'da Vinci' uniquement pour Léonard de Vinci. 
      #   Le label est plus souple (+eurs labels associés à un elt, ie léonard, leonard, ...) et permet de filtrer par nom + prénom
      #   inconvénient recherche par label : trouve Piotr Yakoubovitchp pour Charles Baudelaire
      ?item rdfs:label ?itemLabel .
      FILTER (LANG(?itemLabel)="fr")
      BIND (REPLACE(LCASE(?itemLabel), "[àâä]", "a") AS ?itemLabel1)
      BIND (REPLACE(?itemLabel1, "[éèêë]", "e") AS ?itemLabel2)

      # filtre les résultats obtenus : 
      #   - si la recherche contient un espace, on vérifie que le label contient les 2 mots (permet d'inverser le nom et le prénom)
      #   - sinon on vérifie que le label contient la recherche glolable
      BIND(STRAFTER(?searchfor, " ") as ?afterSpace)
      BIND(STRBEFORE(?searchfor, " ") as ?beforeSpace)
      BIND(contains(?searchfor, " ") as ?containsSpace)
      FILTER(
            CONTAINS(?itemLabel2, ?searchfor) 
              || (
                ?containsSpace = true
                && CONTAINS(?itemLabel2, ?beforeSpace)
                && CONTAINS(?itemLabel2, ?afterSpace)
              )
      )
      
      # article wikipédia français associé
      ?article schema:about ?item .
      ?article schema:inLanguage "fr" .
      ?article schema:isPartOf <https://fr.wikipedia.org/>.        
      
      OPTIONAL { ?item wdt:P18 ?image }
      SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],fr". }
    }
    GROUP BY ?item ?itemLabel ?articleLabel ?itemDescription