Conheça também: Onmasters . Ofertas . Divulgue! . Vai.la . Geraboleto . Baixa.la . Assista.la . Joga.la
» Início » Programação » XML » Um pouco além do XML: Introdução ao XML Schema (XSD) - Parte 4 -->
 
Avaliação: | Publicado em: 27/12/2006
Um pouco além do XML: Introdução ao XML Schema (XSD) - Parte 4


Reutilização de esquemas

Até o momento, foi demonstrado como reaproveitar estruturas de tipos dentro de um mesmo esquema, mais propriamente um arquivo XSD. Um sofisticado esquema de validação, no entanto, pode envolver diversos arquivos. Para evitar a repetição de código e prover a reutilização, o XML Schema permite que reaproveitamentos sejam realizados mesmo entre arquivos diferentes.

A cláusula Include

A cláusula “Include” no XML Schema é muito semelhante à cláusula "Include" na linguagem HTML (não é de se estranhar, pois, ambas são definidas pelo mesmo comitê, o W3C). O que cláusula “Include” faz é incluir na definição de um esquema  todas as definições de um outro esquema. No exemplo abaixo existem dois esquemas. O primeiro esquema define três tipos de presentes: livro, CD ou perfume. O segundo esquema reaproveita a definição do primeiro esquema.

Definição de tipos

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

 <!-- Definição do tipo Livro-->
 <xsd:complexType name="tLivro">
  <xsd:sequence>
   <xsd:element name="Nome" type="xsd:string"/>
   <xsd:element name="ISBN" type="xsd:string"/>
   <xsd:element name="Editora" type="xsd:string"/>
  </xsd:sequence>
 </xsd:complexType>

 <!-- Definição do tipo CD-->
 <xsd:complexType name="tCD">
  <xsd:sequence>
   <xsd:element name="Nome" type="xsd:string"/>
   <xsd:element name="Gravadora" type="xsd:string"/>
   <xsd:element name="Ano" type="xsd:gYear"/>
   <xsd:element name="QuantidadeFaixas" type="xsd:positiveInteger"/>
  </xsd:sequence>
 </xsd:complexType>

<!-- Definição do tipo Perfume-->
<xsd:complexType name="tPerfume">
 <xsd:sequence>
  <xsd:element name="Nome" type="xsd:string"/>
  <xsd:element name="Fragancia" type="xsd:string"/>
  <xsd:element name="Marca" type="xsd:string"/>
  <xsd:element name="QuantidadeMl" type="xsd:positiveInteger"/>
 </xsd:sequence>
</xsd:complexType>

</xsd:schema>

Utilização dos tipos em um novo esquema

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<!-- Importação das definições de tipos de presente-->
<xsd:include schemaLocation="./TiposPresentes.xsd"/>
 <xsd:complexType name="tPresente">
  <xsd:choice>
   <xsd:element name="Livro" type="tLivro"/>
   <xsd:element name="CD" type="tCD"/>
   <xsd:element name="Perfume" type="tPerfume"/>
  </xsd:choice>
 </xsd:complexType>

<xsd:element name="Presentes">
 <xsd:complexType>
  <xsd:sequence>
   <xsd:element name="Presente" type="tPresente" minOccurs="1" maxOccurs="unbounded"/>
  </xsd:sequence>
 </xsd:complexType>
</xsd:element>

</xsd:schema>

O documento XML abaixo pode ser validado por esse esquema.

<?xml version="1.0"?>
<Presentes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./Presentes.xsd">
 <Presente>
  <CD>
   <Nome>Legiao Urbana</Nome>
   <Gravadora>EMI</Gravadora>
   <Ano>1996</Ano>
   <QuantidadeFaixas>11</QuantidadeFaixas>
  </CD>
 </Presente>
 <Presente>
  <Livro>
   <Nome>O Monge e o Executivo</Nome>
   <ISBN>8575421026</ISBN>
   <Editora>Sextante</Editora>
  </Livro>
 </Presente>
 <Presente>
  <Perfume>
   <Nome>Hugo Pure Purple Eau de Toilette Feminino</Nome>
   <Fragancia>Floral Oriental</Fragancia>
   <Marca>Hugo Boss</Marca>
   <QuantidadeMl>50</QuantidadeMl>
  </Perfume>
 </Presente>
</Presentes>

Observe que foi necessário adicionar apenas um único esquema para realizar a validação do documento XML. O primeiro esquema, que define os tipos Livro, CD e Perfume, não necessita (e nem pode) ser referenciado. Ele já está referenciado no segundo esquema que é suficiente para validar o documento XML.


Parabens!!!
Parabéns pelo material!!! Muito prático e didático!
Tiru 80% das minhas dúvidas
Ricardo
Muito bom o artigo!!
Muito bom. Aproveito para tirar uma dúvida. Existe alguma ferramenta que faça o mapeamento (um export) de um modelo de dados para XSD? Um abraço