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 Key

Em termos práticos, uma chave primária e uma constraint Unique têm o mesmo efeito: a garantia da não existência de valores repetidos. A chave primária, no entanto, tem também outras atribuições. Além de impedir registros duplicados, ela funciona como um identificador. Dessa forma uma chave primária nunca pode ser nula enquanto uma constraint Unique pode. De forma análoga, no XML Schema se a cláusula Key for utilizada, o elemento (ou elementos) considerado não poderá ser opcional e nem declarado como nulo. Assim como a cláusula Unique, a cláusula Key também necessita dos elementos “selector” e “field”. O funcionamento desses elementos é idêntico em ambas as cláusulas. O esquema abaixo é utilizado para validação de documentos XML contendo informações de livros.

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

 <!-- Declaração do tipo Livro-->
 <xsd:complexType name="tLivro">
  <xsd:sequence>
   <xsd:element name="Nome" type="xsd:string"/>
   <xsd:element name="Paginas" type="xsd:positiveInteger"/>
  </xsd:sequence>
  <xsd:attribute name="ISBN" type="xsd:string" use="required"/>
  <xsd:attribute name="Ano" type="xsd:positiveInteger" use="required"/>
 </xsd:complexType>

 <xsd:element name="Livros">
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element name="Livro" type="tLivro" minOccurs="1" maxOccurs="unbounded"/>
   </xsd:sequence>
  </xsd:complexType>

  <!-- Declaração da unicidade e da obrigatoriedade do ISBN-->
  <xsd:key name="pkLivro">
   <xsd:selector xpath="Livro"/>
   <xsd:field xpath="@ISBN"/>
  </xsd:key>
 </xsd:element>
</xsd:schema>

Nesse esquema, o atributo ISBN do elemento livro não permite repetições. O atributo precisa ser declarado como requerido para que a cláusula Key possa ser utilizada. O elemento “selector” define o escopo da chave e o elemento “field” define que campo (ou campos) deve ser identificador. A cláusula Key aplicada no esquema define que não poderão existir livros com ISBN repetido e que todos os livros devem possuir ISBN. O documento XML abaixo é válido segundo o esquema especificado.

<?xml version="1.0"?>
<Livros xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./Livros.xsd">
 <Livro ISBN="8535210695" Ano="2002">
  <Nome>Arquitetura de Sistemas com Xml</Nome>
  <Paginas>464</Paginas>
 </Livro>
 <Livro ISBN="8535207740" Ano="2001">
  <Nome>Desvendando Xml</Nome>
  <Paginas>880</Paginas>
 </Livro>
 <Livro ISBN="8535213562" Ano="2004">
  <Nome>Modelagem de Objetos de Negócio com Xml</Nome>
  <Paginas>350</Paginas>
 </Livro>
</Livros>

Se uma mudança no ISBN provocar repetições, ou o mesmo não for especificado um erro será gerado. O documento XML abaixo, por apresentar essas falhas, não é considerado válido.

<?xml version="1.0"?>
<Livros xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="./Livros.xsd">
 <Livro Ano="2002">
  <Nome>Arquitetura de Sistemas com Xml</Nome>
  <Paginas>464</Paginas>
 </Livro>
 <Livro ISBN="8535207740" Ano="2001">
  <Nome>Desvendando Xml</Nome>
  <Paginas>880</Paginas>
 </Livro>
 <Livro ISBN="8535207740" Ano="2004">
  <Nome>Modelagem de Objetos de Negócio com Xml</Nome>
  <Paginas>350</Paginas>
 </Livro>
</Livros>


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