2. Modelagem de Dados
semi-estruturados
Introdução
Introdução
Dados semi-estruturados ?
Dados semi-estruturados: dados
heterogêneos e irregulares, por exemplo XML
Banco de dados: originalmente, sistemas
fechados, dedicados a gestão de dados
regulares, cuja estrutura pouco evolui no
tempo
Novas aplicações requerem mais flexibilidade
de representação e estão constantemente
evoluindo o esquema
Os modelos relacional e de objetos chegaram
a seus limites
Introdução
Dados semi-estruturados ?
Uma solução: usar um modelo de grafo
para armazenar os dados com
características semi-estruturadas
Origens de dados semi-estruturados:
integração de fontes heterogêneas
fontes de dados sem estrutura rígida
dados biológicos
dados da Web
Introdução
Dados semi-estruturados ?
Evolução:
1995: Projeto TSIMMIS, Modelo OEM na
Universidade de Stanford, EUA
1996: Projeto LORE, primeiro SGBD
semi-estruturado, Stanford
1999: aceitação de XML pela indústria
para representação de dados semiestruturados
Uma sintaxe para dados semiestruturados
Dados semi-estruturados: dados sem esquema ou
Não há separação entre os dados e o esquema
auto-descritivos
Exemplo
Os dados contêm o esquema
{nome:"Ana", tel:"3334567", email:[email protected]}
{nome:"Ana", tel:"3334567", tel:"9715432"}
Aqui os valores são os dados atômicos
Representação sob forma de grafos
nome
Ana
email
tel
3334567
[email protected]
nome
Ana
tel
tel
3334567
9715432
Uma sintaxe para dados semiestruturados
Os valores podem ser objetos complexos
Exemplo
{pessoa: {
nome:"ana", tel:"3334567"
}
},
{pessoa: {
nome:{prénome:"Victor",sobrenome:"Bezerra"},
tel:"3218765"
}
},
{pessoa: {
nome:"Sandra"
}}
Representação de bases
relacionais
Um BD relacional é descrito por um esquema
r1(a,b,c)
r2(c,d)
r1 e r2 são os nomes das relações
a,b,c,d são os nomes dos atributos
No esquema de uma relação, cada atributo é
definido sobre um domínio de valores atômicos.
r1
r2
a
b
c
a1
b1
c1
c2 d2
a2
b2
c2
c3 d3
c
d
{r1:{row:{a:a1,b:b1,c:c1},
row:{a:a2,b:b2,c:c2}
},
r2:{row:{c:c2,d:d2},
row:{c:c3,d:d3}
}
Introdução
Representação de bases
relacionais
Representação num grafo
r1
row
a b c
a1 b1 c1
row
a b c
a2 b2 c2
r2
row
row
Representação de bases de
objeto
Exemplo: considere uma coleção de três pessoas:
Maria tem dois filhos: José e Joana.
Usando o conceito de identidade de objetos,
podemos representar esta coleção da seguinte
forma:
{ pessoa:&p1{
nome:"Maria", idade:45, filho:&p2,filho:&p3
}
pessoa:&p2{
nome:"José", idade:23, mãe:&p1
}
pessoa:&p3{
nome:"Joana", idade:22, mãe:&p1
}
}
Introdução
Representação de bases de
objeto
Representação em grafo
root
pessoa
pessoa
pessoa
Maria
nome
filho
&p2
idade 23
nome
&p1
mãe
filho
45
José
nome Joana
idade
mãe
&p3
idade 22
2.1. Modelagem de dados
semi-estruturados
O modelo OEM
OEM
O modelo OEM
Desenvolvido no projeto TSIMMIS-Stanford
sistema para integração de fontes de dados
heterogêneas
Um objeto OEM é uma quádrupla
(label,oid,type,value)
label: cadeia de caracteres
oid: identificador do objeto
type: complexo ou atômico(int, string, gif, jpeg …)
value:
se o tipo é complexo, conjunto de oid ’s
senão um valor atômico
OEM
O modelo OEM
O modelo OEM é um modelo de grafo.
Os labels estão nos nodos e não nos
arcos como visto anteriormente.
Obs.: Várias extensões ao OEM foram
propostas e consireram labels nos arcos!
Exemplo de Semistructured Data Model
Bib
&o1
complex object
paper
paper
book
references
&o12
&o24
references
author
title
year
&o29
references
author
http
page
author
title publisher
title
author
author
author
&o43
&25
&96
1997
last
firstname
lastname
atomic object
firstname
lastname
&243
“Serge”
“Abiteboul”
“Victor”
Object Exchange Model (OEM)
first
&206
“Vianu”
122
133
Exercício: representação de uma base de
objetos
usando o modelo OEM
esquema ODL da base de objetos
class Estado
(extent estados)
{ attribute string nome;
attribute Cidade capital;
relationship set<Cidade> cidades-em
inverse Cidade::estado-de
}
class Cidade
(extent cidades)
{ attribute string nome;
relationship Estado estado-de
inverse Estado:cidades-em;
}
Exercício: representação de uma base de
objetos usando o modelo OEM
Representação de dados ODMG
{estados: {estado: &e1{nome: "Pernambuco",
capital: &c1,
cidades-em: {Cidade:
&c1,
Cidade: &c2, …}
},
estado: &e2{nome:"Paraíba",
capital:&c6,
cidades-em: {Cidade: &c5,
…}
},
…
},
cidades: {cidade: &c1{nome: "Recife",
estado-de: &e1}, cidade: &c2{nome:
"Caruaru" , estado-de: &e1}, … }
}
Introdução a XML
Introdução
XML ?
« Buzz word »
eXtensible Markup Language
Uma linguagem de descrição de documentos,
definida por um organismo internacional W3C
Um conjunto de tecnologias derivadas:
Xlink, Xpointer, Xschema, DOM, SAX, XSL,…
O esperanto da Web
Introdução
A revolução da Web…
1989 - Primeiro Web Browser
1993 - Mosaic é difundido, há 50 web sites
1994 - Primeiras ferramentas de busca
(WWWW, webcrawler)
1996 - US$ 1M gastos em compras na Web,
presença em 150 países
1997 - 1 milhão de web sites
1998 - 300.000 web servers
2000 - mais de 1 bilhão de páginas web
2002 – quase 2,5 bilhões de páginas web
indexadas (google)
Introdução
A Web hoje…
documentos HTML
voltada para uso humano
gerado automaticamente por aplicações
Fácil de alcançar qualquer Web page,
de qualquer server, em qualquer
plataforma
Introdução
Limites da Web …
aplicações não podem consumir HTML
tecnologia de HTML wrapper é instável
(modifica-se a página => modifica-se o
wrapper)
tecnologia OO (Corba) requer ambiente
controlado
companhias se fundem, formam parcerias;
necessitam de interoperabilidade de forma
rápida
Introdução
Web: Mudança de paradigma
…
Novo padrão Web XML:
XML gerado por aplicações
XML consumido por aplicações
troca de dados
entre plataformas: interoperabilidade na
empresa
entre empresas
Introdução
… estão surgindo ...
As novas aplicações
Comércio Eletrônico
Protocolos "B2B"
Bibliotecas digitais
sistemas distribuídos
…
precisamos de um "super HTML"
XML
Um padrão W3C para complementar HTML
origens: textos estruturados em SGML
motivação:
HTML descreve apresentação
XML descreve conteúdo
http://www.w3.org/TR/REC-xml (2/98)
O Segredo do sucesso de
HTML
Simplicidade: Todo mundo pode escrever HTML
HTML é textual: é legível, pode-se usar qualquer editor, ...
HTML é transportável em qualquer plataforma (o browser é a
aplicação universal)
HTML conecta pedaços de informação através de hypertext li
De HTML para XML
HTML descreve a apresentação
HTML
<h1> Bibliography </h1>
<p> <i> Foundations of Databases </i>
Abiteboul, Hull, Vianu
<br> Addison Wesley, 1995
<p> <i> Data on the Web </i>
Abiteoul, Buneman, Suciu
<br> Morgan Kaufmann, 1999
XML
<bibliography>
<book> <title> Foundations… </title>
<author> Abiteboul </author>
<author> Hull </author>
<author> Vianu </author>
<publisher> Addison Wesley </publisher>
<year> 1995 </year>
</book>
…
</bibliography>
XML descreve o conteúdo
Exemplo
Suponha que um site de e-commerce
precisa emitir uma nota fiscal
Exemplo
Problemas:
Diversos departamentos da empresa usam
estes dados de notas fiscais em diferentes
plataformas, SO e linguagem de programação
Exemplo (cont)
Melhor seria usar XML!
<?xml version=“1.0”>
<NotaFiscal>
<NomeCliente> Ana Silva </NomeCliente>
<EndCliente> Rua das Margaridas, Maceió, AL </EndCliente
<EndEnvio> Rua das Margaridas, Maceió, AL </EndEnvio>
<Item>
<codigo> 123 </codigo>
<descricao> Parafuso 8mm </decricao>
<quantidade> 20 </quantidade>
<preco> 3,00 </preco>
</Item>
<Item> … </Item>
</NotaFiscal>
Exemplo
<ficha>
ficha
nome
fn
ln
Vera
Santos
trab
end
IBGE
cidade
Natal
Elementos fn
Atributos tipo
Dados
52310
Syntaxe
<nome>
<fn>Vera</fn>
<ln>Santos</ln>
email gerente
</nome>
<trab tipo=“gerente">
IBGE
cep
[email protected]
<end>
<cidade>Natal</cidade>
52310
<cep>52310</cep>
</end>
<email>[email protected]</email>
</trab>
tipo
</ficha>
Princípios fundamentais
XML: sucessor de HTML
HTML Hypertext Markup Language.
Um conjunto pré-definido e limitado de tags,
definidas por uma norma (HTML 2.0, 3.2,
4.0).
Estas tags possuem semânticas variadas:
h1,..,h6, title, address, … dando as
indicações estruturais
center,hr,b,i,big,small,… servem para
descrever a apresentação.
Princípios fundamentais
Problemas com HTML
Uma vez criado, um documento é ligado a
uma norma particular (ex. HTML 3.2 )
A visualização de um documento é
fortemente dependente da interpretação que
o navegador faz.
É necessário dispor de várias versões do
documento em função da mídia em que vai
ser apresentado
A indexação de documentos só pode ser feita
sobre a parte textual.
Introdução
XML: uma resposta única a
necessidades variadas
HTML é usada como a lingagem universal de
apresentação de documentos na Web, mas
não é uma linguagem adaptada para
descrever a estrutura destes documentos
As bases de dados atuais são muito rígidas
para manipular dados cuja estrutura é
irregular e evolui com o tempo.
Os segredos de XML
Como HTML:
simples, legível, fácil de aprender
universal e transportável
suportado pela W3C (indústria absorve!)
Mas, Além de HTML
flexível : podemos representar qualquer tipo de
informação
extensível: pode-se representar informação de
qualquer forma
Origem da linguagem XML
Origem
Trabalho cooperativo de um grande número
de empresas e de pesquisadores reunidos no
World Wide Web Consortium (W3C)
400 colaboradores da indústria, entre os quais
Oracle, IBM, Compaq, Xerox, Microsoft, etc..
Laboratórios de pesquisa: MIT - USA, INRIA França, universidade de Keio - Japão
Objetivo: definição de um formalismo para
facilitar a troca de dados na Web
Origem da linguagem
Mandamentos iniciais:
XML deverá ser diretamente utilizável na
Internet
XML deverá suportar uma larga
variedade de aplicações
XML deverá ser compatível com SGML
A criação de páginas XML deverá ser
também o mais simples possível
Origem da Linguagem
Mandamentos iniciais(2)
Os documentos XML deverão ser de
grande legibilidade
A criação de documentos deverá ser
rápida
A sintaxe deverá ser formal e concisa
A concisão do código tem mínima
importância
Origem da lingagem
Histórico
1993: primeiros trabalhos sobre adaptação
das técnicas SGML à Web (Sperberg).
"HTML to the Max: A Manifesto for Adding
SGML Intelligence to the World Wide Web"
Junho 1996: criação de um grupo de trabalho
no W3C
10 fev. 1998: publicação da recomendação
para versão 1.0 da linguagem.
Razões da W3C para usar XML
Permite a publicação eletrônica
internacional independente de mídia
Permite que as empresas definam
protocolos de transferências de dados
Facilita o desenvolvimento de SW para
Web
Disseminação dos dados sem uso formatos
proprietários (caros!)
Exibição de informação customizada
Gestão de metadados facilitada
Princípios fundamentais
XML
XML significa eXtensible Markup
Language
sucessor de HTML
herdeiro de SGML
XML é um linguagem de
descrição e de troca de
documentos estruturados
Princípios Fundamentais
XML: herdeiro de SGML
SGML Standard Generalized Markup
Language, norma ISO 8879:1986
Muito utilizada na indústria para as grandes
técnicas de documentação.
Muito complexa para utilização de «público
em geral»
SGML tem demonstrado as vantagens do
formato estrutural para a Gestão Eletrônica
de Documentos (GED)
XML usa 10% de SGML para representar de
forma eficaz 90% dos documentos
Princípios fundamentais
Noção estrutural
Princípio chave de SGML
Idéia fundamental:
Considere um documento, é desejável
separar completamente
as informações de estrutura
das informações de apresentação.
Exemplo de um documento
Cabeçalho
Objeto
Logotipo
Bar do Carrego
Rua das Bodegas, s/n
58106-920 C. Grande
Tel: 012133564
Fax: 879765426
Campina GRande,
20 de maio de 2001
Sr. Edilson Silva,
Rua das Flores, 12
581293 Caruaru
Saudação
Data
Destinatário
Objet: Dívida?
Forma
Polida
Prezado Senhor,
Bla bla bli, bli blo bla, kkkk vhlg vckjdhklbg
fdskjbvhv feje slc ifehfe fhckh c jeflccj n khef
iheznf jùkvbc lkhdklvn v
Corpo
Aproveito do ensejo para renovar meus protestos de elevada estima e
consideração.
assinatura
Rodapé
Assinatura
Rodapé
Representação XML
<carta>
. . .
</carta>
<cabeca>
<logotipo loc="logo-graph"/>
. . .
<endereco> &abrev-endereco;
</cabeca>
</endereco>
<destinatario>
<nome> Sr Edilson Silva </nome>
<endereco>
<rua> rua das Flores </rua>
<cidade> Caruaru </cidade>
</endereco>
</destinatario>
<objeto> bla bla </objeto>
<data>
20 Maio 2001
</data>
<para>
<saudacao>
Aqui é o primeiro
Prezado Senhor,
parágrafo
</saudacao>
</para>
<corpo>
<para>
. . .
aqui é o segundo ...
</corpo>
</para>
Princípios fundamentais
Pontos importantes
A representação desta carta em XML não tem
nenhuma indicação sobre a apresentação.
As numerosas propriedades gráficas ou
tipográficas estão ausentes da fonte XML.
Estas propriedades serão definidas por
intermédio de uma folha de estilo.
Uma folha de estilo é um conjunto de regras
para especificar a realização concreta de um
documento sobre uma mídia particular.
Princípio de funcionamento das folhas de estilos
<carta>
<cabeca>
. . .
</cabeca>
If carta then ...
If cabeca then …
If corps then
...
If para then
<corpo>
. . .
</corpo>
</carta>
Police new roman,
size 12,
skip first line
If … then …
WindStar 2000
Les rosières en buget
AB562 Saint Pétaouchnoque
Tel: 012133564
Fax: 879765426
Saint Pétaouchnoque,
Le 30 nivose 2004
Editions Duschmol,
12 rue Schmurz
YT123 Rapis
Objeto: Dívida
Prezado Senhot,
Bla bla bli, bli blo bla, kkkk vhlg
vckjdhklbg fdskjbvhv feje slc ifehfe
fhckh c jeflccj n khef iheznf jùkvbc
lkhdklvn v
.
sssinatura
Rodapé
Descoberta de XML
Vantagens de XML
Vantagens de XML
Extensibilidade e estrutura
Em XML, um autor ou uma comunidade de autores inventam
livremente as tags que lhes pareçam úteis para marcar os
componentes de um documento.
Exemplo: diversas formas de representar uma data
<date> 5 janeiro 2000 </date>
<date>
<ano> 2000 </ano>
<mes> 01 </mes>
<dia> 05 </dia>
</date>
<date format='ISO-8601'> 2000-01-05 </date>
Grande liberdade de escolha das estruturas de dados facilita a
troca de dados
comércio eletrônico
transações financeiras e comerciais
pesquisa e indústria de biotecnologias
multimídia
Vantagens de XML
Interoperabilidade
Todos os dados podem ser vistos como documentos
XML e não mais como arquivos no formato X ou Y.
Consequências:
Um servidor de documentos XML é suscetível de
responder a um conjunto de necessidades de uma
organização.
Um simples editor de textos pode tratar o
conjunto de dados de uma organização.
A interoperabilidade dos utilitários está
assegurada.
Vantagens de XML
Modularidade e reutilização
Cada usuário é livre para definir suas próprias
estruturas de documento
O documento pode também estar conforme
as estruturas tipadas, chamadas DTD
Cada comunidade pode propor as estruturas
normalizadas
A validação a um DTD permite a
automatização no tratamento dos dados e
assegura uma possibilidade de controle de
integridade
Vantagens de XML
Accesso às fontes de informação
heterogêneas
A consulta e troca de dados entre as base de dados
heterogêneas é complexa
XML contribui pare minimizar este problema: formato de troca
normalizado, genérico, independente de plataforma
A indexação e consulta de bases de documentos pode se
beneficiar de informações estruturais e textuais.
pesquisa por palavras-chaves: Jorge+Amado retorna todos os
documentos contendo as palavras Jorge e Amado, então as
páginas pessoais de Pedro Amado cujo filho se chama Jorge.
pesquisa estrutural: pesquisa os documentos cujo autor é Jorge
Amado (ie os documentos contendo um elemento autor, ou
escrito-por contendo Jorge e Amado)
XML na prática
Comércio eletrônico: CXML, EBXML
Química, Matemática, Geografia: CML,
MathML
Multimídia: SMIL, MPEG-7, MusicML
Desenhos gráficos: SVG
Protocolos de comunicação: SOAP, UDDI,
WSDL
Transferência de dados: XMI, GML
Configuração de software
E muito mais!!!!
Descoberta de XML
Definição da linguagem XML 1.0
XML 1.0
Exemplos de documentos XML
<document> </document>
<document/>
<document> Bom dia! </document>
<document>
<saudacao> Bom dia! </saudacao>
</document>
<?xml version="1.0" ?>
<document>
<saudacao> Bom dia! </saudacao>
</document>
XML 1.0
Estrutura de um documento
Um documento XML se compõe
de um prólogo cuja presença é facultativa, mas
fortemente aconselhada
<?xml version="1.0"
?>
de uma árvore de elementos, obrigatória
<document>
<saudacao> Bom dia! </saudacao>
</document>
de comentários e de instruções de tratamento,
facultativos
XML 1.0
O prólogo
Contém:
Uma declaração XML, facultativa
da forma:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes">
indica ao processador que vai tratar o documento:
a versão da linguagem XML utilizada
o código de caracteres utilizado
a existência de declarações exteriores ao documento
Uma declaração de tipo de documento,
facultativa
da forma
<!DOCTYPE exemplo SYSTEM "exemplo.dtd" [ declarações
]>
indica a estrutura particular a qual deve estar de
acordo um documento
XML 1.0
Estrutura de um DTD
Um DTD pode compreender duas partes
uma parte externa
a parte externa é definida fora do documento.
É referenciada por uma referência DTD,
frequentemente uma URL. Este mecanismo
permite assegurar uma reutilização de DTDs
frequentemente utilizados.
uma parte interna
utilizada para especializar um DTD externo
genérico ou redefinir certos tipos de elementos
XML 1.0
Estrutura de um elemento (1)
Um elemento é da forma:
<nome attr='valor'> conteúdo </nome>
<nome> é a tag de abertura
</nome> é a tag de fechamento. A presença é obrigatória, a
exceção particular dos elementos nulos, denotado por <nom>
</nom> ou <nom/>
conteúdo é o conteúdo de um elemento . Pode ser:
vazio
texto
outros elementos
uma mistura de texto e elementos
instruções de tratamento
comentários
attr='valor' representa um conjunto eventualmente vazio
de atributos, ou seja de pares (nome,valor). Os nomes dos
atributos são únicos num elemento.
XML 1.0
Estrutura de um elemento (2)
Um nome de elemento é uma sequência não nula de caracteres
que pode conter
ponto
caracter dois-pontos (:) é utilizado, mas com um sentido
particular
deve satisfazer as seguintes restrições
o primeiro caracter deve ser alfabético ou um undescore
os três primeiros caracteres não devem formar uma cadeia
cuja representação em letras minúsculas seja "xml".
caracteres alphanuméricos
undescore
sinal de menos
XML 1.0
Estrutura de um elemento (2)
Exemplos de nomes de elementos
corretos
_toto
Nome_sociedade
xsl:rule
X.11
incorretos
1998-catalogo
xmlSpecification
nom sociedade
Exemplo: Banco FirstBank
<?xml version="1.0" >
<banco>
<cliente>
<nomeCliente> Helio </nomeCliente>
<ruaCliente> Principal </ruaCliente>
<cidadeCliente> Recife </cidadeCliente>
<conta>
<numero> A-102 </numero>
<agencia> Central </agencia>
<saldo>
400 </saldo>
</conta>
<conta>
…
</conta>
</cliente>
.
.
</banco>
XML 1.0
Sintaxe dos atributos
Um atributo é um par nome='valor' que permite de
caracterizar um elemento. Um elemento pode ter
vários atributos. Neste caso, os pares nome='valor'
serão separados por um espaço.
Exemplos
<relatorio lingua= ’pt' ult-modif='08/07/99'>
<anuario generator='SQL2XML V2.0'
update='07.08.99'>
O nome de um atributo obedece as mesmas regras
que o nome de um elemento
O valor de um atributo é uma string entre aspas(") ou
apóstrofos simples ('). Um valor de atributo não deve
conter os caracteres ^, % e &.
Exemplo Atributos Banco
<conta tipo=“poupanca” taxa-mensal=“5”>
<numero> A-102 </numero>
<agencia> Central </agencia>
<saldo>
400 </saldo>
</conta>
Elementos X Atributos?
No contexto de documentos, atributos são
parte da marcação (markup), enquanto
conteúdos dos subelementos são parte do
conteúdo básico do documento.
No contexto de representação de dados, a
diferença não é clara e pode ser confusa:
A mesma informação pode ser representada de duas
formas:
<conta numero = “A-101”> …. </conta>
<conta>
<numero>A-101</numero> …
</conta>
Sugestão: use attibutos para identificadores de
elementos, e use subelementos para conteúdo
Seção CDATA
Uma seção CDATA instrui o parser a ignorar os caracteres de markup
Exemplo:
<![CDATA[
*p = &q;
b = (i <= 3);
]]>
Entre o início da seção, <![CDATA[ e o fim da seção, ]]>,
todos os caracteres são passados diretamente para a aplicação,
sem interpretação.
A única string que não pode ocorrer numa seção CDATA é ]]>.
Comentários
Comentários iniciam com ”<!--” e terminam com
”-->”. (só não podem conter o string ”--”).
Ex.: <!-- Isto é um comentário -->
Comentários podem ser colocados em qualquer
linha do documento.
XML 1.0
Árvore de elementos
Um documento XML contém uma árvore de elementos,
com as seguintes restrições:
Existe num documento um único elemento pai que
contém todos os outros. É a raiz do documento.
Todo elemento distinto da raiz é totalmente
incluído dentro de seu pai. Assim:
<p> <b> bla bla </p> bla </b>
não é uma estrutura XML.
XML 1.0
Documentos bem formados
Um documento é dito bem formado se:
está de acordo com as regras sintáticas de XML
(tags são aninhadas propriamente e atributos são
únicos)
<?xml version="1.0"
standalone="yes" ?>
<document>
<saudacao> Bom dia! </saudacao>
</document>
Ex. de uma documento não bem
formado:
<document>
<saudacao> Bom dia!
</document>
</saudacao>
XML 1.0
Documentos válidos
Um documento é dito válido se:
seu prólogo contém uma declaração de tipo de documento
sua árvore de elementos respeita a estrutura definida pelo
DTD
<?xml version="1.0" encoding="ISO-8859-1"
standalone="yes" ?>
<!DOCTYPE document [
<!ELEMENT document (saudacao)>
<!ELEMENT saudacao (#PCDATA)>
]>
<document>
<saudacao> Bom dia! </saudacao>
</document>
XML 1.0
Noção de DTD
Um documento válido deve conter uma declaração de
tipo de documento. Esta declaração pode fazer
referência, por intermédio de uma URL a um arquivo
externo. Este arquivo é chamado de DTD (Definição
de Tipo de Documento).
Exemplo
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
<!DOCTYPE document SYSTEM "acolhida.dtd">
<document>
<saudacao> Bom dia! </saudacao>
</document>
XML 1.0
Noção de DTD
<!–- Arquivo acolhida.dtd. Exemplo de DTD simples -->
<!–- Autor: -->
<!–- Data: -->
<!–- a declaração XML não é obrigatória dentro de um DTD -->
<!–- permite assegurar que os documentos que a referenciam -->
<!–- utilizam a mesma versão de XML
-->
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes" ?>
<!–- Definição do elemento raiz -->
<!ELEMENT document (saudacao)>
<!–- Um elemento saudacao contém texto -->
<!ELEMENT saudacao (#PCDATA)>
XML 1.0
Conteúdo de um DTD
Um DTD pode conter as declarações
de
de
de
de
de
elementos
listas de atributos
entidades gerais
entidades parametrizadas
notações
como também comentários
XML 1.0: elementos
Declaração de elemento
Uma declaração de elemento é da forma
<!ELEMENT nome modelo>
ELEMENT é uma palavra-chave e se escreve
imperativamente em maiúsculas
nome é um nome válido de um elemento
modelo é o modelo de conteúdo deste elemento.
Distinguimos cinco modelos de conteúdo
elementos
dados
misto
livre
vazio
Modelo de conteúdo de
elementos (1)
Sequência de elementos filhos
( .., .., ..)
Exemplo
<!ELEMENT capitulo (titulo,intro,secao)>
Um elemento capitulo cujo conteúdo, imperativamente e nesta
ordem, contém sub-elementos titulo, intro e secao.
Alternativa
( ..| ..| ..)
Exemplo
<!ELEMENT capitulo (titulo,intro,(secao|secoes))>
Indicadores de ocorrência *,+,?
Um nome de elemento pode ter um indicador de orrorrência:
p* : p pode ocorrer zero, uma ou várias vezes dentro do conteúdo de um
instância
p+ : p pode ocorrer uma ou várias vezes
p? : p pode ocorrer zero ou uma vez
Modelo de conteúdo de
elementos (2)
Exemplos
<!ELEMENT capitulo (
titulo,
intro?,
secao+ ) >
<!ELEMENT secao (
titulo-secao,
texto-secao ) >
<!ELEMENT texto-secao (p|a)* >
Modelo de conteúdo de dados
A presença de dados no conteúdo de
um elemento é especifidada pela
palavra-chave #PCDATA
Exemplo
<!ELEMENT p (#PCDATA) >
Modelo de conteúdo misto
Este modelo permite definir os modelos de conteúdo
podendo misturar dados e elementos
Forma do modelo
(#PCDATA | nome1 | …|nomen)*
Exemplos de declarações
<!ELEMENT p
(#PCDATA | negrito | italico | sublinhado)* >
<!ELEMENT negrito (#PCDATA|italico|sublinhado)* >
<!ELEMENT italico (#PCDATA) >
<!ELEMENT sublinhado (#PCDATA) >
Exemplo de uso
<p> um parágrafo pode conter texto <negrito> em
evidência </negrito> ou em <italico> itálico
</italico></p>
Modelo de conteúdo livre (1)
Um elemento pode ser definido como sendo
um conteúdo qualquer, desde que este
conteúdo respeite as regras gerais da
linguagem XML.
Exemplo
<!ELEMENT qualquer ANY>
Para que o conteúdo de um elemento de
modelo de conteúdo livre seja válido, é
necessário que, se ele contiver elementos,
estes sejam declarados num DTD
Modelo de conteúdo livre (2)
Utilidade: este modelo de conteúdo é particularmente útil quando
da criação de um DTD complexo
Exemplo
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
relatorio ANY>
capitulo ANY>
secao ANY>
titulo-secao ANY>
ilustracao ANY>
bibliografia ANY>
indice ANY>
p ANY>
negrito (#PCDATA)>
titulo (#PCDATA)>
autor (prenome+,nome)>
nome (#PCDATA)>
prenome (#PCDATA)>
XML 1.0: elements
Modelo de conteúdo vazio
Um elemento pode ser declarado como
obrigatoriamente vazio, usando a palavra-chave
EMPTY.
Exemplo de declarações
<!ELEMENT p (#PCDATA|bibref)* >
<!ELEMENT bibref EMPTY>
<!ATTLIST bibref ref IDREF #REQUIRED>
Exemplo de utilização
<p> para uma definição precisa, veja <bibref
ref='REC-xml-19980210'/> </p>
Modelo de conteúdo vazio
Observações:
quando o modelo de conteúdo de um
elemento é o modelo vazio, deve
obrigatoriamente obedecer a sintaxe
<nome/>
não é possível misturar EMPTY a uma outra
construção de modelo de conteúdo
XML 1.0
Exemplo de DTD
<?xml version="1.0"?>
<!ELEMENT EMAIL (TO+, FROM, CC*, BCC*, SUBJECT?, BODY?)>
<!ATTLIST EMAIL
LANGUAGE (Western|Greek|Latin|Universal) "Western"
ENCRYPTED CDATA #IMPLIED
PRIORITY (NORMAL|LOW|HIGH) "NORMAL">
<!ELEMENT TO (#PCDATA)>
<!ELEMENT FROM (#PCDATA)>
<!ELEMENT CC (#PCDATA)>
<!ELEMENT BCC (#PCDATA)>
<!ATTLIST BCC
HIDDEN CDATA #FIXED "TRUE">
<!ELEMENT SUBJECT (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>
<!ENTITY SIGNATURE "José Silva">
Exercício 1
Com o DTD anterior gere um
documento XML válido
Exemplo de um DTD de Banco
<!DOCTYPE banco [
<!ELEMENT banco ( ( conta | cliente | deposito)+)>
<!ELEMENT conta (numero agencia saldo)>
<! ELEMENT cliente(nomeCliente rua cidade)>
<! ELEMENT deposito (nomeCliente conta)>
<! ELEMENT conta (#PCDATA)>
<! ELEMENT agencia (#PCDATA)>
<! ELEMENT saldo(#PCDATA)>
<! ELEMENT nomeCliente (#PCDATA)>
<! ELEMENT rua(#PCDATA)>
<! ELEMENT cidade(#PCDATA)>
]>
XML 1.0: atributos
Declaração de atributos
Um atributo é um par nome-valor
associado a um elemento
uma declaração de atributos num DTD
permite especificar os atributos que
poderão ou deverão estar associados às
instâncias dos elementos.
Forma da declaração
<!ATTLIST nome-elemento nome-atributo
tipo-atributo declaração-default>
XML 1.0: atributos
Declaração de atributos
Exemplos
<!ELEMENT
<!ATTLIST
<!ATTLIST
<!ATTLIST
ex1
ex1
ex1
ex1
(#PCDATA)>
xml:lang NMTOKEN #IMPLIED >
target ID #implied >
nb (1 | 2 | 3) '1'>
equivalente a
<!ATTLIST ex1 xml:lang NMTOKEN #IMPLIED >
target ID #implied >
nb (1 | 2 | 3) '1'>
XML 1.0: atributos
Tipo de atributo
O tipo de atributo pode ser:
CDATA: o valor do atributo é uma cadeia de caracteres
ID ou IDREF: permite definir um identificador para um
documento
Uma lista de escolhas num conjunto de tokens, ou
identificadores lógicos
NMTOKEN ou NMTOKENS: abreviação de Name Token.
Permite ao atributo de ter seu valor de um conjunto de
nomes simbólicos.
ENTITY ou ENTITIES: permite que um atributo tome
como valor o nome de uma entidade externa não XML
NOTATION: define um atributo de notação
XML 1.0: atributos
Declaração default
Possui quatro formas
valor por default do atributo
#REQUIRED: cada instância deverá ter um
atributo deste nome. Não aceita valor default.
#IMPLIED: presença facultativa. Não aceita valor
default.
#FIXED: fixa o valor deste atributo para toda
instância.
XML 1.0: atributos
Exemplos (1)
Atributo CDATA
<!ATTLIST f att1 CDATA #FIXED '<toto>' >
O atributo att1 dos elementos de tipo f tem um valorr constante: o string
<toto>.
Atributo enumerado
Exemplo 1
<!ELEMENT data (#PCDATA) >
<!ATTLIST data formato (ANSI | ISO | BR) #REQUIRED>
<data formato= ’BR'> 24 Maio 1998 </data>
<data formato='ISO'> 1998-05-24 </data>
O atributo formato é obrigatório e deve ter valores do tipo ANSI, ISO ou BR
Exemplo 2
<!ELEMENT list (item,item+)>
<!ELEMENT item (list|#PCDATA)>
<!ATTLIST list type (ord | num | alpha) 'ord'>
<list type='alpha'>
<item> Maria </item>
<item> Pedro </item>
<item> José </item>
</list>
XML 1.0: atributos
Exemplos (2)
Atributos ID e IDREF
Estes tipos de atributos permitem de 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>
Obs.: nós não referenciamos de fato uma seção, mas um elemento do
documento que possui um atributo do tipo ID e cujo valor é X321.
Exemplo DTD Banco com
atributos
Trecho de um DTD de Banco com ID e IDREF
<!DOCTYPE banco-2[
… ...
<!ELEMENT conta (agencia, saldo)>
<!ATTLIST conta numero ID # REQUIRED
proprietarios IDREFS # REQUIRED>
<!ELEMENT cliente(nomeCliente, rua, cidade)>
<!ATTLIST cliente
clienteID
ID
# REQUIRED
contas
IDREFS # REQUIRED>
…
]>
Exemplo de XML para DTD
Banco com ID e IDREF
<banco-2>
<conta numero=“A-401” proprietarios=“C100 C102”>
<agencia> Centro </agencia>
<saldo>
500 </saldo>
</conta>
<cliente clienteID=“C100” contas=“A-401”>
<nomeCliente>José Silva </nomeCliente>
<rua> Juçaras </rua>
<cidade> Maceió</cidade>
</cliente>
<cliente clienteID=“C102” contas=“A-401 A-402”>
<nomeCliente> Maria Lima </nomeCliente>
<rua> Flores </rua>
<cidade> Salvador </cidade>
</cliente>
</banco-2>
XML 1.0: entidades
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
<: <
>: >
&: &
XML 1.0: entidades
Entidades internas
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> ©right; </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
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
XML 1.0: Exemplos
Exemplo
<?xml version='1.0' ?>
<!DOCTYPE db [
<!ELEMENT db (pessoa*)>
<!ELEMENT pessoa (nome, idade, email)>
<!ELEMENT nome (#PCDATA)>
<!ELEMENT idade (#PCDATA)>
<!ELEMENT email (#PCDATA)>
]>
<db>
<pessoa> <nome> Pedro Maia </nome>
<idade> 33 </idade>
<email> [email protected] </email>
</pessoa>
<pessoa> <nome> Ana Maria </nome>
<idade> 24 </idade>
<email> [email protected] </email>
</pessoa>
<pessoa> . . . </pessoa>
</db>
XML 1.0: Exemplos
DTDs como esquemas
Exemplo
Seja o esquema r1(a, b, c) e r2 (c, e)
<db> <r1> <a> a1 </a> <b> b1 </b> <c> c1 </c>
</r1>
<r1> <a> a2 </a> <b> b2 </b> <c> c2 </c>
</r1>
<r2> <c> c1 </c> <d> d1 </d> </r2>
<r2> <c> c2 </c> <d> d3 </d> </r2>
</db>
<!DOCTYPE db[
<!ELEMENT (r1*|r2*)>
<!ELEMENT r1(a,b,c)>
<!ELEMENT r2(c,d)>
<!ELEMENT a (#PCDATA)>
<!ELEMENT b (#PCDATA)>
<!ELEMENT c (#PCDATA)>
<!ELEMENT d (#PCDATA)>
]>
XML 1.0: Exemplos
Exercício 2: Dado o documento XML crie um DTD para
o mesmo
<?xml version='1.0' ?>
<!DOCTYPE livro SYSTEM "livro.dtd">
<livro>
<titulo> XML e Java </titulo>
<autor> João Silva </autor>
<conteudo>
<capitulo focus="XML">
Introdução
</capitulo>
<capitulo focus="XML"> DTD </capitulo>
<capitulo focus="XML"> Elementos
</capitulo>
<capitulo focus="Java"> SAX </capitulo>
<capitulo focus="Java"> DOM </capitulo>
<conteudo>
<bibliografia> bla bla bla </bibliografia>
<copyright> &ufcgCopyright; </copyright>
</livro>
Limitações de DTDs como
esquemas
DTD impõe ordem
Não existe a noção de tipos de dados atômicos (int,
float, etc)
Não podemos especificar uma faixa de valores de
domínio
IDREF não é relacionado a um tipo.
Tipos são associados com tags => elementos com
mesmo nome porém pertencendo a diferentes tipos
(nome de pessoa e nome de um curso) não podem
usar o mesmo elemento nome. Nesta caso ou
redefinimos nomePessoa e nomeCurso ou usamo
namespaces com os qualificadores, pessoa:nome e
curso:nome