xml schema vânia maria ponte vidal [email protected]

37
XML SCHEMA Vânia Maria Ponte Vidal [email protected]

Upload: internet

Post on 17-Apr-2015

114 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

XML SCHEMA

Vânia Maria Ponte [email protected]

Page 2: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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.

Page 3: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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.

Page 4: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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

Page 5: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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>

Page 6: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

DTD

• Este é um simples DTD chamado catalogo.dtd que define os elementos do documento XML

DTD

<! Catalogo de livros --> <!ELEMENT Livros (Livro)*> <!ELEMENT Livro (Titulo, Autor,ISBN)> <!ELEMENT Titulo (#PCDATA)><!ELEMENT Autor (#PCDATA)><!ELEMENT ISBN (#PCDATA)><!ATTLIST Livro categoria CDATA #REQUIRED)>

Definem os subelementos de Livro

define o elemento livro que tem três elementos: Titulo, Autor, ISBN.

define o elemento Livros que tem uma coleção de Livro

Page 7: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

<?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“ />

<complexType name= “LivrosType“ > <xs:element name= "livro" type= “LivroType“ maxOccurs="*"> </ complexType > <complexType name= “LivroType“ >

< xs:sequence> <xs:element name="titulo" type="xs:string"/> <xs:element name="autor" type="xs:string"/> <xs:element name="ISBN" type="xs:string"/>

<xs:attribute name= "categoria" type="xs:string"> < /xs:sequence>

</complexType></schema> XML Schema -

Exemplo

Declaração do elemento raiz

Definição do tipo LivrosType

Definição do tipo LivroType

Page 8: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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

Page 9: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

XML Schema - Tipos Simples

XML Schema possui 44 tipos predefinidos.

– string – boolean– decimal– float– double– duration– dateTime– time– date

– gYearMonth– gYear– gMonthDay– gDay– gMonth– hexBinary– base64Binary– anyURI– NOTATION

Page 10: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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.

Page 11: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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>

Definindo Tipos Simples

Os valores aceitáveis para um elemento do tipo faseLua são: nova, crescente, cheia, minguante.

Page 12: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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>

Definindo Tipos Simples

O valor dos elementos do tipo idade devem ser maior que zero e menor que cem.

Page 13: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

minInclusive e maxInclusive: especificam os limites inferior e superior para valores numéricos.

Definindo Tipos Simples

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

Page 14: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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.

Page 15: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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.

Page 16: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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"/>

Page 17: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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>

Page 18: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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”/>

Page 19: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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

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

Page 20: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

<element name=“endereco" type=“Tendereco"/>

O tipo definido anteriormente.

Declarando Elemento de Tipo Complexo

<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

Page 21: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

O atributo content define o tipo do conteúdo. Os possíveis valores do atributo content são:

Empty, mixed, elementOnly, textOnly

Atributo content

<complexType name=“Timagem” content= “empty”> <attribute name=“largura” type = “decimal”/> <attribute name=“altura” type = “decimal”/></complexType >

<imagem largura=“10” altura=“20”/>

empty:

Page 22: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

mixed: os elementos podem conter atributos, sub-elementos e textos

Atributo content

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

Page 23: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

elementOnly: os elementos podem conter apenas sub-elementos e atributos ( é o default )

Atributo content

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

Page 24: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

textOnly: o elemento pode conter atributos e texto, mas não sub-elementos.

Atributo content

<codigo pais = “Brasil”>51</codigo>1

<complexType name= “Tcodigo > <simpleContent> <extension base = “integer”> <attribute name = “pais” type=“string”>

</extension> </simpleContent> </complexType>

Page 25: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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

Page 26: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

<all>: especifica que os sub-elementos podem aparecer em qualquer ordem e que cada um deve ocorrer única vez

Restrições de Ordem

<element name= “pessoa”> <complexType> <all> <element name=“nome” type = “string”/> <element name=“sobrenome” type= “string”/> </all> </complexType></element>

Page 27: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

<choice>: especifica que apenas um dos sub-elementos pode ocorrer.

Restrições de Ordem

<element name= “pessoa”> <complexType> <choice> <element name=“empregado” type = “tempregado”/> <element name=“estudante” type= “testudante”/> </choice> </complexType></element>

<choice minOcurrs= “0” maxOccurs= “unbounded”>

Também é possível especificar restrição de ocorrência :

Page 28: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

<sequence>: especifica que os subelementos devem aparecer na mesma ordem em que são declarados e nenhum elemento pode ser omitido.

Restrições de Ordem

<element name= “pessoa”> <complexType>

<sequence>

<element name=“nome” type = “string”/>

<element name=“sobrenome” type= “string”/>

</sequence>

</complexType>

</element>

Page 29: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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>

Page 30: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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

Page 31: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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.

Page 32: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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.

Page 33: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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.

Page 34: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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.

Page 35: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

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

Page 36: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

Restrições de Integridade Exemplo:

<key name=“chave_livro”>

<selector xpath=“livaria/livro”/>

<field xpath=“titulo”/>

<field xpath=“autor”/>

</key>

Identifica unicamente a restrição

expressão de caminho especifica o escopo

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

Page 37: XML SCHEMA Vânia Maria Ponte Vidal vvidal@lia.ufc.br

Restrições de Integridade

Restrição referencial (KEYREF)

<keyref name=“autor refer=“chave_livro”>

<selector xpath=“livaria/autor”/>

<field xpath=“nome”/>

<field xpath=“autor”/>

</keyref>

Nome da restrição

expressão de caminho especifica o escopo dos elementos em que a restrição se aplica.

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.

nome da restrição de chave referenciada