Namespaces 1 Namespaces n n n Dados XML
- Slides: 57
Namespaces 1
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 <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=”. . . ”> <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 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 xmlns: xlink=”. . . ” xlink: type=”simple”. . . </my. Link> 6
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 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 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 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 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. 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 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)+> <!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. 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. 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. 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. 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. 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. 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 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 <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"? > <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 é "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. 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: //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" …/> <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. 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" 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: 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. 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 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 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 <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: 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. 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. 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 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. 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" 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 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, 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: 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: 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"/> 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 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 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"> <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: 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 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"? > <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 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 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: 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 <? 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 3 e escreva suas conclusões. 57
- Série estatística geográfica
- Dependencia funcional banco de dados
- Banco de dados
- Tabela de recursos humanos
- Diagrama de fluxo de dados
- 6 8 10 12 14
- Simbologia switch
- Estrutura de dados
- Tipos de dados firebird
- Modelagem de dados
- Os dados x e y que faltam no quadro são
- Espacio muestral de 2 dados
- Os dados x e y que faltam no quadro são
- Korth silberschatz e sudarshan (2012) descrevem que na
- Tad tipo abstrato de dados
- Estrutura de dados
- Mer banco de dados
- Final inesperado de dados asn1
- Dados indicação operação
- Inequações com parenteses
- Integridade referencial de dados
- Sigsif base de dados
- Jose paulo e antonio estao jogando dados
- Banco de dados
- Uel as bolsas termicas consistem
- Uml banco de dados
- Dados referenciais
- Modelagem de dados
- Pedestal cimentacion
- Traduc7
- Reunião e intersecção de intervalos
- Análise multivariada de dados hair
- Interface de dados
- Analise de dados
- Quais dados
- Ciclonal e anticiclonal
- Quartis
- Estatística dados agrupados
- Banco de itens
- Ef05ma
- Qualitativo e quantitativo
- Banco de dados ii
- Estrutura de dados
- Arquitetura paralela banco de dados
- Uno de los jovenes ha decidido mostrar a sus compañeros
- Calculo da mediana
- Slidetodoc.com
- Banco de dados
- Tipos de estrutura de dados
- Tradutor de brainfuck
- Interface de dados
- Forma normal banco de dados
- Jose paulo e antonio estao jogando dados
- Tipos de intervalos
- Banco de dados e sistemas de informações de rh
- O que é olap
- Tupla banco de dados
- Estrutura de dados