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 [2016/01/04 19:01]
Francesco Beretta [Requêtes SQL / XPath]
td_histoire_numerique:exercice_3 [2016/01/04 19:11]
Francesco Beretta [Production des données]
Ligne 51: Ligne 51:
 ===== Production des données ===== ===== Production des données =====
  
 +Pour des exemples de production de données, voir les exercices 4 et 5.
 \\ \\
  
Ligne 98: Ligne 98:
 </​code>​ </​code>​
  
-===== Documentation =====+====== Documentation =====
 + 
 + 
 + 
 +===== Code SQL ===== 
 + 
 +Dans cette section on trouvera le code des principales fonctions SQL/PLpgSQL utilisées dans la base de données. 
 + 
 +==== Fonction vues.transformation_xml(integer) ==== 
 + 
 +Cette fonction transforme le texte codé avec le système des accolades en un document XML. En argument de la fonction, il faut mettre l'​identifiant (la clé primaire) de la ligne dans laquelle se trouve le texte à transformer. Le texte à transformer est stocké dans le champs "​texte"​ et sera retranscrit et enregistré automatiquement par la fonction dans le champs "​texte_xml"​. 
 + 
 +En cas d'​incohérence du codage au niveau des accolades dans le texte de départ, un message d'​erreur est produit par le serveur PostgreSQL qui perment en régle général, en cherchant le texte en question, de retrouver les passages du texte de départ qui posent problème. 
 + 
 + 
 +<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