3 mar 2015

posible solucion

Enunciado

Construir un esquema XML para la siguiente DTD:
<!ELEMENT Libro (Titulo, Contenido, Copyright)>
<!ATTLIST Libro 
  xmlns CDATA #REQUIRED
>
<!ELEMENT Titulo (#PCDATA)>
<!ELEMENT Contenido ((Capitulo+, Separacion?)+)>
<!ELEMENT Capitulo (Tema, Seccion+)>
<!ATTLIST Capitulo
      materia (XML|Java) "Java"
>
<!ELEMENT Tema (#PCDATA)>
<!ELEMENT Seccion (#PCDATA)>
<!ATTLIST Seccion
      apartados CDATA #REQUIRED
      dificil (si|no) "no"
>
<!ELEMENT Separacion EMPTY>
<!ELEMENT Copyright (#PCDATA)>
y probarlo con este documento:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>

<!DOCTYPE Libro [
<!ENTITY OReillyCopyright SYSTEM "copyright.txt">
]>

<Libro xmlns="http://www.mislibros.com/libros/javaxml"
       xmlns:Catalogo="http://www.mislibros.com/catalogo"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.mislibros.com/libros/javaxml libro.xsd">

 <Titulo>Java y XML</Titulo>
 <Contenido>

  <Capitulo materia="XML">
   <Tema>Introducción</Tema>
   <Seccion apartados="7">Qué es</Seccion>
   <Seccion apartados="3">Cómo se usa</Seccion>
  </Capitulo>

  <Capitulo materia="XML">
   <Tema>Creando XML</Tema>
   <Seccion apartados="0">Un documento XML</Seccion>
   <Seccion apartados="2">La cabecera</Seccion>
   <Seccion apartados="6">El contenido</Seccion>
  </Capitulo>

  <Capitulo>
   <Tema>Analizando XML</Tema>
   <Seccion apartados="3">Preparación</Seccion>
   <Seccion apartados="3" dificil="true">SAX</Seccion>
   <Seccion apartados="9" dificil="true">Manejadores</Seccion>
   <Seccion apartados="0">Una forma mejor de cargar el analizador</Seccion>
  </Capitulo>

  <Separacion/>

  <Capitulo materia="Java">
   <Tema>JDOM</Tema>
   <Seccion apartados="2">Introducción</Seccion>
   <Seccion apartados="4" dificil="true">DOM&amp;JDOM</Seccion>
  </Capitulo>
  
 </Contenido>

 <Copyright>&OReillyCopyright;</Copyright>
 
</Libro>

. Solución


<?xml version="1.0"?>
<xs:schema  xmlns:xs="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.mislibros.com/libros/javaxml"
            xmlns="http://www.mislibros.com/libros/javaxml"
            elementFormDefault="qualified">

<xs:element name="Libro" type="TipoLibro"/>

<xs:complexType name="TipoLibro">
  <xs:sequence>
    <xs:element name="Titulo" type="xs:string"/>
    <xs:element name="Contenido" type="TipoContenido"/>
    <xs:element name="Copyright" type="xs:string"/>    
  </xs:sequence>
</xs:complexType>

<xs:complexType name="TipoContenido">
  <xs:sequence maxOccurs="unbounded">
    <xs:element name="Capitulo" type="TipoCapitulo" maxOccurs="unbounded"/>
    <xs:element name="Separacion" type="TipoVacio" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>

<xs:complexType name="TipoCapitulo">
  <xs:sequence>
    <xs:element name="Tema" type="xs:string"/>
    <xs:element name="Seccion" type="TipoSeccion" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute name="materia" type="TipoMateria" default="Java"/>
</xs:complexType>

<xs:complexType name="TipoSeccion">
  <xs:simpleContent>
    <xs:extension base="xs:string">
      <xs:attribute name="apartados" type="xs:nonNegativeInteger" use="required"/>
      <xs:attribute name="dificil" type="xs:boolean" default="false"/>      
    </xs:extension>
  </xs:simpleContent>
</xs:complexType>

<xs:simpleType name="TipoMateria">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Java"/>
    <xs:enumeration value="XML"/>
  </xs:restriction>
</xs:simpleType>

<xs:complexType name="TipoVacio"/>

</xs:schema>

No hay comentarios:

Publicar un comentario