Usuari:Jordibaucells/DTD
Aparença
Introducció
[modifica]- Defineix els blocs de construcció vàlids d'un document XML.
- Declaració interna DOCTYPE
<!DOCTYPE rootelement [elementdeclarations]>
- Declaració externa DOCTYPE
<!DOCTYPE rootelement SYSTEM "filename">
Per què usar un DTD?
[modifica]- Per a que les màquines s'entenguen.
- Els documents XML poden incloure una descripció del seu propi format.
- Grups independents de persones o màquines que poden acordar usar un DTD comú per intercanviar dades.
- Una aplicació pot usar un DTD estàndard per verificar que les dades externes que rep són vàlides.
- Pots utilitzar un DTD per verificar les teves pròpies dades.
Estructura DTD
[modifica]- Elements: formen el bloc principal i pot contenir text, altres elements o res.
<body>body text in between</body> <message></message>
- Atributs: Dins del tag d'inici d'un element aporten informació extra amb parells nombre/valor.
<img src="computer.gif" />
- Entitats: Variables que defineixen text compartit mitjançant referències que es reemplacen al processar el document.
- XML (“parsejar”).
- PCDATA: Parsed Character DATA, text entre els tags que serà parsejat.
- CDATA: Character DATA, text que no es parsejarà.
Declaració d'Elements als DTD
[modifica]- Categories
<!ELEMENT elementname category>
- Elements Buits:
<!ELEMENT elementname EMPTY>
- Elements només amb “character data” (text):
<!ELEMENT elementname (#PCDATA)>
- Elements amb text i elements "parsejables”
<!ELEMENT elementname ANY>
- Elements fills
<!ELEMENT elementname (childelementname)>
<!ELEMENT elementname (childelementname,child elementname,.....)>
Elements amb fills als DTD
[modifica]- És obligatori respectar l'ordre de la seqüència d'elements fills.
- Els elements fills és poden especificar amb modificadors:
– Cap modificador. 1 única ocurrència:
<!ELEMENT elementname (childname)>
– + 1 o més ocurrències:
<!ELEMENT elementname (childname+)>
– * 0 o més ocurrències:
<!ELEMENT elementname (childname*)>
– ? 0 ó 1 ocurrència:
<!ELEMENT elementname (childname?)>
– | Operador OR. Una o altra ocurrència:
<!ELEMENT note (to,from,header,(message|body))>
– () Parèntesis. Contingut mixt:
<!ELEMENT note (#PCDATA|to|from|header|message)*>
Pràctica 1
[modifica]Exemple de DTD (Programació TV)
[modifica]<?xml version="1.0" encoding="UTF-8"?> <!ELEMENT TVSCHEDULE (CHANNEL+)> <!ELEMENT CHANNEL (BANNER,DAY+)> <!ELEMENT BANNER (#PCDATA)> <!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)> <!ELEMENT HOLIDAY (#PCDATA)> <!ELEMENT DATE (#PCDATA)> <!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)> <!ELEMENT TIME (#PCDATA)> <!ELEMENT TITLE (#PCDATA)> <!ELEMENT DESCRIPTION (#PCDATA)> <!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED> <!ATTLIST CHANNEL CHAN CDATA #REQUIRED> <!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED> |No ha d'estar inclòs <!ATTLIST TITLE RATING CDATA #IMPLIED> |No ha d'estar inclòs <!ATTLIST TITLE LANGUAGE CDATA #IMPLIED> |No ha d'estar inclòs
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE TVSCHEDULE SYSTEM "programacio.dtd" > <TVSCHEDULE NAME="Hola"> <CHANNEL CHAN="Primera"> <BANNER></BANNER> <DAY> <DATE>25/10/1989</DATE> <HOLIDAY>Vacaciones</HOLIDAY> <PROGRAMSLOT> <TITLE>Noticias</TITLE> <DESCRIPTION>Las noticias de las 12:00</DESCRIPTION> </PROGRAMSLOT> </DAY> </CHANNEL> </TVSCHEDULE>