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 | [Cromlech]{.type} |
<span class="type">Cromlech</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 - Cromlech - 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 dejquery
.-s
(--standalone
) : nécessaire pour les options :--toc
: génère le sommaire.--template
[=fichier.html
]. IcitemplateHtml.html
.--include-in-header
[=fichier
]. Deux fois ici : pourcss_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
] StyleCSL
. Icigallia-prehistoire.csl
(modifié). [Dépôt officiel des stylesCSL
].--metada link-citations=true
: lien entre la référence dans le texte et son entrée dans la bibliograhie.
- 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
.