| Creación de una DTD que valida documentos XML |
| Paso 2: Operativa |
Nota: La síntesis de las palabras clave y la sintaxis de las DTDs la podemos encontrar en Apéndice - Palabras clave y sintaxis de las DTDs
Añadir un elemento 100% mixto
Ampliamos el documento coches.xml añadiendo dos nuevos subelementos oferta que a su vez alberga contenido y dos subelemetos fechaInicio y fechaFin
- un coche puede que no tenga ninguna oferta (como es el caso del Fabia), puede que tenga una oferta o puede que tenga más de una oferta (como es el caso del Avantime)
- el atributo dia
- contiene los siguientes días
- 1 2 3 4 5 10 19 20 21 22 28 29 30 31
- tiene que ser obligatorio
- el atributo mes
- contiene los siguientes meses
- enero febrero marzo junio julio agosto septiembre
- tiene que ser obligatorio
- el atributo año
- contiene los siguientes años
- tiene que ser obligatorio
Nota: En una aplicación profesional tendríamos que incluir todos los días del mes y todos los meses del año.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE coches SYSTEM 'coches.dtd'>
<coches>
<coche>
<marca>Renault</marca>
<modelo categoria="monovolumen">Avantime</modelo>
<motor tipo="gasolina">
<cilindrada unidad="cc">3000</cilindrada>
</motor>
<precio moneda="euros">36060</precio>
<oferta>
Aire acondicionado gratis
<fechaInicio dia="20" mes="junio" año="2006"/>
<fechaFin dia="28" mes="septiembre" año="2006"/>
</oferta>
<oferta>
Descuento del 4%
<fechaInicio dia="29" mes="septiembre" año="2006"/>
<fechaFin dia="19" mes="febrero" año="2007"/>
</oferta>
</coche>
<coche>
<marca>Skoda</marca>
<modelo categoria="berlina">Fabia</modelo>
<motor>
<cilindrada>2000</cilindrada>
</motor>
<precio moneda="euros">15025</precio>
</coche>
</coches> |
Para que un parser pueda validar los cambios que hemos realizado en el documento coches.xml tenemos que modificar el documento coches.dtd teniendo en cuenta la siguiente sintaxis
tipo
- mixto
- es una combinación de elementos secundarios y datos de caracteres
- hay de dos tipos
- elemento de sólo texto
- es el elemento mixto más sencillo, y se declara para que
sólo contenga datos de caracteres
| <!ELEMENT nombreElemento (#PCDATA)> |
- #PCDATA
- se utiliza para indicar que que el elemento contiene datos
de caracteres analizados sintácticamente. Es decir
un parseador interpretará que el simbolo "<" pertenece al principio de una etiqueta
- elemento 100% mixto
- los elementos pueden escribirse sin un orden preestablecido en el documento XML
- no podemos controlar el número de veces que un elemento puede aparecer
- esta última característica hace que este tipo de elemento nos pueda conducir a errores
- por ejemplo no podemos controlar que un elemento aparezca repetido en más de una ocasión o que simplemente no aparezca
- en todos estos casos el parser nunca se queja
- por todo lo expuesto, el uso de este elemento es totalmente desaconsejado
| <!ELEMENT nElement (#PCDATA | elemento1 | elemento2 | ...)*> |
- #PCDATA
- siempre se debe especificar primero en el grupo
- *
- siempre
hay que poner el asterisco, para indicar que todo el grupo
es opcional
Ahora vamos a ampliar el documento coches.dtd
Compara tu código con la solución propuesta