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


A cláusula Redefine

A cláusula “Redefine” assim como a cláusula “Include” reaproveita todas as definições de um esquema externo. A diferença é que a cláusula “Redefine” permite que alterações sejam feitas nas declarações realizadas no esquema externo. Essas alterações incluem a restrições para tipos simples e complexos ou a extensão somente para tipos complexos. O exemplo abaixo demonstra um esquema onde é definido dois tipos: CPF e Funcionario.

Definição dos tipos

<!--Definição do tipo CPF-->
<xsd:simpleType name="tCPF">
 <xsd:restriction base="xsd:string">
 </xsd:restriction>
</xsd:simpleType>

<!--Definição do tipo Funcionário-->
<xsd:complexType name="tFuncionario">
 <xsd:sequence>
  <xsd:element name="Nome" type="xsd:string"/>
  <xsd:element name="DataAdmissao" type="xsd:date"/>
  <xsd:element name="Cargo" type="xsd:string"/>
 </xsd:sequence>
</xsd:complexType>
</xsd:schema>

As definições desse esquema para o tipo tCPF incluem todo o conjunto de strings existentes e para o tipo tFuncionario incluem três elementos: Nome, DataAdmissao e Cargo. O próximo esquema redefine esses elementos restringindo o CPF a uma combinação de dígitos no formato XXX.XXX.XXX-XX e adicionando novos elementos (matricula, CPF, datanascimento e quantidadefilhos).

Redefinição dos tipos

<!-- Importação e redefinição dos tipos no esquema Biblioteca de tipos-->
<xsd:redefine schemaLocation="Tipos.xsd">

 <!-- Reaproveita o tipo tCPF mas força o formato XXX.XXX.XXX-XX-->
 <xsd:simpleType name="tCPF">
  <xsd:restriction base="tCPF">
   <xsd:pattern value="\d{3}\.?\d{3}\.?\d{3}\-?\d{2}"/>
  </xsd:restriction>
 </xsd:simpleType>

 <!-- Reaproveita o tipo tFuncionario dando-lhe novas características-->
 <xsd:complexType name="tFuncionario">
  <xsd:complexContent>
   <xsd:extension base="tFuncionario">
    <xsd:sequence>
  <xsd:element name="matricula" type="xsd:string"/>
  <xsd:element name="CPF" type="tCPF"/>
  <xsd:element name="datanascimento" type="xsd:date"/>
  <xsd:element name="quantidadefilhos" type="xsd:positiveInteger"/>
 </xsd:sequence>
   </xsd:extension>
  </xsd:complexContent>
 </xsd:complexType>

</xsd:redefine>

Um exemplo que pode ser validado por esse esquema é:

<?xml version="1.0"?>
<Funcionarios xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./Redefine.xsd">
    <Funcionario>
        <Nome>string</Nome>
        <DataAdmissao>1999-03-23</DataAdmissao>
        <Cargo>string</Cargo>
        <matricula>string</matricula>
        <CPF>749.028.549-33</CPF>
        <datanascimento>1977-12-21</datanascimento>
        <quantidadefilhos>2</quantidadefilhos>
    </Funcionario>
</Funcionarios>


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