Projet Blot |
Accès direct
|
Présentation
- Objectifs
- Publier les photos de terrain et les croquis de Jacques Blot
- 4600+ photos
- Utilisation de
Tropy
pour le catalogage et l'indexation. - Relier les photos aux notices de monuments de l'inventaire dans une bibliothèqe numérique
- Solution
OmekaS
- Créer des notices de monuments à partir des fichiers sources (.docx) de l'inventaire.
- Faciliter l'accès aux publications de Jacques Blot et mettre en valeur ses recherches
- Création d'une collection HAL
- Publier le dernier tome de son Inventaire des Monuments Protohistoriques en Pays Basque de France.
- Collection HAL
- Gaëlle et Marina
- Patrimoine archéologique du Pays Basque - Collection Jacques Blot.
- Sur le portail HAL-e2s-UPPA.
- Bibliographie Zotero
- Constitution de la collection
BiblioInventaire
à partir de la biblio fournie et de la collection HAL - Installer le plugin
Better BibTex
pourZotero
| lien | - export de la collection
BiblioInventaire
vers le dossierfichiers markdown/sortie/data
- avec le convertisseur
Better CSL JSON
- avec l'option
Garder à jour
cochée - fichier
BiblioInventaire.json
- Vérouiller les clés de citation
- Modifications du style
gallia-prehistoire.csl
- suppression des op. cit.
- ajout des url
- ajout de la désambiguisation des dates (1990a, 1990b...)
- correction entité html (remplacer
\&\amp;#160;
par\&\#160;
, sans les échappements)
- Traitement des sources Word
- dossier
sources word
. - 67 fichiers (1 par commune)
- tous les titres de monuments en style "titre 3"
- clés bibtex
- Quelles notices de monument ?
Format
- Dublin Core (
DCMI Metadata Terms
) - renseignements sur CIDOC-CRM : trop complexe
Propriétés
Propriétés dcterms | type de valeur | méthode d'attribution | markdown | html |
---|---|---|---|---|
dcterms:title |
Commune - Lieu dit - type | Xquery | ### titre |
<h3>titre</h3> |
dcterms:spatial |
Commune pactols:lieux |
Xquery + tableur | [Commune]{.spatial} |
<span class="spatial">Commune</span> |
dcterms:coverage |
Lieux-dits | Xquery | [Lieu-dit]{.coverage} |
<span class="coverage">Lieu-dit</span> |
dcterms:type |
pactols:sujets |
Xquery + tableur | [Chromlech]{.type} |
<span class="type">Chromlech</span> |
dcterms:creator |
inventeur IdRef |
Xquery + tableur | [J. Blot]{.creator} |
<span class="creator">J. Blot</span> |
dcterms:date |
découverte | Xquery + tableur | [juin 1995]{.date} |
<span class="date">juin 1995</span> |
dcterms:subject |
pactols:sujets |
Xquery + tableur | [grès]{.subject} |
<span class="subject">grès</span> |
dcterms:description |
texte <html> de l’inventaire |
Xquery | <section class="monument"> |
<section class="monument"> |
dcterms:temporal |
pactols:chronologie |
tableur | - | - |
dcterms:audience |
pactols:peuples |
tableur | - | - |
Vocabulaires / Référentiels
pactols:lieux
pactols:sujets
- demande d'ajout du mot-sujet
tertre d'habitat
pactols:chronologie
pactols:peuples
IdRef
HAL ?
- Traitement du texte Markdown
Commande bash
dans le dossier sources word
pour convertir avec Pandoc
tous les fichiers word en markdown vers le dossier fichiers markdown
.
$> find . -name "*.docx" | while read i; do pandoc -f docx -t markdown -s --atx-headers --wrap=none "$i" -o ../fichiers\ markdown/"${i%.*}.md"; done
Travail sur les fichiers par commune
- Ajout du nom de la commune au début du nom de chaque monument.
- Copier-coller multiple avec un bon éditeur de texte
- Ajout des classes sur les propriétés dans le texte.
[texte]{.classe}
- Le plus long, Gaëlle pour
.sujet
et.douteux
, Julien pour le reste. - écriture d'un petit fichier
html/javascript
pour faciliter le copier-coller des{.classes}
:copy.html
. - Ajout des titres niveau 4 avec
sed
pour - Localisation
sed -i -e 's/^Localisation/#### Localisation/g' *.md
- Description
sed -i -e 's/^Description/#### Description/g' *.md
- Historique
sed -i -e 's/^Historique/#### Historique/g' *.md
- Découverte de Collections de monuments
- laissées en titre de niveau 2
- seront traitées ultérieurement en
item-collection
dansOmekaS
- écrire un template
item-collection
dansOmekaS
Travail sur le fichier markdown final
Commande Pandoc
pour fusionner tous les fichiers markdown
des communes en un fichier final.md
dans le dossier fichiers markdown/Sortie
pandoc --wrap=none -o Sortie/final.md *.md
- Ajout du bloc de métadonnées
yaml
(utilisé dans la template html) - titre, date, auteur, mots-clés...
- le Bloc
yaml
à coller au début du documentmarkdown
--- title: Jacques Blot - Inventaire de monuments protohistoriques en pays basque author: Jacques Blot date: 2021-02-03 keywords: - Archéologie - Monuments protohistoriques - Pyrénées-Atlantiques - Pays-Basque - Tumulus - Chromlech - Tertre editor: - name: Julien Rabaud - name: Gaëlle Chancerel - name: Marina Lloancy publisher: UPPA ---
- ajout de la
<div id="refs">
qui accueillera les références générées parpandoc-citeproc
. - code
html
à coller à la fin du documentmarkdown
<div id="biblio"> <h6 class="unnumbered" id="bibliographie">Bibliographie</h6> <div id="refs"> </div> </div>
- Insérer les balises html
<section class="monument"></section>
autour des notices de monuments : - Je n'ai pas pu utiliser le marquage
markdown
desfenced-divs
(:::{.monument}
) car mes sections englobent des titres (?). - Injection directe du
html
avecSed
sed -e '/^### /i \<\/section\>\n\n\<section class\=\"monument\"\>\n' final.md > final_monument.md
- Nécessite de déplacer à la main certaines balises fermantes :
- la première (à coller à la fin du dernier monument).
- toutes celles après un titre de niveau 1 (Commune), à coller à la fin du dernier monument de la commune précédente.
- toutes celles après un titre de niveau 2 (Groupe de monuments), à coller à la fin du dernier monument avant le groupe.
- Les 1233 monuments sont maintenant balisés et on va pouvoir faire des boucles
xquery
(sur l'exporthtml
) à l'intérieur de chacun. - Vérification et consolidation de la bibliographie (
Zotero
).
- html
- css
- javascript
Travail sur la template Pandoc
La template templateHtml.html
pour Pandoc
.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" $if(lang)$ lang="$lang$" xml:lang="$lang$" $endif$$if(dir)$ dir="$dir$" $endif$> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta name="generator" content="pandoc" /> $for(author-meta)$ <meta name="author" content="$author-meta$" /> $endfor$ $if(date-meta)$ <meta name="date" content="$date-meta$" /> $endif$ $if(keywords)$ <meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$" /> $endif$ <title>$if(title-prefix)$$title-prefix$ ÔÇô $endif$$pagetitle$</title> <link rel="icon" type="image/png" href="data/dolmen.ico"/> <style type="text/css"> code { white-space: pre; } </style> $if(quotes)$ <style type="text/css"> q { quotes: "ÔÇ£""ÔÇØ""ÔÇÿ""ÔÇÖ"; } </style> $endif$ $if(highlighting-css)$ <style type="text/css"> $highlighting-css$ </style> $endif$ $for(css)$ <link rel="stylesheet" href="$css$" type="text/css" /> $endfor$ $if(math)$ $math$ $endif$ $for(header-includes)$ $header-includes$ $endfor$ </head> <body> <button href="#" onclick="toggle('TOC')">Masquer/Afficher l'index</button><button href="#" onclick="toggle('biblio')">Masquer/Afficher la bibliographie</button> $for(include-before)$ $include-before$ $endfor$ $if(toc)$ <div id="$idprefix$TOC"> $toc$ </div> $endif$ <article> $body$ $for(include-after)$ $include-after$ $endfor$ </article> </body> </html>
Par rapport à la template par défaut (copiée et modifiée) :
- Ajout des boutons "masquer/afficher" et de la favicon.
- A creuser.
Travail sur la CSS
La css donnée à Pandoc
(css_inventaire.css
), sans les codes de coloration syntaxique.
<style type="text/css" > * { box-sizing: border-box; } a { color: MediumPurple; text-decoration: none; } a:hover { color: deeppink; } span.spatial { display: none; } article span.coverage:hover { color: chocolate; } article span.type:hover { color: brown; } span.creator:hover { color: steelblue; } span.date:hover { color: indianred; } span.subject { text-decoration: underline wavy dodgerblue; } span.subject:hover { color: dodgerblue; text-decoration: none; } span.douteux:hover { color: deeppink; } span.citation a { color: teal; } hr { border: none; border-bottom: 1px solid #999; width: 80%; } html, body { margin: 0; margin-bottom: 4em; padding: 0; } body { background-color: MistyRose; color: black; font-family: 'Sitka', 'Perpetua', 'Garamond', 'Caladea', 'DejaVu', 'Georgia', 'Times New Roman', 'Times', serif; } #TOC { position: fixed; width: 20%; left: 1em; top: 1em; font-size: 120%; max-height: 95%; overflow-y: auto; scrollbar-width: thin; scrollbar-color: Tomato MistyRose; } #TOC h3 { font-size: 100%; } #biblio { position: fixed; width: 25%; top: 1em; right: 0em; font-size: 95%; max-height: 95%; overflow-y: auto; scrollbar-width: thin; scrollbar-color: Tomato MistyRose; padding: 1em; padding-left: 2em; text-indent: -1em; } article { position: fixed; top: 0em; left: 20%; width: auto; font-size: 1.2em; margin-right: 25%; line-height: 110%; max-height: 95%; padding-left: 2em; padding-right: 2em; overflow-y: auto; scrollbar-width: thin; scrollbar-color: Tomato MistyRose; } /* Better display on printing */ @media print { article { position: relative; display: block; left: -2em; width: auto; font-size: 10pt; margin: 0 auto; line-height: 100%; } #TOC { display: none; } #biblio, #refs { position: relative; display: block; width: auto; } p { widows: 1; orphans: 1; } .pagebreakafter { page-break-after: always; } .pagebreakbefore { page-break-before: always; } h1, h2, h3, h4 { page-break-after: avoid; } p, code, pre, blockquote, li, span, table { page-break-inside: avoid; } } article p { hyphens: auto; text-align: justify; } h1 { font-family: 'Caladea', 'Raleway', 'Lato', 'Liberation sans', 'Helvetica', sans-serif; color: crimson; letter-spacing: 3px; margin-top: 2em; } h2 { font-size: 1.25em; line-height: 110%; font-family: 'Century gothic', 'Raleway', 'Lato', 'Liberation sans', 'Helvetica', sans-serif; color: firebrick; } h3 { font-size: 1.2em; font-weight: 600; margin-top: 2em; margin-bottom: -0.25em; letter-spacing: 2px; font-family: 'Caladea', 'Tahoma', 'OCR A', 'Alef'; color: MediumPurple; } h4 { font-family: 'Century gothic', 'Raleway', 'Lato', 'Liberation sans', 'Helvetica', sans-serif; font-size: 0.75em; margin-bottom: 0.2em; letter-spacing: 4px; margin-left: 1em; color: firebrick; } h5 { font-size: 0.8em; font-weight: 600; margin-bottom: 0.2em; margin-left: 2em; margin-top: 0.2em; font-family: 'Caladea', 'Tahoma', 'OCR A', 'Alef'; color: tomato; } h6 { font-size: 95%; margin-top: 2em; line-height: 110%; font-family: 'Papyrus', 'Monotype Corsiva', 'Lucida Calligraphy', 'Century gothic', 'Raleway', 'Lato', 'Liberation sans', 'Helvetica', sans-serif; color: teal; } img { margin-top: 1em; max-width: 40%; height: auto; } figure { text-align: center; } figcaption { text-align: center; font-family: 'Century gothic', 'Tahoma', 'OCR A', 'Alef'; font-style: italic; font-size: 0.7em; margin-top: 0.6em; } blockquote { font-size: 80%; color: rgba(120, 120, 120, 1); margin: 2% 5%; line-height: 120%; } table { border-collapse: collapse; width: 100%; font-size: 70%; font-family: 'Raleway', 'Lato', 'Liberation sans', 'Helvetica', sans-serif; } th, td { padding: 4px 20px; border-bottom: 1px solid #333; } .tit { text-align: center; letter-spacing: 0px; margin-top: 1em; line-height: 120%; } .citation { color: teal; font-family: 'Georgia'; font-size: 0.8em; } .references { line-height: 110%; font-size: 0.9em; } .csl-entry { margin-bottom: 0.5em; } .csl-entry a { color: RosyBrown; } .csl-entry a:hover { color: deeppink; } .csl-entry:target { color: teal; font-size: 120%; border-top: 2px solid black; border-bottom: 2px solid black; padding-top: 0.8em; padding-bottom: 0.8em; transition: 0.3s; } h2 ~ p, h3 ~ p { margin-left: 3em; margin-bottom: 0em; } h4 ~ p, section ul { margin-left: 3em; margin-top: 0em; margin-bottom: 0em; } li p:not(:first-child) { margin-top: -1em; } ul { list-style-type: '÷ '; } ul ul { list-style-type: '› '; margin-left: -1em; } #TOC ul > li > ul { display: none; } </style >
- Layout en 3 colonnes
#TOC { position: fixed; width: 20%; left: 1em; top: 1em; font-size: 120%; max-height: 95%; overflow-y: auto; scrollbar-width: thin; scrollbar-color: Tomato MistyRose; } #biblio { position: fixed; width: 25%; top: 1em; right: 0em; font-size: 95%; max-height: 95%; overflow-y: auto; scrollbar-width: thin; scrollbar-color: Tomato MistyRose; padding: 1em; padding-left: 2em; text-indent: -1em; } article { position: fixed; top: 0em; left: 20%; width: auto; font-size: 1.2em; margin-right: 25%; line-height: 110%; max-height: 95%; padding-left: 2em; padding-right: 2em; overflow-y: auto; scrollbar-width: thin; scrollbar-color: Tomato MistyRose; }
- Usage du pseudo-sélecteur
:target
- Permet de mettre en évidence dans la bibliographie la référence cliquée dans le texte de l'inventaire.
.references { line-height: 110%; font-size: 0.9em; } .csl-entry { margin-bottom: 0.5em; } .csl-entry a { color: RosyBrown; } .csl-entry a:hover { color: deeppink; } .csl-entry:target { color: teal; font-size: 120%; border-top: 2px solid black; border-bottom: 2px solid black; padding-top: 0.8em; padding-bottom: 0.8em; transition: 0.3s; }
- Permet de mettre en évidence dans la bibliographie la référence cliquée dans le texte de l'inventaire.
- Classes "dcterms" ajoutées dans le markdown.
span.spatial { display: none; } article span.coverage:hover { color: chocolate; } article span.type:hover { color: brown; } span.creator:hover { color: steelblue; } span.date:hover { color: indianred; } span.subject { text-decoration: underline wavy dodgerblue; } span.subject:hover { color: dodgerblue; text-decoration: none; } span.douteux:hover { color: deeppink; } span.citation a { color: teal; }
- Masquage du nom des communes dans les noms de monuments.
:hover
: changement de couleur.- Tests sur
@media print
(à pousser).@media print { article { position: relative; display: block; left: -2em; width: auto; font-size: 10pt; margin: 0 auto; line-height: 100%; } #TOC { display: none; } #biblio, #refs { position: relative; display: block; width: auto; } p { widows: 1; orphans: 1; } .pagebreakafter { page-break-after: always; } .pagebreakbefore { page-break-before: always; } h1, h2, h3, h4 { page-break-after: avoid; } p, code, pre, blockquote, li, span, table { page-break-inside: avoid; } }
- ...
Travail sur le Javascript
Le fichier js_inventaire.js
donné à Pandoc
.
<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ $('#TOC ul>li').click(function () { $('#TOC ul>li').not(this).find('ul').hide(); $(this).find('ul').toggle(); }); }); </script> <script type="text/javascript"> function toggle(id) { var n = document.getElementById(id); n.style.display = (n.style.display != 'none' ? 'none' : '' ); } </script> <script type="text/javascript"> var links = document.querySelectorAll('div.csl-entry a'); for (var i = 0, linksLength = links.length; i < linksLength; i++) { if (!links[i].target) { links[i].target = '_blank'; } } </script>
Contient 3 scripts :
Commande Pandoc
Pour export de final.md
en final2.html
pandoc -o final2.html -s --toc --template=data/templateHtml.html --include-in-header=data/css_inventaire.css --include-in-header=data/js_inventaire.js -C --bibliography=data/BiblioInventaire.json --csl=data/gallia-prehistoire.csl --metadata link-citations=true final.md
Options Pandoc
--self-contained
: abandonnée à cause de l'utilisation de jquery.-s
(--standalone
) : nécessaire pour les autres options.--toc
: génère le sommaire.--template
[=fichier.html] - icitemplateHtml.html
.--include-in-header
[=fichier] (x2 :css_inventaire.css
etjs_inventaire.js
).-C
(--citeproc
) : gestion des références bibliographiques--bibliography
[=fichier] (fichier des références bibliographiques) - iciBiblioInventaire.json
.--csl
[=fichier] (style) - icigallia-prehistoire.csl
.--metada link-citations=true
- Xquery
- xslt
Xquery
La requête (fichier notices.xq
), exécutée dans BaseX
for $i in //*:section[@class="monument"] let $title := string-join( for $z in $i/h3//text() return $z, ' ') let $spatial := for $a in $i//*:span[@class="spatial"] return <spatial>"{$a/text()}"</spatial> let $coverage := for $b in $i//*:span[@class="coverage"] return <coverage>"{$b/text()}"</coverage> let $type := for $c in $i//*:span[@class="type"] return <type>"{$c/text()}"</type> let $date := for $d in $i//*:span[@class="date"] return <date>"{$d/text()}"</date> let $creator := for $e in $i//*:span[@class="creator"] return <creator>"{$e/text()}"</creator> let $subject := for $f in $i//*:span[@class="subject"] return <subject>"{$f/text()}"</subject> let $douteux := for $g in $i//*:span[@class="douteux"] (: return <douteux>{$g/text()}</douteux> :) return <douteux>oui</douteux> let $ref := for $h in $i//*:span[@class="citation"] return <ref>"{$h/@data-cites/string()}"</ref> let $description := <description><cdata>{$i}</cdata></description> return <notice><title>{$title}</title>{$spatial}{$coverage}{$type}{$date}{$creator}{$subject}{$douteux}{$ref}{$description}</notice>
à noter :
Xslt
La feuille de style (fichier tableau.xsl
), appliquée avec un petit script python dans jupyter
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" doctype-system="about:legacy-compat" encoding="UTF-8" indent="yes" /> <xsl:template match="/"> <html lang="fr"> <head> <meta charset="utf-8" /> <title>Tableau des notices Blot</title> <link rel="icon" type="image/png" href="UPPA_logo-rose.png" /> <link rel="stylesheet" href="styleChercheur.css" /> </head> <body> <table border="1"> <tr> <th>#</th> <th>title</th> <th>spatial</th> <th>coverage</th> <th>type</th> <th>date</th> <th>creator</th> <th>subject</th> <th>douteux</th> <th>ref biblio</th> <th>description</th> </tr> <xsl:variable name="sep" select="', '"/> <xsl:for-each select="/notices/notice"> <xsl:sort select="title" order="ascending" /> <tr> <td style="font-family:monospace;font-size:0.9em;"> <xsl:value-of select="position()" /> </td> <td> <xsl:value-of select="title" /> </td> <td> <xsl:for-each select="spatial"> <xsl:if test="position() > 1"><xsl:copy-of select="$sep"/></xsl:if> <xsl:value-of select="."/> </xsl:for-each> </td> <td> <xsl:for-each select="coverage"> <xsl:if test="position() > 1"><xsl:copy-of select="$sep"/></xsl:if> <xsl:value-of select="."/> </xsl:for-each> </td> <td> <xsl:for-each select="type"> <xsl:if test="position() > 1"><xsl:copy-of select="$sep"/></xsl:if> <xsl:value-of select="."/> </xsl:for-each> </td> <td> <xsl:for-each select="date"> <xsl:if test="position() > 1"><xsl:copy-of select="$sep"/></xsl:if> <xsl:value-of select="."/> </xsl:for-each> </td> <td> <xsl:for-each select="creator"> <xsl:if test="position() > 1"><xsl:copy-of select="$sep"/></xsl:if> <xsl:value-of select="."/> </xsl:for-each> </td> <td> <xsl:for-each select="subject"> <xsl:if test="position() > 1"><xsl:copy-of select="$sep"/></xsl:if> <xsl:value-of select="."/> </xsl:for-each> </td> <td> <xsl:for-each select="douteux"> <xsl:if test="position() > 1"><xsl:copy-of select="$sep"/></xsl:if> <xsl:value-of select="."/> </xsl:for-each> </td> <td> <xsl:for-each select="ref"> <xsl:if test="position() > 1"><xsl:copy-of select="$sep"/></xsl:if> <xsl:value-of select="."/> </xsl:for-each> </td> <td> <xsl:value-of select="description" /> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
à noter :
- csv
(en cours)
- OpenRefine
(à venir)
- OmekaS
- Import des notices (en cours)
- Installation des plugins (Yann Foucauld).
- Création du Site.
- Création du template
monument-blot
.