Outils pour utilisateurs

Outils du site


td_histoire_numerique:exercice_5

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
Dernière révision Les deux révisions suivantes
td_histoire_numerique:exercice_5 [2016/01/05 22:21]
Francesco Beretta [Encodage des unités de connaissance dans les textes]
td_histoire_numerique:exercice_5 [2016/01/05 23:25]
Francesco Beretta [Production de données structurées directement dans la base de données]
Ligne 22: Ligne 22:
 A partir de la définition de ces objets, munis de leurs identifiants respectifs, on peut coder ainsi une naissance: A partir de la définition de ces objets, munis de leurs identifiants respectifs, on peut coder ainsi une naissance:
 <​code>​ <​code>​
 +1  {ud0}
 +2  {eud}Christopher Grienberger{/​eud}
 +3  {ud0_9}{in0_11}{en1620_23}Christopher Grienberger{/​en} (aussi écrit Christopher Gruemberger,​ ou encore Grinberg, Bamberger, ou Gamberger, voire Panberger), né le {dat15510702_du}2 juillet 1551{/dat} à {en0li_22}Hall dans le Tyrol{/​en}{/​in},​ et mort le 11 mars 1636 à Rome, est prêtre jésuite autrichien, mathématicien et professeur au Collège romain. Un cratère lunaire est nommé en son honneur Gruemberger.{/​ud}
 +4  ...
 +5  {/ud}
 +</​code>​
  
-{ud0} +A la ligne 1, une balise de type "​unité documentaire"​ ouvre la portion de texte correspondante à la notice biographique,​ qui termine à la ligne 5. A la ligne 2, l'​entête de l'​unité documentaire à la fonction de titre de la portion de texte qui suit. 
-{eud}Michael Maestlin{/​eud} + 
-{ud0_9} +A la ligne 3, une nouvelle balise "​unité documentaire"​ est ouverte. Elle est identifiée par l'​objet 9 de la base de donnée, un objet abstrait intitulé "​Résumé de la notice"​ qui indique le contenu du segment. Il est ainsi possible de créer un typologie des unités documentaires. 
-{in0_11}{en1619_23}Michael Maestlin{/​en} (aussi appelé MästlinMöstlinou Moestlin)né le {dat15500930_du}30 septembre 1550{/dat} à {en0li_22}Göppingen ​en Bade-Wurtemberg{/en}{/in}, mort le 20 octobre 1631 à Tübingen, est un astronome et mathématicien allemandconnu pour être le mentor ​de Johannes Kepler+A cette même ligne comment l'​unité de connaissance de type Naissance (objet 11), introduite par la balise ​{in0_11} ​dont le premier chiffre "​0"​ indique qu'il n'y a pas d'​objet correspondant précis à cette information dans la base de donnée et le deuxième, "​11"​ que cette unité de connaissance est de type "​Naissance"​. 
-{/ud} +Quant aux rôles, ils sont encodés dans les balises qui enveloppent les entités nommées: 
-... +  * {en1620_23enveloppe l'​objet 1620 de la base de données"​GrienbergerChristoph"​dont le rôle est l'​objet 23: "​naître"​. 
-{/ud}+  * {en0li_22enveloppe un objet qui n'a pas encore été créé dans la base de données (d'où l'​identifiant "​0"​) mais dont le rôle est défini par l'​objet 22: "​localiser"​. 
 + 
 +De plus a été encodée la date: {dat15510702_duexprimée au format de la norme ISO et dont le type est "date unique"​ (du). 
 + 
 + 
 + 
 +===== Extraction de donnée structurées ===== 
 + 
 +Grâce ​à cette méthode il est possible d'​encoder dans le texte tout type d'​unité de connaissance,​ tout en définissant préalablement les types dans la base de donnée afin de disposer des identifiants à utiliser pour le codage. Voici un {{:​td_histoire_numerique:​notices_wikipedia_annote.odt|exemple de document encodé}}. Selon la méthode décrite dans le [[td_histoire_numerique:​exercice_3#​transformation_des_textes_encodes_en_xml|troisième exercice]]le texte encodé doit être copié dans la base de données (dans ce cas il s'agit de l'​objet 3) et transformé avec la fonction appropriée 
 +<code html>​SELECT vues.transformation_xml(3)</​code>​ 
 +qui produit ​le texte XML inséré dans le champs "​texte_xml"​ du même objet. 
 +On peut ensuite extraire les données encodées grâce à une requête SQL/XPath appropriée. Nous illustrerons cette démarche à l'​aide ​de deux exemples
 + 
 +==== Extraction de toutes les unités de connaissance ==== 
 + 
 +Voici la requête qui permet d'​extraire toutes les unités de connaissance,​ de n'​importe quel type: 
 +<code sql> 
 +WITH tw1 AS 
 +
 +  SELECT UNNEST(xpath ('//​in',​texte_xml)) texte_xml 
 +  FROM objets.objet 
 +  WHERE pk_objet = 3 
 +
 +SELECT tw1.texte_xml,​ 
 +       ​(((xpath ('/​in/​@ana',​tw1.texte_xml))[1])::​text)::​integer cle_type_information,​ 
 +       t1.nom type_information,​ 
 +       ​((xpath('​/in/​dat/​@when',​tw1.texte_xml))[1])::​text date, 
 +       ​((xpath('/​in/​en/​@ref',​tw1.texte_xml))[1])::​text acteur, 
 +       ​t2.nom nom_acteur 
 +FROM tw1 
 +  JOIN vues.vm_objet_vue_de_base t1 ON t1.pk_objet = ( ( (xpath ('/​in/​@ana',​tw1.texte_xml))[1])::​text)::​integer 
 +  LEFT JOIN vues.vm_objet_vue_de_base t2 ON t2.pk_objet = ( ((xpath('/​in/​en/​@ref',​tw1.texte_xml))[1])::​text)::​integer
 </​code>​ </​code>​
  
 +Et le résultat:
 +^Unité de connaissance^Clé du type d'​unité de connaissance^Type d'​unité de connaissance^Date^Clé de l'​acteur concerné^Nom de l'​acteur concerné^
 +|<in ana="​11"><​en ref="​1620"​ ana="​23">​Christopher Grienberger</​en>​ (aussi écrit Christopher Gruemberger,​ ou encore Grinberg, Bamberger, ou Gamberger, voire Panberger), né le <dat when="​15510702"​ type="​du">​2 juillet 1551</​dat>​ à <en type="​li"​ ana="​22">​Hall dans le Tyrol</​en></​in>​|11|Naissance|15510702|1620|Grienberger,​ Christoph|
 +|<in ana="​11"><​en ref="​1619"​ ana="​23">​Michael Maestlin</​en>​ (aussi appelé Mästlin, Möstlin, ou Moestlin), né le <dat when="​15500930"​ type="​du">​30 septembre 1550</​dat>​ à <en type="​li"​ ana="​22">​Göppingen en Bade-Wurtemberg</​en></​in>​|11|Naissance|15500930|1619|Maestlin,​ Michael|
 +|<in ana="​1621"><​dat when="​1580"​ type="​dd">​En 1580</​dat>,​ <en ref="​1619"​ ana="​1624">​il</​en>​ est devenu <​en><​en ref="​1625"​ ana="​1623">​professeur</​en>​ de <en ref="​15"​ ana="​1622">​mathématiques</​en></​en>​ à l'<​en ana="​10">​université de <en type="​li">​Heidelberg</​en></​en>​[jusqu'​en <dat when="​1583"​ type="​df">​1583</​dat>​]</​in>​|1621|Enseignement|1580|1619|Maestlin,​ Michael|
 +|<in ana="​1621"><​en ref="​1619"​ ana="​1624">​Il</​en>​ a enseigné ensuite à l'<​en ana="​10">​université de <en type="​li">​Tübingen</​en></​en>​ à partir de <dat when="​1583"​ type="​dd">​1583</​dat>,​ à l'âge de 47 ans</​in>​|1621|Enseignement|1583|1619|Maestlin,​ Michael|
 +|<in ana="​11"><​en ref="​17"​ ana="​23">​Nicolas-Claude Fabri de Peiresc</​en>​ (également orthographié de Peyresc), né le <dat when="​15801201"​ type="​du">​1er décembre 1580</​dat>​ à <en type="​li"​ ana="​22">​Belgentier</​en></​in>​|11|Naissance|15801201|17|Nicolas Claude Fabri de Peiresc|
 +
 +
 +==== Extraction des naissances ====
 +
 +La requête peut évidemment être adaptée au questionnement du chercheur. On peut ainsi, par exemple, sélectionner et mettre en forme uniquement les enseignements:​
 +<code sql>
 +WITH tw1 AS
 +(
 +  SELECT UNNEST(xpath ('//​in',​texte_xml)) texte_xml
 +  FROM objets.objet
 +  WHERE pk_objet = 3
 +)
 +SELECT tw1.texte_xml,​
 +       ​(((xpath ('/​in[@ana=1621]/​@ana',​tw1.texte_xml))[1])::​text)::​integer cle_type_information,​
 +       ​t1.nom type_information,​
 +       ​array_to_string(xpath('/​in/​dat/​@when',​tw1.texte_xml),​ '​–'​) dates,
 +       ​array_to_string(xpath('/​in/​en[@ana=1624]/​@ref',​tw1.texte_xml),​ ','​) acteur,
 +       ​t2.nom nom_acteur,
 +       ​regexp_replace(array_to_string(xpath('/​in/​en[@ana=10]/​descendant-or-self::​*/​text()',​tw1.texte_xml),​ ' '), '​\s{1,​}',​ ' ', '​g'​ ) institution,​
 +       ​array_to_string(xpath('//​en[@ana=1622]/​descendant-or-self::​*/​text()',​tw1.texte_xml),​ ','​) matiere
 +
 +
 +FROM tw1
 +  JOIN vues.vm_objet_vue_de_base t1 ON t1.pk_objet = ( ( (xpath ('/​in/​@ana',​tw1.texte_xml))[1])::​text)::​integer
 +  LEFT JOIN vues.vm_objet_vue_de_base t2 ON t2.pk_objet = ( ( (xpath ('/​in/​en/​@ref',​tw1.texte_xml))[1])::​text)::​integer
 +WHERE (((xpath ('/​in[@ana=1621]/​@ana',​tw1.texte_xml))[1])::​text)::​integer = 1621
 +</​code>​
 +
 +Et le résultat:
 +^texte_xml^cle_type_information^type_information^dates^acteur^nom_acteur^institution^matière^
 +|<in ana="​1621"><​dat when="​1580"​ type="​dd">​En 1580</​dat>,​ <en ref="​1619"​ ana="​1624">​il</​en>​ est devenu <​en><​en ref="​1625"​ ana="​1623">​professeur</​en>​ de <en ref="​15"​ ana="​1622">​mathématiques</​en></​en>​ à l'<​en ana="​10">​université de <en type="​li">​Heidelberg</​en></​en>​[jusqu'​en <dat when="​1583"​ type="​df">​1583</​dat>​]</​in>​|1621|Enseignement|1580–1583|1619|Maestlin,​ Michael|université de Heidelberg|mathématiques|
 +|<in ana="​1621"><​en ref="​1619"​ ana="​1624">​Il</​en>​ a enseigné ensuite à l'<​en ana="​10">​université de <en type="​li">​Tübingen</​en></​en>​ à partir de <dat when="​1583"​ type="​dd">​1583</​dat>,​ à l'âge de 47 ans</​in>​|1621|Enseignement|1583|1619|Maestlin,​ Michael|université de Tübingen| |
 +
 +\\
 +
 +===== Production de données structurées directement dans la base de données =====
 +
 +Si souhaité, et en fonction du type de questionnement et de sources, les données structurées peuvent être directement produites dans la base de données. Dans ce cas, on produira un objet de type Information ou Contenu, correspondant à une unité de connaissance. Les Informations reproduisent les connaissances produites par les chercheurs grâce à l'​analyse critique d'une ou plusieurs sources; les Contenus reproduisent les connaissances telles qu'​elles sont exprimées par une et une seule source. Il est donc indispensable d'​indiquer la source de l'​unité de connaissance.
  
 +A titre d'​exemple,​ la base de données contient une Information de type Naissance (objet 13) dont la source est la notice tirée de Wikipedia. A cette connaissance sont associés deux rôles: l'​acteur qui naît et le lieu qui localise la naissance.
  
 +Les données structurées ainsi produites peuvent être interrogées par des requêtes SQL appropriées.
  
td_histoire_numerique/exercice_5.txt · Dernière modification: 2016/03/03 10:26 par Francesco Beretta