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&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