DTD — Document Type Definition
Qué és un DTD?
Un DTD (Document Type Definition) és un conjunt de regles que defineix l'estructura i els continguts permesos en un document XML. Permet validar si un document XML compleix amb un format preestablert.
Un document XML és vàlid quan és ben format i compleix amb el DTD o l'esquema associat.
Ben format vs Vàlid
- Ben format: compleix les regles sintàctiques d'XML (etiquetes tancades, un arrel únic, etc.)
- Vàlid: ben format i compleix l'esquema de validació (DTD o XSD)
DTD intern
El DTD s'inclou dins del mateix document XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE alumne [
<!ELEMENT alumne (nom, nota)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT nota (#PCDATA)>
]>
<alumne>
<nom>Joan García</nom>
<nota>8.5</nota>
</alumne>
DTD extern
El DTD es guarda en un fitxer .dtd separat:
persona.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persona SYSTEM "persona.dtd">
<persona>
<nom>Maria López</nom>
<edat>22</edat>
<email>maria@exemple.com</email>
</persona>
persona.dtd:
<!ELEMENT persona (nom, edat, email?)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT edat (#PCDATA)>
<!ELEMENT email (#PCDATA)>
Definició d'elements
<!-- Sintaxi: <!ELEMENT nom_element (contingut)> -->
<!-- Element amb text -->
<!ELEMENT titol (#PCDATA)>
<!-- Element buit -->
<!ELEMENT separador EMPTY>
<!-- Element amb qualsevol contingut -->
<!ELEMENT nota ANY>
<!-- Seqüència: fills en ordre fix -->
<!ELEMENT persona (nom, cognoms, edat)>
<!-- Opció: un dels fills (|) -->
<!ELEMENT pagament (targeta | transferencia | efectiu)>
<!-- Combinació -->
<!ELEMENT factura (data, client, (producte | servei)+, total)>
Cardinalitat (quantificadors)
| Símbol | Significat | Exemple |
|---|---|---|
| (res) | Exactament 1 | (nom) |
? |
0 o 1 (opcional) | (email?) |
* |
0 o més | (telefon*) |
+ |
1 o més | (linia+) |
<!ELEMENT persona (nom, cognoms, telefon*, email?, adreca?)>
<!ELEMENT comanda (client, linia+, total)>
<!ELEMENT cataleg (producte*)>
Definició d'atributs
<!-- Sintaxi: <!ATTLIST element atribut tipus default> -->
<!ATTLIST producte
id ID #REQUIRED
categoria CDATA #IMPLIED
actiu (true|false) "true"
tipus CDATA #FIXED "producte"
>
Tipus d'atributs
| Tipus | Descripció |
|---|---|
CDATA |
Text lliure |
ID |
Identificador únic al document |
IDREF |
Referència a un ID existent |
IDREFS |
Múltiples IDREF separats per espais |
NMTOKEN |
Token XML (sense espais) |
(val1\|val2) |
Enumeració de valors permesos |
Valors per defecte
| Valor | Significat |
|---|---|
#REQUIRED |
Obligatori |
#IMPLIED |
Opcional, sense valor per defecte |
#FIXED "valor" |
Valor fix, no es pot canviar |
"valor" |
Valor per defecte (opcional) |
Exemple complet
<!-- biblioteca.dtd -->
<!ELEMENT biblioteca (llibre+)>
<!ELEMENT llibre (titol, autor+, editorial, any, genere, descripcio?)>
<!ELEMENT titol (#PCDATA)>
<!ELEMENT autor (nom, cognom)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT cognom (#PCDATA)>
<!ELEMENT editorial (#PCDATA)>
<!ELEMENT any (#PCDATA)>
<!ELEMENT genere (#PCDATA)>
<!ELEMENT descripcio (#PCDATA)>
<!ATTLIST llibre
isbn ID #REQUIRED
idioma CDATA "ca"
disponible (si|no) "si"
>
<!-- biblioteca.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE biblioteca SYSTEM "biblioteca.dtd">
<biblioteca>
<llibre isbn="ISBN001" idioma="ca" disponible="si">
<titol>Tirant lo Blanc</titol>
<autor>
<nom>Joanot</nom>
<cognom>Martorell</cognom>
</autor>
<editorial>Edicions 62</editorial>
<any>1490</any>
<genere>Novel·la de cavalleria</genere>
</llibre>
</biblioteca>
Limitacions del DTD
Malgrat ser útil per introduir la validació, el DTD té limitacions importants:
| Limitació | Descripció |
|---|---|
| No és XML | El DTD té la seva pròpia sintaxi, no es pot processar com XML |
| Tipus de dades limitats | Només CDATA, no pot validar números, dates, etc. |
| Namespaces | No suporta espais de noms XML |
| Cardinalitat limitada | No pot expressar "exactament 3" o "entre 2 i 5" |
| Extensions | Difícil d'estendre o reutilitzar |
Per a validació avançada, s'usa XML Schema (XSD).
Miniactivitat AC03738
Escriu el DTD per al document XML institut.xml que vas crear al RA1. Ha de validar: cicles, mòduls, nombre d'hores, codi de mòdul (atribut ID), grau (enumeració GM/GS).