récupérer dans wikidata tous les éléments correspondant à des batailles

principes du SPARQL

batailles livrées en Grêce entre 1940 et 1949 au cours de trois conflits différents : - guerre italo-grecque - résistance grecque à l’occupation allemande - guerre civile

Si on ne s’occupe que de la Résistance : L’élément “résistance à l’occupation allemande” est le Q490035

Structuration des données dans Wikidata :

élément propriété valeur
la terre a pour satellite la lune
Q2 P398 Q405
élément propriété valeur
Marignan (la ville) est une instance de (=est) une commune d’Italie
Q42932) P31 Q747074
élément propriété valeur
Marignan (la bataille) est une instance de (=est) une bataille
Q330) P31 Q178561

Q = éléments, P = propriétés ; les éléments sont aussi des valeurs dans le triplet élément, propriété, valeur

on peut interroger n’importe quel triplet, ajouter des conditions.

Le service de requête de Wikidata est ouvert à tout le monde. Il dispose d’un grand nombre d’exemples dont on peut s’inspirer pour apprendre à utiliser le langage de requête utilisé par Wikidata comme par d’autres sites du même ordre : le sparql.

Possible d’interroger (et d’enrichir) également Wikidata à travers R au moyen du package R WikidataR (CRAN)

première requête en SPARQL

technique : essayer la requête dans le service de requêtes de Wikidata, puis quand on est satisfait des résultats, copier/coller la requêtre dans un chunck :

df <- query_wikidata(' requête en sparql ')

constitue un tableau (data frame) à partir des résultats d’une requête en sparql

Différence entre ?item et ?itemLabel

item itemLabel
Q330 Battle of Marignano

Configuration type d’une requête en sparql appliquée à Wikidata :


SELECT ?item 
WHERE {
  ?item propriété1 valeur1 .
  ?item propriété2 valeur2 .
  
}

Cette requête peut être rendue plus complexe par l’ajout de préfixes et de paramètres supplémentaires (classement des résultats, groupement par valeurs, etc. / voir le pense-bête de l’Université de Montréal)

la sélection du français comme langue dans la Wikibase fait remonter des itemLabel en français quand ils existent. S’ils n’existent pas, l’item (Q…) apparait à la place du label. Comparer avec une requête qui puise des dénominations en anglais (“fr” -> “en”) : plus de labels s’affichent. On gardera à l’avenir le choix de la base de noms en anglais (“en”)

enrichir les résultats de la recherche avec d’autres informations

un statement est la déclaration qu’un item a pour telle propriété telle valeur. Notre requête ramène uniquement les items et leurs labels qui ont trois propriétés et les valeurs indiquées (est une bataille, a eu lieu en Grêce, a fait partie de la résistance grecque) Certains de ces éléments ou items font l’objet d’autre statements Par exemple, l’item Q18572820 a comme autre statement la propriété location et pour valeur de cette propriété l’élément Kallithea

ON peut souhaiter récupérer ces autres statements dans son tableau sans pour autant diminuer le nombre de résultats (sans exclure les résultats qui n’ont pas de location), pour cela on aura recours à la fonction OPTIONAL

library(WikidataR)
df <- query_wikidata('SELECT ?item ?itemLabel ?location WHERE {
  ?item wdt:P31 wd:Q178561 . # est une bataille
  ?item wdt:P17 wd:Q41 .    # a eu lieu en Grêce
  ?item wdt:P361 wd:Q490035 . # a fait partie de la Résistance grecque 
    OPTIONAL { ?item wdt:P276 ?location}
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
')
## Rows: 6 Columns: 3
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (3): item, itemLabel, location
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
print(df)
## # A tibble: 6 × 3
##   item      itemLabel                    location 
##   <chr>     <chr>                        <chr>    
## 1 Q12880416 Battle of Chora - Agorelitsa Q41      
## 2 Q12880420 Battle of Meligalas          Q548223  
## 3 Q15896585 Battle of Kilkis             Q214347  
## 4 Q15991321 Battle of Karoutes           Q12878799
## 5 Q18572820 Q18572820                    Q478518  
## 6 Q29468626 Q29468626                    <NA>

Lorsque l’élément Wikidata comporte un emplacement (“location”), c’est l’identifiant de l’élément qui apparaît dans cette nouvelle colonne. Pour avoir le nom de la localité, il faut définir un label pour cette propriété : ?location:Label et décider dans quelle langue va s’afficher le label (français, grec ou anglais). Si on ne décide pas ce dernier point, un même item va apparaître autant de fois qu’il y aura eu de langages particuliers dans lesquels cet emplacement aura été traduit (l’item Kallithea a été traduit dans 4 langues : l’anglais, le français, l’espagnol et l’allemand).

library(WikidataR)
df <- query_wikidata('SELECT ?item ?itemLabel ?location ?locationLabel WHERE {
  ?item wdt:P31 wd:Q178561 . # est une bataille
  ?item wdt:P17 wd:Q41 .    # a eu lieu en Grêce
  ?item wdt:P361 wd:Q490035 . # a fait partie de la Résistance grecque 
    OPTIONAL { ?item wdt:P276 ?location .
               ?location rdfs:label ?locationLabel 
                FILTER(lang(?locationLabel) = "en")
    }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
')
## Rows: 6 Columns: 4
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (4): item, itemLabel, location, locationLabel
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
print(df)
## # A tibble: 6 × 4
##   item      itemLabel                    location  locationLabel
##   <chr>     <chr>                        <chr>     <chr>        
## 1 Q12880416 Battle of Chora - Agorelitsa Q41       Greece       
## 2 Q12880420 Battle of Meligalas          Q548223   Meligalas    
## 3 Q15991321 Battle of Karoutes           Q12878799 Karoutes     
## 4 Q18572820 Q18572820                    Q478518   Kallithea    
## 5 Q15896585 Battle of Kilkis             Q214347   Kilkis       
## 6 Q29468626 Q29468626                    <NA>      <NA>

se créer un compte Wikimedia

On peut remarquer que dans le cas de la Bataille de Chora - Agorelitsa, la location correspond au Pays, alors que dans les autres cas, c’est le lieu précis (localité) de la bataille qui est renseigné : l’élément Q41 apparaît à la fois en lien avec la propriété *country” (P17) et la propriété “location” (P276). Pour cette dernière, il vaudrait mieux indiquer la localité où s’est déroulée cette bataille. D’après l’article correspondant dans Wikipédia, elle s’est déroulée dans deux localités entre Chora et Ampelofyto en Messénie. Il n’est pas forcément aisé de trouver dans la liste des éléments ayant pour label Chora (un nom commun en Grêce et présent aussi dans d’autres langues) le Chora de la Méssenie dont il est question ici mais une lecture attentive des résultats, nous permet de déterminer qu’il s’agit de cet élément

De la même manière qu’il est possible d’agir sur une page wikipédia sans disposer de compte Wikimedia, il est possible ici de faire la modification à la main directement sur l’élément :

Néanmoins il est recommandé de ne pas faire de modifications de façon anonyme. En effet, la communauté qui veille sur Wikipédia et les projets frères de l’Encyclopédie, parmi lesquels Wikidata, a plus confiance généralement dans une modification qui peut être rapportée à un compte, surtout si le détenteur du compte a pris soin de se présenter et de présenter ses intérêts et ses motivations à enrichir Wikipédia et Wikimédia sur une page utilisateur.

Par ailleurs, pour réaliser des enrichissements de groupe (voir la partie sur les enrichissements

a une page Wikipédia

relations entre Wikidata et Wikipédia. Lorsqu’on veut écrire des articles sur Wikipédia (par exemple lors des Wikithons) il peut être intéressant de se poser la question suivante :

quels éléments historiques il y a dans Wikidata qui n’ont pas encore fait l’objet d’un article Wikipédia dans ma langue. Sachant que tous les éléments dans Wikidata n’ont pas vocation à faire l’objet de pages dans Wikipédia (cf. critères d’admissibilité). Mais pour les batailles, sans doute que c’est le cas.

a une page sur Wikipedia

library(WikidataR)
df1 <- query_wikidata('SELECT DISTINCT ?item ?itemLabel ?date ?coord ?latitude ?longitude WHERE {
  ?item wdt:P31 wd:Q178561 . # Is a battle
  ?item wdt:P17 wd:Q41 .    # Has Greece as location
  ?item wdt:P361  ?o .
  
  VALUES ?o { wd:Q490035
              wd:Q223604
              wd:Q188972
  
  }
  
 OPTIONAL { ?item wdt:P585 ?date. }
 OPTIONAL { ?item wdt:P625 ?coord. 
                 ?coords_sample ps:P625 ?coord;
                 psv:P625 [
                   wikibase:geoLatitude ?latitude;
                   wikibase:geoLongitude ?longitude
                 ] .
}

  FILTER NOT EXISTS {                               # Check if there is no French Wikipedia page for this item
      ?wikipedia schema:about  ?item ;               # Get wikipedia information about this item
             schema:isPartOf <https://fr.wikipedia.org/> }  # Only en pages, not other language versions
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
')
## Rows: 10 Columns: 6
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (3): item, itemLabel, coord
## dbl  (2): latitude, longitude
## dttm (1): date
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
print(df1)
## # A tibble: 10 × 6
##    item      itemLabel                    date       coord    latitude longitude
##    <chr>     <chr>                        <chr>      <chr>    <chr>    <chr>    
##  1 Q98931743 Battle of Metaxades          <NA>       <NA>     <NA>     <NA>     
##  2 Q29468626 Q29468626                    <NA>       <NA>     <NA>     <NA>     
##  3 Q1772340  Battle of Elaia–Kalamas      1940-11-08 Point(2… 39.5867  20.1422  
##  4 Q716722   Battle of Pindus             1940-11-13 Point(2… 40.0889  20.9253  
##  5 Q18121569 Battle of Agios Vasileios    <NA>       Point(2… 37.1870… 22.68917…
##  6 Q18572820 Q18572820                    1944-07-24 <NA>     <NA>     <NA>     
##  7 Q15991321 Battle of Karoutes           1944-08-05 <NA>     <NA>     <NA>     
##  8 Q12880416 Battle of Chora - Agorelitsa 1944-07-19 Point(2… 37.0549… 21.705991
##  9 Q20552658 Battle of Florina            <NA>       Point(2… 40.7827… 21.40888…
## 10 Q15896585 Battle of Kilkis             1944-11-04 Point(2… 40.9833… 22.866667
write.csv(df1, "batailles.csv")

autres batailles impliquant la résistance :

(Q16331929)

Ajout des coordonnées géographiques

création de la carte

dataframe <- read.csv("batailles_complet.csv")
print(dataframe)
##     X      item                    itemLabel       date
## 1   1 Q98931743          Battle of Metaxades 1949-05-15
## 2   2 Q29468626              Battle of Mines       <NA>
## 3   3  Q1772340      Battle of Elaia–Kalamas 1940-11-08
## 4   4   Q716722             Battle of Pindus 1940-11-13
## 5   5 Q18121569    Battle of Agios Vasileios 1949-01-22
## 6   6 Q18572820      Battle of Byzani Street 1944-07-24
## 7   7 Q15991321           Battle of Karoutes 1944-08-05
## 8   8 Q12880416 Battle of Chora - Agorelitsa 1944-07-19
## 9   9 Q20552658            Battle of Florina 1949-02-12
## 10 10 Q15896585             Battle of Kilkis 1944-11-04
## 11 11 Q16331929        Battle of Fardykambos 1943-03-06
##                               coord latitude longitude
## 1                              <NA> 41.42000  26.22528
## 2                              <NA>       NA        NA
## 3            Point(20.1422 39.5867) 39.58670  20.14220
## 4            Point(20.9253 40.0889) 40.08890  20.92530
## 5  Point(22.689172222 37.187097222) 37.18710  22.68917
## 6                              <NA> 37.96125  23.70538
## 7                              <NA> 38.31350  22.15460
## 8        Point(21.705991 37.054952) 37.05495  21.70599
## 9  Point(21.408888888 40.782777777) 40.78278  21.40889
## 10       Point(22.866667 40.983333) 40.98333  22.86667
## 11                                  40.13590  21.32500
## Warning: le package 'dplyr' a été compilé avec la version R 4.3.3
## 
## Attachement du package : 'dplyr'
## Les objets suivants sont masqués depuis 'package:stats':
## 
##     filter, lag
## Les objets suivants sont masqués depuis 'package:base':
## 
##     intersect, setdiff, setequal, union
##     X      item                    itemLabel       date
## 1   1 Q98931743          Battle of Metaxades 1949-05-15
## 2   2 Q29468626              Battle of Mines       <NA>
## 3   3  Q1772340      Battle of Elaia–Kalamas 1940-11-08
## 4   4   Q716722             Battle of Pindus 1940-11-13
## 5   5 Q18121569    Battle of Agios Vasileios 1949-01-22
## 6   6 Q18572820      Battle of Byzani Street 1944-07-24
## 7   7 Q15991321           Battle of Karoutes 1944-08-05
## 8   8 Q12880416 Battle of Chora - Agorelitsa 1944-07-19
## 9   9 Q20552658            Battle of Florina 1949-02-12
## 10 10 Q15896585             Battle of Kilkis 1944-11-04
## 11 11 Q16331929        Battle of Fardykambos 1943-03-06
##                               coord latitude longitude                 date_iso
## 1                              <NA> 41.42000  26.22528 +1949-05-15T00:00:00Z/11
## 2                              <NA>       NA        NA         +NAT00:00:00Z/11
## 3            Point(20.1422 39.5867) 39.58670  20.14220 +1940-11-08T00:00:00Z/11
## 4            Point(20.9253 40.0889) 40.08890  20.92530 +1940-11-13T00:00:00Z/11
## 5  Point(22.689172222 37.187097222) 37.18710  22.68917 +1949-01-22T00:00:00Z/11
## 6                              <NA> 37.96125  23.70538 +1944-07-24T00:00:00Z/11
## 7                              <NA> 38.31350  22.15460 +1944-08-05T00:00:00Z/11
## 8        Point(21.705991 37.054952) 37.05495  21.70599 +1944-07-19T00:00:00Z/11
## 9  Point(21.408888888 40.782777777) 40.78278  21.40889 +1949-02-12T00:00:00Z/11
## 10       Point(22.866667 40.983333) 40.98333  22.86667 +1944-11-04T00:00:00Z/11
## 11                                  40.13590  21.32500 +1943-03-06T00:00:00Z/11

enrichissement de Wikidata


item <- c(dataframe$item)  # This should be replaced by actual QID created on Wikidata
property <- "P585"     # Date of birth
value <- c(dataframe$date_iso)  # ISO date format

library(WikidataR)
write_wikidata(items = item,
               properties = "P585",
               values = value,
               format = "api",
               api.username = "identifiant_utilisateur", 
               api.token = "mettre ici votre token")