Introdução Definição Validação Apresentação Processamento Banco de Dados Universo XML Prof. Enzo Seraphim
Popularidade do HTML Extremamente simples Estilo próprio para formatação de documentos Ligações de hipertexto criadas facilmente Suporte a formulários Interação homem x máquina Estrutura limitada e simples número fixo de tags projetado para formatação de documentos entregues através da Web
Quem deveria suportar? O que mudou entre as versões de HTML? Tags de apresentação O formato que descreve como uma página Web deve ser exibida; não oferece nenhuma descrição dos dados. Como prover suporte a crescente necessidade de desenvolvedores de acrescentarem tags para o padrão?
Solução XML W3C: World Wide Web Consortium http://www.w3.org Quem? Quando? Extensible Markup Language - XML. W3C Recommendation, 10 February 1998, [Online] Como? http://www.w3.org/xml/ Onde?
XML x HTML XML Define o conteúdo (dados) Tags descrevem os dados, como temperatura, humidade, etc. Tags definidas pelo criador do documento Apresentação definida por folhas de estilo Dados separados da apresentação e do processamento dos dados HTML Descreve o formato de apresentação Número limitado e não extensível de tags Inadequado para gerenciamento de grande volume de dados
XML x HTML H T M L X M L <h1>josé da Silva</h1> <h2>ze@bol.com.br</h2> <p> <b>av. Brasil, 123</b> <i>(099)1234 5678 com</i> </p> <cartao> <nome> José da Silva </nome> <email>ze@bol.com.br</email> <endereco>av. Brasil, 123</endereco> <telefone tipo="comercial"> <ddd>099</ddd> <numero>1234 5678</numero> </telefone> </cartao>
Universo XML Estrutura e Semântica (Validação): DTDs e XML Schemas Apresentação: CSS, XSLT e XPath Metadados e mais semântica: RDF Estrutura de hipertexto: XLink e XPointer Processamento de documentos XML DOM, SAX
Linguagens derivadas XML
Introdução Definição Validação Apresentação Processamento Banco de Dados Universo XML Prof. Enzo Seraphim
XML Extensible Markup Language Uma maneira de representar informação Documentos XML são documentos de texto. É uma linguagem de marcação (markup), onde as tags (marcas) são utilizadas para estruturar a informação. Essa estrutura define uma hierarquia de elementos a partir de uma raiz A hierarquia das tags são criadas de forma simples pelo autor do documento XML. Menor documento tem um elemento raiz (vazio ou não)
Documento XML Todo documento deve ter somente um elemento raiz. Elementos podem incluir outros elementos, formando uma estrutura de alinhamento de elementos. Não é permitido desrespeitem desse alinhamento <i> <b> itálico e negrito </i> </b> Instrução de processamento para Parses: versão XML e o character set utilizada. <?xml version ="1.0" encoding="iso-8859-1"?> Parsers XML não devem corrigir e interpretar Documentos que não estão bem formatado
Partes de um DOC XML PRÓLOGO (opcional) Instruções processamento - atributos opcionais: version, encoding, standalone Document Type Declaration: Interno quando o DTD está definido no mesmo arquivo XML. Externo quando o DTD é um outro arquivo: Corpo um ou mais elementos hierarquicamente organizados; EPÍLOGO (opcional) pode conter comentario, instruções de processamento e/ou brancos
Prólogo Corpo Epílogo <?xml version ="1.0" encoding="iso-8859-1"?> <?comando parametro="abc"?> <!DOCTYPE cartao [ <!ELEMENT cartao (nome,email,endereco,telefone)> <!ELEMENT nome (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ELEMENT endereco (#PCDATA)> <!ELEMENT telefone (ddd, numero)> <!ATTLIST telefone tipo CDATA #REQUIRED> <!ELEMENT ddd (#PCDATA)> <!ELEMENT numero (#PCDATA)> ]> <cartao> <nome>josé da Silva</nome> <email>ze@bol.com.br</email> <endereco>av. Brasil, 123</endereco> <telefone tipo="comercial"> <ddd>099</ddd> <numero>1234 5678</numero> </telefone> </cartao> <!-- exemplo cartao visita -->
Elementos de um DOC XML Instruções de Processamento Comentário Elementos Atributos Nó de Texto
Instruções de Processamento Mecanismo de inserção de informações explícitas em um documento destinadas a alguma aplicação. Sintaticamente uma instrução de processamento é: <?comando parametro= "valor"?> Os parsers XML não interpretam tais informações, somente a instrução inicial; <?xml version ="1.0" encoding="iso-8859-1"?> A aplicação deve saber o que fazer com a instrução definida.
Codificação Caracteres <?XML version= 1.0 encoding= UTF-8?> ASCII - 1 byte, 7 bits 128 combinações ISO 8859-1 (Latin-1) 256 combinações (ASCII + Europa Ocidental) ISO 8859-(2...15) 256 combinações (ASCII + outras línguas) Unicode 2bytes 65534 combinações, onde 40.000 estão definidas (20000 usadas para os ideogramas Han japonês, chinês, koreano) e 25.000 reservado para futuras extensões. UTF-8 versão compacta do Unicode que usa 1 byte para a maioria dos caracteres e 3 bytes para os menos comuns
Instruções de Processamento <?xml version ="1.0" encoding="iso-8859-1"?> <!-- exemplo cartao visita --> <?comando parametro="abc"?> <cartao> <nome>josé da Silva</nome> <email>ze@bol.com.br</email> <endereco>av. Brasil, 123</endereco> <telefone tipo="comercial"> <ddd>099</ddd> <numero>1234 5678</numero> </telefone> </cartao>
Comentários Todo dado entre essas marcas é ignorado pelo processador XML. Sintaticamente uma instrução de processamento é: <!-- e terminam com --> Os parsers XML não interpretam tais informações; Não podem acontecer : antes da instrução de processamento XML que deve ser a primeira sentença de um documento; nem dentro de um elemento. não pode aparecer em um comentário, exceto como parte dos delimitadores.
Comentários <?xml version ="1.0" encoding="iso-8859-1"?> <!-- exemplo cartao visita --> <?comando parametro="abc"?> <cartao> <nome>josé da Silva</nome> <email>ze@bol.com.br</email> <endereco>av. Brasil, 123</endereco> <telefone tipo="comercial"> <ddd>099</ddd> <numero>1234 5678</numero> </telefone> </cartao>
Elementos Construtor básico de um documento que forma a estrutura de alinhamento do documento. Elementos podem incluir descendentes: outros elementos; atributos; e nó de texto Os elementos de abertura são definidos: <nome do elemento> Os elementos de fechamento são definidos: </nome do elemento> Elemento vazio são definidos: <nome do elemento/>
Nomeação dos Elementos Os nomes dos elementos são sensitivos a maiúsculo e minúsculo devem começar com uma letra ou "_"; caracteres seguintes podem incluir letras, dígitos, hífens, pontos ou " _"; não pode conter caracter espaço. dois pontos é válido, embora é reservado para composições especiais de nomes (Namespaces )
Elementos <?xml version ="1.0" encoding="iso-8859-1"?> <!-- exemplo cartao visita --> <?comando parametro="abc"?> <cartao> <nome>josé da Silva</nome> <email>ze@bol.com.br</email> <endereco>av. Brasil, 123</endereco> <telefone tipo="comercial"> <ddd>099</ddd> <numero>1234 5678</numero> </telefone> </cartao>
Atributos Estão dentro dos elementos de abertura ou elementos vazios; As mesmas regras de composição de nomes de elementos aplicam-se para nomes de atributos. Os valores dos atributos devem ser delimitadas por aspas. Elementos podem incluir um descendente nó de texto Um elemento pode conter um ou mais atributos, que são pares nome="valor".
Atributos <?xml version ="1.0" encoding="iso-8859-1"?> <!-- exemplo cartao visita --> <?comando parametro="abc"?> <cartao> <nome>josé da Silva</nome> <email>ze@bol.com.br</email> <endereco>av. Brasil, 123</endereco> <telefone tipo="comercial"> <ddd>099</ddd> <numero>1234 5678</numero> </telefone> </cartao>
Nó de Texto Armazenam os valores para os elementos ou atributos <?xml version ="1.0" encoding="iso-8859-1"?> <!-- exemplo cartao visita --> <?comando parametro="abc"?> <cartao> <nome>josé da Silva</nome> <email>ze@bol.com.br</email> <endereco>av. Brasil, 123</endereco> <telefone tipo="comercial"> <ddd>099</ddd> <numero>1234 5678</numero> </telefone> </cartao>
Hierarquia / cartao nome Jose da Silva email ze@bol.com.br endereco Av. Brasil, 123 telefone tipo comercial ddd 099 numero 1234 5678 raiz nó elemento nó atributo nó texto
Introdução Definição Validação Apresentação Processamento Banco de Dados Universo XML Prof. Enzo Seraphim
Validação de documento Pode-se definir a gramática de um documento XML através: Document Type Definition (DTD) XML SCHEMA O documento XML é válido somente se satisfaz todas definições da gramática. Documentos não válidos são individualistas e não é possível prever a hierárquica do documentos
A Criação de um DTD Requer análise de documentos que elementos irão ocorrer? como se relacionam entre si? como irão os usuários interagir com eles? Tarefa difícil quanto mais amplo o escopo maior a complexidade difícil conseguir a concordância de todos os envolvidos
Document Type Declaration Interno quando o DTD está definido no mesmo arquivo XML. <!DOCTYPE livroreceita[ ]> Externo quando o DTD é um outro arquivo: <!DOCTYPE livroreceita SYSTEM "receita.dtd">
Exemplo (cartao.xml) <?xml version ="1.0" encoding="iso-8859-1"?> <!DOCTYPE cartao SYSTEM "cartao.dtd"> <agenda> <cartao> <nome>josé da Silva</nome> <email>ze@bol.com.br</email> <endereco>av. Brasil, 123</endereco> <telefone tipo="comercial"> <ddd>099</ddd> <numero>1234 5678</numero> </telefone> </cartao> </agenda>
Exemplo (cartao.dtd) <!DOCTYPE agenda [ <!ELEMENT agenda(cartao*) <!ELEMENT cartao(nome,email?,endereco,telefone)> <!ATTLIST cartao apelido ID #REQUIRED"> <!ELEMENT nome (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ELEMENT endereco (#PCDATA)> <!ELEMENT telefone (ddd, numero)> <!ATTLIST telefone tipo CDATA #REQUIRED"> <!ELEMENT ddd (#PCDATA)> <!ELEMENT numero (#PCDATA)> ]>
Declarações DTD ELEMENT declaração do elemento ATTLIST declaração do atributo do elemento ENTITY conteúdo reusável NOTATION declarações de conteúdo externo que não deve ser parsed
Elemento Define a hierarquia do documento; <agenda> + <cartao> - <nome> - <email> - <endereco> + <telefone> - <ddd> - <numero> + <cartao>... <agenda> <cartao> <nome> José da Silva </nome> <email>ze@bol.com.br</email> <endereco>av. Brasil, 123</endereco> <telefone tipo="comercial"> <ddd>099</ddd> <numero>1234 5678</numero> </telefone> </cartao> </agenda>
ELEMENT, : elementos devem ocorrer na ordem especificada; : apenas um elemento deve ocorrer; + : o elemento deve ocorrer 1 ou + vezes; * : o elemento pode ocorrer zero ou + vezes;? : o elemento é opcional; #PCDATA: uma seqüência de caracteres; EMPTY: indica que o elemento é vazio;
Exemplo (cartao.dtd) <!DOCTYPE agenda [ <!ELEMENT agenda(cartao*) <!ELEMENT cartao(nome,email?,endereco,telefone)> <!ATTLIST cartao apelido ID #REQUIRED"> <!ELEMENT nome (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ELEMENT endereco (#PCDATA)> <!ELEMENT telefone (ddd, numero)> <!ATTLIST telefone tipo CDATA #REQUIRED"> <!ELEMENT ddd (#PCDATA)> <!ELEMENT numero (#PCDATA)> ]>
ATTLIST CDATA: string ID: ident único IDREF/IDREFS: referencia(s) para um ID (existente) #REQUIRED: obrigatório #IMPLIED: opcional #FIXED: sempre fixo, aparece opcionalmente apenas valor: valor assumido qdo não especificado [Valor enumerado]: um entre os valores
Exemplo (cartao.dtd) <!DOCTYPE agenda [ <!ELEMENT agenda(cartao*) <!ELEMENT cartao(nome,email?,endereco,telefone)> <!ATTLIST cartao apelido ID #REQUIRED"> <!ELEMENT nome (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ELEMENT endereco (#PCDATA)> <!ELEMENT telefone (ddd, numero)> <!ATTLIST telefone tipo CDATA #REQUIRED"> <!ELEMENT ddd (#PCDATA)> <!ELEMENT numero (#PCDATA)> ]>
Elemento x Atributo Em geral elemento armazena dado e atributos armazenam metadados Os elementos armazenam as informações mais relevantes, enquanto os detalhes ficam nos atributos Atributos não representam bem estruturas
ENTITY Entidades parâmetros: para reuso em DTDs Gerais: para reuso, deve resultar em XML bem-formado após parsing <!ENTITY unifei Universidade de Federal de Itajubá > <aluno universidade= &unifei />
Outras Formas de Validação DTD vantagem: é simples; desvantagens: não usa sintaxe XML e é limitado. XML Schema vantagem: é XML; permite validação mais detalhada. desvantagem: é muito mais complicado que DTD Em certos casos é preciso realizar validação adicional usando processamento em alguma linguagem (Python, Java)
Introdução Definição Validação Apresentação Processamento Banco de Dados Universo XML Prof. Enzo Seraphim
Benefícios Acesso mais fácil à informação através de atribuição de significado mais relevante aos dados; Desenvolvimento de aplicações mais flexíveis; Integração de dados de origens diferentes; Múltiplas visões dos dados; Formas de Transformação: CSS Style Sheet XSL Style Sheet
CSS Cascading Style Sheets Originalmente preparada para HTML. Uma lista de regras, onde cada regra começa com um seletor (nomes do elemento) ao qual os estilos de apresentação são aplicados. Se não houver regras que especifiquem o estilo de um determinado elemento, esse elemento as herda de seu elemento pai. Duas versões versão CSS1e CSS2.
CSS Cascading Style Sheets Atribui estilos somente a conteúdo que já aparece no documento. Não pode: adicionar conteúdo; transformar o conteúdo. Através de instrução de processamento <?xml-stylesheet type="text/css" href= arq.css"?>
Exemplo: X M L <nome> José da Silva </nome> <email>ze@bol.com.br</email> <endereco>av. Brasil, 123</endereco> <telefone tipo="comercial"> <ddd>099</ddd> <numero>1234 5678</numero> </telefone> nome { display: inline; font-size: 16pt; fontweight: bold; border: 2px inset } email { display: inline; font-size: 16pt; fontweight: bold; border: 2px inset } endereco { color: red; display: block; font-size: 12pt } ddd { color: blue; display: block; font-size: 12pt } ddd { color: blue; display: block; font-size: 12pt }
XSL Extensible Style Language Recomendação da W3C. Geração de texto constante Supressão de conteúdo Movimentação de texto (ex: mudança de ordem de nome e sobrenome) Duplicação de texto (ex: cópia de títulos para produção de um índice) Ordenação Transformações mais complexas que computem novas informações em função das informações existentes.
XSL Extensible Style Language
Transformação Através de instrução de processamento <?xml-stylesheet type="text/xsl" href= arq.xsl"?> Transformação no clientes: Web Browser Transformação no Servidor: Web Aplication Cocoon Apache novas características foram adicionadas.
Elementos XLS xsl:for-each select xsl:value-of xsl:if xsl:attribute xsl:sort xsl:number
Introdução Definição Validação Apresentação Processamento Banco de Dados Universo XML Prof. Enzo Seraphim
Processamento carregar dados do documento separar diversos tipos de dados (nome dos elementos, atributos, conteúdo, subelementos...) expandir todas as entidades utilizadas verificar se o documento é válido montar uma estrutura que represente o documento navegar pela estrutura montada e acessar os componentes do documento
Motivação Construir um programa para processar documentos XML Pode ser uma tarefa trabalhosa se não for utilizado algum ferramental de suporte. Bibliotecas ajudam na manipulação do XML Como construir uma biblioteca que funcione em qualquer linguagem de programação? Definição de API permitindo que sejam implementadas em sua linguagem de programação favorit
Aplication Programming Interface Baseados Eventos SAX Oferece métodos que respondem a eventos produzidos durante a leitura do documento; Baseados Árvores Document Object Model (DOM) monta uma estrutura hierárquica de objetos, em forma de árvore, que permite a navegação na estrutura do documento;
SAX Foi editada e publicada por David Megginsom ( www.megginson.com/sax) É um parser baseado em eventos Dispara eventos durante processamento do documento eventos podem ser capturados por ouvintes cadastrados ações podem ser tomadas em cada situação Exemplos de Eventos: inicio e fim do documento início e fim do elemento (pode-se descobrir qual) nó de caractere nó de comentário
Implementação (Eventos) <carta> <mensagem id="1">bom dia!</mensagem> </carta> startdocument() startelement("carta", []) startelement("mensagem", [Attribute("id","1")]) characters("bom dia!") endelement("mensagem") endelement("carta") enddocument() Programador deve implementar um objeto "ouvinte" para capturar os eventos e extrair as informações desejadas
DOM W3C (http://www.w3.org/dom/) estabeleceu a recomendação DOM Document Object Model. Os documentos XML são representados estrutura de árvore que reflete a sua estrutura lógica hierárquica. Suporta a manipulação da estrutura e conteúdo do documento, permitindo : criar um novo documento XML navegar na árvore XML modificar, remover ou adicionar nós (elementos, atributos, texto, comentários, etc.)
DOM: Hierarquia
Introdução Definição Validação Apresentação Processamento Banco de Dados Universo XML Prof. Enzo Seraphim
Oracle Suporta para padronizar o SQL para normalizado pelo consórcio W3C através do XQuery; A Oracle a partir do banco de dados 9i oferece suporte XML: Transformar modelo relacionar para XML Inserir dados XML Consulta em campos XML Indexação de campos XML
Transformando Select em XML XMLElement (nome tag, campo) Adiciona elementos no select XMLAttributes( campo as "valor chave") Adiciona atributos no select O alinhamento de XMLElement formam a hierarquia do documento.
Transformando Select em XML select XMLElement ("cliente", nome) from enderecos; select XMLElement ("cartao", XMLAttributes (nick as "apelido"), XMLElement ("cliente", nome), XMLElement ("endereco", email)) from enderecos;
Armazenamento XML Na tabela com o tipo de dado (Oracle 9i) : XMLType Exemplo de criação create table cartoes ( nome varchar(30), cartaoxml XMLType); Para inserir em um campo XMLType deve-se usar a função XMLType;
Armazenamento XML Exemplo insert into cartoes values ('zé', XMLType(' <cartao> <nome>josé da Silva</nome> <email>ze@bol.com.br</email> <endereco>av. Brasil, 123</endereco> <telefone tipo="comercial"> <ddd>099</ddd> <numero>1234 5678</numero> </telefone> </cartao>'));
Consulta campos XML extractvalue(campo XML, expressão Xpath) Extrai um valor de um campo XML sem os tags Exemplo: select extractvalue(cartaoxml, '/cartao/telefone@tipo'), extractvalue(cartaoxml, '/cartao/telefone/ddd'), extractvalue(cartaoxml, '/cartao/telefone/numero') from cartoes;
Consulta campos XML existsnode(campo XML, expressão Xpath) Verifica se existe o path e retorna um elemento XML Se o elemento existir retorna 1, caso contrário retorna 0 Essa função só deve ser usada na cláusula where. Exemplo: select nome from cartoes where existsnode(cartaoxml, '/cartao[nome ="José da Silva"]') = 1;
Criando índice Um índice pode ser criado para ajudar o algoritmo de busca Exemplo: create index ind_cartao on cartoes (extractvalue(cartaoxml, '/cartao/email') );
Autor: Prof. Enzo Seraphim Os logotipos, marcas comerciais e nomes de produtos citados nesta publicação tem apenas o propósitos de identificação e podem ser marcas registradas de suas respectivas companhias. Universo XML