Você está na página 1de 6

DTD (Document Type Definition)

Define la sintaxis admitida para un determinado tipo de documentos XML. Detalla los elementos y atributos vlidos, delimitando as la estructura del documento.
<!DOCTYPE PERIODICO [ <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ATTLIST <!ATTLIST <!ATTLIST <!ATTLIST ]>
Ventajas de la DTD: Cada archivo XML lleva incluida la especificacin de su propio formato Grupos diversos de personas pueden compartir informacin acordando una DTD Los datos recibidos de otra persona o aplicacin se validan fcilmente para detectar posibles errores

PERIODICO (ARTICULO+)> ARTICULO (TITULAR,AUTOR,INTRODUCCION,CUERPO,NOTAS)> TITULAR (#PCDATA)> AUTOR (#PCDATA)> INTRODUCCION (#PCDATA)> CUERPO (#PCDATA)> NOTAS (#PCDATA)> ARTICULOPERIODISTA CDATA #REQUIRED> ARTICULO EDITOR CDATA #IMPLIED> ARTICULOFECHA CDATA #IMPLIED> ARTICULOEDICION CDATA #IMPLIED>

La DTD se puede declarar dentro del archivo XML, o enlazarse en un archivo externo (de forma parecida a lo que ocurra con CSS). Declaracin interna
<!DOCTYPE elementoRaz [declaraciones]>
Ejemplo:

<?xml version="1.0"?> <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>Jaime</to> <from>Ana</from> <heading>Recordatorio</heading> <body>No olvides la cita de este fin de semana</body> </note>

Declaracin externa
<!DOCTYPE elementoRaz SYSTEM "archivo">

Ejemplo:
<?xml version="1.0"?> <!DOCTYPE note SYSTEM "note.dtd"> <note> <to>Jaime</to> <from>Ana</from> <heading>Recordatorio</heading> <body>No olvides la cita de este fin de semana</body> </note>

El archivo note.dtd contendra:


<!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT note (to,from,heading,body)> to (#PCDATA)> from (#PCDATA)> heading (#PCDATA)> body (#PCDATA)>

Elementos
Pueden contener texto, otros elementos, o ser vacos.

<!ELEMENT nombreElemento (contenidoElemento)>

Cuando un elemento puede contener texto u otros elementos, utilizamos PCDATA (parsed character data) para que puedan identificarse elementos dentro del actual.
<!ELEMENT nombreElemento (#PCDATA)> Ejemplo: <!ELEMENT from (#PCDATA)>

Si no queremos que se procese buscando elementos internos, usaremos CDATA. Si no sabemos exactamente qu habr, ponemos ANY, que admite cualquier combinacin de elementos declarados hasta el momento.
<!ELEMENT nombreElemento ANY> <!ELEMENT note ANY>
Cuando un elemento tiene elementos hijos, se expresa as::

<!ELEMENT nombreElemento (hijo1)> <!ELEMENT nombreElemento (hijo1,hijo2,...)> Ejemplo: <!ELEMENT note (to,from,heading,body)>

Si los hijos se expresan separados por comas, el orden debe respetarse:

<!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT <!ELEMENT

note (to,from,heading,body)> to (#PCDATA)> from (#PCDATA)> heading (#PCDATA)> CUERPO (#PCDATA)>

Si queremos permitir mezcla, utilizamos expresiones regulares:


<!ELEMENT note (mensaje)> El elemento mensaje debe aparecer una y slo una vez.

<!ELEMENT note (mensaje+)> El elemento mensaje debe ocurrir al menos una vez.
<!ELEMENT note (mensaje*)> El elemento mensaje puede aparecer cualquier
nmero de veces, o no aparecer.

<!ELEMENT note (mensaje?)> El elemento mensaje puede aparecer una vez o no


aparecer.

<!ELEMENT note (to,from,header,(mensaje|body))> Los elementos to, from y


header son obligatorios. A continuacin debe aparecer o el elemento mensaje o bien el elemento body.

<!ELEMENT note (#PCDATA|to|from|header|mensaje)*> Ahora puede ocurrir


cualquier combinacin en cualquier nmero.

Un caso particular son los elementos vacos:


<!ELEMENT br EMPTY>
Ejemplos de elementos vacos en HTML: "hr", "br", "img".

Atributos La declaracin de atributos se realiza as:


<!ATTLIST nombreElementonombreAtributotipoAtributovalorPorDefecto> Ejemplo de DTD y uso: <!ATTLIST pago type CDATA "cheque"> <pago type="cheque" />
tipoAtributo puede ser muchas cosas, pero nosotros consideraremos CDATA (texto no procesado) y valores fijos, por ejemplo (maana|tarde|noche). valorPorDefecto puede ser: Un valor concreto #REQUIRED: indica que es obligatorio dar un valor #IMPLIED: indica que no es obligatorio #FIXED: indica que tiene que ser exactamente el indicado como valor por defecto Tipos enumerados (valores prefijados, se elige uno de entre varios fijos)

Valores concretos DTD: <!ELEMENT square EMPTY><!ATTLIST square width CDATA "0">

Documento XML vlido: <square width="100" /> Documento XML vlido (se asumir anchura 0): <square /> REQUIRED <!ATTLIST nombreElementonombreAtributotipoAtributo #REQUIRED> Ejemplo, DTD: <!ATTLIST person number CDATA #REQUIRED> Documento XML vlido: <person number="5677" /> Documento XML no vlido: <person /> IMPLIED <!ATTLIST nombreElementonombreAtributotipoAtributo #IMPLIED> Ejemplo, DTD: <!ATTLIST contact fax CDATA #IMPLIED> Documento XML vlido: <contact fax="555-667788" /> Documento XML vlido: <contact />
Usamos IMPLIED cuando no queremos obligar a que aparezca el atributo y tampoco tenemos un valor por defecto que poner.

FIXED <!ATTLIST nombreElementonombreAtributotipoAtributo #FIXED value"> Ejemplo, DTD <!ATTLIST client company CDATA #FIXED "Microsoft"> Documento XML vlido: <client company="Microsoft" /> Documento XML no vlido: <client company="W3Schools" />
El usuario no puede nunca cambiar el valor de este atributo, debe aparecer exactamente as.

Enumerados <!ATTLIST nombreElementonombreAtributo (v1|v2|..)valorPorDefecto> Ejemplo DTD: <!ATTLIST pagoforma (efectivo|tarjeta) "efectivo"> XML Ejemplo: <pago forma="tarjeta" /> <pago forma="efectivo" />
Si no se pone nada, ser efectivo.

Cundo usar atributos y cundo elementos?


<person sex="female"> <firstname>Anna</firstname> <lastname>Smith</lastname> </person> <person> <sex>female</sex> <firstname>Anna</firstname> <lastname>Smith</lastname> </person>
Intentaremos agrupar toda la informacin sobre un elemento en elementos internos, mientras que lametainformacin se reservar para atributos. No hay reglas fijas, y por ejemplo cuando hay valores predefinidos (tarjeta, efectivo) es ms fcil procesar un atributo. Ejempo de metainformacin:

<note id="p501">
Recuerda que un atributo es informacin atmica y por tanto mnima e indivisible. Abusar de atributos genera cdigo difcil de leer y procesar

<note day="12" month="11" year="2002"to="Javier" from="Ana" cabecera="Reminder" cuerpo="No olvides la cita del fin de semana"> </note>

Entidades Son variables que representan un texto o conjunto de caracteres especiales. Se puede declarar de forma interna o externa Declaracin interna: <!ENTITY entity-name "entity-value"> DTD Ejemplo: <!ENTITY autor "Alberto Ruiz">
<!ENTITY copyright "Copyright W3Schools 2012"> XML Ejemplo: <PERIODISTA>&autor;&copyright;</PERIODISTA>

Declaracin externa <!ENTITY entity-name SYSTEM "URI/URL"> Ejemplo DTD: <!ENTITY autor SYSTEM "http://www.w3schools.com/entities.dtd"> <!ENTITY copyright SYSTEM "http://www.w3schools.com/entities.dtd"> XML Ejemplo: <PERIODISTA>&autor;&copyright;</PERIODISTA>

Você também pode gostar