# **********************************************************************
# ******      DTD LITTERATURE GENERALE XML NC             V3.2    ******
# ******             (c) Nord Compo  (juin 1999)                  ******
# ******                realisee par : GD                         ******
# ******          mise a jour par : GD (juillet 2000)             ******
# ******       transformation en XML par : JMD (Aout 2000)        ******
# ******         mise a jour XML par : GD (janvier 2001)          ******
# ******             mise a jour de la version 2.1                ******
# ******               mise a jour : GD (juin 2007)               ******
# ******               mise a jour : GD septembre 2007            ******
# ******               mise a jour : GD octobre 2007              ******
# ******               mise a jour : GD novembre 2007             ******
# ******               mise a jour : GD janvier 2008              ******
# ******               mise a jour : PT mai 2009                  ******
# ******               mise a jour : PT octobre 2009              ******
# **********************************************************************
# ******            Transformation RelaxNG Prismallia             ******
# **********************************************************************


start = livre

livre = element livre { livre.attributes, livre.content }

livre.attributes =
   attribute compo { text }?
 & attribute saisie { text }?
 & attribute type { text }?

livre.content =
   ident,
   (appcrit | pre)*,
   corps,
   (appcrit | appen)*,
   collec*


# =============================================================================
#                        Elements Entete (pages de titre)           
# =============================================================================

# ~~~~~~ ident
ident = element ident { ident.content }

ident.content =
   (ftit
    | fstit
    | info
    | accro
    | collec
    | auteur
    | illustrateur
    | tit
    | stit
    | edit
    | copy
    | trad
    | ean
    | coned
    | type
    | ref
    | isbn
    | issn
    | modulus
    | fig
    | tableau
    | dedi
    | exer)+

# ~~~~~~ Faux titre ouvrage
ftit = element ftit { (typo | br | appel | renv | renvlnk)* }

# ~~~~~~ Accroche ouvrage
accro = element accro { (typo | br | appel | renv | renvlnk)* }

# ~~~~~~ Sous titre ouvrage
fstit = element fstit { (typo | br | appel | renv | renvlnk)* }

# ~~~~~~ Auteur(s) de l'ouvrage ou de citation ou exergue
auteur = element auteur { (typo | appel)* }

# ~~~~~~ Illustrateur
illustrateur = element illustrateur { (typo | appel)* }

# ~~~~~~ Surtitre
surtit = element surtit {(typo | appel | br | renv | renvlnk)*}

# ~~~~~~ Titre de l'ouvrage
tit = element tit { (typo | appel | br | renv | renvlnk)* }

# ~~~~~~ Sous-titre de l'ouvrage
stit = element stit { (typo | appel | br | renv | renvlnk)* }

# ~~~~~~ Sous-sous-titre
sstit = element sstit { (typo | appel | br | renv | renvlnk)* }

# ~~~~~~ Type d'ouvrage dans page de titre
type = element type { (typo | br | appel)* }

# ~~~~~~ Texte page de titre
info = element info { (typo | br | appel)* }

# ~~~~~~ page de collection
collec = element collec {
   (tit | stit | cint | cint2 | cint3 | auteur | p | pbib | fig)* }

# ~~~~~~ Intertitre dans page de collection
cint  = element cint  { (typo | br | appel)* }
cint2 = element cint2 { (typo | br | appel)* }
cint3 = element cint3 { (typo | br | appel)* }

# ~~~~~~ Traduction par
trad = element trad { (typo | br | appel)* }

# ~~~~~~ Editeur(s)
edit = element edit { (typo | appel)* }

# ~~~~~~ Copyright de l'ouvrage
copy = element copy { (typo | br | appel)* }

# ~~~~~~ References de l'ouvrage
ref = element ref { (typo | br | appel)* }

# ~~~~~~ ISBN, ISSN
isbn = element isbn { (typo | appel)* }
issn = element issn { (typo | appel)* }

# ~~~~~~ Modulus
modulus = element modulus { (typo | appel)* }

# ~~~~~~ EAN 13
ean = element ean { xsd:token {pattern = "\d{13}"} }

# ~~~~~~ Rang d'impression
coned = element coned { text }

# ~~~~~~ Dedicace
dedi = element dedi { (typo | br | appel)* }

# ~~~~~~ Exergue
exer = element exer { p+, (source | auteur)* }

# ~~~~~~ Source(s) citation, image, exergue
source = element source { (typo | appel | p | br)* }


# =============================================================================
#                        Elements preliminaire de l'ouvrage
# =============================================================================

# ~~~~~~ pre
pre =  element pre { pre.attributes, pre.content }

pre.attributes =
   attribute id { xsd:ID }?
 & attribute num { text }?
 & attribute type { "intro" | "prologue" | "pref" | "remer" | "avpro" | "biblio"
  | "bio" | "remarque" | "note" | "chrono" | "presentation" | "personnages"
  | "sommaire" | "tdm" | "autre" }?

pre.content = 
   apfi?,
   surtit?,
   (((tit, apfi?),
      ((stit, apfi?), (sstit, apfi?)?)?)
    | ((stit, apfi?), (sstit, apfi?)?))?,
   exer*,
   chapeau?,
   dev,
   (source | sign)*,
   collec*,
   defnotes?,
   apfi?

# ~~~~ chapeau
chapeau = element chapeau { let?, p+ }


# =============================================================================
#                           Elements corps de l'ouvrage
# =============================================================================

# ~~~~~~ corps
corps = element corps { corps.content }

corps.content =
   (vol+
    | part+
    | section+
    | chap+
    | dev)

# ~~~~~~ vol
vol = element vol { vol.attributes,  vol.content }

vol.attributes =
   attribute id { xsd:ID }?
 & attribute num { text }?

vol.content =
   depart,
   (appcrit | pre)*,
   ((dev, part*) | part+),
   defnotes?,
   (appcrit | appen)*

# ~~~~~~ part
part = element part { part.attributes,  part.content }

part.attributes =
   attribute id { xsd:ID }?
 & attribute num { text }?

part.content =
   depart,
   (appcrit | pre)*,
   ((dev, (section | chap)*)
    | (section | chap)+),
   defnotes?,
   (appcrit | appen)*

# ~~~~~~ section
section = element section { section.attributes,  section.content }

section.attributes =
   attribute id { xsd:ID }?
 & attribute num { text }?

section.content =
   depart,
   (appcrit | pre)*,
   ((dev, chap*) | chap+),
   defnotes?,
   (appcrit | appen)*

# ~~~~~~ chap
chap = element chap { chap.attributes,  chap.content }

chap.attributes =
   attribute id { xsd:ID }?
 & attribute num { text }?

chap.content =
   depart,
   (appcrit | pre)*,
   ((chapeau?, dev, schap*) | schap+),
   source?,
   defnotes?,
   (appcrit | appen)*

# ~~~~~~ schap
schap = element schap { schap.attributes,  schap.content }

schap.attributes =
   attribute id { xsd:ID }?
 & attribute num { text }?

schap.content =
   depart,
   (appcrit | pre)*,
   chapeau?,
   dev,
   defnotes?,
   (appcrit | appen)*


# =============================================================================
#                              Elements Developpement
# =============================================================================

# ~~~~~~ dev
dev = element dev { dev.content }

dev.content =
   (((let?, (p | pbib))
    | bl
    | sep
    | dialogue
    | theatre
    | \list
    | stroplg
    | cita
    | infratexte
    | lettre
    | fig
    | tableau
    | enc
    | sign)
    | (niv1 | niv2 | niv3 | niv4 | niv5))+,
   fin?,
   source?


# =============================================================================
#                         Niveau d'intertitre et de Texte
# =============================================================================

# ~~~~~~ niv1
niv1 = element niv1 { niv1.content }

niv1.content =
   (n?,
      int?,
      sint?,
      exer*,
      (((let?, p)
       | pbib
       | bl
       | sep
       | \list
       | stroplg
       | cita
       | infratexte
       | lettre
       | fig
       | tableau
       | enc)+
       | (niv2 | niv3 | niv4 | niv5)*)+),
   fin?

# ~~~~~~ niv2
niv2 = element niv2 { niv2.content }

niv2.content =
   (n?,
      int?,
      sint?,
      exer*,
      (((let?, p)
       | pbib
       | bl
       | sep
       | \list
       | stroplg
       | cita
       | infratexte
       | lettre
       | fig
       | tableau
       | enc)+
       | (niv3 | niv4 | niv5)*)+),
   fin?

# ~~~~~~ niv3
niv3 = element niv3 { niv3.content }

niv3.content =
   (n?,
      int?,
      sint?,
      exer*,
      (((let?, p)
       | pbib
       | bl
       | sep
       | \list
       | stroplg
       | cita
       | infratexte
       | lettre
       | fig
       | tableau
       | enc)+
       | (niv4 | niv5)*)+),
   fin?

# ~~~~~~ niv4
niv4 = element niv4 { niv4.content }

niv4.content =
   (n?,
      int?,
      sint?,
      exer*,
      (((let?, p)
       | pbib
       | bl
       | sep
       | \list
       | stroplg
       | cita
       | infratexte
       | lettre
       | fig
       | tableau
       | enc)+
       | niv5)*),
   fin?

# ~~~~~~ niv5
niv5 = element niv5 { niv5.content }

niv5.content =
   (n?,
      int?,
      sint?,
      exer*,
      ((let?, p)
       | pbib
       | bl
       | sep
       | \list
       | stroplg
       | cita
       | infratexte
       | lettre
       | fig
       | tableau
       | enc)+),
   fin?

# ~~~~~~ Numero de partie, Chapitre, sous-chapitre ou section
n = element n { (typo | appel | br | renv | renvlnk)* }

# ~~~~~~ Intertitre
int = element int {(typo | br | appel | renv | renvlnk)* }

# ~~~~~~ Sous intertitre
sint = element sint { (typo | br | appel | renv | renvlnk)* }


# =============================================================================
   
# Texte avec Exposant, Indice petites caps, ou souligne
texte = text | sup | inf | pc | sl

# Texte avec mise en forme  (ital, gras, romain)
typo = texte | i | b | r

appel =
  indx
  | indx2
  | indx3
  | apnb
  | apnb2
  | apnb3
  | apnf
  | apnm
  | apfi
  | apta
# Entite d'appels divers
depart =
  apfi?,
  surtit?,
  n?,
  (((tit, apfi?),
    ((stit, apfi?), (sstit, apfi?)?)?)
   | ((stit, apfi?), (sstit, apfi?)?))?,
  (accro | trad | auteur | illustrateur | exer)*
# Entite Numero, titre et sous-titre

#     Nom du photocompositeur
# lieu de la saisie
# Type coll

# ******                      Elements typo                       ******
b = element b { attlist.b, (texte | i | appel)* }
attlist.b &= empty
# Element Gras
i = element i { attlist.i, (texte | b | appel)* }
attlist.i &= empty
# Element ital
r = element r { attlist.r, (texte | appel)* }
attlist.r &= empty
# Element Romain
sup = element sup { attlist.sup, (text | appel | i | b | r)* }
attlist.sup &= empty
# Element Exposant
inf = element inf { attlist.inf, (text | appel | i | b | r)* }
attlist.inf &= empty
# Element Indice
pc = element pc { attlist.pc, (text | appel | i | b | r)* }
attlist.pc &= empty
# Element petites capitales
sl = element sl { attlist.sl, (text | appel | i | b | r)* }
attlist.sl &= empty
# Element souligne
br = element br { attlist.br, empty }
attlist.br &= empty
# Retour a la ligne dans un element titre


# ******                    Elements paragraphe                    ******
p = element p { attlist.p, (typo | appel | renv | renvlnk)* }
attlist.p &=
  attribute align {
    "centre" | "justif" | "gauche" | "droite" | "ssalinea"
  }?
# Element paragraphe


# Indentifiant et numero permettant de referencer les titres pour une gestion electronique

# Mai 2009 : ajout type bio, personnages, sommaire, tdm

# Mai 2009 : ajout appels de figure optionnels en dÈbut et en fin de prÈliminaire

# Mai 2009 : ajout surtitre optionnel

# Mai 2009 : ajout sous-soustitre optionnel

# mai 2009 : ajout ÈlÈment chapeau ******

# mai 2009 : ajout appels de figure optionnels au niveau de titre et sous titre ******

# mai 2009 : ajout source optionnel ******

# dÈcembre 2009 : ajout collec optionnel en fin de pre, pour les titre du meme auteur d un pre bio******
sign = element sign { attlist.sign, (typo | appel | br)* }
attlist.sign &= empty
# Signature de la preface ou de l'intro, etc...**

# ******             Elements paragraphe bibliographique           ******
pbib =
  element pbib {
    attlist.pbib,
    (typo
     | appel
     | autbib
     | titbib
     | editbib
     | datebib
     | renv
     | renvlnk)*
  }
attlist.pbib &= empty
# Element paragraphe bibliographique (auteur, titre, editeur, date)
autbib = element autbib { attlist.autbib, (typo | appel)* }
attlist.autbib &= empty
# auteur
titbib = element titbib { attlist.titbib, (typo | appel)* }
attlist.titbib &= empty
# titre ouvrage
editbib = element editbib { attlist.editbib, (typo | appel)* }
attlist.editbib &= empty
# editeur
datebib = element datebib { attlist.datebib, (typo | appel)* }
attlist.datebib &= empty
# date de parution

# ******             Elements renvois pour reference croisee       ******
renv = element renv { attlist.renv, typo* }
# Renvoi point d'appel
attlist.renv &= attribute id { xsd:IDREF }
# Lien appel de reference croisee
renvlnk = element renvlnk { attlist.renvlnk, typo* }
# Renvoi point d'arrivee
attlist.renvlnk &= attribute id { xsd:ID }
# Lien de reference croisee

# ******               Elements d'appels de figures et notes      ******
apnb = element apnb { attlist.apnb, empty }
attlist.apnb &= attribute id { xsd:IDREF }
# Lien appel de note de bas de page niv 1
apnb2 = element apnb2 { attlist.apnb2, empty }
attlist.apnb2 &= attribute id { xsd:IDREF }
# Lien appel de note de bas de page niv 2
apnb3 = element apnb3 { attlist.apnb3, empty }
attlist.apnb3 &= attribute id { xsd:IDREF }
# Lien appel de note de bas de page niv 3
apnf = element apnf { attlist.apnf, empty }
attlist.apnf &= attribute id { xsd:IDREF }
# Lien appel de note de fin d'ouvrage
apnm = element apnm { attlist.apnm, empty }
attlist.apnm &= attribute id { xsd:IDREF }
# Lien appel de note de marge
apfi = element apfi { attlist.apfi, empty }
attlist.apfi &=
  attribute id { xsd:IDREF },
  attribute place {
    "haut" | "bas" | "intexte" | "pagesui" | "pagepre"
  }?,
  attribute align {
    "centre" | "gauche" | "droite" | "retrait" | "inline"
  }?
# Lien appel de figure

# Emplacement de l'illustration : haut de page, bas de page, ‡ la hauteur du texte, page suivante, page precedente

# Mai 2009 : ajout align : centre | gauche | droite | retrait | inline=dans le texte
apta = element apta { attlist.apta, empty }
attlist.apta &= attribute id { xsd:IDREF }
# Lien appel de tableaux

# ******                   Elements d'indexation                   ******

# Rem : Le separateur de niveau d'index est le ;
indx = element indx { attlist.indx, (typo | appel)* }
# Indexation
attlist.indx &= attribute LIBEL { text }?
# Libelle dans l'index
indx2 = element indx2 { attlist.indx2, (typo | appel)* }
# Indexation
attlist.indx2 &= attribute LIBEL { text }?
# Libelle dans l'index
indx3 = element indx3 { attlist.indx3, (typo | appel)* }
# Indexation
attlist.indx3 &= attribute LIBEL { text }?
# Libelle dans l'index

# ******                Elements Theatre                         ******
theatre = element theatre { attlist.theatre, distrib*, acte+ }
attlist.theatre &= empty
# Module d'enrichissement pour ouvrage de theatre...
distrib = element distrib { attlist.distrib, tit, role+, expos* }
attlist.distrib &= empty
# liste des personnage de la piece...
role = element role { attlist.role, (pers | acteur)* }
attlist.role &= empty
# role du personnage
expos =
  element expos { attlist.expos, (typo | appel | renv | renvlnk)* }
attlist.expos &= empty
# exposition (ou se deroule la piece)
acte =
  element acte {
    attlist.acte, n?, tit?, stit?, (pers | didasc)*, scene+
  }
attlist.acte &= empty
# acte
pers =
  element pers {
    attlist.pers, (typo | appel | renv | renvlnk | didasc)*
  }
attlist.pers &= empty
# personnage(s)
acteur =
  element acteur {
    attlist.acteur, (typo | appel | renv | renvlnk | didasc)*
  }
attlist.acteur &= empty
# acteur(s)
didasc =
  element didasc { attlist.didasc, (typo | appel | renv | renvlnk)* }
attlist.didasc &= empty
# didascalie
scene =
  element scene {
    attlist.scene, n?, tit?, stit?, (pers | didasc)*, replique+
  }
attlist.scene &= empty
# scene
replique =
  element replique {
    attlist.replique,
    (pers+, (p | vers | didasc)*)+
  }
attlist.replique &= empty
# replique
vers = element vers { attlist.vers, (typo | appel | renv | renvlnk)* }
attlist.vers &=
  attribute align {
    "centre" | "justif" | "gauche" | "droite" | "stichomythie"
  }?,
  attribute num { text }?
# Attribut du vers (stichomytie pour les vers qui se suivent

# vers
bl = element bl { attlist.bl, empty }
# Ligne de blanc
attlist.bl &= attribute v { text }
# Valeur de blanc
sep = element sep { attlist.sep, empty }
# Separateur
attlist.sep &=
  attribute type {
    "filet" | "frise" | "etoiles" | "etoile" | "logo" | "autre"
  },
  attribute src { text }?
# type de separateur

# Mai 2009 : ajout scr : nom de l'image pour logo, cul de lampe...

# ******             Elements postliminaire de l'ouvrage           ******
appen =
  element appen {
    attlist.appen,
    (apfi?,
     surtit?,
     (((tit, apfi?),
       ((stit, apfi?), (sstit, apfi?)?)?)
      | ((stit, apfi?), (sstit, apfi?)?))?,
     exer*,
     ((((chapeau?, dev) | notefin),
       sect*)
      | sect+),
     (source | sign)*,
     defnotes?),
    collec*,
    apfi?
  }
attlist.appen &=
  attribute id { xsd:ID }?,
  attribute num { text }?,
  attribute type {
    "postface"
    | "conclusion"
    | "remer"
    | "biblio"
    | "bio"
    | "chrono"
    | "remarque"
    | "annexe"
    | "notes"
    | "glossaire"
    | "lexique"
    | "historique"
    | "genealogie"
    | "epilogue"
    | "tdm"
    | "horstexte"
    | "personnages"
    | "autre"
  }?
# Indentifiant et numero permettant de referencer les titres pour une gestion electronique

# Appendice : conclusion, postface, annexes etc...

# mai 2009 : ajout types glossaire, lexique, historique, genealogie, Èpilogue, tdm, horstexte ******

# mai 2009 : ajout appels de figure optionnels en dÈbut et en fin appendice ******

# mai 2009 : ajout exergue optionnel en dÈbut d' appendice ******

# mai 2009 : ajout surtitre optionnel ******

# Mai 2009 : ajout sous-soustitre optionnel

# mai 2009 : ajout ÈlÈment chapeau******

# mai 2009 : ajout ÈlÈment source******

# mai 2009 : ajout appels de figure optionnels au niveau de titre et sous titre ******

# dÈcembre 2009 : ajout collec optionnel en fin de pre, pour les titre du meme auteur d un pre bio******

# dÈcembre 2009 : ajout valeur attribut personnages ******

# ******             Appareil critique           ******
appcrit =
  element appcrit {
    attlist.appcrit,
    surtit?,
    (((tit, apfi?),
      ((stit, apfi?), (sstit, apfi?)?)?)
     | ((stit, apfi?), (sstit, apfi?)?))?,
    ((((chapeau?, dev) | notefin),
      sect*)
     | sect+),
    (source | sign)*,
    collec*,
    defnotes?
  }
attlist.appcrit &=
  attribute id { xsd:ID }?,
  attribute num { text }?,
  attribute type {
    "intro"
    | "prologue"
    | "pref"
    | "remer"
    | "avpro"
    | "biblio"
    | "remarque"
    | "note"
    | "chrono"
    | "presentation"
    | "personnages"
    | "sommaire"
    | "tdm"
    | "postface"
    | "conclusion"
    | "bio"
    | "annexe"
    | "glossaire"
    | "lexique"
    | "historique"
    | "genealogie"
    | "epilogue"
    | "horstexte"
    | "autre"
  }?
# mai 2009 : Definition des types d' appareils critiques : tous ceux de pre et d'appen

# mai 2009 : ajout surtitre optionnel ******

# Mai 2009 : ajout sous-soustitre optionnel

# mai 2009 : ajout ÈlÈment chapeau******

# mai 2009 : ajout ÈlÈment source******

# mai 2009 : ajout appels de figure optionnels au niveau de titre et sous titre ******

# dÈcembre 2009 : ajout collec optionnel en fin de pre, pour les titre du meme auteur d un pre bio******

# ******                 Elements Section                          ******
sect =
  element sect {
    attlist.sect,
    depart,
    ((chapeau?, dev) | notefin),
    sign*,
    defnotes?
  }
attlist.sect &=
  attribute id { xsd:ID }?,
  attribute num { text }?,
  attribute type {
    "postface"
    | "conclusion"
    | "remer"
    | "biblio"
    | "bio"
    | "chrono"
    | "remarque"
    | "annexe"
    | "notes"
    | "autre"
  }?
# Indentifiant et numero permettant de referencer les titres pour une gestion electronique

# Section

# mai 2009 : ajout ÈlÈment chapeau******


# ******				Element liste		 		******
\list = element list { attlist.list, item+ }
attlist.list &=
  attribute type {
    "puce"
    | "tiret"
    | "num"
    | "alpha"
    | "none"
    | "imagelist1"
    | "imagelist2"
    | "imagelist3"
    | "autre"
  }?
# Liste, Enumeration

# mai 2009 : ajout valeur type imagelist1 imagelist2 imagelist3 pour utiliser une image comme symbole optionnel ******

# Item liste
item = element item { attlist.item, (n?, p+), \list* }
attlist.item &= empty
# ******		Strophe et vers dans la LG... 		******
stroplg = element stroplg { attlist.stroplg, tit?, (verslg | bl)+ }
# Strophe
attlist.stroplg &= attribute type { text }?
# Type de vers : centre, retrait, ligne

# Vers
verslg = element verslg { attlist.verslg, (typo | appel)* }
attlist.verslg &=
  attribute type { text }?,
  attribute num { text }?
# Dialogue
dialogue =
  element dialogue {
    attlist.dialogue,
    (interloc,
     (p | stroplg | bl | sep | \list | cita | fig | tableau | enc)+)+,
    fin?
  }
attlist.dialogue &= empty
interloc =
  element interloc {
    attlist.interloc, (typo | appel | renv | renvlnk)*
  }
attlist.interloc &= empty
cita =
  element cita {
    attlist.cita,
    (date | lieu | entete)*,
    (p | stroplg | bl)+,
    (source | auteur | polit)*,
    fin?
  }
attlist.cita &= attribute type { "citation" | "lettre" }?
lettre =
  element lettre {
    attlist.lettre,
    (date | lieu | entete)*,
    (p | stroplg | bl)+,
    (source | auteur | polit)*
  }
attlist.lettre &= empty
infratexte =
  element infratexte {
    attlist.infratexte, tit?, (p | cita | stroplg | bl | sep)+, fin?
  }
attlist.infratexte &= empty
fin = element fin { attlist.fin, (typo | appel | renv | renvlnk | br)* }
attlist.fin &= empty
# matÈrialise un texte de fin de niveau
date =
  element date { attlist.date, (typo | appel | renv | renvlnk | br)* }
attlist.date &= empty
# date pour une correspondance
lieu =
  element lieu { attlist.lieu, (typo | appel | renv | renvlnk | br)* }
attlist.lieu &= empty
# lieu pour une correspondance
entete =
  element entete {
    attlist.entete, (typo | appel | renv | renvlnk | br)*
  }
attlist.entete &= empty
# entete pour une correspondance
polit =
  element polit { attlist.polit, (typo | appel | renv | renvlnk | br)* }
attlist.polit &= empty
# politesse pour une correspondance

# ******               Elements Lettrine                         ******
let = element let { typo* }
# Lettrine

# ******                        Encadre                            ******
enc =
  element enc { attlist.enc, surtit?, tit?, stit?, exer*, dev, sign* }
attlist.enc &= empty
# Encadre

# mai 2009 : ajout surtitre optionnel ******


# ******		 Niveau d'intertitre et de Texte		 ******
nfniv1 =
  element nfniv1 {
    attlist.nfniv1,
    n?,
    int?,
    sint?,
    ((ntf | p)* | (nfniv2 | nfniv3 | nfniv4 | nfniv5)*)+
  }
attlist.nfniv1 &= empty
# Niveau 1
nfniv2 =
  element nfniv2 {
    attlist.nfniv2,
    n?,
    int?,
    sint?,
    ((ntf | p)* | (nfniv3 | nfniv4 | nfniv5)*)+
  }
attlist.nfniv2 &= empty
# Niveau 2
nfniv3 =
  element nfniv3 {
    attlist.nfniv3,
    n?,
    int?,
    sint?,
    ((ntf | p)* | (nfniv4 | nfniv5)*)+
  }
attlist.nfniv3 &= empty
# Niveau 3
nfniv4 =
  element nfniv4 {
    attlist.nfniv4,
    n?,
    int?,
    sint?,
    ((ntf | p)* | nfniv5*)+
  }
attlist.nfniv4 &= empty
# Niveau 4
nfniv5 = element nfniv5 { attlist.nfniv5, n?, int?, sint?, (ntf | p)+ }
attlist.nfniv5 &= empty
# Niveau 5

# ******                  Elements definitions de figure           ******
fig = element fig { attlist.fig, (tit | img | leg | source)+ }
# contenu du bloc figure
attlist.fig &= attribute id { xsd:ID }?
# Lien appel de figure
img = element img { attlist.img, empty }
# Appel de la source de l'image
attlist.img &= attribute src { text }?
# Nom de l'image
leg = element leg { attlist.leg, p+ }
attlist.leg &= empty
# Legende d'illustration


# =============================================================================
#                           Elements definitions de note
# =============================================================================

# ~~~~~~ defnotes
defnotes = element defnotes { defnotes.content }

defnotes.content =
   (ntb
    | ntb2
    | ntb3
    | ntf
    | ntm)+

ntb = element ntb { attlist.ntb, (p | pbib | tableau | fig)+ }
# Texte de la note
attlist.ntb &= attribute id { xsd:ID }
# Lien appel de note
ntb2 = element ntb2 { attlist.ntb2, (p | pbib | tableau | fig)+ }
# Texte de la note niveau 2
attlist.ntb2 &= attribute id { xsd:ID }
# Lien appel de note niveau 2
ntb3 = element ntb3 { attlist.ntb3, (p | pbib | tableau | fig)+ }
# Texte de la note niveau 3
attlist.ntb3 &= attribute id { xsd:ID }
# Lien appel de note niveau 3
ntf = element ntf { attlist.ntf, (p | pbib | tableau | fig)+ }
# Texte de la note
attlist.ntf &= attribute id { xsd:ID }
# Lien appel de note
ntm = element ntm { attlist.ntm, (p | pbib | tableau | fig)+ }
# Texte de la note
attlist.ntm &= attribute id { xsd:ID }
# Lien appel de note

# ~~~~~~ elements note de fin
notefin = element notefin {
    ((ntf | p)* | (nfniv1 | nfniv2 | nfniv3 | nfniv4 | nfniv5)*)+
}


# =============================================================================
#                        Elements definitions de tableau
# =============================================================================

yesorno = string
tableau =
  element tableau {
    attlist.tableau,
    (leg | source)*,
    (stab | (table, stab*)),
    (leg | source)*
  }
# contenu du bloc tableau
attlist.tableau &= attribute id { xsd:ID }?
# Lien appel de tableau

# dÈcembre 2009 : ajout possibilitÈ table et stab ******
stab = element stab { attlist.stab, empty }
# Appel de la source du tableau (si tableau=image)
attlist.stab &= attribute src { text }?
# Nom du tableau

# ******                 Tableau en cals           ******
table = element table { attlist.table, title?, tgroup+ }
attlist.table &=
  attribute frame {
    "top" | "bottom" | "topbot" | "all" | "sides" | "none"
  }?,
  attribute colsep { yesorno }?,
  attribute rowsep { yesorno }?
title =
  element title { attlist.title, (typo | appel | br | renv | renvlnk)* }
attlist.title &= empty
tgroup =
  element tgroup {
    attlist.tgroup, colspec*, spanspec*, thead?, tfoot?, tbody
  }
attlist.tgroup &=
  attribute cols { text },
  attribute colsep { yesorno }?,
  attribute rowsep { yesorno }?,
  attribute align { "left" | "right" | "center" | "justify" | "char" }?,
  attribute char { text }?,
  attribute charoff { text }?
colspec = element colspec { attlist.colspec, empty }
attlist.colspec &=
  attribute colnum { text }?,
  attribute colname { text }?,
  attribute colwidth { text }?,
  attribute colsep { yesorno }?,
  attribute rowsep { yesorno }?,
  attribute align { "left" | "right" | "center" | "justify" | "char" }?,
  attribute char { text }?,
  attribute charoff { text }?
spanspec = element spanspec { attlist.spanspec, empty }
attlist.spanspec &=
  attribute namest { text },
  attribute nameend { text },
  attribute spanname { text },
  attribute colsep { yesorno }?,
  attribute rowsep { yesorno }?,
  attribute align { "left" | "right" | "center" | "justify" | "char" }?,
  attribute char { text }?,
  attribute charoff { text }?
thead = element thead { attlist.thead, colspec*, row+ }
attlist.thead &= attribute valign { "top" | "middle" | "bottom" }?
tfoot = element tfoot { attlist.tfoot, colspec*, row+ }
attlist.tfoot &= attribute valign { "top" | "middle" | "bottom" }?
tbody = element tbody { attlist.tbody, row+ }
attlist.tbody &= attribute valign { "top" | "middle" | "bottom" }?
row = element row { attlist.row, entry* }
attlist.row &=
  attribute rowsep { yesorno }?,
  attribute valign { "top" | "middle" | "bottom" }?
entry =
  element entry {
    attlist.entry, (typo | appel | renv | renvlnk | br | p | \list)*
  }
attlist.entry &=
  attribute colname { text }?,
  attribute namest { text }?,
  attribute nameend { text }?,
  attribute spanname { text }?,
  attribute morerows { text }?,
  attribute colsep { yesorno }?,
  attribute rowsep { yesorno }?,
  attribute align { "left" | "right" | "center" | "justify" | "char" }?,
  attribute char { text }?,
  attribute charoff { text }?,
  attribute rotate { yesorno }?,
  attribute valign { "top" | "middle" | "bottom" }?
