Vés al contingut

Usuari:Jordibaucells/DTD

De la Viquipèdia, l'enciclopèdia lliure
DTD


Introducció[modifica]

  • Defineix els blocs de construcció vàlids d'un document XML.
  • Declaració interna DOCTYPE
<!DOCTYPE root­element [element­declarations]>
  • Declaració externa DOCTYPE
<!DOCTYPE root­element 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 element­name category>

- Elements Buits:

<!ELEMENT element­name EMPTY>

- Elements només amb “character data” (text):

<!ELEMENT element­name (#PCDATA)>

- Elements amb text i elements "parsejables”

<!ELEMENT element­name ANY>
  • Elements fills
<!ELEMENT element­name (child­element­name)>
<!ELEMENT element­name (child­element­name,child­ element­name,.....)>

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 element­name (child­name)>

– + 1 o més ocurrències:

<!ELEMENT element­name (child­name+)>

– * 0 o més ocurrències:

<!ELEMENT element­name (child­name*)>

– ? 0 ó 1 ocurrència:

<!ELEMENT element­name (child­name?)>

– | 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]

Document programacio_tv.dtd
<?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
Document programacio_tv.xml
<?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>