XML SCHEMA
Vânia Maria Ponte Vidal
[email protected]
XML Schema


Linguagem de esquemas XML prosposta pela
W3C para descrever a estrutura de um
documento XML.
XML Schema define:

Tipo de dados de elementos e atributos

Elementos e atributos contidos no documento;

elementos filhos de um elemento;

A ordem dos elementos filhos;

O número de filhos de um elemento;

Se um elemento é ou não vazio;

Valores fixos e default para elementos e atributos.
XML Schema-Vantagens

Esquemas XML Schema são escritos em XML.

Não é necessário aprender outra lingagem.

Esquemas XML Schema são extensíveis.

XML Schema é mais abrangente que DTD.

XML Schema suporta namespaces.


Pode-se definir vários elementos com mesmo
nome, mas com contextos diferentes.
Reuso de esquemas em outros esquemas.
XML Schema-Vantagens

Pode-se referenciar múltiplos esquemas em um
mesmo documento

Possuem mais de 44 tipos de dados predefinidos;

Suportam criação de tipos definidos pelo usuário;




Suportam criação de tipos de dados derivados de
tipos padrão;
Define restrições e padrões para dados;
Pode-se usar os mesmos editores e parsers para
XML com XML Schema;
Pode-se manipular esquemas com XML DOM
Documento XML - Exemplo
<?xml version = “1.0”?>
<Livros>
<livro categoria =“Informática” >
<titulo>INSIDE XML </titulo>
<autor> Steven Holzner</autor>
<ISBN>0735710201 </ISBN>
</livro>
<livro categoria =“Informática” >
<titulo> XML`S GUIDE </titulo>
<autor>John Cowan </autor>
<ISBN> 0071351248 </ISBN>
</livro>
</Livros>
DTD
• Este é um simples DTD chamado catalogo.dtd que define
os elementos do documento XML
DTD
define o elemento
Livros que tem uma
coleção de Livro
<! Catalogo de livros -->
<!ELEMENT Livros (Livro)*>
define o elemento livro que
tem três elementos: Titulo,
<!ELEMENT Livro (Titulo, Autor,ISBN)>
Autor, ISBN.
<!ELEMENT Titulo (#PCDATA)>
<!ELEMENT Autor (#PCDATA)>
Definem os subelementos de Livro
<!ELEMENT ISBN (#PCDATA)>
<!ATTLIST Livro categoria CDATA #REQUIRED)>
<?Xml version "1.0"?>
<xs:schema xmlns:xs=http://www.w3.org/2000/10/ XMLSchema/>
targetNamespace=“http://www.livros.com” xmlns = “http://www.livros.com”>
<xs:element name= "Livros“ type= “LivrosType“ />
Declaração do
<complexType name= “LivrosType“ >
elemento raiz
<xs:element name= "livro" type= “LivroType“
Definição do tipo
maxOccurs="*">
LivrosType
</ complexType >
<complexType name= “LivroType“ >
< xs:sequence>
<xs:element name="titulo" type="xs:string"/>
Definição do
<xs:element name="autor" type="xs:string"/>
tipo LivroType
<xs:element name="ISBN" type="xs:string"/>
<xs:attribute name= "categoria" type="xs:string">
< /xs:sequence>
</complexType>
</schema>
XML Schema - Exemplo
XML Schema – Tipos

Tipo Simples ( Simple Type ): :



Não podem conter elementos ou atributos
São os tipos básicos como string, date,
float...Como também podem ser tipos definidos
pelo usuário.
Tipo Complexo ( Complex Type ):

Descrevem estruturas complexas, podendo
conter subelementos e atributos
XML Schema - Tipos Simples

XML Schema possui 44 tipos predefinidos.
– string
– gYearMonth
– boolean
– decimal
– float
– double
– duration
– dateTime
– time
– date
– gYear
– gMonthDay
– gDay
– gMonth
– hexBinary
– base64Binary
– anyURI
– NOTATION
Definindo Tipos Simples

Um novo tipo simples pode ser definido a partir de
um tipo simples já existente(tipo base)
especificando restrições (“facetas”) no tipo base.
<simpleType name= “telefone_Ty” base= “string”>
<length value= “8”/>
<pattern value= “\d{3} -\d{4}”/}>
<simpleType>
Elementos do tipo telefone são strings de tamanho 8 que devem
ter o padrão ddd-dddd, onde d reresenta um dígito.
Definindo Tipos Simples

Exemplos de restrições que podem ser usadas
para definir tipos simples:

enumeration: define uma lista de valores aceitáveis.
<simpleType name=“faseLua_ty” base=“string”>
<enumeration value=“nova"/>
<enumeration value=“crescente"/>
<enumeration value=“cheia"/>
<enumeration value=“minguante"/>
</simpleType>
Os valores aceitáveis para um elemento do tipo faseLua são:
nova, crescente, cheia, minguante.
Definindo Tipos Simples

minExclusive, maxExclusive: especificam os
limites inferior e superior para valores numéricos.
<simpleType name=“idade_ty” base=“integer”>
<minExclusive value="0"/>
<maxExclusive value="100"/>
</simpleType>
O valor dos elementos do tipo idade devem ser
maior que zero e menor que cem.
Definindo Tipos Simples

minInclusive e maxInclusive: especificam
os limites inferior e superior para valores
numéricos.
<simpleType name=“idade_ty” base=“integer”>
<minInclusive value="0"/>
<maxInclusive value="100"/>
</simpleType>
O valor dos elementos do tipo idade devem ser maior ou igual
a zero e menor ou igual a cem.
Declarando Elementos de
Tipos Simples

Um elemento de tipo simples pode ser declarado
usando um tipo predefinido ou tipo já definido
anteriormente
<element name=“idade" type=“idade_ty"/>
Se o tipo não for básico, ele deve ser
anteriormente definido.
Declarando Elementos de
Tipos Simples

Um elemento de tipo simples pode ser declarado
usando um tipo anônimo . Um tipo anônimo é
definido na declaração do elemento e só poderá
ser usados na declaração deste elemento.
<element name = “senha ”>
<simpleType>
<restriction base=“string”>
<minLength value=“6"/>
<maxLength value=“8"/>
</restriction>
</simpleType>
</element>
tipos anônimos não podem ser
reusado.
Declarando Atributos


Todos os atributos são de tipos simples. (atributos
não possuem estrutura)
Atributos podem ser decLarados especificando o
nome do atributo e o seu tipo.
<attribute name=“nome" type=“string"/>
Declarando Atributos

Atributos também podem ser declarados definindo
tipos anônimos:
<attribute name = “senha ”>
<simpleType>
<restriction base=“string”>
<minLength value=“6"/>
<maxLength value=“8"/>
</restriction>
</simpleType>
</attribute>
Declarando Atributos

Restrições podem ser definidas usando o atributo use:

required: o atributo é obrigatório e pode ter qualquer valor.
<attribute name=“cor” type=“string” use=“required”/>
optional: o atributo é opcional e pode ter qualquer valor.

<attribute name=“cor” type=“string” use=“optional”/>
fixed: o valor do atributo é fixo.
 <attribute name=“cor” type=“string” use=“fixed”
value=“azul”/>
default: define um valor default.

<attribute name=“cor” type=“string” use=“default”
value=“azul”/>
prohibited: o atributo não deve aparecer.

<attribute name=“cor” type=“string” use=“prohibited”/>





Definindo Tipos Complexos


Tipos complexos são tipos que possuem estrutura,
podendo conter elementos e atributos.
A declaração de um tipo complexo define os subelementos e atributos que compõem a estrutura
do tipo.
<complexType name= “Tendereco” >
<element name=“rua“ type=” string“>
<element name=“cidade “ type=”string “>
<element name=“ estado“ type=”string “>
<attribute name = “ telefone“ type= “ string“>
</complexType>
Declarando Elemento de
Tipo Complexo
<element name=“endereco" type=“Tendereco"/>
O tipo definido anteriormente.
<element name=“endereco" >
<complexType >
<element name=“rua“ type=” string“/>
<element name=“cidade “ type=”string “/>
<element name=“ estado“ type=”string “/>
<attribute name = “ telefone“ type= “ string“/>
</complexType>
<element />
Tipo anônimo
Atributo content


O atributo content define o tipo do conteúdo.
Os possíveis valores do atributo content são:

Empty, mixed, elementOnly, textOnly
empty:
<complexType name=“Timagem” content= “empty”>
<attribute name=“largura” type = “decimal”/>
<attribute name=“altura” type = “decimal”/>
</complexType >
<imagem largura=“10”
altura=“20”/>
Atributo content

mixed: os elementos podem conter atributos,
sub-elementos e textos
<complexType name=“Tpedido" content = “mixed“ >
<element name=“cliente“ type=” string“/>
<element name= “codigoPedido” type=“string”>
<element name=“produto “ type=”string “/>
</complexType>
<pedido>Sr. <cliente>Fernado Costa</cliente> seu pedido de número
<codigoPedido>1027</codigoPedido>do produto
<produto>Livro de XMl </produto>
será enviado do o mais breve possível.
</pedido>
Atributo content

elementOnly: os elementos podem conter apenas
sub-elementos e atributos ( é o default )
<complexType name=“Tendereço“ content=“elemntOnly” >
<element name=“rua“ type=” string“/>
<element name=“cidade “ type=”string “/>
<element name=“ estado“ type=”string “/>
<attribute name = “ telefone“ type= “ string“/>
</complexType>
<endereco telefone= “2672159”>
<rua>Av. Santos Dumont </rua>
<cidade> Fortaleza </cidade>
<estado>CE</estado>
</endereco>
Atributo content

textOnly: o elemento pode conter atributos e
texto, mas não sub-elementos.
<complexType name= “Tcodigo >
<simpleContent>
<extension base = “integer”>
<attribute name = “pais” type=“string”>
</extension>
</simpleContent>
</complexType>
<codigo pais = “Brasil”>51</codigo>1
Restrições de Ocorrência



O número máximo e mínimo de ocorrências de um
elemento é especificado através dos atributos
minOccurs e maxOccurs.
Os atributos minOccurs e maxOccurs podem ser usados
tanto em tipos simples e complexos.
Através do atributo minOccurs podemos determinar se
um elemento é obrigatório ou não:
 minOccurs=0: elemento opcional.
 minOccurs>0: elemento obrigatório.
<element name= “telenofe” type=“string” minOccurs=“1” maxOccurs=“2”>
Restrições de Ordem

<all>: especifica que os sub-elementos
podem aparecer em qualquer ordem e que
cada um deve ocorrer única vez
<element name= “pessoa”>
<complexType>
<all>
<element name=“nome” type = “string”/>
<element name=“sobrenome” type= “string”/>
</all>
</complexType>
</element>
Restrições de Ordem

<choice>: especifica que apenas um dos subelementos pode ocorrer.
<element name= “pessoa”>
<complexType>
<choice>
<element name=“empregado” type = “tempregado”/>
<element name=“estudante” type= “testudante”/>
</choice>
</complexType>
</element>
Também é possível especificar restrição de ocorrência :
<choice minOcurrs= “0” maxOccurs= “unbounded”>
Restrições de Ordem

<sequence>: especifica que os subelementos devem
aparecer na mesma ordem em que são declarados e
nenhum elemento pode ser omitido.
<element name= “pessoa”>
<complexType>
<sequence>
<element name=“nome” type = “string”/>
<element name=“sobrenome” type= “string”/>
</sequence>
</complexType>
</element>
Derivando Tipos Complexos

Derivação por extensão: estende um tipo
complexo adicionando elementos ou atributos.
<complexType
name= “Tendereco” >
<element name=“rua“ type=” string“/>
<element name=“cidade “ type=”string “/>
<element name=“ estado“ type=”string “/>
<attribute name = “ telefone“ type= “ string“/>
</complexType>
<complexType name= “TenderecoCompleto”>
<extension base = “ endereco”>
<element name=“cep” type= “string”/>
</extension base >
</complexType>
Derivando Tipos Complexos

Derivação por restrição: restringe o tipo base
<complexType name= “Tendereco” >
<element name=“rua“ type=” string“/>
<element name=“cidade “ type=”string “/>
<element name=“ estado“ type=”string “ minOccurs =“ 0“ maxOccurs= “1 ”/>
<attribute name = “ telefone“ type= “ string”/>
</complexType>
<complexType name= “TenderecoObrigatorio” >
<restriction base = “ endereco”>
<element name=“rua“ type=” string“/>
<element name=“cidade “ type=”string “/>
<element name=“ estado“ type=”string “ minOccurs =“ 1“ maxOccurs= “1 ”/>
<attribute name = “ telefone“ type= “ string“/>
</restriction>
</complexType>
Derivando Tipos Complexos


Na derivação por restrição todos os atributos e
elementos do tipo base devem ser declarados
no tipo derivado.
A vantagem de derivação por restrição é que o
conteúdo de um elemento do tipo derivado pode
substituir o conteúdo de um elemento do tipo
base. Por exemplo, um elemento do tipo
enderecoObrigatorio pode ser uma instância de um
elemento do tipo endereço.
Restrições de Integridade




XML tem se tornado um formato universal para
representação e troca de informações na WEB.
Em muitas aplicações, os dados XML são gerados
de fontes já existentes ( isto é, relacional,
orientada a objeto, sistemas de arquivos, etc).
XML deve especificar algumas restrições de
integridade sobre os dados para manter as
restrições especificadas nas fontes de origem.
Restrições de integridade são muito importantes
para a especificação da semântica, controle de
consistência, preservação da informação e
integração de fontes de informação.
Restrições de Integridade- DTDs



As restrições de integridade são definidas
pelos atributos ID(identificadores), IDREF e
IDREFS(referenciais).
Os valores de todos os atributos
identificadores têm que ser distintos em todo
o documento.
Não permite especificar o tipo do elemento
referenciado.
Restrições de Integridade –
XML Schema

Mecanismos de restrições de integridade:



Unique
Key- keyref
vantagens:



Podem ser aplicadas tanto em elementos como
em atributos.
Podem ser aplicadas a mais de um elemento
ou atributo.
Permitem limitar o escopo, no qual o valor do
elemento ou do atributo deve ser único, ou o
qual o escopo dos elementos referenciados.
Restrições de Integridade

Unique


XML Schema permite especificar que o valor de
qualquer elemento ou atributo deve ser único
dentro de um determinado escopo (restrição de
unicidade).
Key

XML Schema permite especificar que o valor de
qualquer elemento ou atributo deve ser único e
pode ser referênciado dentro de um determinado
escopo (restrição de unicidade).
Restrições de Integridade

Exemplo:
expressão de caminho
especifica o escopo
Identifica unicamente a restrição
<key name=“chave_livro”>
<selector xpath=“livaria/livro”/>
<field xpath=“titulo”/>
<field xpath=“autor”/>
</key>
expressões de caminho (relativas a cada elemento
selecionado pelo selector) a qual especifica um
elemento mono ocorrência ou atributo
monovalorado, do tipo simples
Restrições de Integridade

Restrição referencial (KEYREF)
nome da restrição de
chave referenciada
Nome da restrição
<keyref name=“autor refer=“chave_livro”>
expressão de caminho
especifica o escopo
dos elementos em que
a restrição se aplica.
<selector xpath=“livaria/autor”/>
<field xpath=“nome”/>
<field xpath=“autor”/>
</keyref>
Expressões de caminho relativas aos elemento selecionado pelo selector.
Cada expressão deve identificar um elemento mono ocorrência ou atributo
monovalorado do tipo simples.
Download

XMLSchema