Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
td_histoire_numerique:exercice_3 [2015/09/28 10:06] Francesco Beretta [Application de cette méthode aux informations historiques] |
td_histoire_numerique:exercice_3 [2016/01/04 19:02] Francesco Beretta [Documentation] |
||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
====== Installation de la base de données pour l'exercice ====== | ====== Installation de la base de données pour l'exercice ====== | ||
- | * {{:td_histoire_numerique:td2015_20190926.zip|Télécharger le fichier}} qui contient la sauvegarde de la base de données | + | [[td_histoire_numerique:Installation de la base de données|Instructions pour l'installation de la base de données]] |
- | * Créer un dossier appelé BD_TD2015 et un sous-dossier appelé 'sauvegardes' | + | |
- | * Déplacer le fichier téléchargé vers le dossier 'sauvegardes' et le décompresser (dézipper) | + | |
- | * Démarrer le logiciel **pgAdmin3** (à ne pas confondre avec l'application web phpPgAdmin) | + | |
- | * Pour les utilisateurs de Windows, il se trouve dans le dossier C:\Bitnami\wappstack-5.5.29-1\postgresql\bin et normalement on peut le lancer depuis le menu des applications | + | |
- | * Pour les utilisateurs de MacOS il faut le télécharger depuis [[http://www.pgadmin.org/download/macosx.php|cette page]] en prenant la version qui correspond à votre système d'exploitation, si possible la plus récente. Une fois installé, il faut paramétrer la connexion [on fera l'exercice en classe]: | + | |
- | * Dans le menu Fichier > Ajouter un serveur | + | |
- | * Nom du serveur 'postgresql_9_4' | + | |
- | * Hôte: localhost | + | |
- | * port TCP : 5432 | + | |
- | * base maintenance: postgres | + | |
- | * nom utilisateur: postgres | + | |
- | * Mot de passe: le votre et l'enregistrer | + | |
- | * Pour tous, à ce stade là, une fois la connexion au serveur ouverte et le mot de passé 'avalé', créer une nouvelle base de données appelée 'TD2015'. Dans l'onglet Définition mettre 'codage' à UTF8, laisser le reste des paramètres par défaut. | + | |
- | * Ouvrir la nouvelle base de données (double-click) | + | |
- | * Restaurer les sauvegardes depuis le dossier dézippé: | + | |
- | * click droit sur la base de données TD2015 et choisir dans le menu contextuel '**Restaurer**' | + | |
- | * chercher le dossier téléchargé et dézippé, ouvrir le fichier base.backup | + | |
- | * clicker le bouton 'Restauration' | + | |
- | * Si vous lisez à la fin du log: "Le process a retourné le code de sortie 0." c'est réussi (0 = OK ; 1 = erreur) | + | |
- | |||
- | Si tout s'est bien passé la base est installée. Sélectionnez la base TD2015 et rafraichissez (bouton avec les flèches rouges et vertes) | ||
\\ | \\ | ||
Ligne 64: | Ligne 43: | ||
Il y a différentes manières d'aborder la question de la modélisation des données historiques. L'approche présentée ici est issue de l'expérience du projet [[http://symogih.org|symogih.org]]. | Il y a différentes manières d'aborder la question de la modélisation des données historiques. L'approche présentée ici est issue de l'expérience du projet [[http://symogih.org|symogih.org]]. | ||
+ | On trouvera une explication détaillée de la méthode dans [[https://halshs.archives-ouvertes.fr/halshs-00677658|cet article]] et dans **{{:td_histoire_numerique:mcd_article_modifie.pdf|ce document}} ** les modèles conceptuels qui seront présentés au cours. | ||
- | On trouvera une explication détaillée de la méthode dans [[https://halshs.archives-ouvertes.fr/halshs-00677658|cet article]] et dans {{:td_histoire_numerique:mcd_article_modifie.pdf|**ce document**}} les modèles conceptuels qui seront présentés au cours. | + | Le <html><span style="color:red;font-weight:bold;">modèle conceptuel de la base de données générique</span></html> mis à disposition se trouve dans **{{:td_histoire_numerique:mcd_base_td_histoire_numerique.pdf|ce fichier}} **. Il faut le télécharger et le garder sous la main. |
\\ | \\ | ||
- | + | ===== Production des données ===== | |
- | ==== Prise en main de la base de données du cours ==== | + | |
\\ | \\ | ||
- | \\ | + | |
- | <code> | + | ==== Transformation des textes encodés en XML ==== |
- | truncate table objets.objet restart identity cascade | + | |
+ | * Créer dans la base de données un objet digital qui correspond au texte qu'on est en train d'encoder. | ||
+ | * Lui donner un nom et ajouter un descriptif du texte encodé | ||
+ | * Copier le texte encodé en entier et le coller dans le champs 'texte' de l'objet en question | ||
+ | * Sauvegarder | ||
+ | |||
+ | * Ouvrir une boîte de dialogue SQL | ||
+ | * Exécuter la requête suivante, qui utilise la fonction vues.transformation_xml([argument]) tout en mettant en argument de la fonction le numéro d'identifiant de l'objet digital qui contient le texte à transformer | ||
+ | <code html>SELECT vues.transformation_xml(3)</code> | ||
+ | * Si le texte a été encodé correctement (balises ouvertes et fermées, encodées selon les indications du wiki, etc.), le texte est réécrit en XML et copie dans le champs 'texte_xml' de la table objet. | ||
+ | * Sinon, apparaît un message d'erreur qui indique, dans les premières lignes du message, l'élément qui pose problème et qu'il faudra corriger dans le texte encodé d'origine. | ||
+ | * La suite du message contient la suite des erreurs provoquées par cette première erreur: celle-ci corrigée, tout rentre dans l'ordre | ||
+ | |||
+ | ===== Requêtes SQL / XPath ===== | ||
+ | |||
+ | Une fois les textes transformés en XML avec la fonction indiquée ci-dessous, on peut intérroger la base de données et extraire des informations. | ||
+ | |||
+ | Pour ce faire, on utilise la langage SQL en le combinant avec le langage XPATH que PostgreSQL implémente également à condition que le champs sur lequel porte la requête soit de type 'XML'. | ||
+ | |||
+ | |||
+ | Pour apprendre la syntaxe des requêtes SQL, voir la manuel PostreSQL, chapitres 2 et 7. Pour apprendre celle du XPATH, un excellent {{:td_histoire_numerique:obpe6630_xpath4.pdf|tutoriel}} rédigé par Wieslaw Zielonka est [[http://www.liafa.jussieu.fr/~zielonka/Enseignement/BDAvances/2013/XML/xpath4.pdf|disponible sur internet]] | ||
+ | |||
+ | |||
+ | Pour exécuter les requêtes ci-dessous: | ||
+ | |||
+ | * ouvrir la base de données avec pgAdminIII, sélectionner le dossier rouge 'schémas' dans l'arboréscence, puis ouvrir la boît de dialoque 'SQL': bouton loupe. | ||
+ | * copier la requête dans l'Editeur SQL | ||
+ | * exécuter la requête avec le bouton vert en forme de flèche | ||
+ | * le résultat s'affichera dans le panneau de sortie en bas | ||
+ | |||
+ | |||
+ | Pour exporter le résultat: | ||
+ | |||
+ | * sous CSV = dans le menu 'Fichier' sélectionner 'Exporter...', choisir un nom de fichier et un emplacement (attention à mettre le suffixe .csv après le nom) | ||
+ | * pour visualiser directement le résultat avec un navigateur, sélectionner dans le menu 'Fichier' la commande 'Rapport rapide', choisir de nouveau un fichier de sortie (tout en bas), ne rien toucher aux autres paramètres et appuyer sur OK | ||
+ | * le résultat apparaîtra immédiatement dans votre navigateur web | ||
+ | |||
+ | Provisoire: | ||
+ | <code sql> | ||
+ | SELECT ??? | ||
+ | FROM ??? | ||
</code> | </code> | ||
+ | ====== Documentation ====== | ||
+ | |||
+ | Code SQL===== Titre ===== | ||
+ | |||
+ | Fonction | ||
+ | |||
+ | |||
+ | <code sql> | ||
+ | -- Function: vues.transformation_xml(integer) | ||
+ | |||
+ | -- DROP FUNCTION vues.transformation_xml(integer); | ||
+ | |||
+ | CREATE OR REPLACE FUNCTION vues.transformation_xml(integer) | ||
+ | RETURNS character varying AS | ||
+ | $BODY$ | ||
+ | WITH tw0 AS | ||
+ | ( | ||
+ | -- transforme les entités XML | ||
+ | SELECT REPLACE(REPLACE(REPLACE(texte,'&','&'),'<','<'),'>','>') txt | ||
+ | FROM objets.objet | ||
+ | WHERE pk_objet = $1 | ||
+ | ), | ||
+ | tw1 AS | ||
+ | ( | ||
+ | -- transforme les accolades en chevrons | ||
+ | SELECT REPLACE(REPLACE(REPLACE(txt,'{/','</'),'{','<'),'}','>') txt | ||
+ | FROM tw0 | ||
+ | ), | ||
+ | tw2 AS | ||
+ | ( | ||
+ | -- traite le cas de balises à deux caractères qui contiennent le type après l'id de l'objet: ajoute l'attribut "type" | ||
+ | SELECT REGEXP_REPLACE(txt,'(<\w{2})([\d\|]+)([a-z]{2})(_?)([\d|\|]*)(>)','\1\2\4\5 type="\3"\6','g') AS txt | ||
+ | FROM tw1 | ||
+ | ), | ||
+ | tw3 AS | ||
+ | ( | ||
+ | -- traite le cas de balises à deux caractères suivies d'un 0: élimine l'attribut "ref" tout en gardant l'attribut @type | ||
+ | SELECT REGEXP_REPLACE(txt,'(<\w{2})(0)(_?)([\d|\|]*)([\s"=\w]*)(>)','\1\3\4\5\6','g') AS txt | ||
+ | FROM tw2 | ||
+ | ), | ||
+ | tw4 AS | ||
+ | ( | ||
+ | -- traite le cas de balises à deux caractères suivies ou non d'un id possédant un '_': ajoute l'attribut @ana | ||
+ | SELECT REGEXP_REPLACE(txt,'(<\w{2})([\d|\|]*)(_)([\d\|]*)([\s"=\w]*)(>)','\1\2\5 ana="\4"\6','g') AS txt | ||
+ | FROM tw3 | ||
+ | ), | ||
+ | tw5 AS | ||
+ | ( | ||
+ | -- traite le cas de balises à deux caractères suivies d'un id : ajoute l'attribut @ref | ||
+ | SELECT REGEXP_REPLACE(txt,'(<\w{2})([\d\|]+)([\s"=\w|]*)(>)','\1 ref="\2" \3\4','g') AS txt | ||
+ | FROM tw4 | ||
+ | ), | ||
+ | tw6 AS | ||
+ | ( | ||
+ | -- traite le cas de balises seg et eud possédant un '_': ajoute l'attribut @ana | ||
+ | SELECT REGEXP_REPLACE(txt,'(<)(seg|eud)(_)([\d|\|]*)(>)','\1\2 ana="\4"\5','g') AS txt | ||
+ | FROM tw5 | ||
+ | ), | ||
+ | tw7 AS | ||
+ | ( | ||
+ | -- traite le cas des dates avec un paramètre d'incertitude en ajoutant l'attribut @cert | ||
+ | SELECT REGEXP_REPLACE(txt,'(<)(dat)([0-9]+)(r|p)(_?)([a-z]{2})(>)','\1\2\3\5\6 cert="\4"\7','g') AS txt | ||
+ | FROM tw6 | ||
+ | ), | ||
+ | tw8 AS | ||
+ | ( | ||
+ | -- traite le cas des dates avec un type en ajoutant l'attribut @type | ||
+ | SELECT REGEXP_REPLACE(txt,'(<)(dat)([0-9]+)(_)([a-z]{2})','\1\2\3 type="\5"','g') AS txt | ||
+ | FROM tw7 | ||
+ | ), | ||
+ | tw9 AS | ||
+ | ( | ||
+ | -- traite le cas des dates en ajoutant l'attribut @when | ||
+ | SELECT REGEXP_REPLACE(txt,'(<)(dat)([0-9]+)','\1\2 when="\3"','g') AS txt | ||
+ | FROM tw8 | ||
+ | ) | ||
+ | UPDATE objets.objet | ||
+ | SET texte_xml = (concat('<root>',REGEXP_REPLACE(txt, '\|', ' ' , 'g'),'</root>'))::xml | ||
+ | FROM tw9 | ||
+ | WHERE pk_objet = $1; | ||
+ | |||
+ | SELECT 'Effectué'::varchar AS resultat; | ||
+ | |||
+ | |||
+ | $BODY$ | ||
+ | LANGUAGE sql VOLATILE | ||
+ | COST 100; | ||
+ | ALTER FUNCTION vues.transformation_xml(integer) | ||
+ | OWNER TO postgres; | ||
+ | |||
+ | </code> |