• Nenhum resultado encontrado

Namespaces e Esquemas XML. Namespaces - Motivação

N/A
N/A
Protected

Academic year: 2021

Share "Namespaces e Esquemas XML. Namespaces - Motivação"

Copied!
40
0
0

Texto

(1)

Namespaces e Esquemas XML

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

(2)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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”

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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>

(3)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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>

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

Outro Exemplo

<aaa >

<bbb >

<ccc />

</bbb>

<BBB >

<CCC />

</BBB>

<x111 >

<x222 />

</x111>

</aaa>

(4)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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>

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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>

(5)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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>

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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>

(6)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

(7)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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.

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

(8)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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>

(9)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

„

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 - Tipos de conteúdo de um Elemento

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

„

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

(10)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

„

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 - Exemplos usando categorias de conteúdo

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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>

(11)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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.

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

„

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

(12)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

ATTLIST: Valores default

„

#REQUIRED:

„

obrigatório

„

#IMPLIED:

„

opcional

„

#FIXED:

„

sempre fixo, aparece opcionalmente

„

apenas valor:

„

valor assumido qdo não especificado

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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.

(13)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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.

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

<: &lt;

>: &gt;

&: &amp;

(14)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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 "&#x00A9; Editions titi">

]>

<toto> &copyright; </toto>

produzirá

© Editions titi

observação: 00A9 é o código Unicode do caracter ©

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

(15)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

(16)

XML Schemas

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

(17)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

(18)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

<?xml version='1.0'?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!-- exemplo de XML Schema -->

<xsd:complexType name="Endereco"> <xsd:sequence>

<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:element> </xsd:sequence> </xsd:complexType> </xsd:schema>

Declara o namespace xsd

arquivo exemplo1.xsd

Exemplo XML Schema

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

Comparando um DTD com um XML Schema

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

(19)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.books.org" xmlns="http://www.books.org" elementFormDefault="qualified"> <xsd:element name="BookStore"> <xsd:complexType> <xsd:sequence>

<xsd:element ref="Book" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Book"> <xsd:complexType> <xsd:sequence>

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

</xsd:complexType> </xsd:element>

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

<!ELEMENT Title (#PCDATA)> <!ELEMENT Author (#PCDATA)> <!ELEMENT Date (#PCDATA)> <!ELEMENT ISBN (#PCDATA)> <!ELEMENT Publisher (#PCDATA)> <!ELEMENT Book (Title, Author, Date,

ISBN, Publisher)> <!ELEMENT BookStore (Book)+>

Copyright © [2001]. Roger L. Costello. All Rights Reserved.

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="BookStore">

<xsd:complexType> <xsd:sequence>

<xsd:element ref="Book" minOccurs="1" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Book"> <xsd:complexType> <xsd:sequence>

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

</xsd:complexType> </xsd:element>

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

Schema é

sempre a

raiz do

documento

Copyright © [2001]. Roger L. Costello. All Rights Reserved.

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

(20)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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! (1922)

(extraído de http://www.di.uminho.pt/~jcr/

apresentação de Jósé Ramalho)

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

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

(21)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

DTD

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

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

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

Especificação do tipo poema usando XML Schema

<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="poema"> <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="corpo" type="Tcorpo"/> </xs:sequence>

<xs:attribute name="tipo" type="xs:string" use="required" default="soneto"/> </xs:complexType>

</xs:element>

<xs:complexType name="Tcorpo"> <xs:sequence>

<xs:element name="quadra" type="Tquadra"/> <xs:element name="quadra" type="Tquadra"/> <xs:element name="terno" type="Tterno"/> <xs:element name="terno" type="Tterno"/> </xs:sequence> </xs:complexType> ... </xs:schema> <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="poema"> <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="corpo" type="Tcorpo"/>

</xs:sequence>

<xs:attribute name="tipo" type="xs:string" use="required" default="soneto"/>

</xs:complexType> </xs:element>

<xs:complexType name="Tcorpo">

<xs:sequence>

<xs:element name="quadra" type="Tquadra"/> <xs:element name="quadra" type="Tquadra"/> <xs:element name="terno" type="Tterno"/> <xs:element name="terno" type="Tterno"/> </xs:sequence>

</xs:complexType> ...

(22)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="poema">

<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="corpo" type="Tcorpo"/> </xs:sequence> <xs:attribute name="tipo" type="xs:string" use=“optional" default="soneto"/> </xs:complexType> </xs:element> ... </xs:schema>

Exemplo: O Poema

<xs:complexType name="Tcorpo"> <xs:sequence>

<xs:element name="quadra" type="Tquadra"/> <xs:element name="quadra" type="Tquadra"/> <xs:element name="terno" type="Tterno"/> <xs:element name="terno" type="Tterno"/> </xs:sequence>

</xs:complexType>

<xs:complexType name="Tquadra"> <xs:sequence>

<xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> </xs:sequence>

</xs:complexType>

<xs:complexType name="Tterno"> <xs:sequence>

<xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> </xs:sequence>

</xs:complexType>

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="poema">

<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="corpo" type="Tcorpo"/> </xs:sequence> <xs:attribute name="tipo" type="xs:string" use=“optional" default="soneto"/> </xs:complexType> </xs:element> ... </xs:schema>

Exemplo: O Poema

<xs:complexType name="Tcorpo"> <xs:sequence>

<xs:element name="quadra" type="Tquadra"/> <xs:element name="quadra" type="Tquadra"/> <xs:element name="terno" type="Tterno"/> <xs:element name="terno" type="Tterno"/> </xs:sequence>

</xs:complexType>

<xs:complexType name="Tquadra"> <xs:sequence>

<xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> </xs:sequence>

</xs:complexType>

<xs:complexType name="Tterno"> <xs:sequence>

<xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> </xs:sequence>

</xs:complexType>

<xs:complexType name="Tverso" mixed="true">

<xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="nome" type="xs:string"/> <xs:element name="lugar" type="xs:string"/> </xs:choice>

(23)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

XML Schema - Tipos Primitivos

Tipos de dados

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

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

XML Schema - Tipos Primitivos

Tipos de dados

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

<xs:element name="nome" type="xs:string"/> <xs:element name="lugar" type="xs:string"/>

(24)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

XML Schema - Tipos Derivados

„

Derivam dos tipos primitivos

„

integer (decimal), long (integer), ...

„

Por restrição

„

Por extensão

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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.

(25)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

Exemplo: complex Type

<xs:complexType name="Tquadra"> <xs:sequence>

<xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> <xs:element name="verso" type="Tverso"/> <xs:element 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)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

(26)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

Exemplo - Elementos globais

<xs:element name="poema"> <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="corpo">

<xs:complexType> <xs:sequence>

<xs:element ref = "Quadra"/> <xs:element ref = "Quadra"/> <xs:element ref = "Terno"/> <xs:element ref = "Terno"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

Exemplo - Elementos globais

<xs:element name="poema"> <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="corpo">

<xs:complexType> <xs:sequence>

<xs:element ref = "Quadra"/> <xs:element ref = "Quadra"/> <xs:element ref = "Terno"/> <xs:element ref = "Terno"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element name=“quadra”> <xs:complexType> <xs:sequence> <xs:element ref="verso"/> <xs:element ref="verso"/> <xs:element ref="verso"/> <xs:element ref="verso"/> </xs:sequence> </xs:complexType> </xs:element> <?xml version=“1.0” encoding=“iso-8859-1”?> <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>

(27)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

<xsd:sequence>

<xsd:element ref="PrimeiroNome"/>

<xsd:element ref="NomeMeio"/>

<xsd:element ref="UltimoNome"/>

</xsd:sequence>

</xsd:complexType>

</xsd:element>

...

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

XML Schema - Cardinalidade

<

xs:complexType

name

="

Tquadra

">

<

xs:sequence

>

<

xs:element

name

="

verso

"

type

="

Tverso

minOccurs

="

4

"

maxOccurs

="

4

"/>

</

xs:sequence

>

</

xs:complexType

>

A cardinalidade pode ser restringida recorrendo aos

atributos:

minOccurs

e

maxOccurs

(28)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

XML Schema - Valores para elementos

<

xs:element

name

=“

email

"

type

=“

xs:string

default

=“

jcr@di.uminho.pt

"/>

Valor por omissão

<

xs:element

name

=“

supervisor

"

type

=“

xs:string

fixed

=“

José Carlos Ramalho

"/>

Valor fixo

Valor fixo – significa que o valor informado deve ser

igual ao valor fixed ou não deve ser informado.

Caso contrário, o documento não será válido.

Valor fixo – significa que o valor informado deve ser

igual ao valor fixed ou não deve ser informado.

Caso contrário, o documento não será válido.

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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)

(29)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

XML Schema - Restrição de tipos primitivos

<xs:simpleType name=“dia“ base = “xs:integer”>

<xs:minInclusive value=“1”/>

<xs:maxInclusive value=“31”/>

</xs:simpleType>

<

xs:simpleType

name

=“

dia

“ base = “xs:integer”>

<

xs:minInclusive value=“1”/

>

<

xs:maxInclusive value=“31”/

>

</

xs:simpleType

>

<xs:simpleType name=“telefone“ base = “xs:integer”>

<xs:pattern value=“\d{4}-\d{4}”/>

</xs:simpleType>

<

xs:simpleType

name

=“

telefone

“ base = “xs:integer”>

<

xs:pattern value=“\d{4}-\d{4}”/

>

</

xs:simpleType

>

Restrição de domínio

Restrição de formato

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

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

required default fixed optional prohibited

This attribute is only used with use="default" and use="fixed" xsd:string xsd:integer xsd:boolean ...

1

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>

(30)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

XML Schema - Restrições ou facetas

„

minInclusive

„

maxInclusive

„

maxExclusive

„

Length

„

minLength

„

maxLength

„

Pattern

„

Enumeration

„

minExclusive

„

Precision

„

Scale

„

Encoding

„

Period

„

Duration

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

>

(31)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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

<xsd:enumeration value="DRH"/>

<xsd:enumeration value="DP"/>

</xsd:restriction>

</xsd:simpleType>

</xsd:attribute>

...

<xsd:element name="InfoSalario">

<xsd:complexType>

<xsd:attribute ref="Controle"/>

</xsd:complexType>

</xsd:element>

...

Referencia a declaração do atributo

Controle feita anteriormente.

O atributo controle foi declarado globalmente.

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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>

</xsd:element>

...

„

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>

...

Máximo permitido. E <minInclusive> poderia ter sido usado para mínimo.

(32)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

Observação sobre Atributos

„

A declaração de atributos sempre

vem após as declarações de

elementos.

<xsd:element name=”A">

<xsd:complexType>

<xsd:sequence>

</xsd:sequence>

<xsd:attribute name=”aa" …/>

<xsd:attribute name=”ab" …/>

</xsd:complexType>

</xsd:element>

”aa e ab são

atributos de A"

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

Elementos vazios

<

xs:element

name

="

ref

">

<

xs:complexType

>

<

xs:attribute

name

="

destino

"

type

="

xs:string

"

use

="

required

"/>

</

xs:complexType

>

</

xs:element

>

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

(33)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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 &gt; B">A should be greater than B</assert>

</xsd:appinfo>

<xsd:/annotation>

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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 name="CreditOrDebitGroup"> <xs:annotation> <xs:appinfo> if (currentNode.firstChild !="Credit") docParser.load(debitURL); else

document.write("Your account will be credited ..."); </xs:appinfo> </xs:annotation> ... </xs:group> <xs:group name="CreditOrDebitGroup"> <xs:annotation> <xs:appinfo> if (currentNode.firstChild !="Credit") docParser.load(debitURL); else

document.write("Your account will be credited ..."); </xs:appinfo>

</xs:annotation> ...

(34)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

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)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence>

<xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence>

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

</xsd:complexType> </xsd:element>

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

(35)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence>

<xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence>

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

</xsd:complexType> </xsd:element>

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

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

ISBN, editora)> <!ELEMENT CatalogoLivros (Book)*>

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence>

<xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence>

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

</xsd:complexType> </xsd:element>

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

Todos XML Schemas têm "schema" como elemento raiz..

(36)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence>

<xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence>

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

</xsd:complexType> </xsd:element>

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

Os elementos que são usados para criar um XML Schema vêm do XMLSchema namespace

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence>

<xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence>

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

</xsd:complexType> </xsd:element>

<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> indica que os elementos declarados neste schema (CatalogoLivros, livro, titulo, autor, data, ISBN, editora) vão para este namespace

(37)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence>

<xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence>

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

</xsd:complexType> </xsd:element>

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

Este está referenciando uma declaração de um elemento livro. 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 targetNamespace! O namespace default é http://www.publishing.org que é o targetNamespace! Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org” xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence>

<xsd:element ref=”livro" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name=”livro"> <xsd:complexType> <xsd:sequence>

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

</xsd:complexType> </xsd:element>

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

Esta é uma diretiva para instâncias de documentos que usam este schema: Quaisquer elementos usados

pela instância de documento que foi declarada por este schema deve ser qualificada pelo namespace especificado

(38)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

Esquema alternativo ...

<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" targetNamespace="http://www.publishing.org" xmlns="http://www.publishing.org" elementFormDefault="qualified"> <xsd:element name="CatalogoLivros"> <xsd:complexType> <xsd:sequence>

<xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType>

<xsd:sequence>

<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:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:schema> Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

Atributos

Seja o DTD

<!ELEMENT CatalogoLivros (Book)*>

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

<!ATTLIST livro

Categoria (autobiografia | nao-ficcao | ficcao) #REQUIRED

EmEstoque (true | false) "false"

Revisor CDATA " ">

<!ELEMENT Title (#PCDATA)>

<!ELEMENT Author (#PCDATA)>

<!ELEMENT Date (#PCDATA)>

<!ELEMENT ISBN (#PCDATA)>

<!ELEMENT Publisher (#PCDATA)>

<!ELEMENT Month (#PCDATA)>

<!ELEMENT Year (#PCDATA)>

(39)

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

<xsd:element name="CatalogoLivros"> <xsd:complexType>

<xsd:sequence>

<xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType>

<xsd:sequence>

<xsd:element name=”titulo" type="xsd:string"/>

<xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”data" type="xsd:string"/>

<xsd:element name="ISBN" type="xsd:string"/> <xsd:element name=”editora" type="xsd:string"/> </xsd:sequence> <xsd:attributeGroup ref="AtributosLivro"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:attributeGroup name="AtributosLivro"> <xsd:attribute name="Categoria" use="required">

<xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="autobiografia"/> <xsd:enumeration value="nao-ficcao"/> <xsd:enumeration value="ficcao"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute>

<xsd:attribute name=”EmEstoque" type="xsd:boolean" use="default" value="false"/> <xsd:attribute name="Revisor" type="xsd:string" use="default" value=" "/> </xsd:attributeGroup>

EmEstoque (true | false) "false"

Revisor CDATA " " Categoria (autobiography | non-fiction | fiction) #REQUIRED

Aplicações Baseadas em XML

M.L.M.Campos & Paulo Pires

<xsd:element name=”livro" maxOccurs="unbounded"> <xsd:complexType>

<xsd:sequence>

<xsd:element name=”titulo" type="xsd:string"/>

<xsd:element name=”autor" type="xsd:string" maxOccurs="unbounded"/> <xsd:element name=”data" type="xsd:string"/>

<xsd:element name="ISBN" type="xsd:string"/> <xsd:element name="editora" type="xsd:string"/> </xsd:sequence>

<xsd:attribute name="Categoria" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="autobiografia"/> <xsd:enumeration value="nao-ficcao"/> <xsd:enumeration value="ficcao"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute>

<xsd:attribute name=”EmEstoque" type="xsd:boolean" use="default" value="false"/> <xsd:attribute name="Revisor" type="xsd:string" use="default" value=" "/>

</xsd:complexType> </xsd:element>

Referências

Documentos relacionados

Enquanto o debate não chega a um consenso, livros continuam sendo publicados e utilizados em sala de aula de língua estrangeira (LE) – quer constituam material

Os autores realizaram um ensaio funcional que demonstrou o aumento da expressão gênica decorrente do número de glutamatos (Q) sobre o número de alaninas (A) presentes na

Visto que eletro-osmose é o processo pelo qual a água livre move-se do ânodo ao cátodo sob aplicação de corrente direta, instalaram-se 6 eletrodos conectados ao pólo negativo

A seguir são mostrados alguns passos que devem ser seguidos quando da identificação do modelo, ou seja, da determinação das ordens de p (parte auto-regressiva), de d (quantidade

Regulamentação/legislação específica para a substância ou mistura em matéria de saúde, segurança e ambiente Regulamentos ROZPORZĄDZENIE KOMISJI (UE) NR 453/2010 z dnia 20 maja

Este trabalho teve como objetivos correlacionar os padrões alimentares das cochonilhas obtidos mediante a técnica de EPG com as atividades biológicas, estudar a salivação

Assim, o estudo da vulnerabilidade da cadeia de suprimentos envolve a identificação dos riscos da cadeia, tanto os riscos relativos às empresas participantes da

O Schema XML (arquivo XSD) correspondente a cada uma das mensagens XML de pedido e de retorno utilizadas pelo Web Service LoteNFe pode ser obtido na internet acessando o