Ejemplo de esquema

www.altova.com Imprimir este apartado Página anterior Subir un nivel Página siguiente

Inicio >  Guía y referencia del usuario > Generador de código > Generar código fuente a partir de esquemas o DTD > Ejemplo: usar las bibliotecas contenedoras de esquemas >

Ejemplo de esquema

El esquema que se utiliza en este ejemplo describe una biblioteca de libros. Su definición completa aparece más abajo. Si quiere obtener los mismos resultados que se obtienen en esta sección, guarde este fragmento de código como Library.xsd. Este esquema se necesita para generar las bibliotecas de código utilizadas más adelante en esta sección.

 

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.nanonull.com/LibrarySample" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.nanonull.com/LibrarySample" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:element name="Library">
    <xs:complexType>
        <xs:sequence>
          <xs:element name="Book" type="BookType" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="LastUpdated" type="xs:dateTime"/>
    </xs:complexType>
  </xs:element>
  <xs:complexType name="BookType">
    <xs:sequence>
        <xs:element name="Title" type="xs:string"/>
        <xs:element name="Author" type="xs:string" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="ID" type="xs:integer" use="required"/>
    <xs:attribute name="Format" type="BookFormatType" use="required"/>
  </xs:complexType>
  <xs:complexType name="DictionaryType">
    <xs:complexContent>
        <xs:extension base="BookType">
          <xs:sequence>
              <xs:element name="FromLang" type="xs:string"/>
              <xs:element name="ToLang" type="xs:string"/>
          </xs:sequence>
        </xs:extension>
    </xs:complexContent>
  </xs:complexType>
  <xs:simpleType name="BookFormatType">
    <xs:restriction base="xs:string">
        <xs:enumeration value="Hardcover"/>
        <xs:enumeration value="Paperback"/>
        <xs:enumeration value="Audiobook"/>
        <xs:enumeration value="E-book"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

 

Library es un elemento raíz de un complexType cuya representación gráfica aparece a continuación (tomada de la vista Esquema de XMLSpy):

xsd_diagram_Library

Como puede ver, la biblioteca tiene un atributo LastUpdated (definido comos xs:dateTime) y almacena una secuencia de libros. Cada libro es un xs:complexType y tiene dos atributos: ID (definido como xs:integer) y Format. El formato de los libros puede ser tapa dura (hardcover), bolsillo (paperback), audiolibro (audiobook) o libro electrónico (e-book). En el esquema el atributo Format está definido como xs:simpleType que usa una enumeración de los mencionados valores.

 

Además cada libro tiene un elemento Title (definido como xs:string) y como mínimo un elemento Author (definido como xs:string).

 

La biblioteca también puede incluir libros que son diccionarios. Estos tienen el tipo DictionaryType, que se deriva por extensión del tipo BookType. Es decir, un diccionario hereda todos los atributos y elementos de un libro y además toma dos elementos más: FromLang y ToLang (imagen siguiente).

xsd_diagram_DictionaryType

Los elementos FromLang y ToLang almacenan el idioma de partida y de destino del diccionario.

 

Veamos a continuación una instancia XML válida de acuerdo con el esquema anterior (siempre y cuando esté en el mismo directorio que el esquema):

 

<?xml version="1.0" encoding="utf-8"?>
<Library xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.nanonull.com/LibrarySample" xsi:schemaLocation="http://www.nanonull.com/LibrarySample Library.xsd" LastUpdated="2016-02-03T17:10:08.4977404">  
  <Book ID="1" Format="E-book">
    <Title>The XMLSpy Handbook</Title>
    <Author>Altova</Author>    
  </Book>
  <Book ID="2" Format="Paperback" xmlns:n1="http://www.nanonull.com/LibrarySample" xsi:type="n1:DictionaryType">
    <Title>English-German Dictionary</Title>
    <Author>John Doe</Author>
    <FromLang>English</FromLang>
    <ToLang>German</ToLang>
  </Book>
</Library>

 

En el apartado siguiente explicamos cómo leer o escribir en dicho archivo mediante programación. Para empezar es necesario generar el código contenedor del esquema (siguiendo las instrucciones del apartado Generar código a partir de esquemas XML o documentos DTD).

 


© 2019 Altova GmbH