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