Outils pour utilisateurs

Outils du site


td_histoire_numerique:exercice_3

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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/11/25 08:22]
Francesco Beretta [Transformation des textes encodés en XML]
td_histoire_numerique:exercice_3 [2016/01/04 19:02]
Francesco Beretta [Documentation]
Ligne 68: Ligne 68:
   * 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   * 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 =====+===== Requêtes SQL / XPath =====
  
-Une fois les textes XML-TEI enregistrés dans la base (dans le champs 'texte-tei' des objets correspondants aux textesun objet par texte) ​on peut intérroger la base de données et extraire des informations ​des textes.+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 ​si le champs sur lequel porte la requête ​est de type '​XML'​.+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. Nous y reviendrons. 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 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: Pour exécuter les requêtes ci-dessous:
  
-   * ouvrir la base de données ​'​bd_td_exercice' ​avec pgAdminIII, sélectionner le dossier rouge '​schémas'​ dans l'​arboréscence,​ puis ouvrir la boît de dialoque '​SQL':​ bouton loupe.+   * 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    * copier la requête dans l'​Editeur SQL
    * exécuter la requête avec le bouton vert en forme de flèche    * exécuter la requête avec le bouton vert en forme de flèche
Ligne 91: Ligne 91:
   * 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   * 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   * le résultat apparaîtra immédiatement dans votre navigateur web
 +
 +Provisoire:
 +<code sql>
 +SELECT ???
 +FROM ???
 +</​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,'&','&​amp;'​),'<','&​lt;'​),'>','&​gt;'​) 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>​
td_histoire_numerique/exercice_3.txt · Dernière modification: 2016/01/04 22:04 par Francesco Beretta