Namespaces e Esquemas XML. Namespaces - Motivação



Documentos relacionados
XML Schema. Vanessa de Paula Braganholo ftp://metropole/pub/curso/xml/index.html. Janeiro de XML Schema

XML: uma introdução prática X100. Helder da Rocha

introdução principais componentes

GERÊNCIA DE DADOS SEMIESTRUTURADOS -DTD. Prof. Angelo Augusto Frozza, M.Sc.

Esquemas para Dados XML

XML. Prof. Júlio Machado

Um documento XML possui Unidade lógica - os elementos Usuário "inventa" as marcas através de DTDs

Banco de Dados. Gerenciamento de Dados e Informação Fernando Fonseca, Ana Carolina Salgado & Robson Fidalgo

Sistemas Distribuídos na WEB (Plataformas para Aplicações Distribuídas) XML Origens. HTML Problemas

extensible Markup Language <XML/> XML XML XML vs. HTML Evolução

XML Schema (Parte. Vanessa de Paula Braganholo

XML. 1. XML: Conceitos Básicos. 2. Aplicação XML: XHTML 3. Folhas de Estilo em Cascata XML

L A C Laboratory for Advanced Collaboration

Linguagens e Programação XML / XShema. Paulo Proença

Controle de Restrições de Integridade de Domínio em Documentos XML

Sumário. XML (extensible Markup Language)

GERÊNCIA DE DADOS SEMIESTRUTURADOS -XML. Prof. Angelo Augusto Frozza, M.Sc.

Sintaxe XML. César Vittori Outubro de Resumo Introdução à sintaxe XML. Marcação tradicional x marcação de documentos

XML Schema (Parte 2) Vanessa Braganholo

GERÊNCIA DE DADOS SEMI ESTRUTURADOS -XML. Prof. Angelo Augusto Frozza, M.Sc.

XML extensible Markup Language. Prof. Fellipe Aleixo

Bases de dados semi-estruturadas, XML

Desenvolvimento de Aplicações XML. Wamberg Oliveira, Msc, PMP, COBIT-F Instrutor

Roteiro para Transmissão Ambiente de Testes da Guias Online

GERÊNCIA DE DADOS SEMIESTRUTURADOS -XML. Prof. Angelo Augusto Frozza, M.Sc.

Dados Semi-Estruturados e XML Vanessa Braganholo. Lista de Exercícios 3 XML Schema

XDocValidator: Uma Interface Gráfica Para Atualização e Validação Incremental de Documentos XML

XML (extensible Markup Language)

XML XML. XML extensible Markup Language HTML. Motivação. W3C: World Wide Web Consortium XML 1.0. Mário Meireles Teixeira DEINF-UFMA

Este relatório tem por objetivo, abordar a sintaxe XML.

Especificação Técnica ACSS

Uma Abordagem Alternativa para o Armazenamento Electrónico de Dados: O Papel da Norma XML

XML Schema. Vanessa Braganholo. Curso baseado em mini-cursos apresentados no SBBD. Autores: Carlos Heuser, Carina Dorneles e Vanessa Braganholo

Introdução ao XML. Extensible Markup Language

Dados na Web integrar irregular ausente não conhecida completamente evoluem Fernando Fonseca Ana Carolina Robson Fidalgo

Série Desenvolvimento de Sistemas. Curso de XML. Conceito básicos, XML Schema, Namespaces, DOM/SAX, XPath, XSLT, XLink e XPointer.

< > a m l. b x. helder.da.rocha. inding. argonavis.com.br

Histórico de Revisões

extensible Markup Language (XML) XML é uma linguagem de anotação. XML utiliza tags para descrever informação.

Gerência de Dados da Web - DCC922 -

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

GERÊNCIA DE DADOS SEMIESTRUTURADOS -XML NAMESPACES. Prof. Angelo Augusto Frozza, M.Sc.

3 Classes e instanciação de objectos (em Java)

Dados na Web. Gerenciamento de Dados e Informação. Web X Banco de Dados. Representação de Dados para Web/BD. Estrutura dos Dados. Web X Banco de Dados

GERÊNCIA DE DADOS SEMI ESTRUTURADOS - XQUERY. Prof. Angelo Augusto Frozza

Recapitular XML... Gestão e Tratamento de Informação DEI IST

Orientação a Objetos

Faculdade de Ciências Universidade Agostinho Neto Departamento de Matemática e Engenharia Geográfica Ciências da Computação

Introdução ao PHP. Prof. Késsia Marchi

Web de hoje (2.0) Porquê WEB 2.0?

WEBDESIGN. Professor: Paulo Trentin Escola CDI de Videira

Leiaute-IMPORTAÇÃO-Plano de Contas - XML

Estrutura Lógica DTD

Keli Cristina Manini Susane Schmidt. Uma Ferramenta para Geração de Esquemas XML a partir de Documentos XML

XML e Banco de Dados de Internet. Tópicos Especiais em Tecnologia da Informação Profa. Késsia R. C. Marchi

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Manual XML. Versão: 1.1

Introdução ao SQL. O que é SQL?

JSP - ORIENTADO A OBJETOS

XML e Banco de Dados. Prof. Daniela Barreiro Claro DCC/IM/UFBA

XML (extensible Markup Language) por. Rafael Port da Rocha. (Notas de Aula)

SIOE-E: WebService público DGAEP

Keli Cristina Manini Susane Schmidt. Uma Ferramenta para Geração de Esquemas XML a partir de Documentos XML

Mais sobre uso de formulários Site sem Ajax

XML (extensible Markup Language)

O código JavaScript deve ser colocado entre tags de comentário para ficar escondido no caso de navegadores antigos que não reconhecem a linguagem.

Desenvolvimento Web Introdução a XHTML. Prof. Bruno Gomes

MANUAL TÉCNICO DE MENSAGEM

Leiaute dos Arquivos para Envio Consolidado das Informações de Transferências Internacionais em Reais

XPath. Resumo Descrever um esquema específico XML (XPath) para identificar subestruturas

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Novell. Novell Teaming 1.0. novdocx (pt-br) 6 April 2007 EXPLORAR O PORTLET BEM-VINDO DESCUBRA SEU CAMINHO USANDO O NOVELL TEAMING NAVIGATOR

Orientações Técnicas para o desenvolvimento da funcionalidade Transmissão em Lote do SISCOSERV (Módulos Venda e Aquisição)

Modelo de Dados Relacional Restrições de um Banco de Dados Relacional

definição e composição de esquemas instâncias documentação

Unidade IV: Ponteiros, Referências e Arrays

Introdução. Definição. Validação. Universo XML. Apresentação. Processamento. Prof. Enzo Seraphim. Banco de Dados

MANUAL DE CARGA DA CENTRAL DE INFORMAÇÕES DO REGISTRO CIVIL NACIONAL CRC NACIONAL. Provimento nº 38/2014 e 46/2015 Conselho Nacional de Justiça (CNJ)

Manipulando Strings no VBA (Replace, Mid e InStr)

Ficheiro de Reporte Periódico de Pagamentos

BCValidador VALIDAÇÃO DE ARQUIVOS XML RECEBIDOS PELO BANCO CENTRAL DO BRASIL

Uma Proposta de Mapeamento do Modelo XML Schema para o Modelo Relacional

XML para transferência de dados Estrutura hierárquica do XML DTDs e XML Schema Consultas de documentos XML: XPath e XQuery Transformação de

Adenda Técnica :: LCPA :: Manual Técnico XML

Fluxo de trabalho do Capture Pro Software: Indexação de OCR e separação de documentos de código de correção

Nota Fiscal de Serviço Eletrônica Layout de Utilização via software proprio/particular ISSQN NFSE DANFE

1. Domínio dos Atributos

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Modelo de Entidade e Relacionamento (MER) - Parte 07

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

CONTEÚDO PROGRAMÁTICO

JavaScript (Funções, Eventos e Manipulação de Formulários)

XML-Schema e Modelo de Dados em SOA

Igor Fabiano Nazar. X-Tool: Uma Ferramenta de Teste de Esquemas para Estrutura de Dados

Transcrição:

Namespaces e Esquemas XML Namespaces - Motivação Problema 1: Cada usuário ou grupo pode criar suas próprias etiquetas (tags): mesmas tags podem ter sîgnificados diferentes Problema 2: quando se juntam dois documentos que usam a mesma etiqueta (tag) com significados diferentes Precisa-se, de alguma maneira, remover a ambigüidade Usam-se então Namespaces URLs são usados não por apontarem para uma dada localização mas por serem exclusivos 1

Namespaces Permitem que seja usado um esquema de atribuição de nomes ao longo de um conjunto de documentos Usa IP para associar nomes exclusivos a URI Usa o atributo xmlns Declaração e uso de Namespace <x xmlns:edi='http://ecommerce.org/schema'> <!-- the 'price' element's namespace is http://ecommerce.org/schema --> <edi:price units='euro'>32.18</edi:price> </x> 2

Múltiplos Namespaces <?xml version="1.0"?> <!-- both namespace prefixes are available throughout --> <bk:book xmlns:bk='urn:loc.gov:books' xmlns:isbn='urn:isbn:0-395-36341-6'> <bk:title>cheaper by the Dozen</bk:title> <isbn:number>1568491379</isbn:number> </bk:book> Outro Exemplo <aaa > <bbb > <ccc /> </bbb> <BBB > <CCC /> </BBB> <x111 > <x222 /> </x111> </aaa> 3

Exemplo <lower:aaa xmlns:lower = "http://zvon.org/lowercase" > <lower:bbb > <lower:ccc /> </lower:bbb> <upper:bbb xmlns:upper = "http://zvon.org/uppercase" > <upper:ccc /> </upper:bbb> <xnumber:x111 xmlns:xnumber = "http://zvon.org/xnumber" > <xnumber:x222 /> </xnumber:x111> </lower:aaa> Declararação de namespaces na raiz <lower:aaa xmlns:lower = "http://etc.org/lowercase xmlns:upper = "http://etc.org/uppercase" xmlns:xnumber = "http://etc.org/xnumber" > <lower:bbb > <lower:ccc /> </lower:bbb> <upper:bbb > <upper:ccc /> </upper:bbb> <xnumber:x111 > <xnumber:x222 /> </xnumber:x111> </lower:aaa> 4

Namespace Default Namespaces não têm que ser declarados explicitamente com prefixos. O atributo xmlns define o namespace default que é usado para o elemento onde ele ocorre e para seus filhos e descendentes. <aaa > <bbb xmlns = "http://etc.org/lowercase" > <ccc /> </bbb> <BBB xmlns = "http://etc.org/uppercase" > <CCC /> </BBB> <x111 xmlns = "http://etc.org/xnumber" > <x222 /> </x111> </aaa> Exemplo Elementos podem até pertencer a diferentes namespaces embora eles tenham os mesmos prefixos! <aaa > <lower:bbb xmlns:lower = "http://etc.org/lowercase" > <lower:ccc /> </lower:bbb> <lower:bbb xmlns:lower = "http://etc.org/uppercase" > <lower:ccc /> </lower:bbb> <lower:x111 xmlns:lower = "http://etc.org/xnumber" > <lower:x222 /> </lower:x111> </aaa> 5

Namespaces e seu uso Namespaces são amplamente usados nas diversas iniciativas associadas ao XML <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="pattern"> <template><value-of select="."/></template> </xsl:template> </xsl:stylesheet> Esquemas XML DTD XML Schemas 6

Uso de Esquema XML Possibilita o processamento de documentos identificando as limitações de estrutura e conteúdo Possibilita verificar se o documento é válido Facilita a troca de informações. Esquema XML Esquema em XML significa uma definição da estrutura de uma classe de documentos XML Formas de representar Esquema XML: DTD XML Schema Outras propostas: XDR - XML Data Reduced - Microsoft SOX - Schema for OO XML - Commerce One Schematron, DSD: foco na validação de esquemas e ainda DCD, DDML, Assertion Grammars, RELAX 7

DTD Document Type Definition Contém declarações que definem: a seqüência e aninhamento de elementos exigida ou permitida valores e tipos dos atributos exigidos ou permitidos nomes de entidades internas e externas necessárias e das notações utilizadas Tipos de DTDs DTD Interno: declarações em DOCTYPE DTD externos - SYSTEM e PUBLIC DOCTYPE: associa declarações de DTD com um documento Declarações básicas ELEMENT, ATTLIST, ENTITY, NOTATION DTD (Document Type Definition) Exemplo de definição e uso do DTD no mesmo documento: livro.xml: <?xml version="1.0"?> <!DOCTYPE livrodtd[ <!ELEMENT livro (titulo, isbn)> <!ELEMENT titulo (#PCDATA)> <!ELEMENT isbn (#PCDATA)> ]> <livro> <titulo> XML Metadata </titulo> <isbn> 1-861004-51-6 </isbn> </livro> 8

DTD - Tipos de conteúdo de um Elemento conteúdo elemento: pode ter elementos filho. conteúdo misto: pode conter caractere ou outros elementos. ANY: pode ter conteúdo de qualquer estrutura. O parser não valida. EMPTY: não tem elemento filho ou conteúdo de dado do tipo caracter, somente atributos são permitidos. PCDATA: pode conter dado do tipo caracter somente, pode ter atributos. DTD - Exemplos usando categorias de conteúdo: contéudo elemento: Lista Sequencial <!ELEMENT publicacoes (publicacao1, publicacao2, publicacao3)> <!-- documento XML terá as três publicações, mesmo que como elementos vazios --> conteúdo elemento: Lista de escolha <!ELEMENT publicacoes (publicacao1 publicacao2 publicacao3)+> <!-- documento XML poderá ter 1 ou mais publicações apresentadas em qualquer ordem --> 9

DTD - Exemplos usando categorias de conteúdo conteúdo misto <!ELEMENT autor (#PCDATA primeiro_nome segundo_nome)*> ANY <!ELEMENT outra_informacao ANY> <!-- o elemento outra_informacao poderá receber conteúdo de qualquer tipo --> EMPTY <!ELEMENT marca EMPTY> DTD - Exemplo de definição e uso do DTD (em arquivo separado) livraria.dtd: (armazenado em c:\projeto\projetoxml) <!ELEMENT livraria (livro*)> <!ELEMENT livro (titulo, autor+, ano, editora)> <!ELEMENT titulo (#PCDATA)> <!ELEMENT autor (#PCDATA)> <!ELEMENT ano (#PCDATA)> <!ELEMENT editora (#PCDATA)> livraria.xml: <?xml version="1.0"?> <!DOCTYPE livraria SYSTEM "c:\projeto\projetoxml\livraria.dtd"> <livraria> <livro> <titulo> XML Metadata </titulo> <autor> Kal Ahmed </autor> <autor> Danny Ayers </autor> <ano> 2001 </ano> <editora> Wrox Press </editora> </livro> </livraria> 10

DTD Ocorrência de elementos Tipos de ocorrência (, ): elementos devem ocorrer na ordem especificada; : apenas um dos elementos deve ocorrer; Cardinalidade sem operador: uma ocorrência do elemento é requerida.? : zero ou uma ocorrência é permitida. * : zero ou mais ocorrências de um elemento são permitidas. + : uma ou mais ocorrências de um elemento são permitidas. Atributos Tipos de Atributos CDATA: string ID: ident único IDREF/IDREFS: referencia(s) para um ID (existente) ENTITY/ENTITIES: entidade(s) externa pré-def NMTOKEN/NMTOKENS: um nome/lista de nomes delimitados por branco NOTATION: um de um conj de nomes declarados no DTD [Valor enumerado]: um de um conj definido 11

ATTLIST: Valores default #REQUIRED: obrigatório #IMPLIED: opcional #FIXED: sempre fixo, aparece opcionalmente apenas valor: valor assumido qdo não especificado Exemplo de declaração de lista de atributos contatos.dtd: (armazenado em c:\projeto\projetoxml) <!ELEMENT contatos (telefone*)> <!ELEMENT telefone (#PCDATA)> <!ATTLIST telefone tipo (residencia escritorio celular) #REQUIRED> contatos.xml: <?xml version="1.0"?> <!DOCTYPE contatos SYSTEM "c:\projeto\projetoxml\contatos.dtd"> <contatos> <telefone tipo="residencia"> 021 33907777 </telefone> <telefone tipo="escritorio"> 021 22797178 </telefone> <telefone tipo="celular"> 021 91020754 </telefone> </contatos> OBS: com o uso de #REQUIRED todo elemento telefone tem que identificar um tipo da lista. 12

Atributos mais exemplos Atributos ID e IDREF Estes tipos de atributos permitem criar uma referência a um documento <! - declaração do element secao --> <! - o atributo de identificação de secao --> <! - target é optional --> <!ELEMENT secao (#PCDATA xref)* > <!ATTLIST secao target ID #IMPLIED > <! - declaracao do elemento xref --> <!ELEMENT xref EMPTY > <!ATTLIST xref ref IDREF #REQUIRED> <secao target='x321'> conteúdo de uma seção </secao> <secao> outra seção. Faz referência à seção X321 <xref ref='x321'/> </secao> Não referenciamos de fato uma seção, mas um elemento do documento que possui um atributo do tipo ID e cujo valor é X321. Entidades: ENTITY Entidades Internas Entidades pré-definidas certos caracteres, como < > & ' " não podem ser utilizados dentro do texto de um documento estes caracteres devem ser representados por seus códigos pré-definidos, chamadas entidades prédefinidas <: < >: > &: & 13

Entidades: ENTITY ENTIDADES INTERNAS (cont.) Entidades definidas pelo usuário é possível declarar as entidades dentro do DTD esta declaração tem a forma <!ENTITY nome-entidade "valor-entidade"> Exemplo a declaração seguinte <!DOCTYPE toto [ <!ENTITY copyright " Editions titi"> ]> <toto> &copyright; </toto> produzirá Editions titi observação: 00A9 é o código Unicode do caracter Entidades externas endereçadas por URL Exemplo <?xml version='1.0'?> <!DOCTYPE livro [ <!ENTITY capitulo1 SYSTEM "chap1.xml"> <!ENTITY capitulo2 SYSTEM "chap2.xml"> <!ENTITY autor "toto"> ]> <livro> <titulo> XML para idiotas </titulo> <autor> &autor; </autor> <intro> Era uma vez uma Web </intro> &capitulo1; &capitulo2; </livro> Restrição: as entidades externas devem ser documentos bem formados 14

Notações e entidades não XML Exemplo <!DOCTYPE exemplo [ <!NOTATION jpeg SYSTEM "/usr/local/bin/xview"> <!ENTITY foto-ferias SYSTEM "./fotos/foto1.jpg" NDATA jpeg> <!ELEMENT exemplo (foto)> <!ELEMENT foto EMPTY> <!ATTLIST foto img ENTITY #REQUIRED> <exemplo> <foto img='foto-ferias'/> </exemplo> ]> A declaração de notação associa ao formato jpeg a aplicação xview que poderá ser utilizada em extensão da aplicação XML. A declaração da entidade foto-ferias indica que o conteúdo dos dados está situado no arquivo foto1.jpg A palavra-chave NDATA indica que este arquivo é de um formato não XML DTD - Limitações Um documento XML pode estar associado a somente uma DTD DTD não é extensível Não tem integração com namespaces XML Não provê herança Usa um único tipo atômico (PCDATA) Não tem integer, float, etc. Não permite declarar restrições de domínio os valores para o elemento <sexo> devem ser F ou M. Não garante integridade referencial Não pode ser garantido que um autor de um livro só pode ser uma referência a uma instância de elemento do tipo pessoa. Não é escrito em linguagem XML, escrito em EBNF (Extended Backus- Naur Form); 15

XML Schemas XML Schema As limitações do DTD levaram o W3C a desenvolver XML Schema, também chamado de XSD Schema Vantagens: Escrito em linguagem XML Provê integração com namespaces XML Provê integração de esquemas estruturais com tipos de dados Provê herança Inclui os tipos primitivos inteiro, data e dado binário XSD possui facilidade de documentação por meio dos elementos <xsd:annotation> e <xsd:documentation> que são específicos para documentação 16

XML Schema Mais vantagens: As mesmas ferramentas usadas para criação e edição de documentos XML podem ser usadas para a criação do esquema Suporta os tipos dados usados na maioria das linguagens de programação XML Schema - Uso de namespace No namespace xsd (http://www.w3.org/2001/xmlschema) estão os elementos e tipos de dados padrões usados para construir esquemas. Exemplos: schema, element, complextype, sequence, string, etc. "schema" é o elemento raiz. Os elementos e tipos próprios do esquema podem ser definidos em outro namespace. 17

Exemplo XML Schema <?xml version='1.0'?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <!-- exemplo de XML Schema --> <xsd:complextype name="endereco"> <xsd:element name="nome" type="xsd:string"/> <xsd:element name="rua" type="xsd:string"/> <xsd:element name="cidade" type="xsd:string"/> <xsd:element name="estado" type="xsd:string"/> <xsd:element name="cep" type="xsd:string"/> <xsd:element name="pais" type="xsd:string"> <xsd:simpletype> <xsd:restriction base="xsd:string"> <xsd:enumeration value="brasil"/> <xsd:enumeration value="frança"/> </xsd:restriction> </xsd:simpletype> </xsd:schema> Declara o namespace xsd arquivo exemplo1.xsd Comparando um DTD com um XML Schema BookStore.dtd <!ELEMENT BookStore (Book)+> <!ELEMENT Book (Title, Author, Date, ISBN, Publisher)> <!ELEMENT Title (#PCDATA)> <!ELEMENT Author (#PCDATA)> <!ELEMENT Date (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT Publisher (#PCDATA)> Copyright [2001]. Roger L. Costello. All Rights Reserved. 18

Copyright [2001]. Roger L. Costello. All Rights Reserved. <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema" M.L.M.Campos targetnamespace="http://www.books.org" & Paulo Pires xmlns="http://www.books.org" elementformdefault="qualified"> <xsd:element name="bookstore"> <!ELEMENT BookStore (Book)+> <xsd:element ref="book" minoccurs="1" maxoccurs="unbounded"/> <xsd:element name="book"> <xsd:element ref="title" minoccurs="1" maxoccurs="1"/> <xsd:element ref="author" minoccurs="1" maxoccurs="1"/> <!ELEMENT Book (Title, Author, Date, <xsd:element ref="date" minoccurs="1" maxoccurs="1"/> ISBN, Publisher)> <xsd:element ref="isbn" minoccurs="1" maxoccurs="1"/> <xsd:element ref="publisher" minoccurs="1" maxoccurs="1"/> <xsd:element name="title" type="xsd:string"/> <!ELEMENT Title (#PCDATA)> <xsd:element name="author" type="xsd:string"/> <!ELEMENT Author (#PCDATA)> <xsd:element name="date" type="xsd:string"/> <!ELEMENT Date (#PCDATA)> <xsd:element name="isbn" type="xsd:string"/> <!ELEMENT ISBN (#PCDATA)> <xsd:element name="publisher" type="xsd:string"/> <!ELEMENT Publisher (#PCDATA)> </xsd:schema> <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:element name="bookstore"> M.L.M.Campos & Paulo Pires <xsd:element ref="book" minoccurs="1" maxoccurs="unbounded"/> <xsd:element name="book"> Schema é sempre a raiz do documento <xsd:element ref="title" minoccurs="1" maxoccurs="1"/> <xsd:element ref="author" minoccurs="1" maxoccurs="1"/> <xsd:element ref="date" minoccurs="1" maxoccurs="1"/> <xsd:element ref="isbn" minoccurs="1" maxoccurs="1"/> <xsd:element ref="publisher" minoccurs="1" maxoccurs="1"/> <xsd:element name="title" type="xsd:string"/> <xsd:element name="author" type="xsd:string"/> <xsd:element name="date" type="xsd:string"/> <xsd:element name="isbn" type="xsd:string"/> <xsd:element name="publisher" type="xsd:string"/> </xsd:schema> Os elementos e tipos de dados são usados para construir esquemas: - schema -element -complextype - sequence - string e estão descritos no namespace http:// /XMLSchema Copyright [2001]. Roger L. Costello. All Rights Reserved. 19

Exemplo: Um Poema "Soneto Já Antigo" (Álvaro de Campos) Olha, Daisy: quando eu morrer tu hás-de dizer aos meus amigos aí de Londres, embora não o sintas, que tu escondes a grande dor da minha morte. Irás de Londres p'ra Iorque, onde nasceste (dizes que eu nada que tu digas acredito), contar áquele pobre rapazito que me deu horas tão felizes, embora não o saibas, que morri... Mesmo ele, a quem eu tanto julguei amar, nada se importará... Depois vai dar a notícia a essa estranha Cecily que acreditava que eu seria grande... Raios partam a vida e quem lá ande! Elementos Estruturais: Poema: título, autor, corpo, data Corpo: quadra, quadra, terno, terno. Quadra: verso, verso, verso, verso Terno: verso, verso, verso Verso: (texto nome)+ Nome: texto (extraído de http://www.di.uminho.pt/~jcr/ apresentação de Jósé Ramalho) (1922) Poema anotado <poema><titulo>soneto Já Antigo</titulo> <autor>álvaro de Campos</autor> <quadra> <verso>olha,<nome> Daisy</nome>: quando eu morrer tu hás-de</verso> <verso>dizer aos meus amigos aí de <nome>londres</nome>,</verso> <verso>embora não o sintas, que tu escondes</verso> <verso>a grande dor da minha morte. Irás de</verso> </quadra><quadra> <verso><nome>londres</nome> p'ra <nome>iorque</nome>, onde nasceste (dizes</verso> <verso>que eu nada que tu digas acredito),</verso> <verso>contar àquele pobre rapazito</verso> <verso>que me deu horas tão felizes,</verso> </quadra><terno> <verso>em bora não o saibas, que morri...</verso>...</terno> <data>1922</data></poema> 20

Especificação do tipo poema usando DTD Poema: título, autor, corpo, data Corpo: quadra, quadra, terno, terno. Quadra: verso, verso, verso, verso Terno: verso, verso, verso Verso: (texto nome)+ DTD Nome: texto <!ELEMENT poema (titulo,autor,corpo,data) > <!ELEMENT corpo (quadra,quadra,terno,terno) > <!ELEMENT quadra (verso,verso,verso,verso) > <!ELEMENT terno (verso,verso,verso) > <!ELEMENT verso (#PCDATA nome)* >... Especificação do tipo poema usando XML Schema <?xml <?xml version="1.0" version="1.0" encoding="utf-8"?> encoding="utf-8"?> <xs:schema <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> xmlns:xs="http://www.w3.org/2001/xmlschema"> name="poema"> name="poema"> <xs:complextype> <xs:complextype> <xs:sequence> <xs:sequence> name="titulo" name="titulo" type="xs:string"/> type="xs:string"/> name="autor" name="autor" type="xs:string"/> type="xs:string"/> name="data" name="data" type="xs:string"/> type="xs:string"/> name="corpo" name="corpo" type="tcorpo"/> type="tcorpo"/> </xs:sequence> </xs:sequence> <xs:attribute <xs:attribute name="tipo" name="tipo" type="xs:string" type="xs:string" use="required" use="required" default="soneto"/> default="soneto"/> </xs:complextype> </xs:complextype> </xs:element> </xs:element> <xs:complextype <xs:complextype name="tcorpo"> name="tcorpo"> <xs:sequence> <xs:sequence> name="quadra" name="quadra" type="tquadra"/> type="tquadra"/> name="quadra" name="quadra" type="tquadra"/> type="tquadra"/> name="terno" name="terno" type="tterno"/> type="tterno"/> name="terno" name="terno" type="tterno"/> type="tterno"/> </xs:sequence> </xs:sequence> </xs:complextype> </xs:complextype>...... </xs:schema> </xs:schema> 21

Exemplo: O Poema <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> name="poema"> <xs:complextype> <xs:complextype name="tquadra"> <xs:sequence> <xs:sequence> name="titulo" type="xs:string"/> <xs:complextype name="tcorpo"> name="verso" type="tverso"/> name="autor" type="xs:string"/> <xs:sequence> name="verso" type="tverso"/> name="data" type="xs:string"/> name="verso" name="corpo" name="quadra" type="tverso"/> type="tcorpo"/> type="tquadra"/> </xs:sequence> name="verso" name="quadra" type="tverso"/> type="tquadra"/> </xs:sequence> <xs:attribute name="tipo" name="terno" type="tterno"/> </xs:complextype> type="xs:string" name="terno" type="tterno"/> <xs:complextype </xs:sequence> name="tterno"> use= optional" </xs:complextype> <xs:sequence> default="soneto"/> name="verso" type="tverso"/> </xs:complextype> name="verso" type="tverso"/> </xs:element> name="verso" type="tverso"/>... </xs:schema> </xs:sequence> </xs:complextype> Exemplo: O Poema <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/xmlschema"> name="poema"> <xs:complextype> <xs:complextype name="tquadra"> <xs:sequence> <xs:sequence> name="titulo" type="xs:string"/> <xs:complextype name="tverso" name="tcorpo"> name="verso" name="autor" mixed="true"> type="tverso"/> type="xs:string"/> <xs:choice <xs:sequence> minoccurs="0" name="verso" name="data" maxoccurs="unbounded"> type="tverso"/> type="xs:string"/> name="verso" name="corpo" name="nome" name="quadra" type="tverso"/> type="tcorpo"/> type="xs:string"/> type="tquadra"/> </xs:sequence> name="verso" name="lugar" name="quadra" type="tverso"/> type="xs:string"/> type="tquadra"/> </xs:sequence> <xs:attribute </xs:choice> name="tipo" name="terno" type="tterno"/> </xs:complextype> type="xs:string" name="terno" type="tterno"/> <xs:complextype </xs:sequence> name="tterno"> use= optional" </xs:complextype> <xs:sequence> default="soneto"/> name="verso" type="tverso"/> </xs:complextype> name="verso" type="tverso"/> </xs:element> name="verso" type="tverso"/>... </xs:schema> </xs:sequence> </xs:complextype> 22

XML Schema - Tipos Primitivos Tipos M.L.M.Campos de & dados Paulo Pires Descrição primitivos xsd:string strings em XML xsd:boolean valores lógico (true, false) xsd:decimal números decimais xsd:float tipo ponto flutuante precisão simples xsd:double tipo ponto flutuante precisão dupla xsd:duration uma duração de tempo xsd:datetime um instante de tempo específico xsd:time um instante de tempo que ocorre todo dia xsd:date uma data do calendário xsd:gyearmonth mês e ano gregoriano específicos xsd:gyear ano gregoriano específico xsd:gmonthday uma data gregoriana que ocorre cada ano xsd:gday um dia gregoriano que ocorre cada mês xsd:gmonth um mês gregoriano que ocorre todo ano xsd:hexbinary dado binário em base hexa xsd:base64binary dado binário em base 64 xsd:anyuri uma URI (Uniform Resource Identifier) xsd:qname um nome XML qualificado xsd:notation tipo de atributo NOTATION do XML 1.0 XML Schema - Tipos Primitivos Tipos M.L.M.Campos de & dados Paulo Pires Descrição primitivos xsd:string strings em XML xsd:boolean valores lógico (true, false) xsd:decimal números decimais xsd:float tipo ponto flutuante precisão simples xsd:double tipo ponto flutuante precisão dupla xsd:duration uma duração de tempo xsd:datetime um instante de tempo específico xsd:time um instante de tempo que ocorre todo dia xsd:date uma data do calendário xsd:gyearmonth mês e ano gregoriano específicos xsd:gyear ano gregoriano específico xsd:gmonthday uma data gregoriana que ocorre cada ano xsd:gday um dia gregoriano que ocorre cada mês xsd:gmonth um mês gregoriano que ocorre todo ano xsd:hexbinary dado binário em base hexa xsd:base64binary dado binário em base 64 xsd:anyuri uma URI (Uniform Resource Identifier) xsd:qname um nome XML qualificado xsd:notation tipo de atributo NOTATION do XML 1.0 name="nome" type="xs:string"/> name="lugar" type="xs:string"/> 23

XML Schema - Tipos Derivados Derivam dos tipos primitivos integer (decimal), long (integer),... Por restrição Por extensão XML Schema - Simple and Complex Types Os tipos de dados em XML Schema: simple ou complex. Tipo simple é um dos tipos básicos: string, date, float, double, timeduration,... Um tipo simple restringe o texto que pode aparecer no valor de um atributo ou no conteúdo de um elemento textual. Tipo complex : Um elemento que tenha atributos ou elementos filho é do Um tipo complex restringe o conteúdo de um elemento relativamente aos atributos e elementos filho que pode ter. 24

Exemplo: complex Type <xs:complextype name="tquadra"> <xs:sequence> name="verso" type="tverso"/> name="verso" type="tverso"/> name="verso" type="tverso"/> name="verso" type="tverso"/> </xs:sequence> </xs:complextype> Tverso é uma referência a um complex type definido em outro ponto no schema Tquadra é um complex type com nome (em oposição a um anônimo) Possíveis compositores: sequence (todos em ordem), choice (apenas um) e all (todos em qualquer ordem) XML Schema - Escopo dos elementos Um elemento pode ser declarado como global ou como local. Um elemento global é declarado como sendo filho de <schema>. Um elemento local é declarado em algum ponto na estrutura do Schema. Os elementos globais podem ser reutilizados por referência. 25

Exemplo - Elementos globais name="poema"> <xs:complextype> <xs:sequence> name="titulo" type="xs:string"/> name="autor" type="xs:string"/> name="data" type="xs:string"/> name="corpo"> <xs:complextype> <xs:sequence> ref = "Quadra"/> ref = "Quadra"/> ref = "Terno"/> ref = "Terno"/> </xs:sequence> </xs:complextype> </xs:element> </xs:sequence> </xs:complextype> </xs:element> Exemplo - Elementos globais Aplicações Baseadas name= quadra > em XML <xs:complextype> <xs:sequence> name="poema"> ref="verso"/> <xs:complextype> ref="verso"/> <xs:sequence> ref="verso"/> name="titulo" type="xs:string"/> ref="verso"/> name="autor" type="xs:string"/> </xs:sequence> name="data" type="xs:string"/> </xs:complextype> name="corpo"> </xs:element> <xs:complextype> <xs:sequence> ref = "Quadra"/> ref = "Quadra"/> ref = "Terno"/> ref = "Terno"/> <?xml version= 1.0 encoding= iso-8859-1?> </xs:sequence> <quadra> </xs:complextype> <verso>olha,<nome>daisy</nome>: </xs:element> quando eu morrer tu hás-de</verso> <verso>dizer </xs:sequence> aos meus amigos aí de <nome>londres</nome>,</verso> <verso>embora </xs:complextype> não o sintas, que tu escondes</verso> <verso>a </xs:element> grande dor da minha morte. Irás de</verso> </quadra> Instância Válida 26

XML Schema Reutilização por Referência Outro exemplo referenciando elemento: <?xml version='1.0'?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:element name="primeironome" type="xsd:string"/> <xsd:element name="nomemeio" type="xsd:string"/> <xsd:element name="ultimonome" type="xsd:string"/>... <xsd:element name="nome"> <xsd:element ref="primeironome"/> <xsd:element ref="nomemeio"/> <xsd:element ref="ultimonome"/>... XML Schema - Cardinalidade <xs:complextype name="tquadra"> <xs:sequence> name="verso" type="tverso minoccurs="4" maxoccurs="4"/> </xs:sequence> </xs:complextype> A cardinalidade pode ser restringida recorrendo aos atributos: minoccurs e maxoccurs 27

XML Schema - Valores para elementos name= email" type= xs:string default= jcr@di.uminho.pt"/> Valor por omissão name= supervisor" type= xs:string fixed= José Carlos Ramalho"/> Valor fixo Valor fixo significa que o valor informado deve ser igual ao ao valor fixed ou ou não deve ser informado. Caso contrário, o documento não será válido. XML Schema - Atributos Os atributos declaram-se recorrendo ao elemento <attribute> Um atributo é sempre do tipo simple <xs:attribute name="tipo" type="xs:string" use= optional" default="soneto"/> use: (optional required) Se não especificarmos, assume-se optional 28

XML Schema - Restrição de tipos primitivos <xs:simpletype name= dia base = xs:integer > <xs:mininclusive value= 1 /> <xs:maxinclusive value= 31 /> </xs:simpletype> Restrição de domínio <xs:simpletype name= telefone base = xs:integer > <xs:pattern value= \d{4}-\d{4} /> </xs:simpletype> Restrição de formato 1 Sumário de Declaração de Atributos (2 formas) <xsd:attribute name="nome" type= tipo-simples" use= como-usado" value="valor"/> xsd:string xsd:integer xsd:boolean... required default fixed optional prohibited This attribute is only used with use="default" and use="fixed" 2 <xsd:attribute name="nome" use= como-usad" value="valor"> <xsd:simpletype> <xsd:restriction base= tipo-simples"> <xsd:facet value="valor"/> </xsd:restriction> </xsd:simpletype> </xsd:attribute> 29

XML Schema - Restrições ou facetas mininclusive maxinclusive maxexclusive Length minlength maxlength Pattern Enumeration minexclusive Precision Scale Encoding Period Duration Exemplo - Restrição por enumeração <xs:simpletype name= diasemana base = xs:string > <xs:enumeration value= Domingo /> <xs:enumeration value= Segunda /> <xs:enumeration value= Terça /> <xs:enumeration value= Quarta /> <xs:enumeration value= Quinta /> <xs:enumeration value= Sexta /> <xs:enumeration value= Sábado /> </xs:simpletype> 30

Exemplo - Referenciando atributo que representa restrição <?xml version='1.0'?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/xmlschema"> <xsd:attribute name="controle"> <xsd:simpletype> <xsd:restriction base="xsd:string"> O atributo controle foi declarado globalmente. <xsd:enumeration value="drh"/> <xsd:enumeration value="dp"/> </xsd:restriction> </xsd:simpletype> Referencia a declaração do atributo </xsd:attribute> Controle feita anteriormente.... <xsd:element name="infosalario"> <xsd:attribute ref="controle"/>... XML Schema - Outros exemplos de restrição Restringe o elemento CreditoMaximo a ter o valor máximo de 1000... <xsd:element name="creditomaximo"> <xsd:simpletype> <xsd:restriction base="xsd:positiveinteger"> <xsd:maxinclusive value="1000"/> </xsd:restriction> </xsd:simpletype>... Máximo permitido. E <mininclusive> poderia ter sido usado para mínimo. Restringe o tipo Num a ter uma expressão regular... <xsd:simpletype name="num"> <xsd:restriction base="xsd:string"> <xsd:pattern value="[a-z] {2}-\d{3}"/> </xsd:restriction> </xsd:simpletype>... 2 letras, um traço e 3 números. 31

Observação sobre Atributos A declaração de atributos sempre vem após as declarações de elementos. aa e ab são atributos de A" <xsd:element name= A"> <xsd:attribute name= aa" /> <xsd:attribute name= ab" /> Elementos vazios name="ref"> <xs:complextype> <xs:attribute name="destino" type="xs:string" use="required"/> </xs:complextype> </xs:element> name="imagem"> <xs:complextype> <xs:attribute name="path" type="xs:string" use="required"/> <xs:attribute name="formato" type="xs:string" use="optional"/> </xs:complextype> </xs:element> 32

Comentários no XML Schema O elemento <annotation> é usado para comentar o esquema Use <documentation> para comentários para usuários humanos Use <appinfo> para comentários para programas O conteúdo pode ser qualquer texto XML bem formado. Os comentários não têm efeito sobre a validação do esquema <xsd:annotation> <xsd:documentation> The following constraint is not expressible with XML Schema: The value of element A should be greater than the value of element B. So, we need to use a separate tool (e.g., Schematron) to check this constraint. We will express this constraint in the appinfo section (below). </xsd:documentation> <xsd:appinfo> <assert test="a > B">A should be greater than B</assert> </xsd:appinfo> <xsd:/annotation> Comentários no DTD DTD também permite comentários <!-- comment goes here --> Vantagens do comentário do XML Schema Os comentários podem ser estruturados Aplicando um style sheet, o esquema se torna auto-descrito <xs:group <xs:group name="creditordebitgroup"> <xs:annotation> <xs:annotation> <xs:appinfo> <xs:appinfo> if if (currentnode.firstchild!="credit")!="credit") docparser.load(debiturl); else else document.write("your account account will will be be credited credited...");..."); </xs:appinfo> </xs:appinfo> </xs:annotation> </xs:annotation>...... </xs:group> </xs:group> 33

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) <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/xmlschema" M.L.M.Campos & Paulo targetnamespace="http://www.publishing.org" Pires xmlns="http://www.publishing.org" elementformdefault="qualified"> <xsd:element name="catalogolivros"> <xsd:element ref= livro" minoccurs="0" maxoccurs="unbounded"/> <xsd:element name= livro"> <xsd:element ref= titulo" minoccurs="1" maxoccurs="1"/> <xsd:element ref= autor" minoccurs="1" maxoccurs="1"/> <xsd:element ref= data" minoccurs="1" maxoccurs="1"/> <xsd:element ref="isbn" minoccurs="1" maxoccurs="1"/> <xsd:element ref= editora" minoccurs="1" maxoccurs="1"/> <xsd:element name= titulo" type="xsd:string"/> <xsd:element name= autor" type="xsd:string"/> <xsd:element name= data" type="xsd:string"/> <xsd:element name="isbn" type="xsd:string"/> <xsd:element name= editora" type="xsd:string"/> </xsd:schema> 34