Skip to content

Instantly share code, notes, and snippets.

@antoinecourtin
Last active January 22, 2024 10:17
Show Gist options
  • Save antoinecourtin/75ba4c8bad0ac16c048a79049694b64d to your computer and use it in GitHub Desktop.
Save antoinecourtin/75ba4c8bad0ac16c048a79049694b64d to your computer and use it in GitHub Desktop.

Ressources utiles

Cours M2 - 4L9IF0P3 - 2023-2024

Sommaire

  1. Ressources utiles pour les cours du 22 novembre 2023
  2. Ressources utiles pour les cours du 29 novembre 2023
  3. Ressources utiles pour les cours du 6 décembre 2023
  4. Ressources utiles pour les cours du 13 décembre 2023
  5. Ressources utiles pour les cours du 10 janvier 2024
  6. Ressources utiles pour les cours du 17 janvier 2024
  7. Ressources utiles pour les cours du 24 janvier 2024
  8. Ressources utiles pour les cours du 31 janvier 2024

Ressources utiles pour les cours du 22 novembre 2023

Exemples des Githubes Pages des étudiants du cours "Analyse et visualisation de données" des années précédantes :

Conférence à visionner

  • Visionner la conférence TedX de Samuel Goëta intitulée Pour une culture critique des données
  • Visionner la conférence TED de Tim Berners-Lee de 2009

Recensement des plateformes Open Data en France

Ressources utiles pour les cours du 29 novembre 2023

outils pratique pour le sanity check

  • Breve
  • WTF CSV
  • Accéder à Transformy : petit outil en ligne pour modifier le format d'un jeu de données (fonctionne plus 😩 )

REGEX

Exercices

  • Télécharger le fichier pour l'exercice n°1 sur la qualité des données

Sprint Qualité

  • Télécharger à la version allégée du sprint qualité (faire un export)
  • Télécharger une grille des 120 points de contrôls du sprint qualité (faire un export)
  • Télécharger le guide qualité complet

Open Data = schéma + jeux de données de référence

Ressources utiles pour les cours du 6 décembre 2023

Ressources introduction à la visualisation de l'information

Vidéos à voir pour l'exercice de synthèse à envoyer avant le 13 décembre 2023

Github

Pour la semaine prochaine : avoir tous un répertoire github avec un fichier index.md avec le titre de votre projet (même fictif) et un fichier .yml

Palladio

SELECT distinct ?creator ?creatorLabel ?datebirth ?datedeath ?placebirthLabel (CONCAT(STR(?lat),", ",STR(?long)) as ?lat_long) ?placedeathLabel (CONCAT(STR(?lat_2),", ", STR(?long_2)) as ?lat_long_2)

WHERE {
?creator wdt:P106 wd:Q1028181;
          p:P570/psv:P570 [
            wikibase:timeValue ?date;
            wikibase:timePrecision ?precision
          ].
  FILTER("1500-12-31"^^xsd:dateTime < ?date && ?date < "1600-00-00"^^xsd:dateTime).
  FILTER(?precision >= 9).
  BIND(YEAR(?date) AS ?year).
?creator wdt:P19 ?placebirth. # lieu de naissance 
?creator wdt:P569 ?datebirth.
?creator wdt:P570 ?datedeath. 
?placebirth wdt:P625 ?coord.
?placebirth p:P625 ?declaration.
?declaration psv:P625 ?coord_geo.
?coord_geo wikibase:geoLatitude ?lat.
?coord_geo wikibase:geoLongitude ?long.
?creator wdt:P20? ?placedeath. 
?placedeath wdt:P625 ?coord_death.
?placedeath p:P625 ?declaration2.
?declaration2 psv:P625 ?coord_geo_2.
?coord_geo_2 wikibase:geoLatitude ?lat_2.
?coord_geo_2 wikibase:geoLongitude ?long_2.
SERVICE wikibase:label { 
bd:serviceParam wikibase:language "fr,en"}
}

Ressources utiles pour les cours du 13 décembre 2023

OpenRefine

Pour les gros fichiers : augmenter la taille

  • Par défaut OpenRefine utilisera 1,4 Go de mémoire vive au maximum. Si la machine dispose d’assez de mémoire il est fortement conseillé d’augmenter ce seuil en modifiant un fichier de configuration. Sous Windows : dans le fichier refine.ini, modifier la ligne REFINE_MEMORY, Sous Mac : ouvrir le fichier ‘/Applications/OpenRefine.app/Contents/info.plist’ et modifier la valeur -Xmx1400 (par ex: -Xmx4000 pour doubler la mémoire maximale)

Liens vers ressources indispensables en français pour OpenRefine appliqués aux GLAMs

Wikidata et OpenRefine

Jeux de données de tests :

Quelques exemples de "formule" utiles dans OpenRefine

  • rajouter une valeur fixe à une table : "valeur que tu veux ajouter" + cells['nom_delacolone'].value`
  • exemple pour faire un rechercher/remplacer : value.replace("MotRecherché","MotLeRemplaçant")
  • effectuer plusieurs modifications en un seul passage : value.replace("~", "").replace(",","")
  • value.replace("\"", ""). Le caractère \ est un caractère d'échappement, il permet d'indiquer à OpenRefine qu'il doit utiliser le guillemet comme caractère à remplacer et non pas comme élément de la fonction value.replace.
  • Enlever tout sauf les chiffres" : replace(value,/[[a-z],[A-Z],(é|è|à|ù),\,\;\:\.\?\/\!\=\+\"\'\-\(\)\[\]]/,"")
  • Extraction d'une date de type aaaa : value.match(/.*(\d{4}).*/)[0]
  • Supprimer les contenus semblables dans une même cellule : value.split(", ").uniques().join(", ")
  • comparer les valeurs de 2 colonnes :
    • via "Add column" > if(cells["a"].value == cells["b"].value, "Yes", "No")
    • via une construction de facet dans Facet > Custom text facet avec l'expression value == cells["b"].value
  • géocodage avec adresse.data.gouv.fr > https://goo.gl/P3sqsB
  • Calculer des longueurs de chaînes : value.length()
  • Récupérer les info des parenthèses dans une chaine de charactère : value.match(/.*(\(.*\)).*/)[0]
  • Compter les mots d'une chaîne : value.split(/\b/).length()
  • Supprimer les espaces superflus d'une chaîne : value.trim()
  • L'apostrophe est un caractère utilisé dans les formules ; lorsqu'il est utilisé dans du contenu, il faut utiliser un "caractère d'échappement" pour qu'il soit correctement considéré, en l'occurrence le faire précéder de \ value.replace('d'honorable','de ')
  • Comparer les valeurs de 2 colonnes en insérant une colonne Yes/No : ajouter une colonne en fonction de cette colonne if(cells["site officiel"].value == cells["website_url"].value, "Y", "N")
  • Ajouter un numéro incrémenté avec un préfix : Clic sur une colonne / Ajouter une colonne en fonction de cette colonne / "numid__" + rowIndex
  • Transformer des caractères spéciaux HTML (ex: é) : Edit cells > Common transform > Unescape HTML entities
  • extration des parenthèse : value.match(/.*(\(.*\)).*/)[0]
  • extraction d'une date de type "12 janvier 1987" : value.match(/.*(\d{2} [a-z]* \d{4}).*/)[0]
  • Enlever tous les chiffres dans les cellules : replace(value, /\d/, '')
  • appeler une API via la fonction Fetching URL: "http://maps.google.com/maps/api/geocode/json?sensor=false&address=" + escape(value, "url")"
  • Extraitre une info dans un json (lattitude) issue d'une requête à une API : value.parseJson().results[0].geometry.location.lat
  • Extraire l'id (ou le nom du Q) de wikidata après le réalignement: cell.recon.match.id / cell.recon.match.name
  • Template pour croiser 2 jeux de données = cell.cross(otherProject, columnToMatch)[0].cells[columnToAdd].value
  • Template pour croiser 2 jeux de données mais avec x valeurs à récupérer pour un même id : forEach(cell.cross("Fichier1", "cle"),r,forNonBlank(r.cells["colonnearecuperer"].value,v,v,"")).join("|"). Dans cet exemple, le pipe est le séparateur
  • Pour récupérer le label natif d'un élément Qwikidata après reconciliation : native label
  • pour exporter en geojson : https://gist.github.com/psychemedia/53e30d3d151fea23af68
  • pour appeler une API tel que geonames : http://api.geonames.org/search?name=paris&country=FR&maxRows=3&username=formationbulac1

reconcilier un fichier avec son propre fichier CSV (version simple)

Liens vers quelques tuto complémentaire intégrant OpenRefine

Ressources utiles pour les cours du 10 janvier 2024

Retour sur Openrefine

  • Exemple de process à partir du fichier LieuxRepOrsay2-peinture-extract-csv.csv pas à pas
  • Objectif : à partir d'un export d'une base de collection du musée d'Orsay de visualiser sur une carte quels sont les lieux qui ont été représentés.

Wikidata Partie 1

Requêtes vues dans les slides :

Wikidata et les annotation avec IIIF (et visualisation via Mirador)

Quelques exemples de requêtes commentées

  • requête SPARQL pour afficher les céramiques grecques antiques du musée Saint-Raymond ayant un id d'objet dans AGORHA
select DISTINCT ?objet ?objetLabel ?img ?idAgorha
where {
	?objet wdt:P31/wdt:P279* wd:Q738680. #que de la céramique grecque antique
?objet wdt:P195 wd:Q1376. #conservé au Musée Saint-Raymond
      ?objet wdt:P2344 ?idAgorha. #et un identifiant AGORHA
  OPTIONAL { #en option 
    ?objet wdt:P18 ?img.   #avec une image


  }
  SERVICE wikibase:label { #pour récuéprer les labels
bd:serviceParam wikibase:language "fr,en"}
}
  • requête SPARQL pour afficher lar architectes américains
PREFIX bd: <http://www.bigdata.com/rdf#>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
select distinct ?personneLabel 
where {
?personne wdt:P31 wd:Q5 . #pour chercher des personnes humaines
?personne wdt:P106 wd:Q42973 . #qui occupe la fonction d'architecte
?personne wdt:P27 wd:Q30 . #qui sont américains
SERVICE wikibase:label { 
bd:serviceParam wikibase:language "fr,en"}
}
  • afficher sous forme de timeline les oeuvres du projet Europeana280
#defaultView:Timeline
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
SELECT ?itemLabel ?image ?creatorLabel ?datecreation ?placebirthLabel where {
      ?item wdt:P31/wdt:P279* wd:Q838948 .  # œuvre d’art et ss-classe 
  ?item wdt:P608 wd:Q20980830. # du projet Europeana 280
  
 OPTIONAL  {
   ?item wdt:P571 ?datecreation. # date de création, utile pour l'affichage timeline
   ?item wdt:P170 ?creator. # créateur 
   ?item wdt:P18 ?image. #pour l'image
   ?creator wdt:P19 ?placebirth. # lieu de naissance 
   ?placebirth wdt:P625 ?geoloc . #coordonnées géo, utile pr l'affichage carto
  
           }
  SERVICE wikibase:label {
       bd:serviceParam wikibase:language "fr,es,en" .
    }
       
}
  • Lister uniquement l'id de éléments des oeuvres de Klimt
SELECT *
WHERE
{
  ?item wdt:P31 wd:Q3305213 .
  ?item wdt:P170 wd:Q34661 .
}
  • Afficher sous forme de grille d'images toutes les oeuvres attribuées au Caravage
#defaultView:ImageGrid
SELECT DISTINCT ?item ?itemLabel (YEAR(?date) AS ?year) ?dimensions ?locationLabel ?countryLabel ?image WHERE {
  { ?item wdt:P170 wd:Q42207 . } UNION { ?item wdt:P1773 wd:Q42207 }
  OPTIONAL { ?item p:P276 ?statement . ?statement ps:P276 ?location . FILTER NOT EXISTS { ?statement pq:P582 ?x } OPTIONAL { ?location wdt:P17 ?country } }
  OPTIONAL { ?item wdt:P18 ?image }
  OPTIONAL { ?item wdt:P2048 ?length }
  OPTIONAL { ?item wdt:P2049 ?width }
  OPTIONAL { ?item wdt:P571 ?date }
  BIND (CONCAT(STR(?length),"×",STR(?width)) AS ?dimensions)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en" . }
} ORDER BY ?itemLabel
  • Les groupes de personnages de l’univers Marvel sous forme de graphe de relation
#defaultView:Graph
SELECT ?char ?charLabel ?group ?groupLabel ("7FFF00" as ?rgb)
WHERE {
	?group wdt:P31 wd:Q14514600 ;  # group of fictional characters
          wdt:P1080 wd:Q931597.  # from Marvel universe
 ?char wdt:P463 ?group # member of group
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en".}
}
  • Afficher sous forme de liste toutes les céramiques grecques du Metropolitan Museum pour lesquelles la base AGORHA possède des informations de provenance.
	select DISTINCT ?item ?itemLabel ?img ?idAgorha
	where {
		?item wdt:P31/wdt:P279* wd:Q738680 . # pottery of ancient Greece
		?item wdt:P18 ?img.    
	    ?item wdt:P276 wd:Q160236.
	  ?item wdt:P2344 ?idAgorha.

	  SERVICE wikibase:label {
	bd:serviceParam wikibase:language "fr,en"}
	}
  • Afficher sous la forme d'une timeline, les propriétaires des céramiques grecques du MET
	#defaultView:Timeline
	select DISTINCT ?item ?itemLabel ?eventLabel ?img ?proprietairesLabel ?datedebut ?datefin
	where {
		?item wdt:P31/wdt:P279* wd:Q738680 . # pottery of ancient Greece
		?item wdt:P18 ?img.    
	    ?item wdt:P276 wd:Q160236.
	    ?item p:P127 ?declaration_proprietaires.
	    ?declaration_proprietaires ps:P127 ?proprietaires.
	    OPTIONAL
		{?declaration_proprietaires pq:P580 ?datedebut.
		FILTER(!(STRSTARTS(?datedebut, 't')))}
	    OPTIONAL
		{?declaration_proprietaires pq:P582 ?datefin.
		FILTER(!(STRSTARTS(?datefin, 't')))}

	  SERVICE wikibase:label {
	bd:serviceParam wikibase:language "fr,en"}
	}
  • Afficher sous forme de carte toutes les sculptures publiques dans Paris
#defaultView:Map{"layer": "?matiereLabel"}  		  # genre : choisir une variable comme layer
SELECT DISTINCT ?item  ?Titre ?createur ?matiereLabel (year(?date) as ?AnneeCreation) ?image ?coord 
WHERE {
   ?item wdt:P31/wdt:P279* wd:Q860861.                    # sculpture
   ?item wdt:P136 wd:Q557141 .                            # genre : art public
    ?item wdt:P186 ?matiere.				  # et récupérer la technique/matière
   {?item wdt:P131 wd:Q90.}                               # ... située dans Paris

   UNION
   {?item wdt:P131 ?arr.                                  # ... ou dans un arrondissement de Paris  
   ?arr wdt:P131 wd:Q90. }
   ?item rdfs:label ?Titre filter (lang(?Titre) = "fr").  # Titre

   OPTIONAL {?item wdt:P170 ?createur.                   # créateur/créatrice (option)
   ?Qcreateur rdfs:label ?createur filter (lang(?createur) = "fr") .}
   OPTIONAL {?item wdt:P571 ?date.}                       # date de création (option)
   OPTIONAL {?item wdt:P18  ?image.}                      # image (option)
   OPTIONAL {?item wdt:P625 ?coord.}                      # coordonnées géographiques (option)
  SERVICE wikibase:label { bd:serviceParam wikibase:language "fr". }
}
  • Qui fête son anniversaire aujourd'hui
#Qui fête son anniversaire aujourd'hui ?
#Whose birthday is today?
SELECT ?entityLabel (YEAR(?date) as ?year)
WHERE
{
    BIND(MONTH(NOW()) AS ?nowMonth)
    BIND(DAY(NOW()) AS ?nowDay)

    ?entity wdt:P569 ?date .
    FILTER (MONTH(?date) = ?nowMonth && DAY(?date) = ?nowDay)
    SERVICE wikibase:label {
        bd:serviceParam wikibase:language "en" .
    }
}
LIMIT 10
  • Classement général des causes de décès sous forme de BubbleChart
#Classement général des causes de décès
#defaultView:BubbleChart
#TEMPLATE={"template":"Overall causes of death ranking of ?thing ","variables":{"?thing": {"query":"SELECT ?id  (COUNT(?id) AS ?count) WHERE {  ?sub wdt:P509 ?y.  ?sub wdt:P31 ?id. } GROUP BY ?id "} } }
SELECT ?cid ?cause (COUNT(*) AS ?count) WHERE {
  BIND(wd:Q5 AS ?thing)
  ?pid wdt:P31 ?thing;
      wdt:P509 ?cid.
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". ?cid rdfs:label ?cause}
}
GROUP BY ?cid ?cause
ORDER BY DESC(?count) ?cause
  • Nombre de films par an et par genre sous forme d'un scatterplot avec animation
#Nombre de films par an et par genre
#defaultView:ScatterChart
SELECT   ?year  (COUNT(?_genre) AS ?count ) (SAMPLE(?_genreLabel) AS ?label )  (?year as ?year_shown) WHERE {
  ?item wdt:P31 wd:Q11424.
  ?item wdt:P577 ?_publication_date.
  ?item wdt:P136 ?_genre.
  ?_genre rdfs:label ?_genreLabel.
  BIND(str(YEAR(?_publication_date)) AS ?year)
  FILTER((LANG(?_genreLabel)) = "en")

 FILTER (?_publication_date >= "2000-00-00T00:00:00Z"^^xsd:dateTime)
}
GROUP BY ?_genreLabel ?year
HAVING (?count > 30)
  • Évolution du nombre d'œuvres par "Genre" entre 1500-1600.
#defaultView:BarChart
SELECT   ?year  (COUNT(?_genre) AS ?count ) (SAMPLE(?_genreLabel) AS ?label )  (?year as ?year_shown) WHERE {
  ?item wdt:P31 wd:Q3305213.
  ?item wdt:P170 ?creator.
  ?item wdt:P571 ?_creation_date.
  ?item wdt:P136 ?_genre.
  ?_genre rdfs:label ?_genreLabel.
  BIND(str(YEAR(?_creation_date)) AS ?year)
  FILTER((LANG(?_genreLabel)) = "fr")

 FILTER (?_creation_date >= "1500-00-00T00:00:00Z"^^xsd:dateTime)
 FILTER (?_creation_date <= "1600-00-00T00:00:00Z"^^xsd:dateTime)
}
GROUP BY ?_genreLabel ?year
HAVING (?count > 1)
  • Afficher sur une carte, les villes en France dont le nom se termine par "ac"
#Communes françaises dont le nom fini par ac
#added before 2016-10

#defaultView:Map
SELECT ?item ?itemLabel ?coord
WHERE
{
	?item	wdt:P31/wdt:P279* wd:Q484170;
				wdt:P17 wd:Q142;
				rdfs:label ?itemLabel;
				wdt:P625 ?coord;
	FILTER (lang(?itemLabel) = "fr").
	FILTER regex (?itemLabel, "ac$").
	FILTER not exists { ?item wdt:P131 wd:Q33788 } # excluding Koumac, New Caledonia...
}

😉 Pour les linguistes : Œuvres d’Art dont le titre est une allitération

#added before 2016-10
SELECT DISTINCT ?work ?title
WHERE
{
  ?work wdt:P31/wdt:P279* wd:Q838948;
        wdt:P1476 ?title.
  FILTER(REGEX(STR(?title), "^(\\p{L})\\w+(?:\\W+\\1\\w+){2,}$", "i")).
}
ORDER BY STR(?title)

Exercices à faire pendant le cours :

  • Lister juste les identifiants des peintures de Monet
  • reprendre la requête précédante mais en ajoutant les labels (via le service wikibase:label) et les images associées
  • reprendre la requête précédante mais en ajoutant en option (via OPTIONAL) les collections/lieux de conservation
  • Toujours pour les peintures de Monet, compter le nombre de Monet dans chaque collection/lieux de conservation et les afficher par odre décroissant
  • Afficher sous forme de grille d’images, les tableaux qui dépeignent un lion.
  • Nom de 100 villes dont la population dépasse le 1 millions de personnes.
  • Afficher sur une carte, tous les lieux où l’on conserve des peintures en indiquant pour chaque lieu le nombre de peinture.

Service de visualisation en ligne :

Ressources utiles pour les cours du 17 janvier 2024

Rappel utile pour utiliser Wikidata

Le tutoriel officiel de base : https://www.wikidata.org/wiki/Wikidata:SPARQL_tutorial La bible/référence avec des centaines de requêtes : https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/queries/examples/fr La documentation pour les subtilités des modes d'affichage / Visualisation des résultats d'une requête: https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/Wikidata_Query_Help/Result_Views/fr Bon à savoir : 10 useful things about Wikidata & SPARQL that I wish I knew earlier : https://alexasteinbruck.medium.com/10-useful-things-about-wikidata-sparql-that-i-wish-i-knew-earlier-b0e0ef63c598

Truc et astuce

# Récupérer le texte de description d'un item et dans la langue de son choix
      ?item schema:description ?itemdescription.
  FILTER(LANG(?itemdescription) = "fr")
# récupérer l'ensemble des items des sous-classes de la nature de l'élément souhaité
wdt:P31/wdt:P279*
# Pour tester vos requêtes, limitez toujours vos résultats afin de ne pas trop surcharger le requêteur
LIMIT 100
# Rajouter un titre à votre requête
#Titre de votre requête qui sera généré lorsque vous partagez vos résultats (ou encapsulez les résultats) d'une requête
# Choisir un mode de représentation visuelle des résultats : 
#defaultView (et faire control+espace pour avoir la liste des visualisations
# Récuéprer les labels dans la langue de votre choix (ne pas oublier d'ajouter ?nomdevotrevariableLabel dans le SELECT
  
SERVICE wikibase:label {bd:serviceParam wikibase:language "fr,en"}
# UNION permet de faire un ET entre 2 triplets
{?person wdt:P106 wd:Q188094} UNION {?person wdt:P106 wd:Q1792450}
  • gabarit page HTML vide
 <!DOCTYPE html>
<html>
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
   <link rel="shortcut icon" type="image/ico" href="img/favicon.gif" />
   <link rel="stylesheet" type="text/css" href="style.css" />
   <title> titre </title>
 </head>
 <body>
 </body>
</html>

Ressources utiles pour les cours du 24 janvier 2024

Datawrapper

  • accès à l'outil : https://www.datawrapper.de/
  • voir les tutoriels : https://academy.datawrapper.de/
  • voir les dernières visualisations réalisées avec datawrapper pour avoir des idées : https://app.datawrapper.de/river
  • Les plus : visualisations dynamiques ; quelques options pour traiter des données ; ajout d'annotation dans la visualisation
  • Les moins : nécessite un compte utilisateur pour faire des exports ; export image de qualité moyenne avec un compte gratuit)
  • exemple : REPLACE_REGEX(city, ":[a-z]*:", '') ; (SPLIT(city, " "))[0]

Datawrapper + rawgraph + Flourish

SELECT ?year (COUNT(?items) AS ?count)
WHERE {
  ?items wdt:P31 wd:Q215380 . # get things that are bands
  ?items wdt:P571 ?date . # get the date when the band was founded
  
  BIND( year(?date) as ?year ) # aggregate data by year
  FILTER (?year > 1900) #filter on the last century
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en" . #get labels in english.
    #with this service, you can add "Label" suffix to any variable.
  }
}

GROUP BY ?year
#Frise chronologique des maires d’Amsterdam, aux Pays-Bas au XIXe
select ?mayor ?mayorLabel ?start (year(?start) as ?startyear)  (year(?end) as ?endyear) ?end where {
  ?mayor p:P39 ?position.
  ?position ps:P39 wd:Q13423495;
            pq:P580 ?start;
            pq:P582 ?end.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],nl,en". }
   FILTER (?start >= "1900-00-00T00:00:00Z"^^xsd:dateTime)
 FILTER (?start <= "2000-00-00T00:00:00Z"^^xsd:dateTime)
}

Flourish

Démonstration et exercice

Ressources utiles pour les cours du 31 janvier 2024

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment