Namespaces 1 Namespaces n n n Dados XML

  • Slides: 57
Download presentation
Namespaces 1

Namespaces 1

Namespaces n n n Dados XML são usados para intercâmbio entre organizações XML permite

Namespaces n n n Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem dos elementos, atributos e tipos. Pode haver uma mesma tag com semântica diferenciada em diferentes organizações, dificultando a troca de informação. n n n Ex. : Documento 1: <veiculo> Palio </veiculo> Documento 2: <veiculo> Jornal da Tarde </veiculo> Usa PI para associar nomes exclusivos a URI Permitem que seja usado um esquema de atribuição de nomes ao longo de um conjunto de documentos 2

Solução n Primeira tentativa <Documento 1: veiculo> Palio </Documento 1: veiculo> n Segunda tentativa

Solução n Primeira tentativa <Documento 1: veiculo> Palio </Documento 1: veiculo> n Segunda tentativa <www. vendas. com. br/agencia: veiculo> Palio </www. vendas. com. br/agencia: veiculo> n Solução final (uso de namespaces) <ag: agencia xmlns: ag=”www. vendas. com. br/agencia”> <ag: veiculo> Palio </ag: veiculo> 3

Examplo de Namespace <html: html xmlns: html=”. . . ” xmlns: math=”. . .

Examplo de Namespace <html: html xmlns: html=”. . . ” xmlns: math=”. . . ”> <html: title> George Soros </html: title> <html: h 2> Counting. . . </html: h 2> <math: reln>. . . </math: reln> </html: html> 4

Namespace default <html xmlns=”. . . ” xmlns: math=”. . . ”> <title> George

Namespace default <html xmlns=”. . . ” xmlns: math=”. . . ”> <title> George Soros </title> <h 2> Contabilidade. . . </h 2> <math: reln>. . . </math: reln> </html> 5

Nome de Atributo com Namespace n n Atributos podem ter namespace Exemplo: <my. Link

Nome de Atributo com Namespace n n Atributos podem ter namespace Exemplo: <my. Link xmlns: xlink=”. . . ” xlink: type=”simple”. . . </my. Link> 6

Exemplo de Namespace para Banco <banco xmlns: FB=‘http: //www. First. Bank. com’> … <FB:

Exemplo de Namespace para Banco <banco xmlns: FB=‘http: //www. First. Bank. com’> … <FB: agencia> <FB: nome>Centro </FB: nome> <FB: cidade>Maceió </FB: cidade> </FB: agencia> … </banco> 7

XML Schema 8

XML Schema 8

XML Schema n n Visa remediar as limitações dos DTDs Schemas são documentos XML

XML Schema n n Visa remediar as limitações dos DTDs Schemas são documentos XML Schemas ainda usam um DTD para serem validados Declaração default: <xs: schema xmlns: xs=“http: //www. w 3. org/2001/XMLSchema” 9

Propósito de XML Schemas n Especificar: n a estrutura de documentos n n “o

Propósito de XML Schemas n Especificar: n a estrutura de documentos n n “o elemento estudante contém os elementos matrícula, endereço, curso, nome, . . . os tipos de dados de cada elemento/atributo n “o elemento idade deve ser inteiro entre 0 e 130” 10

Motivação para XML Schemas n Existe insastifação em usar DTDs: n sintaxe diferente n

Motivação para XML Schemas n Existe insastifação em usar DTDs: n sintaxe diferente n n você escreve seu documento XML usando uma sintaxe e o DTD usando outra sintaxe capacidade limitada de tipos de dados n n DTDs suportam um conjunto muito limitado de tipos de dados. Não podemos dizer “o elemento <salario> deve ser entre 240 e 3000, 00” Desejo de se ter um conjunto de tipos de dados compatíveis com aqueles encontrados nos banco de dados 11

Vantagens de XML Schemas n XML Schemas são mais poderosos que DTDs: n Tipos

Vantagens de XML Schemas n XML Schemas são mais poderosos que DTDs: n Tipos de dados melhor especificado n n n +41 tipos e a capacidade de se criar tipos de dados definidos pelo usuário Escritos em XML (mesma linguagem dos documentos) Podem expressar conjuntos (sets): um elemento filho pode estar em qualquer ordem Podem especificar unicidade (chaves) Uso de técnicas de orientação a objetos 12

n W 3 C XML Schema Recom. define 3 namespaces: n www. w 3.

n W 3 C XML Schema Recom. define 3 namespaces: n www. w 3. org/2001/XMLSchema n n www. w 3. org/2001/XMLSchema-datatypes n n Vocabulário básico: element, attribute, complex. Type, etc. Contém tipos de dados pré-definidos (ex. date, time, etc. ) www. w 3. org/2001/XMLSchema-instance n Contém atributos a serem usados nas instâncias de documentos 13

Basicamente. . . n n Todos os elementos devem ser associados a tipos Os

Basicamente. . . n n Todos os elementos devem ser associados a tipos Os elementos atômicos (folhas da árvore XML) e atributos n Tipos Básicos n n Tipos Simples n n n Definição de tipos primitivos - data, número, string, etc Uso de simple. Type Definição de estruturas simples a partir dos tipos básicos Os elementos compostos n Tipos Complexos n n Uso de complex. Type Definição de estruturas complexas 14

Exemplo: n Conversão do DTD Catalogo. Livros. dtd para XML Schema <!ELEMENT Catalogo. Livros(livro)+>

Exemplo: n Conversão do DTD Catalogo. Livros. dtd para XML Schema <!ELEMENT Catalogo. Livros(livro)+> <!ELEMENT livro(titulo, autor, data, isbn, editora) <!ELEMENT titulo (#PCDATA) <!ELEMENT autor (#PCDATA) <!ELEMENT data (#PCDATA) <!ELEMENT isbn (#PCDATA) <!ELEMENT editora (#PCDATA) 15

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2001/XMLSchema" target.

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2001/XMLSchema" target. Namespace="http: //www. publishing. org" xmlns="http: //www. publishing. org"> <xs: element name="Catalogo. Livros"> <xs: complex. Type> <xs: sequence> <xs: element ref=”livro" min. Occurs=” 1" max. Occurs="unbounded"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: element name=”livro"> <xs: complex. Type> <xs: sequence> <xs: element ref=”titulo" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”autor" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”data" min. Occurs="1" max. Occurs="1"/> <xs: element ref="ISBN" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”editora" min. Occurs="1" max. Occurs="1"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: element name=”titulo" type="xs: string"/> <xs: element name=”autor" type="xs: string"/> <xs: element name=”data" type="xs: string"/> <xs: element name="ISBN" type="xs: string"/> <xs: element name=“editora" type="xs: string"/> </xs: schema> 16

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2001/XMLSchema" target.

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2001/XMLSchema" target. Namespace="http: //www. publishing. org" xmlns="http: //www. publishing. org”> <xs: element name="Catalogo. Livros"> <xs: complex. Type> <xs: sequence> <!ELEMENT Catalogo. Livros (livro)+> <xs: element ref=”livro" min. Occurs=” 1" max. Occurs="unbounded"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: element name=”livro"> <xs: complex. Type> <xs: sequence> <xs: element ref=”titulo" min. Occurs="1" max. Occurs="1"/> <!ELEMENT livro (titulo, autor, data, <xs: element ref=”autor" min. Occurs="1" max. Occurs="1"/> ISBN, editora)> <xs: element ref=”data" min. Occurs="1" max. Occurs="1"/> <xs: element ref="ISBN" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”editora" min. Occurs="1" max. Occurs="1"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: element name=”titulo" type="xs: string"/> <!ELEMENT titulo (#PCDATA)> <xs: element name=”autor" type="xs: string"/> <!ELEMENT autor (#PCDATA)> <xs: element name=”data" type="xs: string"/> <!ELEMENT data (#PCDATA)> <xs: element name="ISBN" type="xs: string"/> <!ELEMENT ISBN (#PCDATA)> <xs: element name=”editora" type="xs: string"/> <!ELEMENT editora (#PCDATA)> </xs: schema> 17

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2001/XMLSchema" target.

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2001/XMLSchema" target. Namespace="http: //www. publishing. org" xmlns="http: //www. publishing. org”> <xs: element name="Catalogo. Livros"> <xs: complex. Type> <xs: sequence> <xs: element ref=”livro" min. Occurs=” 1" max. Occurs="unbounded"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: element name=”livro"> <xs: complex. Type> <xs: sequence> <xs: element ref=”titulo" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”autor" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”data" min. Occurs="1" max. Occurs="1"/> <xs: element ref="ISBN" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”editora" min. Occurs="1" max. Occurs="1"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: element name=”titulo" type="xs: string"/> <xs: element name=”autor" type="xs: string"/> <xs: element name=”data" type="xs: string"/> <xs: element name="ISBN" type="xs: string"/> <xs: element name="editora" type="xs: string"/> </xs: schema> Todos XML Schemas têm "schema" como elemento raiz. . 18

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2001/XMLSchema" target.

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2001/XMLSchema" target. Namespace="http: //www. publishing. org" xmlns="http: //www. publishing. org”> <xs: element name="Catalogo. Livros"> <xs: complex. Type> <xs: sequence> <xs: element ref=”livro" min. Occurs=” 1" max. Occurs="unbounded"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: element name=”livro"> <xs: complex. Type> <xs: sequence> <xs: element ref=”titulo" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”autor" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”data" min. Occurs="1" max. Occurs="1"/> <xs: element ref="ISBN" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”editora" min. Occurs="1" max. Occurs="1"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: element name=”titulo" type="xs: string"/> <xs: element name=”autor" type="xs: string"/> <xs: element name=”data" type="xs: string"/> <xs: element name="ISBN" type="xs: string"/> <xs: element name="editora" type="xs: string"/> </xs: schema> Os elementos que são usados para criar um XML Schema vêm do XMLSchema namespace 19

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2000/10/XMLSchema" target.

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2000/10/XMLSchema" target. Namespace="http: //www. publishing. org” xmlns="http: //www. publishing. org”> <xs: element name="Catalogo. Livros"> <xs: complex. Type> <xs: sequence> <xs: element ref=”livro" min. Occurs="0" max. Occurs="unbounded"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: element name=”livro"> <xs: complex. Type> <xs: sequence> <xs: element ref=”titulo" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”autor" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”data" min. Occurs="1" max. Occurs="1"/> <xs: element ref="ISBN" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”editora" min. Occurs="1" max. Occurs="1"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: element name=”titulo" type="xs: string"/> <xs: element name=”autor" type="xs: string"/> <xs: element name=”data" type="xs: string"/> <xs: element name="ISBN" type="xs: string"/> <xs: element name="editora" type="xs: string"/> </xs: schema> indica que os elementos declarados neste schema (Catalogo. Livros, livro, titulo, autor, data, ISBN, editora) vão para este namespace 20

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2000/10/XMLSchema" target.

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2000/10/XMLSchema" target. Namespace="http: //www. publishing. org” xmlns="http: //www. publishing. org”> <xs: element name="Catalogo. Livros"> <xs: complex. Type> <xs: sequence> <xs: element ref=”livro" min. Occurs="0" max. Occurs="unbounded"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: element name=”livro"> <xs: complex. Type> <xs: sequence> <xs: element ref=”titulo" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”autor" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”data" min. Occurs="1" max. Occurs="1"/> <xs: element ref="ISBN" min. Occurs="1" max. Occurs="1"/> <xs: element ref=”editora" min. Occurs="1" max. Occurs="1"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: element name=”titulo" type="xs: string"/> <xs: element name=”autor" type="xs: string"/> <xs: element name=”data" type="xs: string"/> <xs: element name="ISBN" type="xs: string"/> <xs: element name="editora" type="xs: string"/> </xs: schema> O namespace default é http: //www. publishing. org que é o target. Namespace! Este está referenciando uma declaração de um elemento livro em qual namespace? Uma vez que não há um qualificador de namespace, é uma referência ao elemento livro no namespace default, que é o target. Namespace! 21

Como ligar uma instância XML a um XML Schema? n No elemento raiz do

Como ligar uma instância XML a um XML Schema? n No elemento raiz do documento XML, adicionar os atributos n schema. Location – necessário quando estamos usando um namespace associado ao nosso esquema – valor do atributo é o nome do namespace, um espaço em branco e o caminho para o arquivo XSD n OU n Neste caso, é necessário também declarar o namespace no. Namespace. Schema. Location – quando não usamos namespace – valor do atributo é o caminho para o arquivo XSD 22

Como ligar uma instância XML a um XML Schema? (exemplo) n n schema. Location

Como ligar uma instância XML a um XML Schema? (exemplo) n n schema. Location <report xmlns="http: //www. example. com/Report" xmlns: xsi="http: //www. w 3. org/2001/XMLSchema-instance" xsi: schema. Location="http: //www. example. com/Report. xsd“>. . . </report> no. Namespace. Schema. Location <endereco xmlns: xsi="http: //www. w 3. org/2001/XMLSchema-instance" xsi: no. Namespace. Schema. Location="endereco. xsd">. . . </endereco> 23

Referenciando um schema numa instância de um documento XML <? xml version="1. 0"? >

Referenciando um schema numa instância de um documento XML <? xml version="1. 0"? > <Catalogo. Livros xmlns ="http: //www. publishing. org" xmlns: xsi="http: //www. w 3. org/2001/XMLSchema-instance" xsi: schema. Location="http: //www. publishing. org Catalogo. Livros. xsd"> <livro> <titulo>Meninos de Rua</titulo> <autor>Jorge Amado</autor> <data>julho, 1976 </data> <ISBN>94303 -12021 -43892</ISBN> <editora>Nossos Livros</editora> </livro>. . . </Catalogo. Livros> 24

Valores Default para min. Occurs e max. Occurs O valor default para min. Occurs

Valores Default para min. Occurs e max. Occurs O valor default para min. Occurs é "1" O valor default para max. Occurs é "1" <element ref=”titulo" min. Occurs="1" max. Occurs="1"/> Equivalentes! <element ref=”titulo"/> 25

Esquema alternativo. . . <? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www.

Esquema alternativo. . . <? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2000/10/XMLSchema" target. Namespace="http: //www. publishing. org" xmlns="http: //www. publishing. org”> <xs: element name="Catalogo. Livros"> <xs: complex. Type> <xs: sequence> <xs: element name=”livro" max. Occurs="unbounded"> <xs: complex. Type> <xs: sequence> <xs: element name=”titulo" type="xs: string"/> <xs: element name=”autor" type="xs: string"/> <xs: element name=”data" type="xs: string"/> <xs: element name="ISBN" type="xs: string"/> <xs: element name=”editora" type="xs: string"/> </xs: sequence> </xs: complex. Type> </xs: element> </xs: schema> 26

Um tipo pode ser nomeado <? xml version="1. 0"? > <xs: schema xmlns: xs="http:

Um tipo pode ser nomeado <? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2000/10/XMLSchema" target. Namespace="http: //www. publishing. org" xmlns="http: //www. publishing. org”> <xs: element name="Catalogo. Livros"> <xs: complex. Type> <xs: sequence> <xs: element name=”livro" type="Card. Catalogue. Entry" max. Occurs="unbounded"/> </xs: sequence> </xs: complex. Type> </xs: element> <xs: complex. Type name="Card. Catalogue. Entry"> <xs: sequence> <xs: element name=”titulo" type="xs: string"/> <xs: element name=”autor" type="xs: string"/> <xs: element name=”data" type="xs: string"/> <xs: element name="ISBN" type="xs: string"/> <xs: element name=”editora" type="xs: string"/> </xs: sequence> </xs: complex. Type> </xs: schema> Tipo nomeado 27

Observação <xs: element name="A" type=”ttt"/> <xs: complex. Type name=”ttt"> <xs: sequence> <xs: element name="B"

Observação <xs: element name="A" type=”ttt"/> <xs: complex. Type name=”ttt"> <xs: sequence> <xs: element name="B" …/> <xs: element name="C" …/> </xs: sequence> </xs: complex. Type> Elemento A referencia o complex. Type ttt. é equivalente a <xs: element name="A"> <xs: complex. Type> <xs: sequence> <xs: element name="B" …/> <xs: element name="C" …/> </xs: sequence> </xs: complex. Type> </xs: element> Elemento A tem a definição complex. Type embutida na declaração do elemento. 28

Observação 2 Uma declaração de elemento pode ter um atributo type, ou um complex.

Observação 2 Uma declaração de elemento pode ter um atributo type, ou um complex. Type elemento filho, mas não pode ter ambos. <xs: element name="A" type=”ttt"> <xs: complex. Type> … </xs: complex. Type> </xs: element> 29

Sumário de declaração de Elementos (2 formas) 1 <xs: element name="nome" type="type" min. Occurs="int"

Sumário de declaração de Elementos (2 formas) 1 <xs: element name="nome" type="type" min. Occurs="int" max. Occurs="int"/> Um tipos simples Um inteiro não (ex. . , xs: string) não negativo ou "unbounded" ou o nome de um complex. Type Obs: min. Occurs e max. Occurs podem ser usados apenas em declaração de elementos. 2 <xs: element name="nome" min. Occurs="int" max. Occurs="int"> <xs: complex. Type> … </xs: complex. Type> </xs: element> 30

Problema: Como restringir os tipos? Suponha queremos restringir o elemento ISBN da seguinte forma:

Problema: Como restringir os tipos? Suponha queremos restringir o elemento ISBN da seguinte forma: ddddd-ddddd ou d-ddddd-d ou d-dd-dddddd-d, onde 'd' significa 'digit' <xs: simple. Type name="ISBNType"> <xs: restriction base="xs: string"> <xs: pattern value="d{5}-d{5}"/> <xs: pattern value="d{1}-d{3}-d{5}-d{1}"/> <xs: pattern value="d{1}-d{2}-d{6}-d{1}"/> </xs: restriction> </xs: simple. Type> 31

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2000/10/XMLSchema" target.

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2000/10/XMLSchema" target. Namespace="http: //www. publishing. org” xmlns="http: //www. publishing. org”> <xs: simple. Type name="ISBNType"> <xs: restriction base="xs: string"> <xs: pattern value="d{5}-d{5}"/> <xs: pattern value="d{1}-d{3}-d{5}-d{1}"/> <xs: pattern value="d{1}-d{2}-d{6}-d{1}"/> </xs: restriction> </xs: simple. Type> <xs: element name="Catalogo. Livros"> <xs: complex. Type> <xs: sequence> <xs: element name=”livro" max. Occurs="unbounded"> <xs: complex. Type> <xs: sequence> <xs: element name=”titulo" type="xs: string"/> <xs: element name=”autor" type="xs: string"/> <xs: element name=”data" type="xs: date"/> <xs: element name="ISBN" type="ISBNType"/> <xs: element name=”editora" type="xs: string"/> </xs: sequence> </xs: complex. Type> </xs: element> </xs: schema> 32

<xs: complex. Type> ou <xs: simple. Type>? n n Use o elemento complex. Type

<xs: complex. Type> ou <xs: simple. Type>? n n Use o elemento complex. Type quando quiser definir elementos filhos e/ou atributos de um elemento Use o elemento simple. Type quando precisar criar um novo tipo que é um refinamento de um tipo embutido (string, integer, etc) 33

Criando seus próprios Datatypes n n Um novo datatype pode ser definido de um

Criando seus próprios Datatypes n n Um novo datatype pode ser definido de um datatype existente (chamado tipo "base" ) através da especificação de valores para uma ou mais das facetas opcionais para o tipo base. Exemplo. O tipo primitivo string tem seis facetas opcionais: n n n pattern enumeration length min. Length maxlength whitespace (valores: preserve, replace, collapse) 34

Exemplo de criação de um novo Datatype através da especificação de valores de facetas

Exemplo de criação de um novo Datatype através da especificação de valores de facetas <xs: simple. Type name=”Num. Telefone"> <xs: restriction base="xs: string"> <xs: length value="8"/> <xs: pattern value="d{3}-d{4}"/> </xs: restriction> </xs: simple. Type> 35

Outro Exemplo <xs: simple. Type name=”Cores-Brasil"> <xs: restriction base="xs: string"> <xs: enumeration value=”verde"/> <xs:

Outro Exemplo <xs: simple. Type name=”Cores-Brasil"> <xs: restriction base="xs: string"> <xs: enumeration value=”verde"/> <xs: enumeration value=”amarelo"/> <xs: enumeration value=”azul"/> <xs: enumeration value=”branco"/> </xs: restriction> </xs: simple. Type> Cria um novo tipo chamado Cores-Brasil. Um elemento declarado deste tipo deve ter o valor verde, amarelo, azul ou branco. 36

Facetas do tipo Integer n Facets: n pattern n enumeration n whitespace n max.

Facetas do tipo Integer n Facets: n pattern n enumeration n whitespace n max. Inclusive n max. Exclusive n min. Inclusive n min. Exclusive n precision 37

Exemplo <xs: simple. Type name= "Earth. Surface. Elevation"> <xs: restriction base="xs: integer"> <xs: min.

Exemplo <xs: simple. Type name= "Earth. Surface. Elevation"> <xs: restriction base="xs: integer"> <xs: min. Inclusive value="-1290"/> <xs: max. Inclusive value="29035"/> </xs: restriction> </xs: simple. Type> <xs: element name="elevation" type="Earth. Surface. Elevation"/> Exemplo. Definindo um elemento elevation: <elevation>5240</elevation> 38

Tipos Derivados n Podemos ter uma forma de especializar definições complex. Type. Conhecido como

Tipos Derivados n Podemos ter uma forma de especializar definições complex. Type. Conhecido como "tipos derivados" n n derivar por extensão: estender o complex. Type pai com mais elementos derivar por restrição: restringir o complex. Type pai através da restrição de alguns elementos para ter n n uma faixa de valores mais restrita, ou um número de ocorrências mais restrito. 39

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2000/10/XMLSchema" target.

<? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2000/10/XMLSchema" target. Namespace="http: //www. publishing. org” xmlns="http: //www. publishing. org”> <xs: complex. Type name="Publicacoes"> <xs: sequence> <xs: element name=”titulo" type="xs: string" max. Occurs="unbounded"/> <xs: element name=”autor" type="xs: string" max. Occurs="unbounded"/> <xs: element name=”data" type="xs: date"/> </xs: sequence> </xs: complex. Type> <xs: complex. Type name=”livro"> <xs: complex. Content> <xs: extension base=”Publicacoes" > <xs: sequence> <xs: element name="ISBN" type="xs: string"/> <xs: element name=”editora" type="xs: string"/> </xs: sequence> </xs: extension> </xs: complex. Content> </xs: complex. Type> <xs: element name="Catalogo. Livros"> <xs: complex. Type> <xs: sequence> <xs: element name=”livro" type=”livro" max. Occurs="unbounded"/> </xs: sequence> </xs: complex. Type> </xs: element> </xs: schema> 40

Derivação por Restrição <xs: complex. Type name="Publicacao"> <xs: sequence> <xs: element name=”titulo" type="xs: string"

Derivação por Restrição <xs: complex. Type name="Publicacao"> <xs: sequence> <xs: element name=”titulo" type="xs: string" max. Occurs="unbounded"/> <xs: element name=”autor" type="xs: string" max. Occurs="unbounded"/> <xs: element name=”date" type="xs: year"/> </xs: sequence> </xs: complex. Type> <xs: complex. Type name= "Publicacao. Unico. Autor"> <xs: complex. Content> <xs: restriction base="Publicacao"> <xs: sequence> <xs: element name=”titulo" type="xs: string" max. Occurs="unbounded"/> <xs: element name=”autor" type="xs: string"/> <xs: element name=”data" type="xs: year"/> </xs: sequence> </xs: restriction> </xs: complex. Content> </xs: complex. Type> 41

Proibindo Derivações n n n <xs: complex. Type name="Publicacao" final="#all" …> Publicação não pode

Proibindo Derivações n n n <xs: complex. Type name="Publicacao" final="#all" …> Publicação não pode ser extendida or restringida <xs: complex. Type name="Publicacao" final="restriction" …> Publicacao não pode ser restringida <xs: complex. Type name="Publicação" final="extension" …> Publicação não pode ser extendida 42

Atributos Seja o DTD <!ELEMENT Catalogo. Livros (livro)+> <!ELEMENT livro (titulo, autor+, data, ISBN,

Atributos Seja o DTD <!ELEMENT Catalogo. Livros (livro)+> <!ELEMENT livro (titulo, autor+, data, ISBN, editora)> <!ATTLIST livro Categoria (autobiografia | nao-ficcao | ficcao) #REQUIRED Em. Estoque (true | false) "false" Revisor CDATA " "> <!ELEMENT titulo (#PCDATA)> <!ELEMENT autor (#PCDATA)> <!ELEMENT data (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT editora (#PCDATA)> 43

<xs: element name="Catalogo. Livros"> <xs: complex. Type> <xs: sequence> <xs: element name=”livro" max. Occurs="unbounded">

<xs: element name="Catalogo. Livros"> <xs: complex. Type> <xs: sequence> <xs: element name=”livro" max. Occurs="unbounded"> <xs: complex. Type> <xs: sequence> <xs: element name=”titulo" type="xs: string"/> <xs: element name=”autor" type="xs: string" max. Occurs="unbounded"/> <xs: element name=”data" type="xs: string"/> <xs: element name="ISBN" type="xs: string"/> <xs: element name=”editora" type="xs: string"/> </xs: sequence> <xs: attribute. Group ref="Atributos. Livro"/> </xs: complex. Type> </xs: element> </xs: sequence> </xs: complex. Type> </xs: element> <xs: attribute. Group name="Atributos. Livro"> <xs: attribute name="Categoria" use="required"> Categoria (autobiography | non-fiction | fiction) #REQUIRED <xs: simple. Type> <xs: restriction base="xs: string"> <xs: enumeration value="autobiografia"/> <xs: enumeration value="nao-ficcao"/> <xs: enumeration value="ficcao"/> </xs: restriction> </xs: simple. Type> </xs: attribute> Em. Estoque (true | false) "false" <xs: attribute name=”Em. Estoque" type="xs: boolean" use="default" value="false"/> <xs: attribute name="Revisor" type="xs: string" use="default" value=" "/> Revisor CDATA " " </xs: attribute. Group> 44

Alternativamente. . . <xs: element name=”livro" max. Occurs="unbounded"> <xs: complex. Type> <xs: sequence> <xs:

Alternativamente. . . <xs: element name=”livro" max. Occurs="unbounded"> <xs: complex. Type> <xs: sequence> <xs: element name=”titulo" type="xs: string"/> <xs: element name=”autor" type="xs: string" max. Occurs="unbounded"/> <xs: element name=”data" type="xs: string"/> <xs: element name="ISBN" type="xs: string"/> <xs: element name="editora" type="xs: string"/> </xs: sequence> <xs: attribute name="Categoria" use="required"> <xs: simple. Type> <xs: restriction base="xs: string"> <xs: enumeration value="autobiografia"/> <xs: enumeration value="nao-ficcao"/> <xs: enumeration value="ficcao"/> </xs: restriction> </xs: simple. Type> </xs: attribute> <xs: attribute name=”Em. Estoque" type="xs: boolean" use="default" value="false"/> <xs: attribute name="Revisor" type="xs: string" use="default" value=" "/> </xs: complex. Type> </xs: element> 45

Sumário de Declaração de Atributos (2 formas) 1 <xs: attribute name="nome" type=”tipo-simples" use=”como-usado" value="valor"/>

Sumário de Declaração de Atributos (2 formas) 1 <xs: attribute name="nome" type=”tipo-simples" use=”como-usado" value="valor"/> xs: string xs: integer xs: boolean. . . 2 required default fixed optional prohibited <xs: attribute name="nome" use=”como-usad" value="valor"> <xs: simple. Type> <xs: restriction base=”tipo-simples"> <xs: facet value="valor"/> … </xs: restriction> </xs: simple. Type> </xs: attribute> This attribute is only used with use="default" and use="fixed" 46

Observação sobre Atributos n n A declaração de atributos sempre vem após as declarações

Observação sobre Atributos n n A declaração de atributos sempre vem após as declarações de elementos. Os atributos estão sempre com relação ao elemento que eles estão definidos (nested). <xs: element name=”A"> ”aa e ab são atributos de A" <xs: complex. Type> <xs: sequence> … </xs: sequence> <xs: attribute name=”aa" …/> <xs: attribute name=”ab" …/> </xs: complex. Type> </xs: element> 47

Elementos com Simple Content e Atributos Exemplo. Considere: <elevation units=“metros">5440</elevation> O elemento elevation tem

Elementos com Simple Content e Atributos Exemplo. Considere: <elevation units=“metros">5440</elevation> O elemento elevation tem duas restrições: - um simples (integer) conteúdo - um atributo chamado units Como declarar elevation? 48

Solução <xs: element name="elevation"> <xs: complex. Type> <xs: simple. Content> <xs: extension base="xs: integer">

Solução <xs: element name="elevation"> <xs: complex. Type> <xs: simple. Content> <xs: extension base="xs: integer"> <xs: attribute name="units" type="xs: string" use="required"/> </xs: extension> </xs: simple. Content> </xs: complex. Type> </xs: element> 49

Solução mais completa (constraints) <xs: simple. Type name="elevation. Type"> <xs: restriction base="xs: integer"> <xs:

Solução mais completa (constraints) <xs: simple. Type name="elevation. Type"> <xs: restriction base="xs: integer"> <xs: min. Inclusive value="0"/> <xs: max. Inclusive value="12000"/> </xs: restriction> </xs: simple. Type> <xs: simple. Type name="units. Type"> <xs: restriction base="xs: string"> <xs: enumeration value="feet"/> <xs: enumeration value="meters"/> </xs: restriction> </xs: simple. Type> <xs: element name="elevation"> <xs: complex. Type> <xs: simple. Content> <xs: extension base="elevation. Type"> <xs: attribute name="units" type="units. Type" use="required"/> </xs: extension> </xs: simple. Content> </xs: complex. Type> </xs: element> 50

Expressando Alternativas DTD: XML Schema: <!ELEMENT transporte (trem | aviao | carro)> <? xml

Expressando Alternativas DTD: XML Schema: <!ELEMENT transporte (trem | aviao | carro)> <? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2000/10/XMLSchema" target. Namespace="http: //www. travel. org" xmlns="http: //www. travel. org”> <xs: element name="transporte"> <xs: complex. Type> <xs: choice> <xs: element name="trem" type="xs: string"/> <xs: element name=”aviao" type="xs: string"/> <xs: element name=”carro" type="xs: string"/> </xs: choice> </xs: complex. Type> </xs: element> </xs: schema> 51

Expressando Repetições DTD: XML Schema: <!ELEMENT binary-string (zero | one)*> <? xml version="1. 0"?

Expressando Repetições DTD: XML Schema: <!ELEMENT binary-string (zero | one)*> <? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2000/10/XMLSchema" target. Namespace="http: //www. binary. org" xmlns="http: //www. binary. org”> <xs: element name="binary-string"> <xs: complex. Type> <xs: choice min. Occurs="0" max. Occurs="unbounded"> <xs: element name="zero" type="xs: unsigned. Byte" fixed="0"/> <xs: element name="one" type="xs: unsigned. Byte" fixed="1"/> </xs: choice> </xs: complex. Type> </xs: element> </xs: schema> 52

Expressando Ordem Qualquer <? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w

Expressando Ordem Qualquer <? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2000/10/XMLSchema" target. Namespace="http: //www. publishing. org" xmlns="http: //www. publishing. org”> XML Schema: <xs: element name="Catalogo. Livros"> <xs: complex. Type> <xs: sequence> <xs: element name=”livro" max. Occurs="unbounded"> <xs: complex. Type> Problema: criar um <xs: all> elemento livro, que contenha <xs: element name=”titulo" type="xs: string"/> autor, titulo, data, ISBN, e <xs: element name=”autor" type="xs: string"/> editora, <xs: element name=”data" type="xs: string"/> <xs: element name="ISBN" type="xs: string"/> em qualquer ordem. <xs: element name="editora" type="xs: string"/> </xs: all> </xs: complex. Type> </xs: element> </xs: sequence> </xs: complex. Type> </xs: element> 53

Elemento Vazio <!ELEMENT imagem EMPTY> DTD: <!ATTLIST imagem href CDATA #REQUIRED> Schema: <? xml

Elemento Vazio <!ELEMENT imagem EMPTY> DTD: <!ATTLIST imagem href CDATA #REQUIRED> Schema: <? xml version="1. 0"? > <xs: schema xmlns: xs="http: //www. w 3. org/2000/10/XMLSchema" target. Namespace="http: //www. photography. org" xmlns="http: //www. photography. org”> <xs: element name="galeria"> <xs: complex. Type> <xs: sequence> <xs: element name="imagem" max. Occurs="unbounded"> <xs: complex. Type> <xs: attribute name="href" type="xs: uri. Reference" use="required"/> </xs: complex. Type> </xs: element> </xs: sequence> </xs: complex. Type> </xs: element> </xs: schema> 54

Exemplo de XMLSchema para Banco <xs: schema xmlns: xs=http: //www. w 3. org/2001/XMLSchema> <xs:

Exemplo de XMLSchema para Banco <xs: schema xmlns: xs=http: //www. w 3. org/2001/XMLSchema> <xs: element name=“banco” type=“Bank. Type”/> <xs: element name=“conta”> <xs: complex. Type> <xs: sequence> <xs: element name=“numero. Conta” type=“xs: string”/> <xs: element name=“nome. Agencia” type=“xs: string”/> <xs: element name=“saldo” type=“xs: decimal”/> </xs: sequence> </xs: complex. Type> </xs: element> …. . Definições de cliente e deposito <xs: complex. Type name=“Bank. Type”> <xs: sequence> <xs: element ref=“conta” min. Occurs=“ 0” max. Occurs=“unbounded”/> <xs: element ref=“cliente” min. Occurs=“ 0” max. Occurs=“unbounded”/> <xs: element ref=“deposito” min. Occurs=“ 0” max. Occurs=“unbounded”/> </xs: sequence> </xs: complex. Type> </xs: schema> 55

n Exercício 3: Dado o documento XML crie um XMLSchema para o mesmo <?

n Exercício 3: Dado o documento XML crie um XMLSchema para o mesmo <? xml version='1. 0' ? > <!DOCTYPE livro SYSTEM "livro. dtd"> <livro> <titulo> XML e Java </titulo> <autor> João Silva </autor> <conteudo> <capitulo focus="XML"> Introdução </capitulo> <capitulo focus="XML"> DTD </capitulo> <capitulo focus="XML"> Elementos </capitulo> <capitulo focus="Java"> SAX </capitulo> <capitulo focus="Java"> DOM </capitulo> <conteudo> <bibliografia> bla bla </bibliografia> <copyright> &ufcg. Copyright; </copyright> </livro> 56

Exercício 4 n Compare o DTD do exercício 2 com o XMLSchema do exercício

Exercício 4 n Compare o DTD do exercício 2 com o XMLSchema do exercício 3 e escreva suas conclusões. 57