domingo, 17 de agosto de 2014

Ejercicios XML, DTD Y SCHEMA

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