Outils pour utilisateurs

Outils du site


public:import_xtz

Import XTZ + CSV (XML-TEI Zero)

Objectif

Voir les tickets :

Créer un module interprétant un nombre raisonnable de balises TEI pour :

  • la sélection de métadonnées pas V1
  • la construction de structures internes
  • la segmentation de phrases pas V1
  • la construction de mots étiquetés
    • en proposant notamment la même stratégie de précodage des mots que XML/w+CSV
    • ainsi que la stratégie de catégories de balises de la BFM pour les choix de tokenization
  • la construction d'éditions (pagination, sections, notes…)
  • la construction de sommaires pas V1
  • etc.

Un mécanisme doit également permettre de filtrer/préserver certains éléments (hors-texte) voire aider à faire différentes variantes d'un même corpus (plans textuels).

Un mécanisme doit permettre de déterminer l'ordre des textes à partir d'une métadonnée.

Ce module d'import doit tenir compte des objectifs des deux versions RCP et GWT de TXM. Il faudra unifier les besoins en paramètres d'import.

Spécifications

External TEI interpretation

Description of how this module interprets TEI elements in source texts.

This is the 'External TEI' managed by TXM.

TXM also manages the 'Internal TEI' format called 'XML-TXM'.

Textual units <text>

Use the 'text' element if present.

If not, create a 'text' element (internaly - XML-TXM)

If multiple 'text' elements in a single file (in sequence or nested): ignore sub-text and other texts and display error message.

See also http://forge.cbp.ens-lyon.fr/redmine/issues/3421

Lexical units <w>

Use the 'w' element if present.

If not, create a 'w' element (internaly - XML-TXM)

If multiple 'w' elements in a single file (nested): ignore sub-w and display error message

See also:

<note> nested in <w>

Solutions:

  • a. déplacer les notes à l'extérieur du mot (avec un @type particulier éventuellement pour pouvoir personnaliser leur traitement)
  • b. les transformer en propriétés de mots (<txm:ana type=“#note”>), avec des contraintes sur la longueur et la suppression des sous-éléments
  • c. faire évoluer le format xml-tei-txm et les modules d'import pour autoriser des tei:note dans tei:w, juste après les txm:ana. Cela permettrait de conserver le lien hiérarchique entre le mot et la note sans casser les index et risquer de dupliquer l'affichage.

Space between words rendering

2 Cases :

  • A) rules by language
  • B) source encoding

A) rules by language

  • space Before list :
    • eg FR = ':'
  • space After list

B) source encoding

If the source contains a w@join=“left”, the word must not be separated by space even if the A) rules apply

e.g. FR

a<w join="left">:</w>c

→ 'a: c'

Editorial interventions

Règle de pré-tokenisation : si une des balises suivantes est utilisée pour encoder des interventions au niveau d'une lettre ou une séquence de lettres (pas un mot complet) alors le mot les contenant doit être encodé par <w>.

Toutes ces balises sont laissées dans les sources pivot.

Le contenu des sic de séquences de mots est laissé dans les sources pivot (pour les afficher en hors texte à éditer).

6 paires de balises :

  • reg/orig (choice) : régularisation/non régularisation (choisi une forme plus adaptée : ponctuation, orthographe)
  • corr/sic (choice) : correction/non correction (la source s'est trompée)
  • supplied/surplus : ajout dans l'édition parce que manque dans la source/en trop dans la source
  • add/del (subst) : ajout/suppression dans la source
  • abbr/expan (choice) : abréviation dans la source/résolution d'abréviation dans l'édition
  • am/ex/am+abbr/ex+expan : marque / ajout (lettres restituées) / abréviation complète / expansion complète

Interprétations

  • reg (lettre + mot)
    • seul : régularisation (choisi une forme plus adaptée : ponctuation, orthographe) sans encoder l'original de la source
      • index : contenu
      • rendu : couleur_vert(contenu)
    • (a) dans choice : régularisation (choisi une forme plus adaptée : ponctuation, orthographe) en encodant l'original de la source dans orig
      • index :
        • lettre : fusion des contenus de reg et les restes de la forme du w
        • mot : <w @orig=contenu(orig)>contenu(reg)</w>
      • rendu : couleur_vert(contenu)
  • orig (lettre + mot)
    • seul : original de la source (jugée irrégulière)
      • index : contenu
      • rendu : couleur_rouge(contenu)
    • (b) dans choice : formule inverse de (a)
      • index :
        • lettre : NON
        • mot : <w @orig=contenu(orig)>contenu(reg)</w>
      • rendu : couleur_vert(contenu)
  • corr (mot + séquence)
    • seul : correction (la source s'est trompée)
      • index : contenu
      • rendu : couleur_bleu(contenu)
    • (a) dans choice : correction la source s'est trompée, la forme erronée est encodée dans le sic
      • index :
        • mot : <w @sic=contenu(sic)>contenu(corr)</w>
        • séquence : <w @sic=contenu(sic[0]+' '+sic[1]...)>contenu(corr)</w> <w @sic=contenu(sic[0]+' '+sic[1]...)>contenu(corr)</w>...
      • rendu : couleur_bleu(contenu)
  • sic
    • seul : encode la forme erronée de la source
      • index : contenu
      • rendu : couleur_rouge(contenu)
    • (b) dans choice : formule inverse de (a)
      • index :
        • mot : <w @sic=contenu(sic)>contenu(corr)</w>
        • séquence : <w @sic=contenu(sic[0]+' '+sic[1]...)>contenu(corr)</w> <w @sic=contenu(sic[0]+' '+sic[1]...)>contenu(corr)</w>...
      • rendu : couleur_bleu(contenu)
  • supplied (lettre + mot + séquence) : ajout dans l'édition parce que manque dans la source
    • index
      • lettres : fusion des contenus de supplied et les restes de la forme du w
      • mot : contenu du supplied
      • séquence : séquence de mots = dans le contenu du supplied
    • rendu : '['+contenu+']'
      • pour les séquences de mots, 3 cas :
        • [ab cd e]f : <supplied part="i">ab cd</supplied> <w><supplied part="f">e</supplied>f</w>
        • a[b cd e]f
        • a[b cd ef]
        • [ab cd ef]
  • surplus : en trop dans la source
    • index : NON
    • rendu :
      • '('+contenu+')'
      • ajouter après le span de surplus un <span class="tooltip">surplus@reason</span>
  • add (lettre + mot + séquence)
    • seul : ajout dans la source
    • (a) dans subst : ajout dans la source, la forme supprimée est encodée dans le del
  • del
    • seul : supprimé dans la source
    • (b) dans subst : formule inverse de (a)

Outils de stylage

  • reg:
    • classe CSS :
      .reg { color: green }
  • supplied:
    • classe CSS :
      .supplied { color: blue }
      .supplied:before { content:"[" }
      .supplied:after { content:"]" }

- <reg> ou <supplied>

Exemples

  • n<reg reason="lost"></reg>
    • mot indexé : nỉ
      • propriété supplémentaire : @orig/@source/@raw = 'n'
    • mot édité : n<+ 'ỉ' en vert foncé> ou n(ỉ) [ () = <surplus>]
    • format TXM :
      <w>n<reg reason="lost"></reg></w>
    • rendu TXM : modifier la classe CSS 'reg' si nécessaire (pour ajouter des parenthèses)
  • wp<supplied reason="lost">w</supplied>t
    • mot indexé : wpwt
      • propriété supplémentaire : @orig/@source/@raw = 'wpt'
    • mot édité : wp<+ 'w' en vert foncé>t ou wp(w)t [ () = <surplus>]
    • format TXM :
      <w>wp<supplied reason="lost">w</supplied>t</w>
    • rendu TXM : couleur bleue + '[…]'
      • modifier la classe CSS 'supplied' si nécessaire (pour changer la couleur ou remplacer par des parenthèses)
  • <supplied reason="lost" evidence="parallel">‘nḫ<reg type="___">.w</reg> wḏȝ
    <reg type="___">.w</reg></supplied>
    • mots indexés : ‘nḫ .w wḏȝ .w (ou plutôt ‘nḫ.w wḏȝ.w à vérifier)
      • propriété supplémentaire : @orig/@source/@raw = '‘nḫ' @orig/@source/@raw = 'wḏȝ'
    • mots édités : ‘nḫ<+ '.w' en vert foncé> wḏȝ<+ '.w' en vert foncé> ou ‘nḫ(.w) wḏȝ(.w)' [ () = <surplus>]
    • format TXM :
      <supplied reason="lost" evidence="parallel"><w>‘nḫ<reg type="___">.w</reg></w> <w>wḏȝ
      <reg type="___">.w</reg></w></supplied>
    • rendu TXM : couleur bleue + '[…]'
      • modifier la classe CSS 'supplied' si nécessaire (pour changer la couleur ou remplacer par des parenthèses)

→ tout <reg> ou <supplied> doit se trouver dans un <w>

Remarques :

  • <supplied> : evidence=“parallel” ~ source prise dans une autre source

- <choice><sic><corr>

Exemple

  • s<choice>
      <sic>t</sic>
      <corr></corr>
    </choice>
    • mot indexé : sṯ
    • mot édité : choix affichage 'forme erronée ou corrigée'
      • erronée : st (+ 'Cor : sṯ' en info bulle)
      • corrigée : sṯ ou s{ṯ} (+ 'Sic : st' en info bulle)
    • format TXM :
      <w>s<choice>
        <sic>t</sic>
        <corr></corr>
      </choice></w>
    • rendu TXM : 's' + 'ṯ' de couleur bleue
      • modifier la classe CSS 'corr' si nécessaire (pour changer la couleur)

→ tout <choice><sic><corr> doit se trouver dans un <w> ? OUI

- mots collés '.'

  • <w lemma="sḳdy">sḳd</w>.f
    • '.' indique 'f' collé à 'sḳd'
    • mots indexés : 'sḳd' '.f'
    • mots édités : 'sḳd.f'
      • dans l'édition → coller au mot avant
      • dans la concordance : ajouter règle typographique hiéroglyphes 'le point en début de mot à valeur de coller au mot avant'
    • format TXM :
      <w lemma="sḳdy">sḳd</w><w join="left">.f</w>

Out-of-text-elements (OT)

Out-of-text-to-edit (OTE)

Examples

  • <head>
  • <div type="bibliography">

→ ajouter la sélection par valeur d'attribut dans les plans textuels (eg syntaxe URSQL)

Edition Styling

Examples

  • <rend style="writing-mode:horizontal-tb; direction:lrt">
  • <p style="writing-mode:horizontal-tb; direction:lrt"> ?
  • <rendition id="rubrum" style="writing-mode:horizontal-tb; direction:lrt"> ?

→ transférer les @style en HTML tels quels

  • <hi rend="rubrum">
    • <hi rend="#rubrum"> ?
      • à lier à <rendition> dans le <teiHeader> ?

→ créer une classe CSS 'rubrum' ?

Other

Copy XML/w+CSV import to XTZ+CSV

  • menu entry
  • scripts in scripts/import

Manage order of texts in the corpus

  • If the metadata.csv file contains a 'textorder' column, the texts are sorted in the alphabetical order of this metadata (case insensitive)
    • empty value goes first
    • if two texts have the same textorder value, they are sorted alphabetically with their filenames (case insensitive)
    • if a text does not have a corresponding metadata line, it is placed at the end
    • if two texts have no corresponding metadata lines, they are sorted alphabetically with their filenames and placed after the texts with metadata (case insensitive)
  • Otherwise, the filename alphabetical order is used (case insensitive)

Add new source directory sub-directories management

Before developing new sections in the parameters form, we represent some new import parameters with new source directories.

All the content of those sub-directories must be copied to the binary corpus by the import module in the end.

‘dtd’ sub-directory

‘css’ sub-directory

Contains the css files to use with HTML pages in editions

‘xsl’ sub-directory

Contains different types of XSL sub-directories (if a directory is absent or empty it is not used)

  • ‘1-split-merge’ sub-subdirectory containing an XSL stylesheet used to split or merge source files to adapt them to the TXM corpus model (1 text = 1 file)
    • this XSL receives an “output-directory” parameter with the URL of a directory to write result files
    • the standard XSL output file of this stylesheet is not used
    • examples: split-texts.xsl or merge-files.xsl
  • ‘2-front’ sub-sub-directory containing the XSL stylesheets to process the sources at the beginning of the import process (replaces the ‘front XSL’ section mecanism). The XSL are applied in the lexicographical order of their file names.
    • examples: txm-filter-teip5-xmlw-preserve.xsl
  • ‘3-posttok’ sub-sub-directory containing the XSL stylesheets to process the xml-txm representation of the sources after the tokenization phase (all words are encoded). The XSL are applied in the lexicographical order of their file names.
    • examples: reduce-caesura.xsl, build-word-ref.xsl
  • ‘4-edition’ sub-sub-directory containing the XSL stylesheets to build the HTML edition from the xml-txm representation using the pagination done by the pager. The XSL are applied in the lexicographical order of their file names. The file name must conform to the following pattern:
    • [order(digit)]-[edition name]-[output type (“html” or “pager”)].xsl
    • example: in order, 1-default-html.xsl, 2-default-pager.xsl, to build the ‘default’ edition followed by, 3-facs-html.xsl, 4-facs-pager.xsl to build the facsimile edition to hold the images
    • all XSL receive the following parameters: “number-words-per-page”, “pagination-element”, “import-xml-path”.
      • Note: this XSL parameters are not mandatory (MD: tested)
    • The XSL file writes the first word ID in each HTML file produced : <meta name="description" content="{id du 1er lmot}"/>. If there is no word in the page, then the “content” value is “w_0”
    • Their file name is used to name the edition produced
    • .*-pager XSL receive an “output-directory” parameter with the URL of a directory to write result files
      • the standard XSL output file of this stylesheet is not used

Modify the import form

  • in the “Tokenizer” section (FR=“Paramètres du segmenteur lexical”), add options :
    • “don't call the word tokenizer”/“Ne pas appeller le segmenteur lexical”
      • default value is “false”
  • add section “Plans textuels” (available only for XTZ import module)
    • Hors-texte : “Liste des balises codant le hors-texte” (transform to Regexp)
      • EN: Outside-text : “List of tags encoding the outside-text (no structure or word content indexed, no structure or word content edited in TXM)”
      • Balise “no-structure-index&no-word-index&no-structure-edition&no-word-edition”
        • tags and their content deleted from cwb corpus and editions
    • Hors-texte à éditer : “Liste des balises codant le hors-texte à afficher dans l’édition)” (transform to Regexp)
      • EN: Outside-text-to-edit : “List of tags encoding the outside-text to edit (no structure or word content indexed, structure and word content edited in TXM)”
      • Balise “no-structure-index&no-word-index&structure-word-edition&word-edition” : hors-texte & édition
        • content deleted from the cwb corpus
          • in the edition
    • Word element : default value is “w”
      • in first version this value is not a regular expression
    • Milestone elements : a list of milestones elements (comma separated values) to be indexed with 4 word properties :
      • <milestone>start
      • <milestone>end
      • <milestone>id
      • New! <milestone>n (not implemented)
  • remove “front XSL” section from XTZ import module parameters
    • note: “add parameter” is broken
  • move “font” section after “editions” and before “commands”
  • modify Éditions section
    • “Editions” → “Éditions”
    • add ‘images’ URI declaration (see below)
[x] Construire l'édition

Nombre de mots par page [500]    Élément de pagination [pb]
Répertoire local d'images de facsimilés [...]

Indexation CQP des numéros de ligne lb@n

Si les sources contiennent des éléments lb numérotés par l'attribut @n, alors la numérotation est projetée dans la propriété de mot “lbn” des mots qui suivent l'élément lb. Si @n n'est pas renseigné, alors la valeur de la propriété “lbn” est réglée sur “SN”.

Édition

Pages de garde

Toutes les éditions commencent par une page de garde.

Jusqu'à TXM 0.8.3, le module XTZ produit une page de garde fixe avec l'@id du texte et le tableau de ses métadonnées (quand il y en a).

Programmables

Dans le module XTZ, la construction par XSL permet de réaliser des pages de garde personnelles sauf pour l'édition @facs.

Pour pouvoir la personnaliser et personnaliser toutes les pages de garde avec le Pager par défaut de TXM on peut interpréter une zone dédiée à TXM dans la source TEI.

Par exemple, de façon optionelle, dans :

  • teiHeader / encodingDesc / txm:applicationDesc / txm:editionDesc / txm:front[@name='default']
  • teiHeader / encodingDesc / txm:applicationDesc / txm:editionDesc / txm:front[@name='facs']

Le contenu TEI de txm:front est rendu en HTML comme pour le texte de base.

S'il n'y a pas de txm:front pour une édition on met le @id du texte et le tableau de ses métadonnées (quand il y en a).

Sommaires

Jusqu'à TXM 0.8.3, il n'y a pas de moyen simple de scénariser une table des matières (table of contents - toc) hypertextuelle pointant vers les différentes sections d'un texte pour faciliter la navigation structurelle dans une édition.

Pour pouvoir créer une TOC avec le Pager par défaut de TXM on peut interpréter une zone dédiée à TXM dans la source TEI.

Par exemple, de façon optionelle, dans :

  • teiHeader / encodingDesc / txm:applicationDesc / txm:editionDesc / txm:toc[@name='default']
  • teiHeader / encodingDesc / txm:applicationDesc / txm:editionDesc / txm:toc[@name='facs']

Le contenu TEI de txm:toc est soit rendu en HTML comme pour le texte de base avec des liens hypertextuels interprétés pour navigueur dans les éditions, soit interprété pour construire une vue avec les widgets nécessaires.

S'il n'y a pas de txm:toc pour une édition on peut essayer d'interpréter quelques éléments TEI structurels pour établir une toc, éventuellement avec l'aide de feuilles XSL de la communauté TEI proposant de calculer des TOCs.

Édition "default"

Voir la Documentation utilisateur XTZ+CSV pour l'état actuel de la construction de l'édition par défaut.

Édition facsimilés : "facs"

Édition optionnelle si l'utilisateur souhaite afficher les facsimilés de son édition.

2 cas possibles :

  • le corpus a déjà codé dans des éléments “pb” et l'attribut “facs” l'URL des images
  • le corpus a déjà codé les éléments “pb”
    • les images sont distantes
    • les images sont locales

Modifications à apporter au formulaire d'import :

  • ajouter un bouton “construire une édition facsimilés
  • ajouter un champ “dossier des images”. 2 options :
    • If the images are online, the @facs in the source files must provide an absolute URL starting with “http”
      • note: to avoid puclic access, the images file access can be controled via a htaccess file or served via a Servlet
    • If the images are local, the @facs in the source files must provide a relative URL as follows “images_corpora/<corpus name>/<file name>” and the images must be copied to the corresponding folder in the binary corpus (HTML/<CQPCORPUSNAME>/facs/images_corpora/<corpus name>), cf. specs_archi_fichiers_editions
    • another solution may be to embbed images locally in HTML pages
      <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..." /> 
  • ajouter un champ “Attributs de facsimilé”, voir http://forge.cbp.ens-lyon.fr/redmine/issues/3019
[x] Construire les éditions

   Pagination :
   [x] Nombre de mots par page [500]
   [ ] Élément de pagination [pb]   (V2 : XPath, e.g. //milestone[@type='surface'] )

   Adresses des images de facsimilé :
   ( ) pas d'images
   (x) dans les @facs de l'élément de pagination
   ( ) construites à partir d'un répertoire [       ] [...]
   
   Construire les éditions par XSL
   
   ...
   

Éditions synoptiques

Voir la page https://groupes.renater.fr/wiki/txm-info/public/specs_production_editions_synoptiques.

Les macros XSLEditionBuilder et XTZEditionBuilder ont été intégrées dans le module XTZ.

transfert XSL -> Pager à réaliser

(copié à partir de

https://groupes.renater.fr/wiki/txm-info/public/specs_production_editions_synoptiques#macro_xtzeditionbuilder_cette_macro_sera_finalisee_plus_tard)

  • cette édition est équivalente à celle produite par la feuille de style txm-edition-xmltok-bvh.xsl, qui effectue les transformations suivantes :
    • tei:text –>
      • référence de début de page
      • tableau des métadonnées
    • tei:p|tei:ab|tei:lg –> html:p + addClass (voir ci-dessous)on propage les attributs @type, @subtype, @rend, @rendition, @style
    • tei:head –> html:p + class=head
    • tei:lb –> html:br (à préciser) + class=lb + @n=n° de lb si absent
      • Créer html:a si multiple de 5 ou si n'est pas un nombre
    • pageBreakElement (tei:pb par défaut)
      1. affiche les notes de la page qui précède
      2. coupe la page
      3. affiche le numéro de la page qui suit (délégué à l'auteur)
        • utiliser @n ou @facs ou [NN] si aucun
    • tei:w –> html:span avec @id, @title (tous les attributs du w concaténés) + espace blanc ou non selon les règles
    • tei:note
      • Créer une référence html:a avec le numéro de la note (global au document), @title=contenu de la note, @href=contenu de la note en bas de page
      • Stocker le contenu des notes
      • Puis au pb les écrire (voir pb)

        NON IMPLÉMENTÉ À PARTIR D'ICI
    • le reste : on propage l'élément
      • div, s'il a comme descendant div, p, ab, lg, l
      • sinon span
    • addClass = concatenation de
      1. @class=local-name(),
      2. si @type ajouter @type
      3. si @subtype ajouter @subtype
      4. si @rend ajouter @rend

La prise en compte des attributs dans @class risque de créer trop de classes, difficiles à gérer en CSS. En revanche, on peut transférer en html les attributs potentiellement utiles pour le stylage :

  • @type
  • @subtype
  • @rend
  • @rendition
  • @class

Spécification du Pager (Groovy qui produit le HTML)

À faire

  • gérer les conflits de CSS dans le contexte des portails (les portails utilisent des éditions produites par la version pour poste)
    • voir ci-dessous (div englobante sur <text>)

Liste des éléments gérés par le module

Élément text
  • crée 2 div englobante avec class=“nom du corpus” et class=“editionpage”
    • AL: dans les éditions XSL, c'est plus souple :
      • div[@class=“$cssname”] / div[@class='editionpage']
      • $cssname est un paramètre donné à la XSL. Par défaut, sa valeur est le nom du corpus (mais on peut la partager entre plusieur corpus)
      • dans la feuille css tous les sélecteurs sont préfixés avec .$cssname
  • crée un élement 'h3' avec @id
    • AL :cet élément est créé dedans ou en dehors de div[class='cssname'] et div[class='editionpage'] ?
      • en édition css, les metadonnées sont regroupés dans div[class='metadatapage'] à l'intérieur de div[class='cssname'], devant la première edition page.
  • itère sur ses attributs
    • pour afficher un tableau : nom + valeur pour créer les éléments table@class=“metadata”, tr@class=“metadata-line” et td@class=“metadata-cell”
    • si l'option collapsibleMetadata est à true, le tableau est préfixé d'un bouton [+] pour étendre ou fermer le tableau
  • saute une ligne
  • AL J'ajouterais une option pour générer la page de métadonnées à partir de teiHeader.
Éléments div, div1, etc.
  • crée un élément 'div'
  • si @rend est renseigné il est utilisé pour remplir p@class
  • div@type = nom de l'élément
Élément ab, p et l
  • crée un élément 'p'
  • si @rend est renseigné il est utilisé pour remplir p@class
  • p@type = nom de l'élément
Élément lb
  • crée un élément 'br'
Élément graphic
  • crée un élément 'img' dans une 'div'
  • attribut 'src' ← graphic@url
  • attribut 'align' ← “middle”
Élément ref
See especially <ref target="http://www.natcorp.ox.ac.uk/Texts/A02.xml#s2">the second
sentence</ref>
  • crée un élément 'a'
  • attribut 'href' ← ref@target
  • attribut 'target' ← “_blank”
Élément de pagination indiqué dans le paramètre 'pageBreakTag'

Par défaut 'pb' dans l'initialisation du champ “Page break tag” du formulaire d'import

  • Si 'pageBreakTag' est vide, il ne faut couper les pages par un élément
  • Si non
    • coupe la page avant cet élément en refermant les balises ouvertes puis en les ré-ouvrant
    • ajoute un numéro de page sur la nouvelle page : crée un élément p centré dont le texte est affiché en rouge est : ”- @n -“.
Élément w
  • créé un élément 'span'
  • attribut 'id'
  • attribut 'title' avec les propriétés du mot
Éléments u et sp

élément u → créé un span@class=sync avec la valeur de u@time si présent

  1. AL : je mettrais plutôt un <p> (u est aussi un élément de niveau block non emboitable)

élément sp → créé un p@class=turn avec la valeur de sp@speaker si présent

  1. AL : je ferais plutôt <sp> –>

    , cf. l'algo général. Les sp contiennent forcément des p, ab ou (contenu texte non autorisé) l

    Éléments de niveau variable

    Proposition d'algo selon l'XSL d'AL (reformulée en STAX) :

    - état initial : "hors-p" 
      - p|ab|l|u ouvre --> on écrit <p>, l'état passe à "in-p"
      - head|item|note ... (liste à compléter) ouvre --> on écrit l'élément html comme spécifié, l'état passe "in-p"
      - autre élément ouvre --> on écrit <div>, l'état reste "hors-p"
    - état "in-p"
      - p|ab|l|u ferme --> on écrit </p>, l'état passe à "hors-p"
      - head|item|note ... ferme --> on ferme l'élément, l'état reste "in-p"
      - div|lg ouvre --> on écrit <div>, l'état passe à "hors-p"
      - autre élément ouvre --> on écrit <span>, l'état reste "in-p"

    *AL* : pour info le comportement de la transformation TEI → HTML de Rahtz (Oxgarage)

    • div, lg, l, ab –> div
    • p –> p

    Si un l est descendant de p (la TEI le permet), le p est fermé avant le début du vers, et un autre p s'ouvre après la div , e.g.

    <p rend="stanza">
                <lb n="5"/>Qui m'ont conduit et t'ont conduite,
                <l n="6">- Mélancoliques pèlerins, -</l>
                <l n="7">Jusqu'à cette heure dont la fuite</l>
                <l n="8">Tournoie au son des tambourins.</l>
            </p>

    devient

                <p class="stanza">Qui m'ont conduit et t'ont conduite, </p>
                <div class="l">- Mélancoliques pèlerins, -</div>
                <p class="stanza"> </p>
                <div class="l">Jusqu'à cette heure dont la fuite</div>
                <p class="stanza"> </p>
                <div class="l">Tournoie au son des tambourins.</div>
    Autres éléments

    élément → span@class=élément

    Attention à bien avoir la même gestion des évenements Start en End sinon le HTML sera mal formé

    Later

    * Integrate the XMLText2MetadataCSV macro content to pull metadata from teiHeaders directly.

    Autres éléments de méthode

    • déplacer une partie du code du module XML/w+CSV dans ce module (dont la construction d'éditions), et laisser XML/w+CSV plus minimaliste ;
    • copier une partie du code du module d'import DOC/ODT/RTF dans ce module (dont la construction d'éditions : gestion d'images, de liens hypertextes…) pas V1
    • intégrer la stratégie de tokenization par double-import BFM/BVH dans ce module ;
    • intégrer la stratégie de construction d'éditions HTML tierces dans ce module (éditions des portails).

    (Voir la spéc Éditions / Navigation dans les pages)

    • MD : Les Edition et Page sont construites et déclarées lors de l'étape pager.
      • L'édition par défaut ne fait que compter les pages et ne récupère pas d'information dans le code des textes
    • AL :
      risque de conflits en cas d'utilisation des attributs (pb/@n ou pb/@xml:id) pré-encodés dans les sources

    Solution

    Plans textuels

    Synthèse générale

    to index to edit Comments
    structure word structure word
    Normal-text yes yes yes yes Default behavior: all source content is imported
    Ignored-structures-and-structures-not-to-edit no yes no yes Structures ignored: for example to simplify encoding: persname / forename → persname - can be done by front XSL
    Ignored-structures-and-structures-to-edit no yes yes yes Structures to edit only: for example for rendering (italics, bold…) to ignore as structures but render in editions
    Ignored-structures-and-words-to-edit (Outside-text) no no yes yes Structures and content to edit only: for example for notes
    Ignored-structures-and-words (Outside-text) no no no no Structures and content to ignore: for example encoding comments or technical or infrastructural information

    Étape 1 : TXM 0.7

    • corps-du-texte / text-body : texte à indexer (par CQP) et à éditer (en HTML) (comportement par défaut → pas de paramétrage “explicite”)
    • paratexte en-ligne / inline-paratext = hors texte à éditer : le texte à ne pas indexer mais à représenter au fil du texte dans l'édition, en tenant compte de ses sous-éléments (eg <front>, <head>)
    • paratexte hors-ligne / standoff-paratext = notes et marginalia : le texte à ne pas indexer mais à représenter sous forme de note au fil du texte, de note de bas de page, de marginalia ou de note de fin de chapitre dans l'édition et d'appel de note dans le corps du texte (eg <note>, <note place=“page-foot”>, <note place=“page-left”>, <note place=“chapter-end”>)
    • hors-texte / out-of-text : le contenu à ne pas indexer et à ne pas représenter dans l'édition (eg <teiHeader>)

    Ordre d'affichage dans le formulaire d'import :

    • Hors texte à éditer / Out of text to edit (eg <head>, <front>, <back>…)
    • Notes / Notes (eg <note>)
    • Hors texte / Out of text (eg <teiHeader>)
    • Bornes / Milestones

    Étape 2 : TXM 0.7.9

    Ordre d'affichage dans le formulaire d'import :

    • Hors texte / Out of text (eg <teiHeader>)
    • Hors texte à éditer / Out of text to edit (eg <head>, <front>, <back>…)
    • Notes elements(eg <note>)
    • Éléments milestones / Milestones

    Étape 3 : TXM 0.8.1

    Plans textuels disponibles :

    • Hors texte / Out of text : valeur par défaut=teiHeader
    • Hors texte à éditer / Out of text to edit (eg <head>, <front>, <back>…) : pas de valeur par défaut
    • Notes : valeur par défaut=note
    • Bornes / Milestones / Milestones : pas de valeur par défaut

    Déplacer la déclaration des éléments à mettre en forme comme note de bas de page dans la section “Édition”.

    Si les notes ne doivent pas être indexées, il suffit d'ajouter l'élément dans 'Hors texte à éditer'.

    • AL Pas implémenté en 0.8.1 remettre à 0.8.2 ? J'utiliserais “footnote”/“note de bas de page” pour éviter la confusion, car il y plein de types de notes.
    Syntaxes de sélection supplémentaires
    • niveau 1 : ajouter une syntaxe “balise@attribute=valeur” en plus de “balise_tout_court”
    Mélange “à la URSQL” entre :
    • balise
    • balise@attribute
    • balise@attribute=valeur

      → Exemple : teiHeader,gap@style,div@type=“errata”

    AL : proposition alternative : utiliser la syntaxe de sélecteurs CSS, plus connus et standards, cf. https://www.w3schools.com/cssref/css_selectors.asp.

    • niveau 2 : ajouter une syntaxe “balise/enfant”
    • niveau 3 : ajouter la syntaxe XPath (à implémenter en XSL)

    État de l'art

    Exemple de sémantique d'édition de l'import XML/W+CSV de TXM 0.7.5

    Element text
    
        crée un élement h3 avec @id
        itère sur ses attributs pour afficher un tableau : nom + valeur
        saute une ligne
    
    Element head
    
        crée un élément h2 avec le contenu de la balise head
    
    Element note
    
        crée un span contenant le texte ”[*]” en rouge avec un tooltip qui contient le contenu des w/form et du texte hors w
            le contenu des notes est normalement tokenisé et indexé par le moteur de recherche (mais le retour au texte est impossible à partir de concordances)
            pour ne pas indexer le contenu des notes, il faut ajouter une ligne “ignoredelements=note” dans le fichier import.properties (cf. Le Manuel de référence TXM)
            dans ce cas, on peut dupliquer les notes lors de la préparation du corpus et placer les doublons à la fin du document dans <p rend=“note”>
    
    Element graphic
    
        si @url est renseigné, crée une balise img dans une balise div et utilise graphic@url pour renseigner img@src
    
    Elements lg, p et q
    
        crée un élément p
        si @rend est renseigné il est utilisé pour remplir p@class
    
    Elements lb et br
    
        crée un élément br
    
    Element pb (ou l'élément de pagination indiqué dans import.properties)
    
        coupe la page en refermant les balises ouvertes puis en les ré-ouvrant
        crée un élément p centré dont le texte est affiché en rouge est : ”- @n -”.

    Étapes de développement

    Étape initiale, TXM 0.7.8

    cf. ticket #1548

    • duplication du module xml/w
    • création de points d'appel xsl multiples
      • front
      • post-tokénisation
      • édition(s)

    Prototypes

    A. Atelier CAHIER édition analytique 2014

    Voir https://groupes.renater.fr/wiki/txm-users/public/ateliers_edition_analytique et son tutoriel.

    B. DEMM Workshop 2015-03

    Voir https://groupes.renater.fr/wiki/txm-info/public/tutorial_macro_xtzimporter_en

    C. Workshop TEI 2015-10

    Étapes suivantes

    New Features

    1. Use $pagination-element and not pb when building the facs edition, see -2146.
    2. Simplify producing multi-facetted editions (from XML-TXM format)
      • it is currently very complicated to keep tags (e.g page breaks) inside non default edition facet
    3. When 'Tokenize' option is off, check that all word-elements have @id
    4. Handle XML-TXM as input format
      • currently XML-TXM can be imported via XTZ module (word properties and default editions are correct) but injection of morpho-syntactic annotation (when annotating with TreeTagger) is broken due to nesting txm:form elements (from the source and from the annotation process)
      • TXM should detect txm:form and txm:ana child nodes of the word element and transfer them correctly to XML-TXM
    5. Handle nesting word-level elements
      • currently, if you have num/w in the source file, XTZ nests w elements in the XML-TXM file (num/w → w/w)
      • if nesting word-level elements are detected, only the lowest level should be considered as token by TXM
    6. implement alternative ways of defining text order in the corpus
      1. text/@textorder
      2. textorder XPath
      3. textorder column in metadata.csv (currently implemented)
    7. implement defining metadata through XPath (as in current TEI-BFM module)
    8. add @n to milestone element indexation (cf. -1597, -2162)
      • start n numbering at 1 for ALL automatic @n
    9. help build references
      • document different XSL patterns
      • document different equivalent Groovy patterns (DOM & SAX)
      • design user input parameter interface and options (ref pattern, eg ”%s, p. %03d“ + title + pageNum)
    10. currently, the footnotes are outside the html element → put it inside a div@class=“footnotes” at the end of the body

    Synchronize Pager with XSL editions

    • Current XSL edition processing is :
      • tei:text –>
        • référence de début de page
        • tableau des métadonnées
      • tei:p|tei:ab|tei:lg –> html:p + addClass (voir ci-dessous)
      • tei:head –> html:p + class=head
      • tei:lb –> html:br (à préciser) + class=lb + @n=n° de lb si absent
        • Créer html:a si multiple de 5 ou si n'est pas un nombre
      • tei:pb
        1. affiche les notes de la page qui précède
        2. coupe la page
        3. affiche le numéro de la page qui suit (délégué à l'auteur)
          • utiliser @n ou @facs ou [NN] si aucun
      • tei:w –> html:span avec @id, @title (tous les attributs su w concaténés) + espace blanc ou non selon les règles
      • tei:note
        • Créer une référence html:a avec le numéro de la note (global au document), @title=contenu de la note, @href=contenu de la note en bas de page
        • Stocker le contenu des notes
        • Puis au pb les écrire (voir pb)
      • le reste : on propage l'élément enrobé d'un html:span ayant un attribut @class construit selon l'algorithme suivant :
      • concatenation séparée de tirets '-' de :
        1. @class=local-name()
        2. si @type ajouter @type
        3. si @subtype ajouter @subtype
        4. si @style ajouter @style
        5. si @rend ajouter @rend

    Documentation utilisateur

    Documentation utilisateur XTZ+CSV

    Recettes

    0.7.8 alpha

    • récupérer les sources dans SpUV/qgraal_cm_xtz
    • lancer l'import du répertoire des sources
    • résultat attendu :
      • 1 page devient 1 texte (xsl front split)
      • édition synoptique (default + facs)
      • édition stylée

    0.7.8 beta

    0.7.8

    BP : Retours d'expérience import Perseus, mai 2017

    CB-AL : Retours d'expérience import Piscibus, mai 2017

    Le 'hors texte à éditer' pose problème : la présence d'un élément provoque à tort la tokenisation à l'intérieur.

    Le 'hors texte' empêche certains traitements ultérieurs de travailler, exemple : récupération des métadonnées depuis le teiHeader.

    Le Tokeniser met systématiquement des sauts de ligne qui peuvent être gênants (voir #2184).

    Requests

    User Request 1

    Request

    Question #TXM ! Est-ce qu'il y a des ressources aidant à créer un corpus de poésie avec XML/w, en modifiant la vue “édition” avec le fichier “txm.css” pour montrer, par exemple, les sauts de ligne (<l>) et les mots en italiques (<w rend=“italics”>) correctement? @txm_ See https://twitter.com/christof77/status/1028950454938599424

    Answer

public/import_xtz.txt · Dernière modification : 29/11/2023 14:11 de matthieu.decorde@ens-lyon.fr