IFLOT

Formation uTOP

Nous avons créé un ensemble de triplets RDF décrivant l'offre de formation proposée par uTOP. L'entrée SPARQL est située à cette adresse : http://linkeddata.insa-rouen.fr/utop/sparql.

Ces triplets ont été générés à partir d'une description de l'offre au format CDMfr (XML). La transformation XSLT des fiches XML uTOP utilise le processeur XSLT saxonb-xslt. L'utilisation d'un autre processeur compatible XSL 2.0 est bien entendu possible, il faudrait alors modifier le script de génération pour utiliser le processeur de votre choix

Ces trois fichiers, une fois téléchargés, devront se situer dans un même dossier, ce dernier contenant le dossier FichesXML-uTop/ où sont stockés les fichiers XML à importer. Le fichier résultant s'appelera iFlot-uTop_triples.ttl.

Exemples de requêtes SPARQL

Les exemples de requêtes proposés ici ont été testés sur la base de données RDF uTOP que l'on vient de voir. Vous pouvez les tester en les copiant ici : http://linkeddata.insa-rouen.fr/dataset.html?tab=query&ds=/utop

Noms des cours proposés par uTOP

PREFIX edf: <http://iflot.insa-rouen.fr/ontologies/EducationalItem#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

SELECT ?nom
WHERE {
  ?r rdf:type edf:EducationalItem.
  ?r edf:name ?nom
}

Nom des institutions proposant des cours uTOP ainsi que le nombre de cours proposés

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX edf: <http://iflot.insa-rouen.fr/ontologies/EducationalItem#>

SELECT ?nom_institution (COUNT(?cours) AS ?nb_cours)  WHERE {
  ?cours edf:isProposedBy ?institution.
  ?institution foaf:name ?nom_institution.	
} GROUP BY ?nom_institution

URI dbpédia et coordonnées GPS des établissements pour chaque cours proposé par uTOP

La difficulté réside ici dans le fait que ces informations ne sont pas présentes dans les fiches uTOP (donc absentes de la base de données RDF), seul le nom de l'établissement est précisé. Nous allons donc essayer de lier des données provenant de plusieurs bases RDF pour répondre à la question.

Nous interrogeons tout d'abord une autre base de données RDF qui liste la plupart des établissements français de l'enseignement supérieur (entrée SPARQL http://org.unit-1.crihan.fr:/ma/sparql). Dans cette base de données, les établissements sont désignés par leur nom officiel (propriété skos:prefLabel) et par des noms alternatifs, comme par exemple leurs accronymes (propriété skos:altLabel). Nous essayons donc de retrouver chaque établissement dans cette liste afin d'avoir le nom officiel. Une fois le nom officiel retrouvé nous interrogeons une deuxième base de données RDF, la version francophone de dbpedia (http://fr.dbpedia.org/sparql), pour récupérer tout d'abord l'URI représentant l'établissement, et si possible ses coordonnées GPS. Voici la requête SPARQL :

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX edf: <http://iflot.insa-rouen.fr/ontologies/EducationalItem#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX frdbp: <http://fr.dbpedia.org/property/>

SELECT DISTINCT ?cours ?nom_institution ?uri_valide ?long_valide ?lat_valide
WHERE {
  ?cours edf:isProposedBy ?institution.
  ?institution foaf:name ?nom_institution.
  BIND(LCASE(?nom_institution) AS ?nom_institution_minuscule).
    OPTIONAL {
      SERVICE <http://org.unit-1.crihan.fr:/ma/sparql> {		
        ?url_org skos:prefLabel ?pref.
        ?url_org skos:altLabel ?alt.
        BIND(LCASE(?pref) AS ?pref_minuscule).
        BIND(LCASE(?alt) AS ?alt_minuscule).
        FILTER(CONTAINS(?nom_institution_minuscule,?pref_minuscule)
                        || CONTAINS(?nom_institution_minuscule,?alt_minuscule)
                        || CONTAINS(?pref_minuscule,?nom_institution_minuscule)
                        || CONTAINS(?alt_minuscule,?nom_institution_minuscule)
        )
    }
  }
  BIND(STRLANG(?nom_institution,"fr") AS ?nom_instiution_fr)
    OPTIONAL {
     SERVICE <http://fr.dbpedia.org/sparql> {	
       ?temp rdfs:label ?nom_instiution_fr.
       ?temp rdf:type <http://dbpedia.org/ontology/EducationalInstitution>
     }
  } 
  BIND(IF(BOUND(?temp),STRLANG(?nom_institution,"FR"),IF(BOUND(?pref),?pref,"Rouen")) AS ?pref_valide) 
  OPTIONAL {
    SERVICE <http://fr.dbpedia.org/sparql> {	
      ?uri_frdbpedia rdfs:label ?pref_valide
    }
  } 
  BIND(IF(BOUND(?uri_frdbpedia),?uri_frdbpedia,<http://fr.dbpedia.org/resource/Rouen>) AS ?uri_frdbpedia_temp) 
  OPTIONAL {
    SERVICE <http://fr.dbpedia.org/sparql> {	
      ?uri_frdbpedia_temp frdbp:longitude ?long.
      ?uri_frdbpedia_temp frdbp:latitude ?lat.
    }
  } 
  BIND(IF(?uri_frdbpedia_temp=<http://fr.dbpedia.org/resource/Rouen>,?vide,?uri_frdbpedia) AS ?uri_valide).
  BIND(IF(?uri_frdbpedia_temp=<http://fr.dbpedia.org/resource/Rouen>,?vide,?long) AS ?long_valide).
  BIND(IF(?uri_frdbpedia_temp=<http://fr.dbpedia.org/resource/Rouen>,?vide,?lat) AS ?lat_valide).	
}

Cette requête est longue car elle doit traiter les cas où l'information recherchée n'est pas présente. Sachant qu'il n'y a pas en SPARQL d'instruction permettant l'exécution de requêtes sous condition, après chaque requête nous devons vérifier si nous avons obtenu un résultat, et si tel n'est pas le cas, nous utilisons une réponse arbitraire en dehors de notre domaine (ici la ville de Rouen) pour continuer à essayer de rechercher d'autres informations. Voici quelques exemples de résultats de cette requête :

URI du Cours Établissement URI Long. Lat.
http://utop.fr/formations/rasters_geomatique École Nationale des Sciences Géographiques http://fr.dbpedia.org/resource/École_nationale_des_sciences_géographiques 2.58719 48.8413
http://utop.fr/formations/MOOC_bio_info Institut national de recherche en informatique et en automatique http://fr.dbpedia.org/resource/Institut_national_de_recherche_en_informatique_et_en_automatique
http://utop.fr/formations/ressource_dimensionnement Institut National de l'Energie Solaire - Plateforme Formation et Evaluation

Nous constatons :

  • que la première ligne possède bien toutes les données escomptées.
  • que la deuxième ligne ne possède pas les données GPS. C'est tout à fait normal, puisque l'établissement dispensant cette formation a plusieurs sites géographiques.
  • que la dernière ligne ne possède ni l'URI lien dbpedia ni les coordonnées GPS. Cela est dû au fait que le nom de l'établissement n'est pas connu. En fait, le nom utilisé mélange le nom de l'établissement (Institut National de l'Energie Solaire) et une autre information dont on ne connaît pas la nature (Plateforme Formation et Evaluation) : qui peut être un département, une platforme, etc.

Vous pouvez testez ici une cartographie des établissements proposant des formations uTOP qui utilisent ces données.