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
td_histoire_numerique:exercice_5 [2016/01/05 22:34]
Francesco Beretta [Encodage des unités de connaissance dans les textes]
td_histoire_numerique:exercice_5 [2016/03/03 10:26] (Version actuelle)
Francesco Beretta
Ligne 6: Ligne 6:
 </td> </td>
 <td> <td>
-<span xmlns:​dct="​http://​purl.org/​dc/​terms/"​ property="​dct:​title">​Le cours "Informatique ​pour les historiens"</​span>​ de <span xmlns:​cc="​http://​creativecommons.org/​ns#"​ property="​cc:​attributionName">​Francesco Beretta</​span>,​ avec tous les documents, fichiers et scripts associés, est mis à disposition selon les termes de la <a rel="​license"​ href="​http://​creativecommons.org/​licenses/​by-nc-sa/​4.0/">​licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</​a>​.</​td></​tr></​table>​+<span xmlns:​dct="​http://​purl.org/​dc/​terms/"​ property="​dct:​title">​Le cours "Outils numériques ​pour les historiens"</​span>​ de <span xmlns:​cc="​http://​creativecommons.org/​ns#"​ property="​cc:​attributionName">​Francesco Beretta</​span>,​ avec tous les documents, fichiers et scripts associés, est mis à disposition selon les termes de la <a rel="​license"​ href="​http://​creativecommons.org/​licenses/​by-nc-sa/​4.0/">​licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</​a>​.</​td></​tr></​table>​
 </​html>​ </​html>​
  
Ligne 34: Ligne 34:
 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"​. 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"​.
 Quant aux rôles, ils sont encodés dans les balises qui enveloppent les entités nommées: Quant aux rôles, ils sont encodés dans les balises qui enveloppent les entités nommées:
-  * {en1620_23} enveloppe l'​objet 1620 de la base de données, "​Grienberger,​ Christoph",​ dont le rôle est l'​objet 23: "​naître"​ +  * {en1620_23} enveloppe l'​objet 1620 de la base de données, "​Grienberger,​ Christoph",​ dont le rôle est l'​objet 23: "​naître"​. 
-  * +  * {en0li_22} enveloppe 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_du} exprimé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>​
 +
 +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.1452029658.txt.gz · Dernière modification: 2016/01/05 22:34 par Francesco Beretta