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 5 -->
 
Avaliação: | Publicado em: 28/12/2006
Um pouco além do XML: Introdução ao XML Schema (XSD) - Parte 5


A cláusula Unique

A cláusula Unique garante que um determinado nó (ou combinação de nós) seja único dentro de um escopo especificado. O escopo é determinado pelo local onde a cláusula Unique é especificada. A cláusula Unique possui mais dois elementos: selector e field. Esses elementos são necessários na determinação de que elementos devem ser utilizados na restrição.

O esquema logo a seguir define a estrutura de um documento XML que contém um cadastro de pessoas. Nesse cadastro não são permitidas repetições para o elemento CPF.

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

 <!-- Declaração do tipo Empregado-->
 <xsd:complexType name="tEmpregado">
  <xsd:sequence>
   <xsd:element name="Nome" type="xsd:string"/>
   <xsd:element name="CPF" type="xsd:string"/>
  </xsd:sequence>
 </xsd:complexType>

 <xsd:element name="Empregados">
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element name="Empregado" type="tEmpregado" minOccurs="1" maxOccurs="unbounded"/>
   </xsd:sequence>
  </xsd:complexType>

  <!-- Declaração da restrição de CPF único-->
  <xsd:unique name="ucCPF">
   <xsd:selector xpath="Empregado"/>
   <xsd:field xpath="CPF"/>
  </xsd:unique>
 </xsd:element>
</xsd:schema>

O elemento “selector” define o escopo da constraint Unique e o elemento “field” define que campo (ou campos) deve ser único. O valor desses elementos desse ser uma expressão XPath válida. A cláusula Unique aplicada no esquema define que não poderão existir empregados com CPFs repetidos. Dessa forma o documento XML abaixo não é válido, pois, existem CPFs repetidos.

<?xml version="1.0"?>
<Empregados xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./Empregados.xsd">
 <Empregado>
  <Nome>Leila Soares Silva</Nome>
  <CPF>263.124.508-76</CPF>
 </Empregado>
 <Empregado>
  <Nome>Cleison Pereira dos Santos</Nome>
  <CPF>390.170.129-49</CPF>
 </Empregado>
 <Empregado>
  <Nome>Ribamar Garcia Almeida</Nome>
  <CPF>390.170.129-49</CPF>
 </Empregado>
</Empregados>

Se o CPF 390.170.129-49 for substituído por um outro valor, as repetições desaparecerão e o documento passará a ser válido.

<?xml version="1.0"?>
<Empregados xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./Empregados.xsd">
 <Empregado>
  <Nome>Leila Soares Silva</Nome>
  <CPF>263.124.508-76</CPF>
 </Empregado>
 <Empregado>
  <Nome>Cleison Pereira dos Santos</Nome>
  <CPF>328.985.965-95</CPF>
 </Empregado>
 <Empregado>
  <Nome>Ribamar Garcia Almeida</Nome>
  <CPF>390.170.129-49</CPF>
 </Empregado>
</Empregados>

Páginas: « Anterior 1 2 3 4 5 6 Próximo »  Próximo: Key »


Uderson Luis Fermino <uderson@gmail.com>
Cara, agradeço a seu artigo por te me ajudado muito e contribuito para meu maior crescimento.
Excelente o artigo, didático e muito util.
Parabéns pelo exelente artigo!
gostei muito dos artigos. Direto, prático e didático. Parabéns!
Edemilson A. de Almeida <ede_aparecido@yahoo.com.br>
Valeu Gustavo. Este seu artigo sobre XML me ajudou muito no projeto semestral na faculdade, porque você aliou técnica e clareza nele. Parabéns.
Euripedes Borges <euripedesborges@netsite.com.br>
Adorei esse artigo sobre XML, "Um pouco além do XML". Realmente foi muito bom.
O Grande problema de algumas especificações é possuir um vocabulário muito restrito.
Esse tutorial em 5 parte é excelente para quem quer aprender e não entende bem as descrições dadas pela W3C.
Parabéns
Gustavo Dettenborn <gustavodettenborn@gmail.com>
Muito bom o seu artigo cara...
Mas rolou um dúvida devido a pouca experiência com XPath e schema. Pode-se referenciar outro arquivo no selector?
Ex:
<xsd:key name="pkLivro">
<xsd:selector xpath="outroXML:elementoLivro"/>
<xsd:field xpath="@ISBN"/>
</xsd:key>
É possível???
Desde já agradeço...