Base de données SQL et import des données depuis DBpedia - mroylem/archivist GitHub Wiki

Base de données SQL

Pour ce projet, nous avons élaboré une base de données qui centralise toutes les informations nécessaires pour répondre à nos diverses interrogations.

Cette base de données a été développée avec l’aide du logiciel SQLite Studio. Elle respecte le modèle conceptuel que nous avons présenté plus tôt. :

Dans le cadre de ce cours, nous avons été amenés à créer deux bases de données différentes.

Vous trouverez une explication ci-dessous.


1ère Base de données SQL : 1er_archivist_database.sdlite

La première est réalisée manuellement, et fait office de premier test.

Elle possède les mêmes tables du modèle conceptuel ou MCD (voir commentaire du modèle conceptuel) ainsi qu'une dizaine de lignes représentant les informations de 8 archivistes.

Deux vues SQL sont aussi présentes pour schématiser deux requêtes courantes.


2ème Base de données SQL : Import_DBpedia_database.sqlite

Notre deuxième base de données a été conçue ultérieurement et présente une structure identique à la première. Vous y trouverez les mêmes tables et les mêmes connexions.

À la différence de notre première base de données, celle-ci n’a pas été remplie manuellement. Nous avons plutôt importé certaines données à partir de DBpedia.

Cependant, avant de procéder à l’importation, il a fallu effectuer un nettoyage des données stockées dans notre première base de données.

Nettoyage

Pour cela, nous avons utilisé un Script dans le logiciel DBearver :

PRAGMA foreign_keys = OFF;

-- Suppression des données dans chaque table
DELETE FROM birth ;
DELETE FROM documentary_production ;
DELETE FROM documentary_production_themes ;
DELETE FROM person_documentary_productions ;
DELETE FROM education ;
DELETE FROM employment_period ;
DELETE FROM geographical_place ;
DELETE FROM occupation ;
DELETE FROM organisation ;
DELETE FROM person ;
DELETE FROM person_educations ;
DELETE FROM relationship ;
DELETE FROM theme ;

-- Réinitialisation des auto-incrémentations
DELETE FROM sqlite_sequence WHERE name = 'birth';
DELETE FROM sqlite_sequence WHERE name = 'documentary_production';
DELETE FROM sqlite_sequence WHERE name = 'documentary_production_themes';
DELETE FROM sqlite_sequence WHERE name = 'person_documentary_productions';
DELETE FROM sqlite_sequence WHERE name = 'education';
DELETE FROM sqlite_sequence WHERE name = 'employment_period';
DELETE FROM sqlite_sequence WHERE name = 'geographical_place';
DELETE FROM sqlite_sequence WHERE name = 'occupation';
DELETE FROM sqlite_sequence WHERE name = 'organisation';
DELETE FROM sqlite_sequence WHERE name = 'person';
DELETE FROM sqlite_sequence WHERE name = 'person_educations';
DELETE FROM sqlite_sequence WHERE name = 'relationship';
DELETE FROM sqlite_sequence WHERE name = 'theme';

PRAGMA foreign_keys = ON;

Requête SPARQL conforme à notre table person

Cette requête est listée sur la page DBpedia_explorerde notre Wiki. Toutefois, pour des raisons de clarté, nous l’avons répétée ci-dessous :

PREFIX dbr: <http://dbpedia.org/resource/>
PREFIX dbp: <http://dbpedia.org/property/>
PREFIX dbo: <http://dbpedia.org/ontology/>
PREFIX dbc: <http://fr.dbpedia.org/resource/Catégorie:>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

SELECT DISTINCT  (str(?label) AS ?name) ?gender ?death_date ?nationality
WHERE {
  {
    {?person dbo:wikiPageWikiLink dbc:Archiviste_suisse}
    UNION
    {?person dbo:wikiPageWikiLink dbc:Archiviste_francais}
    UNION
    {?person dbo:wikiPageWikiLink dbc:Archiviste_belge}
    UNION
    {?person dbo:wikiPageWikiLink dbc:Archiviste_canadien}
    UNION
    {?person dbo:wikiPageWikiLink dbc:Archiviste_paléographe}
  }

  
  ?person rdfs:label ?label .
  ?person dbp:deathDate | dbo:deathDate ?deathDate . 
  ?person dbp:citizenship | dbo:citizenship ?citizenship .

  OPTIONAL { 
    ?citizenship rdfs:label ?nationality .
    FILTER(LANG(?nationality) = "fr") 
  }
  OPTIONAL { 
    ?person dbp:gender | dbo:gender ?gender .
  }


  BIND(xsd:integer(SUBSTR(STR(?deathDate), 1, 4)) AS ?death_date)

  FILTER (?deathDate >= 1820 && LANG(?label) = "fr")

}

ORDER BY ?person

Cette requête a été pensée pour correspondre à notre table person dans notre base de données. Elle liste les colonnes dont nous avons besoin, c'est à dire :

  • Name
  • Date du décès
  • Genre
  • Nationalité

Par manque de temps, seulement la table person a été importée de cette manière.