Transcript
Page 1: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

1

Namespaces

Page 2: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

2

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

Ex.: Documento1: <veiculo> Palio </veiculo> Documento2: <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

Page 3: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

3

Solução

Primeira tentativa

<Documento1:veiculo> Palio </Documento1:veiculo>

Segunda tentativa<www.vendas.com.br/agencia:veiculo>

Palio</www.vendas.com.br/agencia:veiculo>

Solução final (uso de namespaces) <ag:agencia xmlns:ag=”www.vendas.com.br/agencia”>

<ag:veiculo> Palio </ag:veiculo>

Page 4: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

4

Examplo de Namespace

<html:html xmlns:html=”...” xmlns:math=”...”>

<html:title> George Soros </html:title>

<html:h2> Counting ... </html:h2>

<math:reln>

.....

</math:reln>

</html:html>

Page 5: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

5

Namespace default

<html xmlns=”...” xmlns:math=”...”>

<title> George Soros </title>

<h2> Contabilidade ... </h2>

<math:reln>

.....

</math:reln>

</html>

Page 6: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

6

Nome de Atributo com Namespace

Atributos podem ter namespace Exemplo:

<myLink xmlns:xlink=”...”

xlink:type=”simple”

......

</myLink>

Page 7: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

7

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

… <FB:agencia>

<FB:nome>Centro </FB:nome> <FB:cidade>Maceió </FB:cidade>

</FB:agencia>…

</banco>

Page 8: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

8

XML Schema

Page 9: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

9

XML Schema 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.w3.org/2001/XMLSchema”

Page 10: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

10

Propósito de XML Schemas Especificar:

a estrutura de documentos “o elemento estudante contém os elementos matrícula,

endereço, curso, nome, ... os tipos de dados de cada elemento/atributo

“o elemento idade deve ser inteiro entre 0 e 130”

Page 11: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

11

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

sintaxe diferente você escreve seu documento XML usando uma sintaxe

e o DTD usando outra sintaxe capacidade limitada de tipos de dados

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

Page 12: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

12

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

Tipos de dados melhor especificado +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

Page 13: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

13

W3C XML Schema Recom. define 3 namespaces: www.w3.org/2001/XMLSchema

Vocabulário básico: element, attribute, complexType, etc.

www.w3.org/2001/XMLSchema-datatypes Contém tipos de dados pré-definidos (ex.date,

time, etc.) www.w3.org/2001/XMLSchema-instance

Contém atributos a serem usados nas instâncias de documentos

Page 14: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

14

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

Os elementos atômicos (folhas da árvore XML) e atributos

Tipos Básicos Definição de tipos primitivos - data, número, string, etc

Tipos Simples Uso de simpleType Definição de estruturas simples a partir dos tipos básicos

Os elementos compostos Tipos Complexos

Uso de complexType Definição de estruturas complexas

Page 15: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

15

Exemplo: Conversão do DTD CatalogoLivros.dtd para

XML Schema<!ELEMENT CatalogoLivros(livro)+>

<!ELEMENT livro(titulo, autor, data, isbn, editora)

<!ELEMENT titulo (#PCDATA)

<!ELEMENT autor (#PCDATA)

<!ELEMENT data (#PCDATA)

<!ELEMENT isbn (#PCDATA)

<!ELEMENT editora (#PCDATA)

Page 16: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

16

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org"> <xs:element name="CatalogoLivros"> <xs:complexType> <xs:sequence> <xs:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name=”livro"> <xs:complexType> <xs:sequence> <xs:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xs:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xs:element ref=”data" minOccurs="1" maxOccurs="1"/> <xs:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xs:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xs:sequence> </xs:complexType> </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>

Page 17: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

17

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”>

<xs:element name="CatalogoLivros"> <xs:complexType> <xs:sequence> <xs:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name=”livro"> <xs:complexType> <xs:sequence> <xs:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xs:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xs:element ref=”data" minOccurs="1" maxOccurs="1"/> <xs:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xs:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xs:sequence> </xs:complexType> </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>

<!ELEMENT titulo (#PCDATA)><!ELEMENT autor (#PCDATA)><!ELEMENT data (#PCDATA)><!ELEMENT ISBN (#PCDATA)><!ELEMENT editora (#PCDATA)>

<!ELEMENT livro (titulo, autor, data, ISBN, editora)>

<!ELEMENT CatalogoLivros (livro)+>

Page 18: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

18

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xs:element name="CatalogoLivros"> <xs:complexType> <xs:sequence> <xs:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name=”livro"> <xs:complexType> <xs:sequence> <xs:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xs:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xs:element ref=”data" minOccurs="1" maxOccurs="1"/> <xs:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xs:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xs:sequence> </xs:complexType> </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..

Page 19: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

19

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xs:element name="CatalogoLivros"> <xs:complexType> <xs:sequence> <xs:element ref=”livro" minOccurs=”1" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name=”livro"> <xs:complexType> <xs:sequence> <xs:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xs:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xs:element ref=”data" minOccurs="1" maxOccurs="1"/> <xs:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xs:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xs:sequence> </xs:complexType> </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 quesão usados paracriar um XML Schema vêm doXMLSchemanamespace

Page 20: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

20

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”> <xs:element name="CatalogoLivros"> <xs:complexType> <xs:sequence> <xs:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name=”livro"> <xs:complexType> <xs:sequence> <xs:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xs:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xs:element ref=”data" minOccurs="1" maxOccurs="1"/> <xs:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xs:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xs:sequence> </xs:complexType> </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 oselementos declaradosneste schema(CatalogoLivros,livro, titulo, autor, data, ISBN, editora)vão para este namespace

Page 21: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

21

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”> <xs:element name="CatalogoLivros"> <xs:complexType> <xs:sequence> <xs:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name=”livro"> <xs:complexType> <xs:sequence> <xs:element ref=”titulo" minOccurs="1" maxOccurs="1"/> <xs:element ref=”autor" minOccurs="1" maxOccurs="1"/> <xs:element ref=”data" minOccurs="1" maxOccurs="1"/> <xs:element ref="ISBN" minOccurs="1" maxOccurs="1"/> <xs:element ref=”editora" minOccurs="1" maxOccurs="1"/> </xs:sequence> </xs:complexType> </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>

Este está referenciando uma declaração de um elemento livro.livro em qualnamespace? Uma vez quenão há um qualificador de namespace, é umareferência ao elemento livro no namespace default, que é o targetNamespace!

O namespace default éhttp://www.publishing.orgque é o targetNamespace!

Page 22: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

22

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

adicionar os atributos schemaLocation – 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

Neste caso, é necessário também declarar o namespace

OU noNamespaceSchemaLocation – quando

não usamos namespace – valor do atributo é o caminho para o arquivo XSD

Page 23: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

23

Como ligar uma instância XML a um XML Schema? (exemplo) schemaLocation <report xmlns="http://www.example.com/Report" xmlns:xsi="http://www.w3.org/2001/XMLSchema-

instance" xsi:schemaLocation="http://www.example.com/Report http://www.example.com/Report.xsd“> ... </report>

noNamespaceSchemaLocation

<endereco xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:noNamespaceSchemaLocation="endereco.xsd"> ... </endereco>

Page 24: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

24

Referenciando um schema numa instância de um documento XML

<?xml version="1.0"?><CatalogoLivros xmlns ="http://www.publishing.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.publishing.org CatalogoLivros.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> ...</CatalogoLivros>

Page 25: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

25

Valores Default para minOccurs e maxOccurs

O valor default para minOccurs é "1"O valor default para maxOccurs é "1"

<element ref=”titulo" minOccurs="1" maxOccurs="1"/>

<element ref=”titulo"/>

Equivalentes!

Page 26: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

26

Esquema alternativo ...<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xs:element name="CatalogoLivros"> <xs:complexType> <xs:sequence> <xs:element name=”livro" maxOccurs="unbounded"> <xs:complexType> <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:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element></xs:schema>

Page 27: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

27

Um tipo pode ser nomeado

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xs:element name="CatalogoLivros"> <xs:complexType> <xs:sequence> <xs:element name=”livro" type="CardCatalogueEntry" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="CardCatalogueEntry"> <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:complexType></xs:schema>

Tipo nomeado

Page 28: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

28

Observação

<xs:element name="A" type=”ttt"/><xs:complexType name=”ttt"> <xs:sequence> <xs:element name="B" …/> <xs:element name="C" …/> </xs:sequence></xs:complexType>

é equivalente a

<xs:element name="A"> <xs:complexType> <xs:sequence> <xs:element name="B" …/> <xs:element name="C" …/> </xs:sequence> </xs:complexType></xs:element>

Elemento A referencia ocomplexType ttt.

Elemento A tem a definição complexType embutida na declaração do elemento.

Page 29: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

29

Observação 2Uma declaração de elemento pode ter um atributo type, ou um complexType elemento filho, mas não pode ter ambos.

<xs:element name="A" type=”ttt"> <xs:complexType> … </xs:complexType></xs:element>

Page 30: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

30

Sumário de declaração de Elementos (2 formas)

<xs:element name="nome" type="type" minOccurs="int" maxOccurs="int"/>

Um tipos simples (ex.., xs:string)ou o nome deum complexType

<xs:element name="nome" minOccurs="int" maxOccurs="int"> <xs:complexType> … </xs:complexType></xs:element>

1

2

Um inteiro não negativo

Um inteiro nãonegativo ou "unbounded"

Obs: minOccurs e maxOccurs podem ser usadosapenas em declaração de elementos.

Page 31: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

31

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

ddddd-ddddd-ddddd ou d-ddd-ddddd-d ou d-dd-dddddd-d, onde 'd' significa 'digit'

<xs:simpleType name="ISBNType"> <xs:restriction base="xs:string"> <xs:pattern value="\d{5}-\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:simpleType>

Page 32: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

32

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”> <xs:simpleType name="ISBNType"> <xs:restriction base="xs:string"> <xs:pattern value="\d{5}-\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:simpleType> <xs:element name="CatalogoLivros"> <xs:complexType> <xs:sequence> <xs:element name=”livro" maxOccurs="unbounded"> <xs:complexType> <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:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>

Page 33: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

33

<xs:complexType> ou <xs:simpleType>? Use o elemento complexType

quando quiser definir elementos filhos e/ou atributos de um elemento

Use o elemento simpleType quando precisar criar um novo tipo que é um refinamento de um tipo embutido (string, integer, etc)

Page 34: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

34

Criando seus próprios Datatypes

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:

pattern enumeration length minLength maxlength whitespace (valores: preserve, replace, collapse)

Page 35: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

35

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

valores de facetas

<xs:simpleType name=”NumTelefone"> <xs:restriction base="xs:string"> <xs:length value="8"/> <xs:pattern value="\d{3}-\d{4}"/> </xs:restriction></xs:simpleType>

Page 36: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

36

Outro Exemplo

<xs:simpleType 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:simpleType>

Cria um novo tipo chamado Cores-Brasil.Um elemento declarado deste tipo deve tero valor verde, amarelo, azul ou branco.

Page 37: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

37

Facetas do tipo Integer Facets:

pattern enumeration whitespace maxInclusive maxExclusive minInclusive minExclusive precision

Page 38: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

38

Exemplo<xs:simpleType name= "EarthSurfaceElevation"> <xs:restriction base="xs:integer"> <xs:minInclusive value="-1290"/> <xs:maxInclusive value="29035"/> </xs:restriction></xs:simpleType><xs:element name="elevation" type="EarthSurfaceElevation"/>

Exemplo. Definindo um elemento elevation: <elevation>5240</elevation>

Page 39: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

39

Tipos Derivados Podemos ter uma forma de

especializar definições complexType. Conhecido como "tipos derivados" derivar por extensão: estender o

complexType pai com mais elementos derivar por restrição: restringir o

complexType pai através da restrição de alguns elementos para ter

uma faixa de valores mais restrita, ou um número de ocorrências mais restrito.

Page 40: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

40

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org”>

<xs:complexType name="Publicacoes"> <xs:sequence> <xs:element name=”titulo" type="xs:string" maxOccurs="unbounded"/> <xs:element name=”autor" type="xs:string" maxOccurs="unbounded"/> <xs:element name=”data" type="xs:date"/> </xs:sequence> </xs:complexType> <xs:complexType name=”livro"> <xs:complexContent> <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:complexContent> </xs:complexType> <xs:element name="CatalogoLivros"> <xs:complexType> <xs:sequence> <xs:element name=”livro" type=”livro" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element></xs:schema>

Page 41: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

41

Derivação por Restrição<xs:complexType name="Publicacao"> <xs:sequence> <xs:element name=”titulo" type="xs:string" maxOccurs="unbounded"/> <xs:element name=”autor" type="xs:string" maxOccurs="unbounded"/> <xs:element name=”date" type="xs:year"/> </xs:sequence></xs:complexType><xs:complexType name= "PublicacaoUnicoAutor"> <xs:complexContent> <xs:restriction base="Publicacao"> <xs:sequence> <xs:element name=”titulo" type="xs:string" maxOccurs="unbounded"/> <xs:element name=”autor" type="xs:string"/> <xs:element name=”data" type="xs:year"/> </xs:sequence> </xs:restriction> </xs:complexContent></xs:complexType>

Page 42: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

42

Proibindo Derivações <xs:complexType name="Publicacao" final="#all" …>

Publicação não pode ser extendida or restringida

<xs:complexType name="Publicacao" final="restriction" …> Publicacao não pode ser restringida

<xs:complexType name="Publicação" final="extension" …> Publicação não pode ser extendida

Page 43: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

43

Atributos

Seja o DTD<!ELEMENT CatalogoLivros (livro)+><!ELEMENT livro (titulo, autor+, data, ISBN, editora)><!ATTLIST livro Categoria (autobiografia | nao-ficcao | ficcao) #REQUIRED EmEstoque (true | false) "false" Revisor CDATA " "><!ELEMENT titulo (#PCDATA)><!ELEMENT autor (#PCDATA)><!ELEMENT data (#PCDATA)><!ELEMENT ISBN (#PCDATA)><!ELEMENT editora (#PCDATA)>

Page 44: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

44

<xs:element name="CatalogoLivros"> <xs:complexType> <xs:sequence>

<xs:element name=”livro" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name=”titulo" type="xs:string"/> <xs:element name=”autor" type="xs:string" maxOccurs="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:attributeGroup ref="AtributosLivro"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:attributeGroup name="AtributosLivro"> <xs:attribute name="Categoria" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="autobiografia"/> <xs:enumeration value="nao-ficcao"/> <xs:enumeration value="ficcao"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name=”EmEstoque" type="xs:boolean" use="default" value="false"/> <xs:attribute name="Revisor" type="xs:string" use="default" value=" "/> </xs:attributeGroup>

EmEstoque (true | false) "false"

Revisor CDATA " "

Categoria (autobiography | non-fiction | fiction) #REQUIRED

Page 45: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

45

<xs:element name=”livro" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name=”titulo" type="xs:string"/> <xs:element name=”autor" type="xs:string" maxOccurs="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:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="autobiografia"/> <xs:enumeration value="nao-ficcao"/> <xs:enumeration value="ficcao"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name=”EmEstoque" type="xs:boolean" use="default" value="false"/> <xs:attribute name="Revisor" type="xs:string" use="default" value=" "/> </xs:complexType></xs:element>

Alternativamente ...

Page 46: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

46

Sumário de Declaração de Atributos (2 formas)

<xs:attribute name="nome" type=”tipo-simples" use=”como-usado" value="valor"/>

requireddefaultfixedoptionalprohibited

This attribute is onlyused with use="default"and use="fixed"

xs:stringxs:integerxs:boolean...

1

2 <xs:attribute name="nome" use=”como-usad" value="valor"> <xs:simpleType> <xs:restriction base=”tipo-simples"> <xs:facet value="valor"/> … </xs:restriction> </xs:simpleType></xs:attribute>

Page 47: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

47

Observação sobre Atributos 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"> <xs:complexType> <xs:sequence> … </xs:sequence> <xs:attribute name=”aa" …/> <xs:attribute name=”ab" …/> </xs:complexType></xs:element>

”aa e ab sãoatributos de A"

Page 48: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

48

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?

Page 49: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

49

<xs:element name="elevation"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:integer"> <xs:attribute name="units" type="xs:string" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType></xs:element>

Solução

Page 50: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

50

<xs:simpleType name="elevationType"> <xs:restriction base="xs:integer">

<xs:minInclusive value="0"/> <xs:maxInclusive value="12000"/> </xs:restriction></xs:simpleType><xs:simpleType name="unitsType"> <xs:restriction base="xs:string"> <xs:enumeration value="feet"/> <xs:enumeration value="meters"/> </xs:restriction></xs:simpleType><xs:element name="elevation"> <xs:complexType> <xs:simpleContent> <xs:extension base="elevationType"> <xs:attribute name="units" type="unitsType" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element>

Solução mais completa (constraints)

Page 51: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

51

Expressando Alternativas

<!ELEMENT transporte (trem | aviao | carro)>DTD:

XML Schema: <?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.travel.org" xmlns="http://www.travel.org”> <xs:element name="transporte"> <xs:complexType> <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:complexType> </xs:element></xs:schema>

Page 52: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

52

Expressando Repetições

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.binary.org" xmlns="http://www.binary.org”> <xs:element name="binary-string"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="zero" type="xs:unsignedByte" fixed="0"/> <xs:element name="one" type="xs:unsignedByte" fixed="1"/> </xs:choice> </xs:complexType> </xs:element></xs:schema>

<!ELEMENT binary-string (zero | one)*>DTD:

XML Schema:

Page 53: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

53

Expressando Ordem Qualquer

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org”> <xs:element name="CatalogoLivros"> <xs:complexType> <xs:sequence> <xs:element name=”livro" maxOccurs="unbounded"> <xs:complexType> <xs:all> <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:all> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element>

XML Schema:

Problema: criar um elemento livro, que contenha autor, titulo, data, ISBN, e editora, em qualquer ordem.

Page 54: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

54

Elemento Vazio

<?xml version="1.0"?><xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.photography.org" xmlns="http://www.photography.org”> <xs:element name="galeria"> <xs:complexType> <xs:sequence> <xs:element name="imagem" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="href" type="xs:uriReference" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element></xs:schema>

Schema:

<!ELEMENT imagem EMPTY><!ATTLIST imagem href CDATA #REQUIRED>DTD:

Page 55: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

55

Exemplo de XMLSchema para Banco<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema><xs:element name=“banco” type=“BankType”/><xs:element name=“conta”>

<xs:complexType> <xs:sequence> <xs:element name=“numeroConta” type=“xs:string”/> <xs:element name=“nomeAgencia” type=“xs:string”/> <xs:element name=“saldo” type=“xs:decimal”/> </xs:sequence></xs:complexType>

</xs:element>….. Definições de cliente e deposito <xs:complexType name=“BankType”>

<xs:sequence><xs:element ref=“conta” minOccurs=“0”

maxOccurs=“unbounded”/><xs:element ref=“cliente” minOccurs=“0”

maxOccurs=“unbounded”/><xs:element ref=“deposito” minOccurs=“0”

maxOccurs=“unbounded”/></xs:sequence>

</xs:complexType></xs:schema>

Page 56: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

56

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 bla </bibliografia>

<copyright> &ufcgCopyright; </copyright></livro>

Page 57: 1 Namespaces. 2 Dados XML são usados para intercâmbio entre organizações XML permite autores de documentos criarem suas próprias tags, definindo a origem

57

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

o XMLSchema do exercício 3 e escreva suas conclusões.


Recommended