Text only | Skip links
Skip links||IT Services, University of Oxford

1. Roma: New

2. Roma: Customize

Choisisez le fichier tei_cartes.odd dans votre dossier de travail.

3. Roma: Customize

4. Roma: Schema

5. Roma: Documentation

6. Qu'est-ce qu'on vient de faire?

On a traité un fichier ODD déja existant, qui contient de prose discursive et en plus une spécification de schéma comme ceci:
<schemaSpec ident="tei_cartes">
 <moduleRef key="tei"/>
 <moduleRef key="textstructureinclude="TEI teiHeader text body div"/>
 <moduleRef
   key="core"
   include="list item p address addressLine del add reg lb hi figure graphic title"/>

 <moduleRef key="namesdatesinclude="persName placeName"/>
 <specGrpRef target="#classmods"/>
 <specGrpRef target="#hdrIncludes"/>
</schemaSpec>

7. Testons le schema

  • Dans Oxygen, créez un nouveau fichier XML
  • En bas de l'écran il y a un bouton Personnaliser. Cliquez-le.
  • A droite du champs URL du Schéma, il y a un petit icone de dossier: cliquez-le. Selectionnex Parcourir les fichiers locaux. Naviguez jusqu'au fichier tei_cartes.rnc que Roma vient de vous créer (il se trouve dans votre dossier de téléchargements, si vous êtes sur Windows)
  • Tapez un < dans la fenêtre d'édition d'Oxygen. Voyez quelles balises sont disponibles. Laissez-vous etre guidé(e) par le logiciel!

8. Exercice

En vous servant de cette schéma, essayez de compléter le balisage des fichiers cartes-1.xml, cartes-2.xml, et cartes-3.xml disponibles dans votre dossier Travaux; vous y trouverez aussi des fichiers images des rectos et versos des cartes concernées.

9. Exploration de TEI par Roma

Roma est également un outil apte à l'exploration des possibilités du système TEI.

  • Selectionner l'onglet [Modules] pour voir les modules disponibles ou déjà pris
  • Selectionner le nom d'un module pour voir les éléments qu'il contient, et pour en faire le choix.
  • (On peut par défaut supprimer tous les éléments d'un module, ou bien en selectionner tous)
  • Selectionner le nom d'un element pour voir sa documentation complète

10. Roma: Modules

11. Roma: Change Module

12. Autre possibilités de personalisations

Pour notre schema...
  • on veut contraindre les valeurs légaux de l'attribut type sur <div>
  • on veut ajouter un nouveau élément <saintName> pour encoder les noms des saints (pourquoi pas?)
  • on veut insister que chaque <text> contienne un <div type="recto"> suivi d'un <div type="verso">

13. L'avantage ODD

Toutes ces contraintes peuvent etre exprimées dans notre ODD, et on peut en générer un schéma pour controller qu'elles soient respectées

  • Une schéma peut etre generée en
    • ISO RELAX NG language
    • W3C Schema Language
    • XML DTD language
  • Les modeles de contenu s'expriment avec une syntaxe RELAX NG
  • Les types de données (datatypes) sont défini selon le standard W3C datatypes
  • Il y a quelques contraintes (e.g. alternation, namespaces) qui ne sont pas exprimables en DTD — donc RELAX NG schema est recommandé
  • Il y a quelques contraintes qui ne sont pas exprimables en aucune langue de schema: pour celles-ci, on se sert d'une autre langage ISO, qui s'appelle schematron

14. Roma: selecting attributes

15. Roma: constraining attribute values

16. Qu'est ce qu'on vient de faire?

Notre fichier ODD contient maintenant :
<elementSpec ident="divmodule="textstructuremode="change">
 <attList>
  <attDef ident="typemode="changeusage="req">
   <valList type="closedmode="replace">
    <valItem ident="recto"/>
    <valItem ident="verso"/>
    <valItem ident="obliteration"/>
    <valItem ident="message"/>
    <valItem ident="destinataire"/>
<!-- ... -->
   </valList>
  </attDef>
 </attList>
</elementSpec>
Nota: on peut ajouter de documentation directement dans l'ODD:
<valItem ident="obliteration">
 <desc>contient
   le texte d'une obliteration quelconque sur une carte postale</desc>
</valItem>

Recréer le schema, et voir l'effet de ces changements avec Oxygen...

17. Ajout d'un élément nouveau <saintName>

Il ressemble a quels autres éléments?
C'est une espece de nom, evidemment
Il peut contenir quoi?
Il peut contenir que de texte.
Ou est-ce qu'il peut apparaitre?
A l'interieur des titres, des phrases, des paragraphes, etc. mais non pas entre les deux.
Conclusion:
  • on le fait membre de la classe model.nameLike
  • son contenu est definie par macro.xText

18. Roma: Definition d'un nouveau élément

19. Definition de modele de contenu

  • Le contenu d'un élément TEI est défini en langage RELAXNG
  • La plupart des éléments TEI définissent leur contenu par référence aux classes d'élément plutot que par reference à des éléments specifiques.
  • Il existe des modeles prédéfinis tres utiles, par exemple:
    macro.paraContent
    le contenu des éléments qui ressemblent aux paragraphes
    macro.phraseSeq
    séquence de caracteres melangé d'éléments de la classe model.phraseLike
    macro.xText
    sequence de caracteres melangé avec l'élément <g> (qui sert a encoder les caracteres non-Unicode)

20. Roma: Defining a new élément 2

21. Qu'est-ce qu'on vient de faire?

On a ajouté une specification pour notre nouvel élément:
<elementSpec
  ident="saintName"
  ns="http://www.example.org/ns/nonTEI"
  mode="add">

 <desc>contains the name of a saint.</desc>
 <classes>
  <memberOf key="model.nameLike"/>
  <memberOf key="att.typed"/>
 </classes>
 <content>
  <rng:ref name="macro.xtext"/>
 </content>
</elementSpec>

Nota: ce nouveau élément n'est pas un élément TEI! Il appartient donc à une autre espace de noms.

22. Autre contraintes

  • On peut contraindre le contenu d'un élément, ou la valeur d'un attribut en se servant des datatype (par exemple, pour insister que le contenu de l'élément <date> soit vraiment une date)
  • La TEI prédéfinit plusieurs macros pour répondre à cette possibilité. Par exemple
    data.word
    a single word or token
    data.name
    an XML Name
    data.enumerated
    a single XML name taken from a documented list
    data.temporal.w3c
    a W3C date
    data.truthValue
    a truth value (true/false)
    data.language
    a human language
    data.sex
    human or animal sex
  • Ou on peut créer ses propres contraintes avec le langage Schematron

23. Contraintes Schematron

  • Une spécification d' élément peut contenir un élément <constraintSpec> contenant des règles exprimés en langage ISO Schematron
<elementSpec ident="bodymodule="teistructuremode="change"   xmlns:s="http://purl.oclc.org/dsdl/schematron">
 <constraintSpec mode="addident="bodyLimscheme="isoschematron">
  <constraint>
   <assert xmlns="http://purl.oclc.org/dsdl/schematron"
   
     test="tei:div/@type='recto' and tei:div/@type='verso' and count(tei:div)=2">
le body doit contenir un recto et un verso et rien de plus
   </assert>
  </constraint>
 </constraintSpec>
</elementSpec>
A noter...
  • Pour ajouter de telles règles, il faut éditer le fichier ODD. Roma ne vous aide pas.
  • L'implantation de telles règles n'est pas forcément disponible avec tout processeur XML.


TEI@Oxford. Date: 2011-01
Copyright University of Oxford