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_5 [2016/01/05 22:34] Francesco Beretta [Encodage des unités de connaissance dans les textes] |
td_histoire_numerique:exercice_5 [2016/01/05 23:12] Francesco Beretta [Extraction des naissances] |
||
---|---|---|---|
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 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^ | ||
+ | |<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|| | ||