1. Construir el archivo xsd que valide el siguiente documento XML.
•
Los tipos
de datos han de ser los adecuados al tipo de información a almacenar
•
No se
permite el uso del atributo ref
•
Debe
incluir la posibilidad de que existiese un número ilimitado de elementos nota.
•
Los
atributos día y hora son opcionales y num es obligatorio
•
Los
elementos para, de, titulo y contenido pueden aparecer en cualquier orden.
<lista_de_notas>
<nota num="11" dia="2011-02-02"
hora="10:10:10">
<para>José</para>
<de>Ana</de>
<titulo>Cita</titulo>
<contenido>Nos vemos el
sábado a las 15:00</contenido>
</nota>
</lista_de_notas>
NOTAS.XML
<?xml
version="1.0" encoding="UTF-8"?>
<lista_de_notas
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="nota.xsd">
<nota num="11"
dia="2011-02-02" hora="10:10:10">
<para>José</para>
<de>Ana</de>
<titulo>Cita</titulo>
<contenido>Nos vemos el sábado a las
15::00</contenido>
</nota>
</lista_de_notas>
NOTAS.XSD
<?xml
version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="lista_de_notas">
<xs:complexType>
<xs:sequence>
<xs:element
name="nota" maxOccurs="unbounded">
<xs:complexType>
<xs:all>
<xs:element name="para"
type="xs:string"/>
<xs:element
name="de" type="xs:string"/>
<xs:element
name="titulo" type="xs:string"/>
<xs:element
name="contenido" type="xs:string"/>
</xs:all>
<xs:attribute
name="num" type="xs:integer" use="required"/>
<xs:attribute
name="dia" type="xs:date"/>
<xs:attribute name="hora"
type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
2. Crea un DTD interno y otro
externo asociado al siguiente documento XML de forma que sea válido. Comprobar
la buena formación y la validez del documento en ambos casos. Se deben tener en
cuenta las siguientes características:
•
El número
de artículo (n_art) es un valor único por artículo y es obligatorio.
•
La
cantidad del artículo puede no aparecer y su valor no puede contener caracteres
especiales.
•
La unidad
de medida puede no aparecer, pero si lo hace debe tomar el valor "Sistema
Internacional".
•
Un
artículo puede no tener ofertas o disponer de varias.
•
El tipo
de marca puede no aparecer y tomar los valores "nacional" o "internacional".
<?xml version="1.0"
encoding="UTF-8"?>
<supermercado>
<articulo n_art="articulo1"
cantidad="300">
<descripcion>Yogurt</descripcion>
<marca
tipo="nacional">Danone</marca>
<medida unidad="Sistema
Internacional">1 Pack 4</medida>
<seccion>Lacteos</seccion>
</articulo>
<articulo n_art="articulo2">
<descripcion>Queso
fresco</descripcion>
<marca tipo="nacional">Burgo
de Arias</marca>
<medida>250 gr</medida>
<seccion>Lacteos</seccion>
<oferta>Lote descuento</oferta>
<perecedero>
<fabricacion>Febrero de
2014</fabricacion>
</perecedero>
</articulo>
</supermercado>
SUPERMERCADO.XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE supermercado SYSTEM "supermercado.dtd">
<supermercado>
<articulo
n_art="articulo1" cantidad="300">
<descripcion>yogurt</descripcion>
<marca
tipo="nacional">Danone</marca>
<medida unidad="Sistema
Internacional">1 Pack 4</medida>
<seccion>lacteos</seccion>
</articulo>
<articulo
n_art="articulo2">
<descripcion>Queso
fresco</descripcion>
<marca
tipo="nacional">Burgo de Arias</marca>
<medida>250
gr</medida>
<seccion>Lacteos</seccion>
<oferta>Lote
descuento</oferta>
<perecedero>
<fabricacion>Feberero de 2014</fabricacion>
</perecedero>
</articulo>
</supermercado>
SUPERMERCADO-DTD
INTERNO.XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE supermercado [
<!ELEMENT supermercado (articulo+)>
<!ELEMENT articulo (descripcion, marca, medida, seccion, oferta*,
perecedero?)>
<!ATTLIST articulo
n_art ID #REQUIRED
cantidad NMTOKEN
#IMPLIED>
<!ELEMENT descripcion (#PCDATA)>
<!ELEMENT marca (#PCDATA)>
<!ATTLIST marca tipo (nacional|internacional) #IMPLIED>
<!ELEMENT medida (#PCDATA)>
<!ATTLIST medida unidad CDATA #FIXED "Sistema
Internacional">
<!ELEMENT seccion (#PCDATA)>
<!ELEMENT oferta (#PCDATA)>
<!ELEMENT perecedero (fabricacion)>
<!ELEMENT fabricacion (#PCDATA)>
]>
<supermercado>
<articulo
n_art="articulo1" cantidad="300">
<descripcion>yogurt</descripcion>
<marca
tipo="nacional">Danone</marca>
<medida
unidad="Sistema Internacional">1 Pack 4</medida>
<seccion>lacteos</seccion>
</articulo>
<articulo
n_art="articulo2">
<descripcion>Queso
fresco</descripcion>
<marca
tipo="nacional">Burgo de Arias</marca>
<medida>250
gr</medida>
<seccion>Lacteos</seccion>
<oferta>Lote
descuento</oferta>
<perecedero>
<fabricacion>Feberero de 2014</fabricacion>
</perecedero>
</articulo>
</supermercado>
SUPERMERCADO.DTD
<!ELEMENT supermercado (articulo+)>
<!ELEMENT articulo (descripcion, marca, medida, seccion, oferta*,
perecedero?)>
<!ATTLIST articulo
n_art ID #REQUIRED
cantidad NMTOKEN
#IMPLIED>
<!ELEMENT descripcion (#PCDATA)>
<!ELEMENT marca (#PCDATA)>
<!ATTLIST marca tipo (nacional|internacional) #IMPLIED>
<!ELEMENT medida (#PCDATA)>
<!ATTLIST medida unidad CDATA #FIXED "Sistema
Internacional">
<!ELEMENT seccion (#PCDATA)>
<!ELEMENT oferta (#PCDATA)>
<!ELEMENT perecedero (fabricacion)>
<!ELEMENT fabricacion (#PCDATA)>
3. Dado el siguiente
DTD, construye un documento XML válido para el mismo:
<!ELEMENT Libro (Titulo, Seccion,
SubSeccion?, Contenido, Copyright)>
<!ATTLIST Libro Catalogo ID #REQUIRED>
<!ELEMENT Titulo (#PCDATA)>
<!ELEMENT Seccion (#PCDATA)>
<!ELEMENT SubSeccion (#PCDATA)>
<!ELEMENT Contenido
((Capitulo+)|(Capitulo+, Separacion?)+)>
<!ELEMENT Capitulo (Tema+)>
<!ATTLIST Capitulo materia (XML|XHTML)
"XML">
<!ELEMENT Tema (#PCDATA)>
<!ELEMENT Separacion EMPTY>
<!ELEMENT Copyright (#PCDATA)>
LIBRO.XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Libro SYSTEM "libro.dtd">
<Libro Catalogo="A12">
<Titulo>El ojo del golem</Titulo>
<Seccion>Novelas</Seccion>
<SubSeccion>Fantasticas</SubSeccion>
<Contenido>
<Capitulo
materia="XHTML">
<Tema>La
vida</Tema>
</Capitulo>
<Separacion/>
<Capitulo materia="XML">
<Tema>Divertirse</Tema>
<Tema>Correr</Tema>
</Capitulo>
</Contenido>
<Copyright>1990-2000</Copyright>
</Libro>
LIBRO.DTD
<!ELEMENT Libro (Titulo, Seccion, SubSeccion?,Contenido,Copyright)>
<!ATTLIST Libro Catalogo ID #REQUIRED>
<!ELEMENT Titulo (#PCDATA)>
<!ELEMENT Seccion (#PCDATA)>
<!ELEMENT SubSeccion (#PCDATA)>
<!ELEMENT Contenido ((Capitulo+)|(Capitulo+,Separacion?)+)>
<!ELEMENT Capitulo (Tema+)>
<!ATTLIST Capitulo materia (XML|XHTML) "XML">
<!ELEMENT Tema (#PCDATA)>
<!ELEMENT Separacion EMPTY>
<!ELEMENT Copyright (#PCDATA)>
4. Dado el siguiente
XSD construye un documento XML válido para el mismo:
<?xml
version="1.0" encoding="UTF-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element
name="pedido">
<xs:complexType>
<xs:sequence>
<xs:element
name="destino" type="TipoDireccion"/>
<xs:element
name="ordenante" type="TipoDireccion"/>
<xs:element
name="observaciones" type="xs:string"
minOccurs="0"/>
<xs:element
name="contenido">
<xs:complexType>
<xs:sequence>
<xs:element
name="producto" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element
name="nombre" type="xs:string"/>
<xs:element
name="cantidad" type="xs:integer"/>
<xs:element
name="precio" type="xs:decimal"/>
<xs:element
name="observaciones" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute
name="fecha" type="xs:date" use="required"/>
</xs:complexType>
</xs:element>
<xs:complexType
name="TipoDireccion">
<xs:sequence>
<xs:element
name="nombre" type="xs:string"/>
<xs:element
name="direccion" type="xs:string"/>
<xs:element
name="ciudad" type="xs:string"/>
<xs:element
name="codpostal">
<xs:simpleType>
<xs:restriction
base="xs:positiveInteger">
<xs:minInclusive
value="1000"/>
<xs:maxInclusive
value="60000"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
PEDIDO.XML
<?xml version="1.0"
encoding="UTF-8"?>
<pedido fecha="2012-04-07"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="pedido.xsd">
<destino>
<nombre>Pepe</nombre>
<direccion>C/ Falsa 123</direccion>
<ciudad> Sevilla</ciudad>
<codpostal>5000</codpostal>
</destino>
<ordenante>
<nombre>Juan</nombre>
<direccion> C/ plaza mayor 45</direccion>
<ciudad>Barcelona</ciudad>
<codpostal>40430</codpostal>
</ordenante>
<observaciones>pedido urgente</observaciones>
<contenido>
<producto>
<nombre>patatas</nombre>
<cantidad>80</cantidad>
<precio>100</precio>
<observaciones>recien recogidas</observaciones>
</producto>
<producto>
<nombre>manzanas</nombre>
<cantidad>80</cantidad>
<precio>100</precio>
</producto>
</contenido>
</pedido>
No hay comentarios:
Publicar un comentario