cours/syntaxe d'une DTD.md
Oscar Plaisant bb9f9102c9 update
2024-03-13 11:36:31 +01:00

108 lines
2.3 KiB
Markdown

up:: [[DTD]]
#informatique
# Déclaration des éléments
```dtd
<!ELEMENT unNom DEF-CONTENU>
```
`DEF-CONTENU` peut être :
- `EMPTY` : contenu vide
- `ANY` : peut contenir n'importe quel élément de la DTD
- `(#PCDATA)` : contient du texte
- une expression régulière sur les nom d'éléments
## Exemples
```dtd
<!ELEMENT cours (intervenant, plan?, commentaire*)>
<!ELEMENT interveneant (#PCDATA)>
<!ELEMENT plan (#PCDATA)>
<!ELEMENT commentaire (#PCDATA)>
```
```dtd
<!ELEMENT personne ((nom, prenom) | nomComplet)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT nomComplet (nom, prenom)>
```
# Déclaration de liste d'attributs
```dtd
<!ATTLIST unNomElement unNomAttribut TYPE OBLIGATION VALEUR-PAR-DEFAUT>
```
- TYPE peut être :
- `CDATA` : du texte
- `ID` : un identifiant unique **dans tout le document**
- `IDREF` : une référence vers un ID
- `IDREFS` : une liste de références vers des ID
- `NMTOKEN` : un mot
- `NMTOKENs` : une liste de mots
- une énumération de valeurs séparées par des `|`
- L'`OBLIGATION` ne concerne pas les énumérations suivies d'une valeur par défaut. Dans les autres cas, cela peut être :
- `#REQUIRED` : obligatoire
- `#IMPLIED` : optionnel
- `#FIXED` : attribut toujours présent avec une valeur (sert pour imposer la déclaration d'un espace de noms)
- La `VALEUR-PAR-DEFAUT` permet de donner la valeur si aucune valeur n'est précisée
## Exemples
### Exemple 1
```dtd
<!ELEMENT cours (intervenant, plan, commentaire*)>
<!ELEMENT cours
titre CDATA #REQUIRED
plan CDATA #IMPLIED
```
exemple valide :
```xml
<cours titre="données semi-structurées">
<intervenant>
Mme. Markov
</intervenant>
<plan>
Introduction
Présentation générale de XML
</plan>
```
### Exemple 2
```dtd
<!ELEMENT crayon EMPTY>
<!ELEMENT crayon
couleur (rouge|bleu) "bleu"
epaisseur CDATA #IMPLIED "8">
```
# Déclaration d'entités
Les entités permettent de définir des remplacements de préprocesseur.
```dtd
<!ENTITY nomEntite "remplacement">
```
- on utilise ensuite `&nomEntite;` qui sera remplacé par `remplacement`
## Exemple
```dtd
<!ENTITY chap1 "chap1.xml">
<!ENTITY chap2 "chap2.xml">
<!ENTITY chap3 "chap3.xml">
```
```xml
<livre> &chap1; &chap2; &chap3; </livre>
```