1.- Esquemes i vocabularis en XML
Suposem el següent problema:
- Imagina que estem gestionant una base de dades d’una biblioteca en format XML.
- La informació que volem registrar per a cada llibre és: autor, títol i any de publicació.
- Els llibres els cataloguen diverses persones i, com que no s’han posat d’acord, cada catalogador crea versions diferents.
Versió 1
<llibre>
<títol>El Arte de la Guerra</títol>
<autor>Sun Tzu</autor>
<publicació>200 a.C.</publicació>
</llibre>
Versió 2
<libro>
<título>El Arte de la Guerra</título>
<publicación>200 a.C.</publicación>
<autor>Sun Tzu</autor>
</libro>
Versió 3
<obra>
<nombre>El Arte de la Guerra</nombre>
<escritor>Sun Tzu</escritor>
<lanzamiento>200 antes de Cristo</lanzamiento>
</obra>
Al poc de temps, algú decideix afegir més elements.
Versió 1 ampliada
<llibre>
<títol>El Arte de la Guerra</títol>
<autor>Sun Tzu</autor>
<publicació>200 a.C.</publicació>
<editorial>Ediciones Z</editorial>
</llibre>
Com podem veure als exemples, cada persona ha creat la seua pròpia estructura i nomenclatura. Açò dificulta la comprensió i la interpretació de les dades dels llibres. En altres paraules: falta coherència.
Està clar que cap de les versions de l’exemple és compatible amb les altres. Per tant, és imprescindible posar-se d’acord en:
- què es pot fer,
- què pot aparéixer,
- i en quin ordre ho hem de fer.
XML és com un idioma que les computadores i els sistemes d’informació utilitzen per comunicar-se. Però perquè aquesta comunicació siga eficaç, tots han de parlar el mateix idioma.
Esquemes i vocabularis XML
Ací és on intervenen els esquemes i els vocabularis XML:
-
Els esquemes XML són com formularis que defineixen l’estructura i els tipus de dades que s’han d’utilitzar en els documents XML. Estableixen regles perquè les dades siguen coherents i comprensibles.
-
Els vocabularis XML són com un conjunt de paraules i frases que hem d’utilitzar. Defineixen les etiquetes i elements específics que podem fer servir en els documents XML.
Per establir l’estructura d’un document XML utilitzem llenguatges de definició de vocabularis o llenguatges d’esquemes. Els més coneguts són:
- DTD
- XML Schema
- Relax NG
En resum
-
Un document XML pot ser:
- Ben format: si compleix amb la sintaxi XML.
- Vàlid: si, a més d’estar ben format, compleix determinades regles i normes.
-
Per establir les regles de construcció en XML utilitzem DTD i XML Schema.
-
La validació és un procés habitual, sobretot quan es comparteix informació entre sistemes. Aquesta validació la fem amb processadors o validadors (també coneguts com a parsers).
2.- DTD
DTD: Document Type Definition – Validació i Definició de Documents
Un DTD és una especificació que defineix l’estructura, els elements i els atributs permesos en documents XML, proporcionant una guia per validar i interpretar correctament aquests documents.
El DTD ens permet crear el nostre propi llenguatge de marcat per a aplicacions específiques. Defineix:
- Tipus d’elements.
- Atributs.
- Entitats permeses.
- També es poden expressar restriccions.
Podem crear DTD de dues maneres:
- Fitxer extern: pot ser compartit per diversos documents (fins i tot milers).
- En el propi document XML: com a part de la declaració de tipus de document (inline).
2.1. Sintaxi bàsica
<!DOCTYPE element DTD_identifier
[
declaració1
declaració2
...
]>
On:
<!DOCTYPE>
: indica que estem declarant un tipus de document.- element: especifica el nom de l’element que serà l’arrel o element principal del document XML.
-
DTD identifier: identificador que fa referència a la definició del tipus de document. Pot ser:
- una ruta local a un fitxer
.dtd
, - o una URL a un DTD extern (subconjunt extern).
- una ruta local a un fitxer
[ ... ]
: entre claudàtors podem incloure un subconjunt intern amb declaracions d’elements, atributs o entitats.
2.2. DTD Interna
El DTD es defineix dins del mateix document XML, entre <!DOCTYPE ... >
i abans de les dades.
Exemple:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE articles [
<!ELEMENT articles (article+)>
<!ELEMENT article (titol, autor, contingut)>
<!ELEMENT titol (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT contingut (#PCDATA)>
]>
<articles>
<article>
<titol>Article 1</titol>
<autor>Inés Tornudo</autor>
<contingut>Aquest és el contingut de l’article 1.</contingut>
</article>
<!-- Altres articles -->
</articles>
2.3. DTD Externa
El DTD es defineix en un fitxer separat (.dtd
) i es fa referència des del document XML.
Exemple:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE articles SYSTEM "articles.dtd">
<articles>
<article>
<titol>Article 1</titol>
<autor>Inés Tornudo</autor>
<contingut>Aquest és el contingut de l’article 1.</contingut>
</article>
</articles>
El DTD també pot estar en una ubicació externa i pública:
<!DOCTYPE articles PUBLIC "https://exemple.com/dtd/articles.dtd">
En els dos casos les regles estan en un fitxer amb extensió .dtd
.
- Privada (SYSTEM): definida per nosaltres. Cas més comú.
- Pública (PUBLIC): definida per organismes d’estandardització.
Fitxer articles.dtd
<!ELEMENT articles (article+)>
<!ELEMENT article (titol, autor, contingut)>
<!ELEMENT titol (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT contingut (#PCDATA)>
2.4. Estructura d’un DTD
En un DTD es poden declarar:
- Elements
- Atributs
- Entitats
- Notacions
Recorda: un document XML serà vàlid si, a més de no tindre errors de sintaxi, compleix el que indiquen les declaracions del DTD associat.
2.5. Declaració d’elements
La declaració d’elements en un DTD defineix què pot contindre cada element d’un document XML.
Sintaxi general
<!ELEMENT nom_element tipus_contingut>
On:
- nom_element: és el nom de l’element que estem definint.
- tipus_contingut: especifica el contingut permés dins de l’element.
Exemple bàsic
<!ELEMENT receta (titulo, ingredientes, procedimiento)>
Això significa que <receta>
ha de contindre exactament i en aquest ordre tres subelements: <titulo>
, <ingredientes>
i <procedimiento>
.
Exemple XML vàlid
<receta>
<titulo>Pizza</titulo>
<ingredientes>Farina, tomaca, formatge...</ingredientes>
<procedimiento>Pastar, enfornar i servir.</procedimiento>
</receta>
Exemple XML invàlid
En aquest cas hem afegit un element <parrafo>
que no està declarat al DTD:
<receta>
<parrafo>Això és un paràgraf</parrafo>
<titulo>Pizza</titulo>
<ingredientes>Farina, tomaca, formatge...</ingredientes>
<procedimiento>Pastar, enfornar i servir.</procedimiento>
</receta>
Açò provocaria que el document fora no vàlid encara que estiga ben format.
Important…
- El DTD és rigorós: si definim un element amb una seqüència concreta, no podem canviar l’ordre ni afegir elements no previstos.
- Si volem flexibilitat (opcions o repeticions), cal utilitzar models de contingut amb operadors (
|
,?
,*
,+
) que es veuran en l’apartat següent. - És recomanable que els noms dels elements siguen autoexplicatius, per a millorar la claredat dels documents XML.
2.6. Tipus de contingut
En un DTD, el tipus de contingut especifica què pot aparéixer dins d’un element. Podem distingir diversos casos:
1. Text
S’indica amb #PCDATA
(Parsed Character Data). Vol dir que l’element només pot contindre text lliure, sense subelements.
<!ELEMENT cotxe (#PCDATA)>
Exemple XML vàlid:
<cotxe>Toyota Corolla</cotxe>
2. EMPTY (Buit)
L’element no pot tindre contingut, però sí pot tindre atributs. S’utilitza per a elements que actuen com a marques de posició o senyals.
<!ELEMENT linia_de_separacio EMPTY>
Exemple XML:
<linia_de_separacio/>
3. ANY
L’element pot contindre qualsevol cosa: text, subelements o una combinació. No és habitual fer-lo servir perquè trenca la validació estricta.
<!ELEMENT batiburrillo ANY>
4. Contingut mixt (Mixed)
Barreja de text i subelements. La sintaxi ha d’incloure sempre #PCDATA
i utilitzar |
i *
.
<!ELEMENT parrafo (#PCDATA | enfasis)*>
<!ELEMENT enfasis (#PCDATA)>
Exemple XML vàlid:
<parrafo>
Aquest és un text amb <enfasis>paraules destacades</enfasis> dins.
</parrafo>
Nota: En DTD, en contingut mixt no es poden usar comes (,) ni quantificadors diferents de
*
.
5. Tipus element (subelements concrets)
L’element només pot contindre els subelements que indiquem al model de contingut, en un ordre determinat.
<!ELEMENT article (titol, autor, contingut)>
Exemple XML vàlid:
<article>
<titol>Notícies d’avui</titol>
<autor>Maria Pérez</autor>
<contingut>El text de la notícia...</contingut>
</article>
Exemple invàlid (ordre incorrecte):
<article>
<autor>Maria Pérez</autor>
<titol>Notícies d’avui</titol>
<contingut>El text de la notícia...</contingut>
</article>
Resum visual
Tipus | Definició | Exemple DTD | Exemple XML vàlid | |
---|---|---|---|---|
#PCDATA | Només text | <!ELEMENT cotxe (#PCDATA)> | <cotxe>Toyota Corolla</cotxe> | |
EMPTY | Sense contingut (però amb atributs) | <!ELEMENT linia_de_separacio EMPTY> | <linia_de_separacio/> | |
ANY | Qualsevol contingut | <!ELEMENT batiburrillo ANY> | <batiburrillo>Qualsevol</batiburrillo> | |
Mixt | Text + subelements, en qualsevol ordre | `<!ELEMENT parrafo (#PCDATA | enfasis)*>` | <parrafo>text <enfasis>x</enfasis></parrafo> | |
Element | Seqüència de subelements concrets | <!ELEMENT article (titol, autor, contingut)> | <article><titol>...</titol>...</article> |
2.7. Models de contingut
Els models de contingut especifiquen com s’organitzen els subelements dins d’un element. En un DTD podem indicar seqüències, opcions i combinar-les amb quantificadors.
1. Element simple
L’element pot contindre només un subelement.
<!ELEMENT aviso (parrafo)>
Exemple vàlid:
<aviso>
<parrafo>Aquest és un avís.</parrafo>
</aviso>
Exemple invàlid (faltaria <parrafo>
):
<aviso>Text directe</aviso>
2. Seqüència
S’usa la coma ( , ) per indicar que els subelements han d’aparéixer en eixe ordre.
<!ELEMENT aviso (titulo, parrafo)>
Exemple vàlid:
<aviso>
<titulo>Important</titulo>
<parrafo>Això és un avís seqüenciat.</parrafo>
</aviso>
Exemple invàlid (canvi d’ordre):
<aviso>
<parrafo>Això no és vàlid.</parrafo>
<titulo>Important</titulo>
</aviso>
3. Opció (alternatives)
S’usa la **barra vertical ( | )** per indicar que es pot triar un dels elements. |
<!ELEMENT aviso (parrafo | grafico)>
Exemple amb <parrafo>
:
<aviso>
<parrafo>Avís escrit.</parrafo>
</aviso>
Exemple amb <grafico>
:
<aviso>
<grafico>imatge.png</grafico>
</aviso>
Exemple invàlid (apareixen els dos a la vegada):
<aviso>
<parrafo>Avís escrit.</parrafo>
<grafico>imatge.png</grafico>
</aviso>
4. Combinació amb agrupacions
Podem usar parèntesis per combinar seqüències i opcions.
<!ELEMENT aviso (titulo, (parrafo | grafico))>
Interpretació: <aviso>
ha de contindre un <titulo>
seguit de un <parrafo>
o un <grafico>
.
Exemple vàlid:
<aviso>
<titulo>Avís</titulo>
<parrafo>Text de l’avís</parrafo>
</aviso>
5. Quantificadors
?
→ 0 o 1 vegada.*
→ 0 o més vegades.+
→ 1 o més vegades.
Exemple combinat:
<!ELEMENT aviso (titulo?, (parrafo+, grafico))>
Interpretació:
<titulo>
és opcional.- Ha d’haver almenys un
<parrafo>
. - Després dels paràgrafs, hi ha d’haver exactament un
<grafico>
.
Exemple vàlid:
<aviso>
<parrafo>Primer avís</parrafo>
<parrafo>Segon avís</parrafo>
<grafico>imatge.png</grafico>
</aviso>
Exemple amb <titulo>
també vàlid:
<aviso>
<titulo>Avís gràfic</titulo>
<parrafo>Informació amb imatge</parrafo>
<grafico>foto.png</grafico>
</aviso>
Resum visual de models de contingut
Model DTD | Significat | Exemple XML vàlid | |
---|---|---|---|
(A,B) | Seqüència: A seguit de B | <x><A/><B/></x> | |
`(A | B)` | Opció: A o B | <x><A/></x> o <x><B/></x> | |
A? | Opcional: 0 o 1 A | <x/> o <x><A/></x> | |
A* | 0 o més vegades | <x/> , <x><A/><A/></x> | |
A+ | 1 o més vegades | <x><A/></x> , <x><A/><A/></x> | |
(titulo?, (parrafo+, grafico)) | Opcional <titulo> , 1+ <parrafo> , 1 <grafico> | <aviso><parrafo/>…<grafico/></aviso> |
2.8. Quantificadors
Els quantificadors permeten indicar quantes vegades pot aparéixer un element dins d’un model de contingut.
Tipus principals
-
?
→ Zero o una vegada (opcional).<!ELEMENT subtitol (parrafo?)>
Exemple XML vàlid:
<subtitol/> <subtitol><parrafo>Un subtítol curt</parrafo></subtitol>
-
*
→ Zero o més vegades.<!ELEMENT llista (element*)>
Exemple XML vàlid:
<llista/> <llista><element>A</element><element>B</element></llista>
-
+
→ Una o més vegades (mínim una).<!ELEMENT paragrafs (parrafo+)>
Exemple XML vàlid:
<paragrafs><parrafo>Primer</parrafo></paragrafs> <paragrafs><parrafo>Un</parrafo><parrafo>Dos</parrafo></paragrafs>
Exemple combinat
<!ELEMENT aviso (titulo?, (parrafo+, grafico))>
Interpretació:
<titulo>
→ pot aparéixer 0 o 1 vegada.<parrafo>
→ ha d’aparéixer almenys una vegada.<grafico>
→ ha d’aparéixer exactament una vegada, i sempre després dels paràgrafs.
Exemples XML vàlids:
<aviso>
<parrafo>Primer avís</parrafo>
<grafico>imatge.png</grafico>
</aviso>
<aviso>
<titulo>Important</titulo>
<parrafo>Detall 1</parrafo>
<parrafo>Detall 2</parrafo>
<grafico>diagrama.png</grafico>
</aviso>
Exemple XML invàlid (perquè falta <grafico>
):
<aviso>
<titulo>Error</titulo>
<parrafo>No hi ha gràfic</parrafo>
</aviso>
title: 1.1.- DTD - Document Type Definition parent: 1.- XML i DTD grand_parent: Llenguatges de Marques has_children: true layout: default nav_order: 20 has_toc: true —
1.- Esquemes i vocabularis en XML
Suposem el següent problema:
- Imagina que estem gestionant una base de dades d’una biblioteca en format XML.
- La informació que volem registrar per a cada llibre és: autor, títol i any de publicació.
- Els llibres els cataloguen diverses persones i, com que no s’han posat d’acord, cada catalogador crea versions diferents.
Versió 1
<llibre>
<títol>El Arte de la Guerra</títol>
<autor>Sun Tzu</autor>
<publicació>200 a.C.</publicació>
</llibre>
Versió 2
<libro>
<título>El Arte de la Guerra</título>
<publicación>200 a.C.</publicación>
<autor>Sun Tzu</autor>
</libro>
Versió 3
<obra>
<nombre>El Arte de la Guerra</nombre>
<escritor>Sun Tzu</escritor>
<lanzamiento>200 antes de Cristo</lanzamiento>
</obra>
Al poc de temps, algú decideix afegir més elements.
Versió 1 ampliada
<llibre>
<títol>El Arte de la Guerra</títol>
<autor>Sun Tzu</autor>
<publicació>200 a.C.</publicació>
<editorial>Ediciones Z</editorial>
</llibre>
Com podem veure als exemples, cada persona ha creat la seua pròpia estructura i nomenclatura. Açò dificulta la comprensió i la interpretació de les dades dels llibres. En altres paraules: falta coherència.
Està clar que cap de les versions de l’exemple és compatible amb les altres. Per tant, és imprescindible posar-se d’acord en:
- què es pot fer,
- què pot aparéixer,
- i en quin ordre ho hem de fer.
XML és com un idioma que les computadores i els sistemes d’informació utilitzen per comunicar-se. Però perquè aquesta comunicació siga eficaç, tots han de parlar el mateix idioma.
Esquemes i vocabularis XML
Ací és on intervenen els esquemes i els vocabularis XML:
-
Els esquemes XML són com formularis que defineixen l’estructura i els tipus de dades que s’han d’utilitzar en els documents XML. Estableixen regles perquè les dades siguen coherents i comprensibles.
-
Els vocabularis XML són com un conjunt de paraules i frases que hem d’utilitzar. Defineixen les etiquetes i elements específics que podem fer servir en els documents XML.
Per establir l’estructura d’un document XML utilitzem llenguatges de definició de vocabularis o llenguatges d’esquemes. Els més coneguts són:
- DTD
- XML Schema
- Relax NG
En resum
-
Un document XML pot ser:
- Ben format: si compleix amb la sintaxi XML.
- Vàlid: si, a més d’estar ben format, compleix determinades regles i normes.
-
Per establir les regles de construcció en XML utilitzem DTD i XML Schema.
-
La validació és un procés habitual, sobretot quan es comparteix informació entre sistemes. Aquesta validació la fem amb processadors o validadors (també coneguts com a parsers).
2.- DTD
DTD: Document Type Definition – Validació i Definició de Documents
Un DTD és una especificació que defineix l’estructura, els elements i els atributs permesos en documents XML, proporcionant una guia per validar i interpretar correctament aquests documents.
El DTD ens permet crear el nostre propi llenguatge de marcat per a aplicacions específiques. Defineix:
- Tipus d’elements.
- Atributs.
- Entitats permeses.
- També es poden expressar restriccions.
Podem crear DTD de dues maneres:
- Fitxer extern: pot ser compartit per diversos documents (fins i tot milers).
- En el propi document XML: com a part de la declaració de tipus de document (inline).
2.1. Sintaxi bàsica
<!DOCTYPE element DTD_identifier
[
declaració1
declaració2
...
]>
On:
<!DOCTYPE>
: indica que estem declarant un tipus de document.- element: especifica el nom de l’element que serà l’arrel o element principal del document XML.
-
DTD identifier: identificador que fa referència a la definició del tipus de document. Pot ser:
- una ruta local a un fitxer
.dtd
, - o una URL a un DTD extern (subconjunt extern).
- una ruta local a un fitxer
[ ... ]
: entre claudàtors podem incloure un subconjunt intern amb declaracions d’elements, atributs o entitats.
2.2. DTD Interna
El DTD es defineix dins del mateix document XML, entre <!DOCTYPE ... >
i abans de les dades.
Exemple:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE articles [
<!ELEMENT articles (article+)>
<!ELEMENT article (titol, autor, contingut)>
<!ELEMENT titol (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT contingut (#PCDATA)>
]>
<articles>
<article>
<titol>Article 1</titol>
<autor>Inés Tornudo</autor>
<contingut>Aquest és el contingut de l’article 1.</contingut>
</article>
<!-- Altres articles -->
</articles>
2.3. DTD Externa
El DTD es defineix en un fitxer separat (.dtd
) i es fa referència des del document XML.
Exemple:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE articles SYSTEM "articles.dtd">
<articles>
<article>
<titol>Article 1</titol>
<autor>Inés Tornudo</autor>
<contingut>Aquest és el contingut de l’article 1.</contingut>
</article>
</articles>
El DTD també pot estar en una ubicació externa i pública:
<!DOCTYPE articles PUBLIC "https://exemple.com/dtd/articles.dtd">
En els dos casos les regles estan en un fitxer amb extensió .dtd
.
- Privada (SYSTEM): definida per nosaltres. Cas més comú.
- Pública (PUBLIC): definida per organismes d’estandardització.
Fitxer articles.dtd
<!ELEMENT articles (article+)>
<!ELEMENT article (titol, autor, contingut)>
<!ELEMENT titol (#PCDATA)>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT contingut (#PCDATA)>
2.4. Estructura d’un DTD
En un DTD es poden declarar:
- Elements
- Atributs
- Entitats
- Notacions
Recorda: un document XML serà vàlid si, a més de no tindre errors de sintaxi, compleix el que indiquen les declaracions del DTD associat.
2.5. Declaració d’elements
La declaració d’elements en un DTD defineix què pot contindre cada element d’un document XML.
Sintaxi general
<!ELEMENT nom_element tipus_contingut>
On:
- nom_element: és el nom de l’element que estem definint.
- tipus_contingut: especifica el contingut permés dins de l’element.
Exemple bàsic
<!ELEMENT receta (titulo, ingredientes, procedimiento)>
Això significa que <receta>
ha de contindre exactament i en aquest ordre tres subelements: <titulo>
, <ingredientes>
i <procedimiento>
.
Exemple XML vàlid
<receta>
<titulo>Pizza</titulo>
<ingredientes>Farina, tomaca, formatge...</ingredientes>
<procedimiento>Pastar, enfornar i servir.</procedimiento>
</receta>
Exemple XML invàlid
En aquest cas hem afegit un element <parrafo>
que no està declarat al DTD:
<receta>
<parrafo>Això és un paràgraf</parrafo>
<titulo>Pizza</titulo>
<ingredientes>Farina, tomaca, formatge...</ingredientes>
<procedimiento>Pastar, enfornar i servir.</procedimiento>
</receta>
Açò provocaria que el document fora no vàlid encara que estiga ben format.
Important…
- El DTD és rigorós: si definim un element amb una seqüència concreta, no podem canviar l’ordre ni afegir elements no previstos.
- Si volem flexibilitat (opcions o repeticions), cal utilitzar models de contingut amb operadors (
|
,?
,*
,+
) que es veuran en l’apartat següent. - És recomanable que els noms dels elements siguen autoexplicatius, per a millorar la claredat dels documents XML.
2.6. Tipus de contingut
En un DTD, el tipus de contingut especifica què pot aparéixer dins d’un element. Podem distingir diversos casos:
1. Text
S’indica amb #PCDATA
(Parsed Character Data). Vol dir que l’element només pot contindre text lliure, sense subelements.
<!ELEMENT cotxe (#PCDATA)>
Exemple XML vàlid:
<cotxe>Toyota Corolla</cotxe>
2. EMPTY (Buit)
L’element no pot tindre contingut, però sí pot tindre atributs. S’utilitza per a elements que actuen com a marques de posició o senyals.
<!ELEMENT linia_de_separacio EMPTY>
Exemple XML:
<linia_de_separacio/>
3. ANY
L’element pot contindre qualsevol cosa: text, subelements o una combinació. No és habitual fer-lo servir perquè trenca la validació estricta.
<!ELEMENT batiburrillo ANY>
4. Contingut mixt (Mixed)
Barreja de text i subelements. La sintaxi ha d’incloure sempre #PCDATA
i utilitzar |
i *
.
<!ELEMENT parrafo (#PCDATA | enfasis)*>
<!ELEMENT enfasis (#PCDATA)>
Exemple XML vàlid:
<parrafo>
Aquest és un text amb <enfasis>paraules destacades</enfasis> dins.
</parrafo>
Nota: En DTD, en contingut mixt no es poden usar comes (,) ni quantificadors diferents de
*
.
5. Tipus element (subelements concrets)
L’element només pot contindre els subelements que indiquem al model de contingut, en un ordre determinat.
<!ELEMENT article (titol, autor, contingut)>
Exemple XML vàlid:
<article>
<titol>Notícies d’avui</titol>
<autor>Maria Pérez</autor>
<contingut>El text de la notícia...</contingut>
</article>
Exemple invàlid (ordre incorrecte):
<article>
<autor>Maria Pérez</autor>
<titol>Notícies d’avui</titol>
<contingut>El text de la notícia...</contingut>
</article>
Resum visual
Tipus | Definició | Exemple DTD | Exemple XML vàlid | |
---|---|---|---|---|
#PCDATA | Només text | <!ELEMENT cotxe (#PCDATA)> | <cotxe>Toyota Corolla</cotxe> | |
EMPTY | Sense contingut (però amb atributs) | <!ELEMENT linia_de_separacio EMPTY> | <linia_de_separacio/> | |
ANY | Qualsevol contingut | <!ELEMENT batiburrillo ANY> | <batiburrillo>Qualsevol</batiburrillo> | |
Mixt | Text + subelements, en qualsevol ordre | `<!ELEMENT parrafo (#PCDATA | enfasis)*>` | <parrafo>text <enfasis>x</enfasis></parrafo> | |
Element | Seqüència de subelements concrets | <!ELEMENT article (titol, autor, contingut)> | <article><titol>...</titol>...</article> |
2.7. Models de contingut
Els models de contingut especifiquen com s’organitzen els subelements dins d’un element. En un DTD podem indicar seqüències, opcions i combinar-les amb quantificadors.
1. Element simple
L’element pot contindre només un subelement.
<!ELEMENT aviso (parrafo)>
Exemple vàlid:
<aviso>
<parrafo>Aquest és un avís.</parrafo>
</aviso>
Exemple invàlid (faltaria <parrafo>
):
<aviso>Text directe</aviso>
2. Seqüència
S’usa la coma ( , ) per indicar que els subelements han d’aparéixer en eixe ordre.
<!ELEMENT aviso (titulo, parrafo)>
Exemple vàlid:
<aviso>
<titulo>Important</titulo>
<parrafo>Això és un avís seqüenciat.</parrafo>
</aviso>
Exemple invàlid (canvi d’ordre):
<aviso>
<parrafo>Això no és vàlid.</parrafo>
<titulo>Important</titulo>
</aviso>
3. Opció (alternatives)
S’usa la **barra vertical ( | )** per indicar que es pot triar un dels elements. |
<!ELEMENT aviso (parrafo | grafico)>
Exemple amb <parrafo>
:
<aviso>
<parrafo>Avís escrit.</parrafo>
</aviso>
Exemple amb <grafico>
:
<aviso>
<grafico>imatge.png</grafico>
</aviso>
Exemple invàlid (apareixen els dos a la vegada):
<aviso>
<parrafo>Avís escrit.</parrafo>
<grafico>imatge.png</grafico>
</aviso>
4. Combinació amb agrupacions
Podem usar parèntesis per combinar seqüències i opcions.
<!ELEMENT aviso (titulo, (parrafo | grafico))>
Interpretació: <aviso>
ha de contindre un <titulo>
seguit de un <parrafo>
o un <grafico>
.
Exemple vàlid:
<aviso>
<titulo>Avís</titulo>
<parrafo>Text de l’avís</parrafo>
</aviso>
5. Quantificadors
?
→ 0 o 1 vegada.*
→ 0 o més vegades.+
→ 1 o més vegades.
Exemple combinat:
<!ELEMENT aviso (titulo?, (parrafo+, grafico))>
Interpretació:
<titulo>
és opcional.- Ha d’haver almenys un
<parrafo>
. - Després dels paràgrafs, hi ha d’haver exactament un
<grafico>
.
Exemple vàlid:
<aviso>
<parrafo>Primer avís</parrafo>
<parrafo>Segon avís</parrafo>
<grafico>imatge.png</grafico>
</aviso>
Exemple amb <titulo>
també vàlid:
<aviso>
<titulo>Avís gràfic</titulo>
<parrafo>Informació amb imatge</parrafo>
<grafico>foto.png</grafico>
</aviso>
Resum visual de models de contingut
Model DTD | Significat | Exemple XML vàlid | |
---|---|---|---|
(A,B) | Seqüència: A seguit de B | <x><A/><B/></x> | |
`(A | B)` | Opció: A o B | <x><A/></x> o <x><B/></x> | |
A? | Opcional: 0 o 1 A | <x/> o <x><A/></x> | |
A* | 0 o més vegades | <x/> , <x><A/><A/></x> | |
A+ | 1 o més vegades | <x><A/></x> , <x><A/><A/></x> | |
(titulo?, (parrafo+, grafico)) | Opcional <titulo> , 1+ <parrafo> , 1 <grafico> | <aviso><parrafo/>…<grafico/></aviso> |
2.8. Quantificadors
Els quantificadors permeten indicar quantes vegades pot aparéixer un element dins d’un model de contingut.
Tipus principals
-
?
→ Zero o una vegada (opcional).<!ELEMENT subtitol (parrafo?)>
Exemple XML vàlid:
<subtitol/> <subtitol><parrafo>Un subtítol curt</parrafo></subtitol>
-
*
→ Zero o més vegades.<!ELEMENT llista (element*)>
Exemple XML vàlid:
<llista/> <llista><element>A</element><element>B</element></llista>
-
+
→ Una o més vegades (mínim una).<!ELEMENT paragrafs (parrafo+)>
Exemple XML vàlid:
<paragrafs><parrafo>Primer</parrafo></paragrafs> <paragrafs><parrafo>Un</parrafo><parrafo>Dos</parrafo></paragrafs>
Exemple combinat
<!ELEMENT aviso (titulo?, (parrafo+, grafico))>
Interpretació:
<titulo>
→ pot aparéixer 0 o 1 vegada.<parrafo>
→ ha d’aparéixer almenys una vegada.<grafico>
→ ha d’aparéixer exactament una vegada, i sempre després dels paràgrafs.
Exemples XML vàlids:
<aviso>
<parrafo>Primer avís</parrafo>
<grafico>imatge.png</grafico>
</aviso>
<aviso>
<titulo>Important</titulo>
<parrafo>Detall 1</parrafo>
<parrafo>Detall 2</parrafo>
<grafico>diagrama.png</grafico>
</aviso>
Exemple XML invàlid (perquè falta <grafico>
):
<aviso>
<titulo>Error</titulo>
<parrafo>No hi ha gràfic</parrafo>
</aviso>
3.- Resum
- Un DTD definix: elements, atributs, entitats i notacions.
-
Pot ser:
- Intern (inclòs dins del document XML).
- Extern (fitxer
.dtd
referenciat amb SYSTEM o PUBLIC).
-
Els elements poden tindre diferents tipus de contingut:
#PCDATA
(només text).EMPTY
(buit).ANY
(lliure, poc recomanat).- Mixt (text + subelements).
- Element (seqüència de subelements concrets).
-
Els models de contingut indiquen l’ordre i les opcions dels subelements:
- Seqüència → coma
,
- Opció → barra
|
- Agrupació → parèntesis
( … )
- Seqüència → coma
-
Els quantificadors permeten expressar opcionalitat i repetició:
?
(0 o 1)*
(0 o més)+
(1 o més)
En conjunt, un XML és vàlid quan, a més de ser ben format, respecta les regles declarades al DTD associat.
3.- Resum
- Un DTD definix: elements, atributs, entitats i notacions.
-
Pot ser:
- Intern (inclòs dins del document XML).
- Extern (fitxer
.dtd
referenciat amb SYSTEM o PUBLIC).
-
Els elements poden tindre diferents tipus de contingut:
#PCDATA
(només text).EMPTY
(buit).ANY
(lliure, poc recomanat).- Mixt (text + subelements).
- Element (seqüència de subelements concrets).
-
Els models de contingut indiquen l’ordre i les opcions dels subelements:
- Seqüència → coma
,
- Opció → barra
|
- Agrupació → parèntesis
( … )
- Seqüència → coma
-
Els quantificadors permeten expressar opcionalitat i repetició:
?
(0 o 1)*
(0 o més)+
(1 o més)
En conjunt, un XML és vàlid quan, a més de ser ben format, respecta les regles declarades al DTD associat.