Programação para Internet I Aulas 10 e 11 Fernando F. Costa nando@fimes.edu.br
XML Definição e origem extensible Markup Language (XML) é linguagem de marcação de dados que provê um formato para descrever dados estruturados. Foi originalmente desenvolvida por um grupo de trabalho conhecido como SGML Editorial Review Board formado sob os auspícios do W3C (World Wide Web Consortium). Surgiu em Fevereiro de 1998 sob a forma de recomendação do W3C, com a intenção de se tornar um standard para a publicação, armazenamento e transferência de documentos por meios eletrônicos.
XML vs HTML XML, assim como o HTML deriva do SGML (Standard Generalized Markup Language). Por essa razão, sua sintaxe é semelhante a do HTML. No entanto, o XML não deve ser considerado um sucessor do HTML, mas sim um complemento ao HTML. A grande diferença entre HTML e XML é que o HTML descreve a aparência e as ações em uma página na rede enquanto o XML não descreve nem aparência, nem ações, mas sim o que cada trecho de dados é ou representa!
XML Os documentos XML são arquivos texto. Isto facilita que programadores ou desenvolvedores "debuguem" mais facilmente as aplicações, de forma que um simples editor de textos pode ser usado para corrigir um erro em um arquivo XML. XML possuem regras de formatação muito mais rígidas. Suas especificações oficiais determinam que as aplicações não podem tentar adivinhar o que está errado em um arquivo (no HTML isso acontece), mas sim devem parar de interpretá-lo e reportar o erro.
XML A linguagem XML descreve a estrutura e o conteúdo dos documentos, não a sua apresentação visual. As formatações podem, no entanto, ser adicionadas aos documentos através de folhas de estilo, podendo desta forma serem colocados na Web documentos substancialmente enriquecidos em termos de formatação.
XML - Vantagens O XML permite ao desenvolvedor criar suas próprias estruturas rotuladas para armazenar informações. O analisador XML (parser) é bem definido e extensamente-implementado, tornando possível recobrar informação de documentos XML em uma variedade de ambientes. O XML é construído em uma fundação de Unicode, tornando mais fácil a criação de documentos internacionalizados.
XML - Vantagens Os formatos XML são baseados em texto, o que os tornam mais legíveis, mais fáceis de documentar, e às vezes mais fáceis de depurar. Ferramentas para o processamento XML estão disponíveis em plataformas diferentes. Isso faz com que seja mais simples usar XML em vez de formatos binários para trocar fluxos complexos de informação. Os documentos XML já podem usar muito da infraestrutura construída para HTML, inclusive o protocolo HTTP e alguns browsers.
XML - Desvantagens Documentos XML tendem a ser maiores que os formatos binários que eles substituem. Eles consomem maior largura de banda da rede e espaço de armazenamento, ou exigem maior tempo de processamento para compressão. Os parsers XML podem ser mais lentos que os parsers de formatos binário altamente aperfeiçoados e podem requerer mais memória.
XML - Características As tags são usadas sempre em pares; Todo documento XML possui um elemento raiz. Os demais elementos devem estar aninhados dentro de um elemento raiz; Os elementos podem possuir atributos aos pares nome/valor e o atributo deve sempre vir entre aspas; As tags usadas em XML são case sensitive;
XML Os documento XML são compostos de marcas e conteúdos. Existem seis tipos de marcações que podem ocorrer em um documento XML: Elementos Referências a entidades Comentários Instruções de processamento Seções marcadas Declarações de tipos de documento.
XML - Elementos Elementos são a mais comum forma de marcação. Delimitados pelos sinais de menor e maior, a maioria dos elementos identificam a natureza do conteúdo que envolvem. Alguns elementos podem ser vazios. Se um elemento não é vazio, ele inicia com uma marca de início, <element>, e termina com uma marca de término, </element>. Atributos são pares de valores nomeados que ocorrem dentro das marcas de início após o nome do elemento. Em XML, todos os valores de atributos devem estar entre aspas. Ex: <arroz>agulhinha</arroz>
XML Referências a Entidades Entidades em XML são usadas para representar caracteres especiais. Cada entidade deve ter um nome único. Para referenciar uma entidade, inicia-se com E comercial (&), escreve-se o nome da entidade e encerrase com ponto e vírgula(;). Exemplo: Para fazer uso da entidade < deve-se digitar: <
XML - Comentários Comentários iniciam com <!-- e terminam com -->. Os comentários podem conter qualquer dado, exceto a literal "--". Comentários devem ser colocados entre marcas no documento XML e não dentro de marcas. Comentários não fazem parte de um conteúdo textual de um documento XML. Nunca devem ser a primeira linha de um documento xml. Ex: <!-- Isto é um coment@rio vál1d0... -->
XML Instruções de Processamento As instruções de processamento (PIs) permitem codificar nos documentos instruções para as aplicações, não fazem parte dos dados mas devem ser passadas à aplicação. Uma instrução deste tipo começa pela sequência <? e terminam com?>. Exemplo: <?xml version= 1.0?>
XML Seções Marcadas Seções marcadas servem para permitir que textos sejam colocados em documentos XML sem que sejam interpretados. Com isso, entre o início da seção, <![CDATA[, e o fim da seção, ]]>, todos os dados de caracteres são passados diretamente para a aplicação, sem interpretação. Elementos, referências a entidades, comentários e instruções de processamento são todos irreconhecíveis e os caracteres que os compõem são passados literalmente para a aplicação. A única cadeia de caracteres que não pode ocorrer em uma seção CDATA é ]]>. Ex: <![CDATA[ <exemplo v@lido de CDATA s... ]]>
XML Declarações de Tipos de Documentos (DTD s) DTD s são expressões que restringem sequências e/ou aninhamentos de marcas. Além disso determinam valores de atributos e seus tipos padrões, formato de alguns dados, entidades disponíveis, etc. São necessárias para que documentos XML tenha algum sentido ao serem analisados. As DTDs especificam a estrutura de um documento, e são definidas através da gramática EBNF (Extended Backus-Naur Form), e não na sintaxe XML.
DTD - Parsers O parser tem função de validar documentos XML. Verifica se a estrutura do documento está de acordo com as regras de um DTD. Se o documento não estiver de acordo com a DTD, o parser irá acusar um erro. Um parser que não faz validação apenas verifica se o documento é bem-formado. Transformam o documento XML em uma estrutura de árvore para que as aplicações possam acessar seu conteúdo.
DTD Doctype As DTD s podem estar contida no documento (subconjunto interno) ou existir externamente como um arquivo separado (subconjunto externo). São introduzidas em um documento XML através da declaração DOCTYPE. Uma declaração de tipo de documento é colocada em um documento XML, começando por <!DOCTYPE e terminando por >. Ex:
DTD Doctype Quando o DTD é um arquivo externo, ele deve possui a extensão.dtd e são especificados pela palavrachave SYSTEM ou pela palavra-chave PUBLIC.
DTD Doctype Uma declaração de tipo de documento pode, ainda, conter especificações de subconjuntos internos e externos ao mesmo tempo. Um subconjunto interno é visível somente dentro do documento onde está definido. As DTDs que são usadas por muitos documentos devem, portanto, ser colocadas no subconjunto externo.
DTD Element Servem para declarar elementos em uma DTD A palavra-chave PCDATA especifica que o elemento deve conter dados e caracteres sintaticamente analisáveis. Esses dados serão analisados pelo parser, portanto, qualquer texto de marcação (<, >, &, e ) será tratado como marcação.
DTD Exemplo
DTD Sequência, Escolha e Frequência Sequência: Determinam a ordem que os elementos devem ocorrer. Ex: <! ELEMENT classroom (teacher, student)> Escolha: São especificadas pela barra vertical. Ex: <! ELEMENT material (book tutorial)> Frequência: Define o número de ocorrências de um elemento. É especificado pelos caracteres: + (sinal de mais): Uma ou mais vezes * (asterisco): Zero ou mais vezes? (ponto de interrogação): Zero ou uma vez.
DTD Exemplo 01 <!ELEMENT class (number, ( instructor assistant+ ), ( credit nocredit ) )>
DTD Exemplo 02 <!ELEMENT donutbox ( jelly?, lemon*, ( (creme sugar)+ glazed ) )>
DTD ATTLIST Especifica uma lista de atributos para um elemento. Ex: <!ELEMENT x EMPTY> <!ATTLIST x y CDATA #REQUIRED> O exemplo acima declara como empty o elemento x. A declaração de atributo especifica que y é um atributo de x. A palavra-chave CDATA indica que y pode conter qualquer texto de caracteres, exceto os caracteres <, >, &, ' e.
DTD ATTLIST Algumas palavras chave trazem informações sobre os atributos. Ex: #IMPLIED: especifica que não é requerido um valor para o atributo. Ex: <!ATTLIST temperature scale CDATA #IMPLIED> #REQUIRED: especifica que o atributo deve aparecer no elemento. <!ATTLIST temperature scale CDATA #REQUIRED>
DTD ATTLIST (continuação) #FIXED: especifica que o valor do atributo é constante e não pode ser diferente no documento XML. Um valor para o atributo é requerido. <!ATTLIST temperature scale CDATA #FIXED C > string especifica um valor padrão para o atributo, se não for definido um. <!ATTLIST temperature scale (C F) C >
DTD Tipos de Atributos Os atributos são classificados como strings (CDATA), ou como tokenizado ou como enumerados. String: não impõe restrições (exceto os caracteres especiais XML). Atributos tokenizados Impõe restrições sobre os valores dos atributos. Existem 4 diferentes tipos de atributos com tokens: ID: identifica de forma única um elemento; IDREF: apontam para elementos com um atributo ID; (continua...)
(continuação...) DTD Tipos de Atributos ENTITY: Entidades são utilizadas para associar nomes com outros fragmentos do documento. Podem ser utilizadas entidades internas, ou externas. A utilização é na forma de &nome;. Ex: <!ENTITY unifimes Centro Universitário de Mineiros > assim: <elemento>&unifimes</elemento> resulta em: <elemento>centro Universitário de Mineiros</elemento> NMTOKEN: Tipo de atributo mais restritivo, cujo valor consiste em caracteres letras, dígitos, pontos, sublinhados, hífens e dois-pontos. Ex: <!ATTLIST clientes fone NMTOKEN #REQUIRED> <cliente phone= 555-111-2222 > (válido) <cliente phone= 555 111 2222 > (inválido)
Exemplo
Exercícios 1. Verifique se o documento XML abaixo contém erros de sintaxe:
Exercícios 2. Crie uma DTD para o documento do exercicio1: 3. Com base na DTD que se segue, crie um documento XML que atenda às suas regras. Utilize subconjunto interno para a DTD, fazendo sua validação:
XML - XSL A apresentação de um documento XML é dependente de uma folha de estilos. A linguagem de folha de estilos padrão para os documentos XML é a Extensible Style Language (XSL). Outras linguagens de folhas de estilos, como Cascading Style Sheets (CSS), também são suportadas. O XSL possui a função de analisar o documento XML e transformá-lo num documento html apresentável ao usuário final. Por isso, costuma-se dizer que: XML + XSL = HTML
XML XSL XSL consiste de 3 partes: XSLT => linguagem para transformar documentos XML XPath => linguagem para definir partes de um documento XML XSL-FO => é uma linguagem para formatar documentos XML
XML - XSLT XSLT é a parte mais importante dos padrões XSL. Ele é a parte do XSL usada para transformar um documento XML em outro documento XML, ou um outro tipo de documento que é reconhecido por um browser, como HTML e XHTML. Normalmente XSLT faz isso transformando cada elemento XML em um elemento (X)HTML. XSLT também pode adicionar novos elementos no arquivo de saída, ou remover elementos. Ele pode rearranjar e ordenar elementos, testar e tomar decisões sobre quais elementos mostrar, e muito mais. Tornou-se uma Recomendação W3C em 16 de Novembro de 1999.
XML Criando um arquivo XSL XSL também é um documento XML, logo começa com: <?xml version="1.0" encoding="iso-8859-1"?> O elemento raiz que declara o documento a ser uma folha de estilos XSL é <xsl:stylesheet> ou <xsl:transform>. Ex: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> Uma folha de estilos XSL consiste de um conjunto de regras chamados moldes (templates). Para definir estas regras, usamos o elemento <xsl:template>. A tag <xsl:template> define o início e o fim de um molde. O atributo match="/" associa (combina) o molde com a raiz (/) do documento XML de origem. Ex: <xsl:template match="/">
XML Criando um arquivo XSL O elemento <xsl:for-each> permite que sejam feitas iterações (loops) em XSLT. Com isso é possível selecionar todo elemento XML de um conjunto de nós específico. Ele funciona como a navegação num sistema de arquivos onde uma barra à frente (/) seleciona subdiretórios. Ex: <xsl:for-each select="catalog/cd"> Para extrair o valor de um nó selecionado e adicioná-lo no resultado da transformação, utiliza-se o elemento <xsl:value-of>. Ele funciona como a navegação num sistema de arquivos onde uma barra à frente (/) seleciona subdiretórios. Ex: <xsl:value-of select="catalog/cd/title"/>
XML Criando um arquivo XSL <xsl:for-each> - Filtragem de conteúdo Nós podemos filtrar a saída de um arquivo XML adicionando um critério ao atributo select de um elemento <xsl:for-each>. Ex: <xsl:for-each select="catalog/cd[artist='bob Dylan']"> Operadores de filtragem válidos são: = (igual)!= (diferente) < (menor que) > (maior que)
XML Criando um arquivo XSL <xsl:sort> Usado para ordenar o resultado retornado de um arquivo xml. Para gerar um arquivo XML como um arquivo XHTML, e ordená-lo ao mesmo tempo, simplesmente adicione um elemento sort dentro de um elemento for-each no seu arquivo XSL. Ex: <xsl:for-each select="catalog/cd"> <xsl:sort select="artist"/> Onde, o atributo select indica qual elemento XML ordenar.
XML Criando um arquivo XSL <xsl:if> Coloca um teste condicional no arquivo xsl. Ex: <xsl:if test="price > 10"> alguma saida... </xsl:if> Onde, o valor do atributo obrigatório test será a expressão a ser avaliada.
XML Criando um arquivo XSL <xsl:choose> É usado em conjunto com <xsl:when> e <xsl:otherwise> para expressar múltiplos testes condicionais. Ex: <xsl:choose> <xsl:when test="price > 10">...algum código... </xsl:when> <xsl:otherwise>...algum outro código... </xsl:otherwise> </xsl:choose>
XML Criado o arquivo xsl, para que ele possa formatar um arquivo xml, deve-se fazer a ligação entre o arquivo xml e o arquivo xsl. Para isto, basta inserir no arquivo xml a seguinte linha: <?xml-stylesheet type="text/xsl" href="arquivo.xsl"?>
XML XSL: Exemplo Prático Salve este arquivo como: catalogo.xml <?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet type="text/xsl" href="catalogo.xsl"?> <catalog> <cd> <title>empire Burlesque</title> <artist>bob Dylan</artist> <country>usa</country> <company>columbia</company> <price>10.90</price> <year>1985</year> </cd> <cd> <title>hide your heart</title> <artist>bonnie Tyler</artist> <country>uk</country> <company>cbs Records</company> <price>9.90</price> <year>1988</year> </cd> <cd> <title>greatest Hits</title> <artist>dolly Parton</artist> <country>usa</country> <company>rca</company> <price>9.90</price> <year>1982</year> </cd> <cd> <title>still got the blues</title> <artist>gary Moore</artist> <country>uk</country> <company>virgin records</company> <price>10.20</price> <year>1990</year> </cd> <cd> <title>eros</title> <artist>eros Ramazzotti</artist> <country>eu</country> <company>bmg</company> <price>9.90</price> <year>1997</year> </cd> </catalog>
XSL Exemplo Prático Salve este arquivo como: catalogo.xsl <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <body> <h2>my CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>title</th> <th>artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <xsl:choose> <xsl:when test="price > 10"> <td bgcolor="#ff00ff"> <xsl:value-of select="artist"/> </td> </xsl:when> <xsl:when test="price > 9 and price <= 10"> <td bgcolor="#cccccc"> <xsl:value-of select="artist"/> </td> </xsl:when> <xsl:otherwise> <td><xsl:value-of select="artist"/></td> </xsl:otherwise> </xsl:choose> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
Exercícios 1) O que é XML? 2) O XML surgiu para substituir o HTML? 3) Qual a diferença entre o HTML e o XML? 4) Documentos XML são compostos de quê? Quais os tipos de marcas existentes? 5) Com base no exemplo boletim.xml (próximo slide), crie um arquivo xsl capaz de exibir o boletim semelhante a figura da tabela abaixo.
XML Exercícios <?xml version="1.0"?> <boletim> <aluno> <nome>janice</nome> <portugues>7</portugues> <matematica>8</matematica> <ciencias>6</ciencias> </aluno> <aluno> <nome>jefferson</nome> <portugues>5</portugues> <matematica>8</matematica> <ciencias>7</ciencias> </aluno> </boletim>
Boa Noite!