Enginyeria del Software III
XML DOCUMENT TYPE DEFINITION
Roberto García
Despatx EPS 3.15
QUÈ ÉS UNA DTD?
Una DTD (Document Type Definition) és un conjunt de regles per definir un document XML i etiquetar-lo adequadament.
En una DTD definim els "components" d’un document XML i cóm es relacionen i s’estructuren.
2
XM
L. DTD
QUÈ ÉS UNA DTD?
Crear un DTD (Definició de Tipus de Document), és com crear el nostre propi llenguatge de validació per una aplicació específica
DTD és també un arxiu de text!
DTD conté Tipus d’elements Atributs Entitats Restriccions de combinació i de valors que contindrà el
XML
3
XM
L. DTD
QUÈ ÉS UNA DTD?
Subjectiva: l’abstracció (model) i la forma d’implementar-la depèn de l’autor que la descriu. És possible que per un mateix domini s’elaborin
diferents DTDs.
Una DTD pot residir en un arxiu extern (es pot compartir entre
varis documents XML) estar continguda en el propi document XML (en
aquest cas no es pot compartir).
Quan un document s’ajusta a la seva DTD es diu que aquet document és VÀLID
4
XM
L. DTD
QUÈ ÉS UNA DTD?
Un cop tenim un document XML, el processador sintàctic (aplicació o navegador), pot aplicar una DTD per saber si compleix amb les normes establertes.
No confondre ‘ben format’ amb ‘vàlid’ Ben format = respecta la sintaxi de XML Vàlid = respecta les regles del DTD (i ben format)
El DTD és opcional.
5
XM
L. DTD
QUÈ ÉS UNA DTD?
6
XM
L. DTD
DTD
XML (vàlid)
ERROR!
XML (ben format)
DTD. AVANTATGES
Poden ser publicats o compartits per varies empreses per definir “els seus estàndards”, i així generar un estàndard de verificació. Exemple: estàndard de factura en el sector de
l’automoció.
Un DTD constitueix una mena de contracte o protocol entre ambdues empreses. Un programa emet un XML, i un altre el consumeix,
però validant que compleixi amb el contracte establert.
Moltes empreses estan publicant estàndards de validació, els quals poden ser reutilitzats.
7
XM
L. DTD
TIPUS DE DECLARACIONS
DOCTYPE ELEMENT ATTLIST ENTITY NOTATION
8
XM
L. DTD
DECLARACIÓ
Interna: <!DOCTYPE nom_tipus_doc [declaracions DTD]>
<?xml version="1.0"?> <!DOCTYPE mihtml [ <!ELEMENT mihtml (c1 | parrafo)*> <!ELEMENT c1 (#PCDATA)> <!ELEMENT parrafo (#PCDATA|negrita)*> <!ELEMENT negrita (#PCDATA)> ]> <mithml> ..... </mithml>
9
XM
L. DTD
DECLARACIÓ
Externa privada:
<!DOCTYPE nom_tipus_doc SYSTEM arxiu_dtd>
<!DOCTYPE mihtml SYSTEM "mihtml.dtd"> <mihtml> .... </mihtml>
10
XM
L. DTD
DECLARACIÓ
Externa pública:
<!DOCTYPE nom_de_tipus_de_document PUBLIC [FPI]>
<!DOCTYPE svg PUBLIC “-//W3C//DTD SVG20001102//EN” “http://www.w3.org/TR/CR-SVG-20001102/DTD/svg-20001102.dtd”>
<svg> .... </svg>
Avantatge: La mateixa DTD pot ser utilitzada per múltiples
documents XML, la seva modificació només implicaria realitzar modificacions en un únic arxiu. 11
XM
L. DTD
Tipus//propietari//paraula_clau descripció//idioma
Formal Public Identifier
URL on esta la DTD
DECLARACIÓ
Mixta: La declaració externa de la DTD defineix els elements,
atributs i entitats d’aquest tipus de document La declaració interna algunes característiques pròpies
del document en qüestió que no afecten a la resta.
<!DOCTYPE mihtml SYSTEM "mihtml.dtd" [ <!ENTITY EPS “Escola politècnica Superior“> ]> <mihtml>
<p>&EPS;</p> </mihtml>
12
XM
L. DTD
DECLARACIÓ
Altres utilitats: Afegir nous elements, llistes d’atributs, etc.. Exemple:
Si volem afegir text en cursiva dins de l’element parrafo en un document XML basat en mihtml, i volem que tant sols funcioni en aquest document, redefinirem l’element parrafo i crearem un nou element, cursiva
<!DOCTYPE mihtml SYSTEM "mihtml.dtd" [ <!ELEMENT parrafo (#PCDATA | negrita | cursiva)*> <!ELEMENT cursiva (#PCDATA)>
]> <mihtml> <parrafo>Texto en <cursiva>cursiva</cursiva></parrafo> </mihtml>
13
XM
L. DTD
Mihtml.dtd
<!ELEMENT mihtml (c1 | parrafo)*> <!ELEMENT c1 (#PCDATA)> <!ELEMENT parrafo (#PCDATA | negrita)*> <!ELEMENT negrita (#PCDATA)>
AJUSTANT EL TIPUS D’ELEMENT
Els elements són la base de XML, i haurien d’ajustar-se a un tipus declarat en un DTD
La declaració d’un element en un DTD comença por “<!ELEMENT” seguit pel nom i el seu contingut
En aquesta part de la declaració indiquem quin serà el contingut d’aquest element.
14
XM
L. DTD
<!ELEMENT nom_element (especificació del contingut)>
ESPECIFICACIÓ DEL CONTINGUT
Tenim quatre possibilitats: Que no tingui contingut.
EMPTY dtd: <!ELEMENT br EMPTY> document xml: <br/>
Que estigui format només per text. #PCDATA
dtd: <!ELEMENT negreta (#PCDATA)> document xml: <negreta>text</negreta>
15
XM
L. DTD
ESPECIFICACIÓ DEL CONTINGUT
Que estigui format únicament per elements.
dtd: <!ELEMENT mihtml (c1 | parrafo | imagen)*> document xml: <mihtml> <parrafo>....</parrafo> <parrafo>....</parrafo> </mihtml>
16
XM
L. DTD
ESPECIFICACIÓ DEL CONTINGUT
Que tingui un contingut mixt de text i elements.
dtd: <!ELEMENT parrafo (#PCDATA|negrita)*> document xml: <parrafo>Esto es un <negrita>parrafo</negrita></parrafo> ...però també: <parrafo>Esto es un parrafo</parrafo>
17
XM
L. DTD
EXEMPLE
<!ELEMENT persona (altura, pes)>
<persona> <altura>...</altura> <ColorCabell></ ColorCabell > <pes>...</pes>
</persona>
<persona> <altura>...</altura> <pes>...</pes>
</persona> 18
XM
L. DTD
• Ben Format • NO vàlid
• Ben Format • Vàlid
MODELS DE CONTINGUT
19
XM
L. DTD
Indicadors de freqüència* ? 0 ó 1 cop [0..1] * 0 ó més cops [0…n] + Obligatori [1…n]
Connectors de grup , Tots i en aquest ordre | Només un
* Si no es posa cap indicador de freqüència, [1..1]
EXEMPLE
<!ELEMENT avis (titol?,(paragraf+,grafic)*)>
En aquest cas, <avis> pot tenir <titol> o no (però si en té només en
tindrà un), i pot tenir 0 ó més conjunts del tipus
<paragraf><grafic>, <paragraf><paragraf><grafic>, <paragraf><paragraf><paragraf><grafic>, etc.
20
XM
L. DTD
? [0..1] * [0..n] + [1..n]
EXEMPLE
DTD més document XML Provar la seva valideça
fent diferents variacions: Són vàlides més etiquetes? I més blocs nom, carrer,...? És vàlid canviar l’ordre dels
elements de l’etiqueta? Etc.
Fer servir el XML4J de l’Activitat 1.1
Provar altres DTDs i Docs 21
XM
L. DTD
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE etiqueta[
<!ELEMENT etiqueta (nom, carrer, ciutat, pais, codi)> <!ELEMENT nom (#PCDATA)> <!ELEMENT carrer (#PCDATA)> <!ELEMENT ciutat (#PCDATA)> <!ELEMENT pais (#PCDATA)> <!ELEMENT codi (#PCDATA)>
]> <etiqueta>
<nom>Francesc Rossell Vilaró</nom> <carrer>Portal Sant Jaume, 11-A </carrer> <ciutat>Lleida</ciutat> <pais>Catalunya</pais> <codi>25024</codi>
</etiqueta>
Fitxer “etiqueta.xml” al Campus Virtual
DECLARACIÓ D’ATRIBUTS
Ofereixen informació addicional a un element. Sintaxi
<!ATTLIST nom_elem nom_atrib tipus valor_per_defecte>
Exemple de definició: <!ELEMENT missatge …> <!ATTLIST missatge prioritat (normal | urgent) normal> Exemple d’ús:
<missatge prioritat=“urgent”> ... </missatge>
Per a un mateix element poden definir-se tants atributs com es vulgui.
22
XM
L. DTD
DECLARACIÓ DE LLISTA D’ATRIBUTS
#REQUIRIED és obligatori col·locar un valor en l’atribut
#IMPLIED el valor para aquest atribut és opcional
#FIXED estem fixant el valor de l’atribut i el document no serà
vàlid si a aquest atribut li donem un valor diferent.
23
XM
L. DTD
EXEMPLE
<!ELEMENT missatge (de, a, text)> <!ATTLIST missatge prioritat (normal | urgent) normal> <!ELEMENT text (#PCDATA)> <!ATTLIST text idioma CDATA #REQUIRED>
< missatge prioritat=“normal”> <de>Toni</de> <a>Mark</a> <text idioma=“english”> Hello Mark, how are you?, long time no see!! </text>
<missatge>
24
XM
L. DTD
TIPUS D’ATRIBUTS
CDATA: cadena de caràcters Ex.:
<!ATTLIST missatge data CDATA #REQUIRED> <missatge data=“15 de juliol del 2004”>
NMTOKEN: name token, paraula sense espais NMTOKENS: llista de paraules Només caràcters vàlids per nombrar coses
Lletres, números, punt, guió, subratllat i dos punts
25
XM
L. DTD
TIPUS D’ATRIBUTS
ID: mitjançant aquest tipus d’atribut identifiquem de forma unívoca un element del document XML. El seu valor ha de ser únic en el document. El primer caràcter NO pot ser “:” Exemple: volem identificar de forma unívoca els
elements c1, de manera que siguin fàcilment identificables i referenciables: <!ATTLIST c1id ID #REQUIRED ...>
IDREF/IDREFS: lligat al tipus d’atribut ID. Mitjançant la seva utilització estem indicant que fem
referència al valor d’algun atribut ID.
26
XM
L. DTD
EXEMPLE
<!ELEMENT familia (persona+)> <!ELEMENT persona EMPTY> <!ATTLIST persona personaId ID #REQUIRED fillDe IDREFS #IMPLIED nom CDATA #REQUIRED>
<famila> <persona personaId=“p1” fillDe=“p2 p3” nom=“MARIA”/> <persona personaId=“p2” nom=“Joan”/> <persona personaId=“p3” nom=“Olga”/> </famila>
27
XM
L. DTD
TIPUS D’ATRIBUTS
ENUMERATS: ofereixen la possibilitat d’escollir entre un número reduït de valors definits per l’usuari.
<!ATTLIST imatge alineacio (esquerra, centrat, dreta) "esquerra">
28
XM
L. DTD
VEURE MÉS EXEMPLES
A Sakai, secció “Continguts”: Carpetes: “3a – XML / Activitat 1.2” Fitxer: exemples_DTD_(1).zip
titulosinterno.xml titulos.xml + titulos.dtd productos.xml + productos.dtd
29
XM
L. DTD
DTD. ENTITATS
XML permet organitzar el contingut d’un document XML de forma totalment flexible. Exemple: tenim un llibre en format XML, si volem, podem
organitzar cada capítol en un arxiu diferent.
Aquesta flexibilitat ens la permeten les entitats. Permet dividir el document XML en varis objectes
d’emmagatzemament Unitat d’emmagatzemament que pot contenir qualsevol cosa
cadena de caràcters arxiu gràfic
L’aplicació que hagi de treballar amb aquest document XML tractarà aquest conjunt d’objectes com un únic objecte XML.
30
XM
L. DTD
ENTITATS: AVANTATGES
Faciliten la creació i el manteniment de documents XML
Varies persones poden treballar simultàniament sobre diferents parts d’un document XML.
Fomenten la reutilització: Aquestes entitats poden ser reutilitzades en altres
documents XML.
31
XM
L. DTD
ENTITATS
Declaració: <!ENTITY nom "contingut"> Nom: identificador de l’entitat Contingut: el seu contingut o una referència a ell.
Propietats que defineixen el tipus d’entitats: Segons s’utilitza en la DTD o en el document es
classifica com paramètrica o general. Depenent de si el contingut de l’entitat apareix en la
declaració o no, es classifica com interna o externa. Segons si l’entitat ha de ser analitzada o no pel parser,
es classificarà com analitzada o no analitzada.
32
XM
L. DTD
ENTITAT GENERAL INTERNA ANALITZADA
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE exemple
[<!ENTITY al-ESOFT3 "Alumnes de: ENGINERIA del SOFTWARE III"> ]>
<exemple> Nosaltres som els &al-ESOFT3;.
</exemple >
33
XM
L. DTD
ENTITAT GENERAL EXTERNA ANALITZADA
<!DOCTYPE preferits SYSTEM "preferits.dtd" [ <!-- metainformacio --> <!ENTITY cmeta SYSTEM "cap-meta.xml">
<!-- preferits --> <!ENTITY XML10pt-esp SYSTEM "XML10pesp.xml"> ]>
Exemple complet (preferits3.xml, preferits3b.xml) al fitxer “Exercici_DTDs_amb_Entitats.zip” del Campus Virtual
34
XM
L. DTD
ENTITAT PARÀMETRE
Les entitats que només poden utilitzar-se en la DTD es denominen entitats paràmetre
Aplicable a llistes d’atributs i models de contingut. Ajuden a organitzar les DTD i fer-la més eficient i
consistent Exemple “documents.dtd”:
35
XM
L. DTD
<!ELEMENT contingut (titol, (paragraf | imatge | lds | lor | codi)*,seccio*)>
<!ELEMENT seccio (titol, (paragraf | imatge | lds | lor | codi)*,subseccio*)>
<!ELEMENT subseccio (titol, (paragraf | imatge | lds | lor | codi)*)>
ENTITAT PARÀMETRE INTERNA
Definició: <!ENTITY % nom "contingut">
Crida (ús): %nom;
Aplicar entitats paràmetre a “documents.dtd” del fitxer “Exercici_DTDs.zip” disponible al Campus Virtual per tal d’evitar declaracions repetides.
36
XM
L. DTD
ENTITAT PARAMÈTRE EXTERNA
Definida en un document DTD extern Pot ser utilitzat en varies DTDs
Es defineix un arxiu “.dtd” amb els elements que formaran l’entitat paramètrica externa A pesar de que qualsevol extensió és vàlida, es
preferible posar “.dtd”
Utilització en els arxius dtd: Definició: <!ENTITY % nom SYSTEM “arxiu.dtd"> Crida (ús): %nom;
37
XM
L. DTD
ENTITAT PARAMÈTRE EXTERNA
Què tenen en comú? documents.dtd preferits.dtd articles.dtd
Generar entitat externa per a la seva reutilització Exemple: documents3.dtd i metainformacio.dtd al fitxer
“Exercici_DTDs_amb_Entitats.zip”
38
XM
L. DTD
DTDS EXISTENTS DOCBOOK
DocBook 4.X (http://www.docbook.org/specs/) Documentació tècnica: llibres, articles, etc. Portabilitat: allò que escrivim en format DocBook està
pràcticament disponible en qualsevol format. Utilitzada per la majoria de la documentació actual dels
entorns Linux
DocBook 5.X basat en XML Schema, no DTDs
39
XM
L. DTD
XM
L. DTD
40
MathML (Mathematical Markup Language) http://www.w3.org/TR/MathML2/ Llenguatge XML per marcar equacions matemàtiques
en termes de la seva presentació i de la seva semàntica. Facilitar l’ús i la reutilització de continguts que
requereixen notació matemàtica Suportat per pocs navegadors
Techexplorer o Plug-in per exploradors i ActiveX per aplicacions com Microsoft
PowerPoint o Word. o Permet mostrar TeX, LaTeX i MathML
DTDS EXISTENTS MATHML
EXEMPLE MATHML
41
XM
L. DTD