29 juin 2007

Excel vers EAD

Pour obtenir une base en EAD, c'est toujours une très mauvaise idée de saisir l'encodage XML. Le mieux est de partir des pratiques existantes, et de permettre aux personnes inventoriant leurs fonds de travailler avec des outils bureautiques classiques.
Donc en général on a deux types de documents à convertir : les inventaires sous Word, et les inventaires sous Excel.
Les premiers sont très différents des seconds. Les isous Word sont déjà structurés en parties, sous-parties, sous-sous-parties, etc., correspondant à peu près à la structure d'un document EAD. La conversion en XML, via OpenOffice (j'en ai déjà parlé) n'est une conversion des noms de balises (je simplifie un peu) : on remplace le tag "résumé" par une balise "abstract" et le style Titre 1 par <c level="series"><did><unitid>Texte en Titre 1</unitid> etc.

Sous Excel, c'est complètement différent : la même information est répétée à chaque ligne. Par exemple si j'ai une dizaine de monnaies de Corbie, l'information "Corbie" est répétée à chaque ligne, alors qu'en EAD c'est une information chapeau, indiquée une seule fois, et qui englobe toutes les monnaies.
J'ai donc mis au point une chaîne en plusieurs étapes, permettant la récupération d'un inventaire Excel en EAD :
  1. Publipostage : c'est une fonction qui existe dans Word, sous l'onglet "Outils". Pour chaque ligne Excel, je récupère l'information présente dans une colonne et je la mets sous une nouvelle mise en forme :
    <monnaie>
    <id>«Numéro»</id>
    <ref>«Référence»</ref>
    <atelier>«Les_conditions_de_lémission»</atelier>
    <type_d_atelier>«F6»</type_d_atelier>
    <siecle>«F28»</siecle>
    <dates>«F32»</dates>
    <seigneur>«F33»</seigneur>
    <nom_monnaie>«F16»</nom_monnaie>
    <metal>«F18»</metal>
    <avers_champ>«Description»</avers_champ>
    <revers_champ>«F73»</revers_champ>
    <avers_legende>«Légende»</avers_legende>
    <avers_legende_dvpt>«F114»</avers_legende_dvpt>
    <revers_legende>«F133»</revers_legende>
    <revers_legende_dvpt>«F134»</revers_legende_dvpt>
    <departement>«Localisation»</departement>
    <province_laique>«F21»</province_laique>
    <province_ecclesiastique>«F24»</province_ecclesiastique>
    <diocese>«F23»</diocese>
    </monnaie>

    Tout ce qui est entre guillemets, c'est l'appel d'une colonne, pour chaque ligne Excel. Ca produit un fichier XML (dans Word, à copier ensuite dans un éditeur XML) qui compte autant de <monnaie/> qu'il y a de lignes.

  2. Il faut ensuite les remettre en EAD, en groupant les <monnaie/> selon certains critères : géographique (par région), puis par atelier (triés par ordre alphabétique), puis par seigneur (triés par ordre chronologique), puis par métal, puis par type de monnaie.
Cette conversion EAD, avec regroupement, s'effectue avec une feuille XSL qui utilise la "méthode Muenchian" (que j'ai découverte pour l'occasion). Celle que j'ai paramétrée est encore très sommaire : elle ne trie que par atelier, et au sein de chaque atelier par ordre chronologique.
C'est à affiner progressivement.
Les tris successifs ne sont pas très compliqués à rajouter, une fois qu'on a le modèle. Il faudrait encore réfléchir à la valeur à donner aux attributs level des <c>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/02/xpath-functions" xmlns:xdt="http://www.w3.org/2005/02/xpath-datatypes" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:html="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:key name="monnaies-par-atelier" match="monnaie" use="atelier"/>
<xsl:template match="/">
<ead>
<eadheader>
<xsl:call-template name="metadonnees"/>
</eadheader>
<archdesc>
<xsl:apply-templates/>
</archdesc>
</ead>
</xsl:template>
<xsl:template name="metadonnees">
<eadid countrycode="FR">ID<xsl:value-of select="generate-id()"/>
</eadid>
<filedesc>
<titlestmt>
<titleproper>Inventaire en EAD</titleproper>
<author>????</author>
</titlestmt>
</filedesc>
<profiledesc>
<creation>Tableau Excel extrait par publipostage, puis regroupement des notices par autorité (atelier), émetteur (personne physique), métal et type de monnaie</creation>
<!-- Description du fichier électronique, de la façon dont le document a été obtenu-->
<langusage>Document rédigé en <language langcode="fre">français</language>
</langusage>
</profiledesc>
</xsl:template>


<xsl:template match="monnaies">
<did>
<unitid>Inventaire EAD de monnaies</unitid>
</did>
<dsc>
<xsl:for-each select="monnaie[count(. | key('monnaies-par-atelier', atelier)[1])=1]">
<xsl:sort select="atelier"/>
<c>
<did>
<unittitle>
<xsl:value-of select="atelier"/>
</unittitle>
</did>
<xsl:for-each select="key('monnaies-par-atelier', atelier)">
<xsl:sort select="siecle"/>
<xsl:call-template name="notice_monnaie"/>
</xsl:for-each>
</c>
</xsl:for-each>
</dsc>
</xsl:template>


<xsl:template name="notice_monnaie">
<c>
<did>
<unittitle><xsl:value-of select="nom_monnaie"/></unittitle>
<unitid>
<xsl:value-of select="id"/>
</unitid>
<unitdate>
<xsl:choose>
<xsl:when test="dates/child::text()"><xsl:value-of select="dates"/>
<xsl:choose>
<xsl:when test="siecles/child::text()">[<xsl:value-of select="siecles"/></xsl:when>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="siecle"/>
</xsl:otherwise>
</xsl:choose>

</unitdate>
<physdesc>
<physfacet type="metal">
<xsl:value-of select="metal"/>
</physfacet>
<dimensions type="weight">
<xsl:value-of select="poids"/>
</dimensions>
<dimensions type="angle">
<xsl:value-of select="angle"/>
</dimensions>
</physdesc>
</did>
<!--La balise <controlaccess> contient tous les mots clés : localisation géographique, indexation iconographique, etc.-->
<controlaccess>
<geogname source="dieudonne" role="province_laique"><xsl:value-of select="province_laique"/></geogname>
<geogname role="diocese"><xsl:value-of select="diocese"/></geogname>
<geogname role="province_eccl"><xsl:value-of select="province_eccl"/></geogname>
<geogname role="departement"><xsl:value-of select="departement"/></geogname>
<geogname role="region"><xsl:value-of select="region"/></geogname>
<occupation><xsl:value-of select="type_d_atelier"/></occupation>
</controlaccess>
<bibliography>
<bibref>
<xsl:value-of select="ref"/>
</bibref>
</bibliography>
<scopecontent>
<scopecontent dc:type="avers">
<p>
<xsl:attribute name="altrender"><xsl:value-of select="avers_legende_dvpt"/></xsl:attribute>
<xsl:value-of select="avers_legende"/>
</p>
<p>
<xsl:value-of select="avers_champ"/>
</p>
</scopecontent>
<scopecontent dc:type="revers">
<p>
<xsl:attribute name="altrender"><xsl:value-of select="revers_legende_dvpt"/></xsl:attribute>
<xsl:value-of select="revers_legende"/>
</p>
<p>
<xsl:value-of select="revers_champ"/>
</p>
</scopecontent>
</scopecontent>
</c>
</xsl:template>
</xsl:stylesheet>


Ce qui me donne un fichier de ce genre. J'ai 715 monnaies dans ce tableau à charger ainsi, avec aucune reprise à effectuer, dans ma base Pleade.
Seul gros défaut : mon tableau de fait référence à aucune image (alors que j'ai bien numérisé de nombreuses planches du XIXe siècle). Pour faire le lien, je pourrais rajouter une colonne pointant vers les images. En réalité, le plus logique est de modifier les noms de mes fichiers pour utiliser le champ "id" de chaque notice : chaque image devra s'appeler (par exemple) IX.A.1.jpg, et le lien vers l'image peut se construire dynamiquement, en utilisant l'identifiant et en rajoutant ".jpg" à la fin.
En terme d'encodage enfin, il faudra encore que je me décide sur ce que je fais de toute l'indexation iconographique : en effet j'ai à disposition dans mon tableau des colonnes "Alpha ou oméga : Oui/non", "Type iconographique/lettres", "Type religieux : oui/non", etc. Ce serait dommage que ça soit perdu.

Libellés : , , , , ,

Mentions légales

MonnaieCe n'est pas un blog de collectionneur.
Je suis historien, un peu informaticien (j'adore les métadonnées !). D'où ce que vous pouvez lire ici.
Comme vous pouvez le constater, même si je le laisse en ligne, il n'est plus alimenté depuis longtemps.

Recherche sur le web numismate

Recherche dans les livres de numismatique de Google Book Search[...]

 

 

Généré par Blogger

Site Meter