Criando documentos XML
|
|
|
- Laís de Carvalho Laranjeira
- 9 Há anos
- Visualizações:
Transcrição
1 CEFETES Unidade da Serra Coordenadoria de Informática Prof. Mateus Barcellos Costa Notas de Aula XML Última Atualização: Criando documentos XML Introdução <?xml version='1.0' encoding='utf-8'?> A definição acima denomina-se declaração do documento e deve ser o primeiro elemento de um documento XML. No exemplo, a declaração está dizendo que: documento é compatível com a versão 1.0 de XML O documento utiliza o padrão de codificação de caracteres utf de 8 bits. Este padrão não codifica acentos e c cidilha. Se quisermos usar um padrão de codificação que aceite acento podemos usar o padrão ISO Comentário em XML são elementos que devem ser ignorados pelo parser a ser utilizado. O texto que segue é um comentário. <!--COMENTÁRIOS --> Depois da declaração, um documento XML define exatamente 1 elemento denominado elemento raiz (root element). Qualquer outro elemento dentro do documento deverá estar contido dentro do elemento raiz. A definição do elemento raiz e de qualquer outro elemento será feita definindo-se uma tag. Por exemplo, o elemento slideshow que a seguir será o nosso elemento raiz. <slideshow> </slideshow> Todo elemento deve ser terminado por sua tag de fim. Note que XML é sensível ao caso. Assim a tag final deve ser exatamente como a inicial. Introduzindo Atributos a um Elemento A apresentação de slides possui uma série de itens de dados. Como nenhum destes itens requer estrutura, é natural definí-los como atributos do elemento slideshow. Para definir estes atributos podemos fazer como segue: <slideshow title="apresentação de Slides" date="data da publicação" author=" Nome do autor" >
2 </slideshow> Quando criamos uma tag ou um atributo podemos usar os caracteres menos (-) underline ( _ ), dois pontos (:) ou ponto (.), além de números e letras Valores para os atributos são sempre colocados entre aspas. Conjuntos de atributos nunca são separados por vírgula ",". Adicionando Elementos aninhados XML permite dados hierarquicamente estruturados. Isso significa que um elemento pode conter outros elementos. No exemplo abaixo adicionamos um elemento slide que contem um outro elemento denominado title. No elemento slide foi também definido o atributo type. O significado deste atributo é ressaltar o tipo de audiência do slide. <slideshow title="exemplo Apresentação de Slides" date="data da publicação" author=" Nome do autor" > <slide type="all"> <title>acordem para as grandes Novidades!</title> </slide> </slideshow> A diferença entre coisas que serão elementos (ex. title) e coisas que serão atributos (ex. type) é um importante aspecto deste ponto. Não existe uma regra exata para isso. Portando deve-se aplicar certas heurísticas. Destacamos aqui duas: A primeira heurística aqui é a questão da visibilidade. O título será uma coisa vista pela audiência. então ele será um elemento. O tipo, por outro lado, é algo que nunca estará presente. Logo, ele é um atributo. Outra forma de se pensar a respeito de atributos e elementos filhos de um elemento pai é imaginar que o elemento pai é um recipiente. O tipo do recipiente é um atributo do recipiente como, por exemplo, garrafa, caixa ou lata. Logo ele será o atributo do elemento pai. Já o título descreveria o conteúdo do recipiente, por exemplo, leite, cerveja ou chocolate. Logo ele não é um atributo do recipiente sendo representado neste caso como um elemento. Conforme citamos, não existe uma regra exata para esta escolha. Adicionando texto HTML XML permite definir qualquer tipo de TAG. Logo, faz sentido definirmos um conjunto de Tags semelhantes às tags HTML. O Padrão XHTML faz exatamente isto.
3 <slide type="all"> <title>visão Geral</title> <item>por que <em>novidades</em> são boas</item> </item> <item>quem <em>compra</em> Novidades</item> </slide> A definição acima especifica um slide usando a tag html <em></em> que enfatiza o texto entre elas (colocando em itálico). Adicionando Elementos Vazios Documentos XML devem ser obrigatoriamente bem-formados (well formed). Isso significa que: Toda tag deve possuir uma tag de fim ou ser uma tag vazia. Um elemento vazio é pode ser definido com o nome da tag terminando com a /. Por exemplo <item/> define um elemento item vazio. Um documento XML bem formado também precisa respeitar os aninhamentos. Por exemplo, <b><i> texto</i></b> é bem formada, ao passo que <b><i>texto</b></i> não é. Finalizando, o documento completo em XML para a apresentação de Slides pode ser visto abaixo <?xml version='1.0' encoding='utf-8'?> <slideshow title="exemplo de Apresentacao de Slides" date="data da publicacao" author=" Nome do autor" > <! Titulo do SLIDE --> <slide type="all"> <title>acordem para as Novidades!</title> </slide> <! Visao geral--> <slide type="all"> <title>visao Geral</title> <item>por que <em>novidades</em> sao boas</item> <item/> <item>quem <em>compra</em> Novidades</item> </slide> </slideshow>
4 Visão geral dos padrões e APIS para processamento de Documentos XML. Uma API (Interface de programa de aplicação Application Program Interface), fornece uma série de elementos de programação que permitem realizar uma atividade específica como, por exemplo processar arquivos XML, comunicar-se usando sockets ou acessar um banco de dados. As APIs para processamento de XML obedecem a certos padrões definidos, principalmente pela W3C World Wide Web Consortium. As APIs para acesso a documento podem ser: Em modo serial (SAX) Em modo aleatório (DOM) Antes de estudarmos estas APIS vamos ver brevemente alguns dos principais padrões de XML e tentar digerir esta verdadeira sopa de letras. Padrões básicos SAX Simple API for XML Este padrão materializa o protocolo de acesso serial a documento XML. SAX é a maneira mais rápida de se ler e escrever documento XML. SAX pode ser visto como um protocolo orientado a eventos. Isso porque, usando SAX, o manipulador de arquivos se associa a um parser SAX, que responde a ocorrência de eventos (tags, erros, etc) na leitura do documento ativando os métodos apropriados. DOM Document Object Model O Modelo de objetos para documentos (DOM) é um protocolo que converte documento XML em objetos de um programa. Após isto, os objetos podem ser manipulados como qualquer outro objeto do programa. O mecanismos do DOM é chamado de protocolo de acesso aleatório porque qualquer parte do documento pode ser visitada em qualquer tempo. Esta visita implica que com o DOM é possível modificar, remover ou adicionar dados ao documento. DTD Document Type Definiton DTD é uma parte da especificação de XML, sendo entretanto opcional. Um DTD especifica o conjunto de tags que podem ocorrer em um documento e os arranjos válidos destas tags. Um DTD portanto pode ser usado para verificar se um documento XML não está sendo escrito incorretamente. Pode também ser usado para verificar se a estrutura de um documento XML que está sendo lida é válida ou não. Um DTD pode ser explicitado no início do documento XML como parte do prólogo do documento ou ser uma entidade separada. Namespaces Namespaces permitem a construção de documentos XML utilizando um ou mais conjuntos de tags de forma modular. A principal função de um namespace é qualifica os nomes de forma a eliminar possíveis ambigüidades.
5 XSL - Extensible StyleSheet Language O Padrão XML especifica como identificar dados e não com apresentá-los. HTMl por outro lado permite definir como os dados são apresentados mas não o que são estes dados. XSL por sua vez possui as duas partes: XSTL - Padrão de transformação XSL-FO A parte que define objetos de formatação (flow objects). XSL FO permite definir múltiplas área em uma pagina e ligar umas com as outras. Quando a seqüência de texto é direcionada a uma coleção destas áreas, ela preenche a primeira área e depois automaticamente flui para a segunda área quando a primeira for totalmente preenchida. XSLT Padrão de transformação XSLT é basicamente um mecanismo de permite transformar documento XML em um formato de apresentação como, por exemplo, HTML, PDF ou OS. XPATH é mecanismo de endereçamento que pode ser usado para construir as instruções de transformação Fazendo um dump do documento através de um Parser SAX. Um parser SAX é geralmente utilizado para obter os dados de um documento XML para realizar algum tipo de processamento com os mesmo. Aqui utilizaremos o parser didaticamente, para ler o documento XML e apresentar os dados que estão dentro do mesmo. O parser será definido na aplicação denominada Echo.java O esqueleto da classe e as importações necessárias são mostradas a seguir: import java.io.*; import org.xml.sax.*; import org.xml.sax.helpers.defaulthandler; import javax.xml.parsers.saxparserfactory; import javax.xml.parsers.parserconfigurationexception; import javax.xml.parsers.saxparser; public class Echo extends DefaultHandler { static private Writer out; public Echo() { public static void main(string argv[]){ if (argv.length!= 1) { System.err.println("Usage: cmd filename"); System.exit(1); try { // Set up output stream out = new OutputStreamWriter(System.out, "UTF8"); catch (Throwable t) { t.printstacktrace();
6 System.exit(0); Analisando a classe echo vemos: O método main foi especificado para ler o argumento de entrada (nome do arquivo a ser processado) Foi configurado o outputstream (out) onde será escrita a saída. Para utilizarmos o parser, a principal interface usada é a ContentHandler. Esta interface define uma série de operações usadas em resposta aos diversos eventos que ocorrem no parsing. A forma mais fácil de implementarmos uma interface ContentHandler é estendermos a classe DefaultHandler. Vejam no código acima que a classe Echo estende (herda) a classe DefaultHandler. A seguir adicionamos o código necessário para realizar o parser: public static void main(string argv[]){ if (argv.length!= 1) { System.err.println("Usage: cmd filename"); System.exit(1); // Use uma instancia de Echo como o SAX EventHandler DefaultHandler handler = new Echo(); // Usa o parser SAX default (sem validação) SAXParserFactory factory = SAXParserFactory.newInstance(); try { // Configura a saída out = new OutputStreamWriter(System.out, "UTF8"); // Processa a entrada SAXParser saxparser = factory.newsaxparser(); saxparser.parse( new File(argv[0]), handler ); catch (Throwable t) { t.printstacktrace(); System.exit(0); O código que segue implementa alguns métodos auxiliares para a apresentação do documento. São eles, o método emit que apresenta uma string s na saída out e o método nl que imprime uma mudança de linha em out. private void emit(string s)
7 throws SAXException { try { out.write(s); out.flush(); catch (IOException e) { throw new SAXException("I/O error", e); private void nl() throws SAXException { String lineend = System.getProperty("line.separator"); try { out.write(lineend); catch (IOException e) { throw new SAXException("I/O error", e); A seguir temos as implementações dos métodos startdocument, enddocument, starelement e endelement definidos na interface DefaultHandler. public void startdocument() throws SAXException { // emit("<?xml version='1.0' encoding='utf-8'?>"); nl(); public void enddocument() throws SAXException { try { nl(); out.flush(); catch (IOException e) { throw new SAXException("I/O error", e); public void startelement(string namespaceuri, String sname, // simple name (localname) String qname, // qualified name Attributes attrs) throws SAXException { String ename = sname; // element name if ("".equals(ename)) ename = qname; // namespaceaware = false emit("<"+ename); if (attrs!= null) { for (int i = 0; i < attrs.getlength(); i++) { String aname = attrs.getlocalname(i); // Attr name if ("".equals(aname)) aname = attrs.getqname(i); emit(" "); emit(aname+"=\""+attrs.getvalue(i)+"\"");
8 emit(">"); public void endelement(string namespaceuri, String sname, // simple name String qname // qualified name ) throws SAXException { emit("</"+sname+">"); public void characters(char buf[], int offset, int len) throws SAXException { String s = new String(buf, offset, len); emit(s); Substituindo e Inserindo Texto em documentos XML Tratando caracteres especiais Entidades Uma entidade em XML é uma estrutura ou texto que possui um nome. Referenciando-se uma entidade pelo seu nome causa a inserção da entidade no documento no local onde a referência foi feita. Para se criar um referência a uma entidade, o nome da entidade e colocado entre os caracteres & (ampersand e comercial) e ; (semicolon ponto e vírgula), como: &nomedaentidade; Entidades predefinidas: Uma referencia a uma entidade como, por exemplo, & Esta entidade se refere a um texto que irá substituir a referência no documento, como uma macro em C. Existem as seguintes entidades predefinidas para caracteres especiais: Caractere Referência & & < < > > " " ' ' Caracteres podem ser referenciados com nomes de entidades se necessário. Nestes casos o caractere ser representados pelo # seguido pelo unicode que o representa. Por exemplo, A representa a letra A. Usando referências a entidades.
9 Suponha que você deseja inserir o texto Tamanho do Mercado < Previsto O problema surge por que quando o parser ver o caractere < ele pensará que está sendo iniciada uma nova tag. E procurará pelo nome da tag. Para contornar este problema substituímos o < pela referência < Tratando Texto com sintaxe parecida com XML Quando partes do texto incluem muitos caracteres especiais à sintaxe XML, pode se tornar inconveniente ficar inserindo muitas referências a entidades. Para estas situações pode-se usar uma seção CDATA Em uma seção CDATA espaços em branco são considerados e nenhum caractere é interpretado como caractere especial de XML. Um seção CDATA inicia com <![CDATA[ e termina com ]]> Exemplo: <slide type="tech"> <title>how it Works</title> <item>first we fozzle the frobmorten</item> <item>then we framboze the staten</item> <item>finally, we frenzle the fuznaten</item> <item><![cdata[diagram: ]]></item> </slide> frobmorten < fuznaten <3> ^ <1> <1> = fozzle V <2> = framboze Staten+ <3> = frenzle <2> No exemplo acima, o diagrama é tratado inteiramente como se fosse uma cadeia de caracteres. Definindo Data Types Conforme vimos até agora, o parser só verifica o fato do documento XML ser bemformado. Entretanto, podemos inserir regras que de verificação sintática para os documentos por meio de DTDs: Data Type Definition. DTD permitem verificar se um documento bem formado é Válido. O Documento abaixo é um DTD., que permite definir uma gramática para um documento XML. <!-- XML declaration --> <?xml version='1.0' encoding='utf-8'?> <!-- DTD for a simple "slide show". --> <!ELEMENT slideshow (slide+)>
10 <!ELEMENT slide (title, item*)> <!ELEMENT title (#PCDATA)> <!ELEMENT item (#PCDATA item)* > O item slide+ indica os conteúdos válidos para o elemento slideshow. Neste caso um ou mais elementos do tipo slide. Os qualificadores podem ser +,? ou * Qualificador Nome? * + Interrogação - Question Mark Asterisco - Asterisk Mais - Plus Sign Significado Opcional (zero ou um) Zero ou mais Um ou mais Pode também haver aninhamento de parênteses nos itens. Por exemplo ((title, image)+) Nas declarações acima definimos o tipo do elemento slide e os tipos que constituem este elemento: title e item A declaração de title indica que seu conteúdo é formado puramente por conjuntos de caracteres processáveis (Parsed Character Data - PCDATA). O caractere # indica que o que segue é uma palavra reservada e não um elemento. Na declaração item a " " indica a condição OU, indicando que um PCDATA ou um item podem ocorrer. Limitação Seria interessante se pudéssemos especificar se um item contem por exemplo um PCDATA ou um PCDATA seguido de um item. Sintaticamente esta expressão ficaria assim: <!ELEMENT item (#PCDATA (#PCDATA, item+)) > Infelizmente esta especificação incorre em um erro pois, assim que o parser encontrar um #PCDATA ele vai tentar encontrar um item. Isso ocorre porque ele não consegue saber se o PCDATA que encontrou é da expressão #PCDATA ou de (#PCDATA,item+) Definições duplas também não funcionam: <!ELEMENT item (#PCDATA) > <!ELEMENT item (#PCDATA, item+) > Neste caso o Parser gera um warning e a ultima declaração é ignorada.
11 Também não existe forma de especificar posteriormente o tipo de conteúdo esperado quando PCDATA é usado. Não é possível especificar se o dado é uma seqüência de dígitos ou um formato de data, por exemplo. Em DTDs não existe também nenhum sentido de hierarquia. Por exemplo, a definição do elemento title para o slide aplica-se totalmente ao título de um item. Digamos que se queira usar a mesma definição diferenciando apenas uma característica de um ou outro. Por exemplo, o tamanho do texto quando o documento for apresentado. Isto não é possível, a não ser que se defina dois elementos distintos (slide-title e item-title). A falta de hierarquia força a introdução de "hierarquia hifenizada" (hyphenization hierarchy). Estas limitações são as motivações fundamentais para o desenvolvimento de padrões de especificação de esquemas (XML Schema). ANY e EMPTY A utilização de ANY em um elemento indica que este elemento pode conter qualquer outro elemento definido ou PCDATA. A especificação EMPTY indica que um elemento não contem nenhum elemento. Referenciando o DTD Quando o DTD é descrito em um arquivo separado do documento XML associado este precisa ser referenciado. Para referenciar o DTD deve ser adicionada uma linha no documento XML como a especificada abaixo: <!DOCTYPE slideshow SYSTEM "slideshow.dtd"> <slideshow.. A tag DOCTYPE indica que o documento é um slideshow. Ou seja o documento consiste de um slideshow e de todos os elemento de dentro dele. A tag DOCTYPE tem que ocorrer depois da declaração XML e antes do elemento raiz. Um DTD pode ser colocado internamente em um documento XML. Da seguinte forma: <!DOCTYPE slideshow SYSTEM "slideshow1.dtd" [...local subset definitions here... ]> Exercícios: 1. Cite duas semelhanças e duas diferenças entre XML e HTML. 2. Cite 3 cenários práticos onde XML pode ser aplicada. 3. Quais são as regras que um documento XML bem-formado deve seguir? 4. Analise o documento abaixo e responda às questões 4.1 a 4.5.
12 <artigo data= 01/02/2006 data= 01/02/2006 > <autor nome= João sobrenome= Silva /> <autor nome= José sobrenome= Silva /> <titulo>introdução a XML</titulo> <resumo>este artigo trata dos conceitos de XML. O que descrevemos aqui é tão verdade quanto 5<4</resumo> </artigo> 4.1. O documento acima é um documento bem formado? Se não, por quê? 4.2. Como seria possível usar o símbolo < no texto 5<4 para que não houvesse erros na hora do parsing? Escreva pelo menos duas maneiras diferentes Quem é o primeiro autor deste artigo? Nomes Elementos e Atributos em XML são referenciados por seus nomes. Para garantir que estes nomes seja interpretados de forma não ambígua, tanto elementos e atributos utilizam URIs (Uniform Resource Identifiers). URIs são utilizadas para garantir que conflitos de nomes não irão ocorrer em documentos XML contendo elementos e atributos vindos de diferentes fontes e com diferentes escopos. Uma URI pode ser tanto um URN (Uniform Resource Name) ou um URL (Uniforme Resource Locator). Um URN é um identificador independente de localização, como, por exemplo um UUID (Universally Unique Identifier). Um UUID é um número de 16 bytes com um formato canônico. O númereo 550e8400-e29b-41d4-a está no formato de um UUID. Já uma URL embute aspectos da localização no identificador. Em ambos os casos, quando uma URI é utilizada para tratar ambigüidades de nomes em XML, esta é tratada como um identificador de um conjunto abstrato de nomes chamados de Namespace. Não é necessário que uma referência a um namespace vá produzir alguma coisa diferente no documento XML. Preferencialmente, URIs serão simplesmente identificadores opacos. Namespaces são críticos para a produção de documentos XML que serão trocados entre múltiplas organizações, para identificar o contexto no qual elementos e atributos tem significado. Namespaces também podem ser usados para tratar ambigüidades de documentos internos de uma organização. Elementos e atributos XML possuem dois componentes: um nome local e o namespace URI. Um nome local deve obedecer a regra de produção de NCName (Ver em Um NCName inicia com caracteres alfabéticos ou anderscore seguido de 0 ou mais caracteres alfanuméricos, pontos, hífens ou underscores.
13 Seja o elemento < pessoas /> este elemento é identificado pelo seu nome local (pessoa) e não está relacionado com nenhum namespace. pessoas é um nome sobrecarregado que pode aceitar múltiplas interpretações, tanto por parte de seres humanos, quanto por aplicações de software. Dessa forma, é conveniente a utilização de namespaces. A forma seguinte introduz o namespace: < pessoas xmlns = uuid: 550e8400-e29b-41d4-a /> A declaração xmlns= uri-reference associa a referência URI ao namespace default do elemento. Dessa forma, o namespace definido aplica-se a todos os elementos filhos deste elemento. No documento abaixo, o namespace do elemento Pessoa é também uuid: 550e8400- e29b-41d4-a < pessoas xmlns = uuid: 550e8400-e29b-41d4-a <pessoa /> /pessoas> Elementos filhos podem ter seus próprios namespaces. < pessoas xmlns = uuid: 550e8400-e29b-41d4-a <pessoa xmlns = /> /pessoas> Se pessoa tiver elementos filho, o ns deles será e não o de pessoas. Para remover pessoa de qualquer ns definido em seus pais: < pessoas xmlns = uuid: 550e8400-e29b-41d4-a <pessoa xmlns = /> /pessoas> Para facilitar a edição de documentos, pode-se usar apelidos para namespaces. Uma declaração de um namesapce segue a seguinte forma: xmlns:myns = uri-reference O prefixo local,myns segue a regra de formação de NCNames e será o apelido local para o ns. Posteriormente este apelido pode ser usado para a construção de nomes de elementos e atributos. A combinação de apelidos com nomes locais deve aderir a regra de produção de nomes Qualificados (QName) (veja em /). Exemplo: < pessoas xmlns=
14 xmlns: meuns= > <meuns:pessoa /> </pessoas> Se o nome de um elemento é constituído apenas do nome local sem prefixo, o seu ns será o ns default.. Se um nome de um atributo é constituído apenas de seu nome local este atributo não está associado a nenhum ns, independente do ns default de seu elemento. Declarações de ns podem ser aplicadas na definição de nomes do elemento onde foi declarada, de seus atributos e seus filhos e atributos de seus filhos. Exemplo: A declaração < pessoas xmlns= xmlns: meuns= > <meuns:pessoa /> </pessoas> é equivalente a: < pessoas xmlns= <pessoa xmlns= /> </pessoas> e a: < x: pessoas xmlns: x= xmlns: meuns= > <meuns:pessoa /> </pessoas> No caso de haver declarações de ns diferentes com o mesmo prefixo, fica valendo a declaração mais interna (em termos de escopo). No exemplo: < x:a xmlns:x= > <x:b xmlns:x= > <x:c /> </x:b> <x:d /> </x:a> o ns de a e d é e o de b e c é Cada atributo de um elemento deve estar associado a um único par (ns, nomelocal). Assim, a declaração abaixo é correta: <a xmlns = xmlns:y= b: Olá y:b= Adeus /> O atributo b sem estar asociado a um ns é diferente de y:b, associado ao ns Já a declaração abaixo está incorreta: <a xmlns:x = xmlns:y=
15 x:b: Olá y:b= Adeus /> Exercícios Faça uma DTD que valide os documentos abaixo (uma única DTD deve ser usada para validar ambos os documentos). Adicione aos documentos XML a declaração da DTD (DOCTYPE): Documento 1: <publicacoes> <artigo> <autor>jose</autor> <autor estudante="true">joao</autor> <autor>maria</autor> <titulo>uma avaliação de desempenho em ambientes paralelos</titulo> <local-publicacao> <cidade>manaus</cidade> <congresso>sbbd</congresso> </local-publicacao> <ano>2003</ano> </artigo> <artigo> <autor estudante="true">carlos</autor> <autor>joao</autor> <autor>márcia</autor> <titulo>xml aplicado</titulo> <local-publicacao> <cidade>gramado</cidade> <congresso>sbbd</congresso> </local-publicacao> <ano>2002</ano> <obs>artigo muito bom sobre <assunto>xml</assunto></obs> </artigo> </publicacoes> Documento 2: <artigo> <autor>jose</autor> <autor estudante="true">jorge</autor> <autor>maria</autor> <titulo>xml e suas aplicações</titulo> <local-publicacao> <cidade>dallas</cidade> <periodico>tods</periodico> </local-publicacao> <ano>2003</ano> <obs>artigo muito bom sobre <assunto>xml</assunto></obs> </artigo> 3 Escreva uma DTD que siga os seguintes critérios: possui um elemento livro que pode conter título e vários autores título e autor são strings o elemento livro possui os seguintes atributos: i. gênero, cujo valor pode ser: romance, policial ou suspense ii. língua, cujo valor pode ser: inglês ou português, e o valor default é português iii. código, que é único no documento XML como um todo
16 4 Escreva um documento XML válido de acordo com a DTD declarada no exercício 3. 5 Qual a diferença entre os valores possíveis de um atributo declarado como CDATA e outro declarado como NMTOKEN? 6 Explique os conceitos de documento válido e documento bem-formado. Um conceito pode ser considerado pré-requisito para o outro? Se sim, qual é pré-requisito de qual? Escrevendo uma aplicação distribuída usando Sockets e XML O Código abaixo implementa um cliente para um socket. package client; import java.io.*; import java.net.*; import system.interface1; public class KnockKnockClient { public static void main(string[] args) throws IOException { Socket kksocket = null; PrintWriter out = null; BufferedReader in = null; +porta) porta é conexao try { /** A declaraçao * kksocket = new Socket(Interface1.HOST, 4444); * ria um novo objeto Socket com o nome de kksocket. * Um socket estará associado a um ponto final TCP (Host * Neste caso o HOST está configurado como localhost e a * a de número 4444, onde o servidor estár esperando por uma kksocket = new Socket(Interface1.HOST, 4444); /** * A Declaraçao * out = new PrintWriter(kkSocket.getOutputStream(), true); * obtem o stream de saída do socket e o associa ao objeto * PrintWriter out. Entao, para escrever no kksocket usaremos o objeto out. out = new PrintWriter(kkSocket.getOutputStream(), true); /** * A Declaraçao * in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream())); * obtem o stream de entrada do socket e o associa ao objeto BufferReader in. * Entao para lermos dados do kksocket usamos o objeto in.
17 in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream())); /** * Se o host nao for encontrado gera a exceçao abaixo catch (UnknownHostException e) { System.err.println("Don't know about host:" + Interface1.HOST + "."); System.exit(1); /** * Se o servidor nao estiver escutando a porta procurada ocorre a exceçao abaixo catch (IOException e) { System.err.println("Couldn't get I/O for the connection to:" + Interface1.HOST + "."); System.exit(1); /** * A declaraçao * BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); * Cria um objeto BufferReader para permitir a leitura do teclado BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); String fromserver; String fromuser; /** * Enquanto a leitura do Socket retornar uma string nao nula continua no * while abaixo while ((fromserver = in.readline())!= null) { System.out.println("Server: " + fromserver); /* Se o servidor retornar a string Bye. o cliente termina if (fromserver.equals("bye.")) break; /* le a pergunta do usuário fromuser = stdin.readline(); if (fromuser!= null) { /* envia a pergunta do usuário para o servidor através do kksocket System.out.println("Client: " + fromuser); out.println(fromuser); out.close(); in.close(); stdin.close(); kksocket.close();
18 O Código do servidor é dado a seguir por duas classe uma classe que implementa um protocolo de conversação e a classe que implementa o socket Server package server; public class KnockKnockProtocol { private static final int WAITING = 0; private static final int SENTKNOCKKNOCK = 1; private static final int SENTCLUE = 2; private static final int ANOTHER = 3; private static final int NUMJOKES = 5; private int state = WAITING; private int currentjoke = 0; private String[] clues = { "Turnip", "Little Old Lady", "Atch", "Who", "Who" ; private String[] answers = { "Turnip the heat, it's cold in here!", "I didn't know you could yodel!", "Bless you!", "Is there an owl in here?", "Is there an echo in here?" ; public String processinput(string theinput) { String theoutput = null; if (state == WAITING) { theoutput = "Knock! Knock!"; state = SENTKNOCKKNOCK; else if (state == SENTKNOCKKNOCK) { if (theinput.equalsignorecase("who's there?")) { theoutput = clues[currentjoke]; state = SENTCLUE; else { theoutput = "You're supposed to say \"Who's there?\"! " + "Try again. Knock! Knock!"; else if (state == SENTCLUE) { if (theinput.equalsignorecase(clues[currentjoke] + " who?")) { theoutput = answers[currentjoke] + " Want another? (y/n)"; state = ANOTHER; else { theoutput = "You're supposed to say \"" + clues[currentjoke] + " who?\"" + "! Try again. Knock! Knock!"; state = SENTKNOCKKNOCK; else if (state == ANOTHER) { if (theinput.equalsignorecase("y")) { theoutput = "Knock! Knock!"; if (currentjoke == (NUMJOKES - 1)) currentjoke = 0; else currentjoke++;
19 state = SENTKNOCKKNOCK; else { theoutput = "Bye."; state = WAITING; return theoutput; package server; import java.net.*; import java.io.*; public class KnockKnockServer { public static void main(string[] args) throws IOException { ServerSocket serversocket = null; try { /** * A declaraçao * serversocket = new ServerSocket(4444); * tenta criar um objeto ServerSocket associado a porta 4444 * Se esta porta estiver em uso ocorre a exceçao IOException serversocket = new ServerSocket(4444); catch (IOException e) { System.err.println("Could not listen on port: 4444."); System.exit(1); Socket clientsocket = null; try { /** * A declaracao * clientsocket = serversocket.accept(); * é bloqueante e fica esperando até um cliente faça uma conexao. clientsocket = serversocket.accept(); catch (IOException e) { System.err.println("Accept failed."); System.exit(1); /** * Apos um cliente estabelecer uma conexao valida * o servidor cria um objeto out e um in para escrever e ler no * socket associado ao cliente conectado PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader( clientsocket.getinputstream())); String inputline, outputline; /** o servidor cria também uma instancia do protocolo de conversaçao
20 * KnockKnockProtocol. Este é um protocolo ilustrativo de perguntas * e respostas. KnockKnockProtocol kkp = new KnockKnockProtocol(); outputline = kkp.processinput(null); out.println(outputline); while ((inputline = in.readline())!= null) { outputline = kkp.processinput(inputline); out.println(outputline); if (outputline.equals("bye.")) break; out.close(); in.close(); clientsocket.close(); serversocket.close(); Implementação de um sistema para envio e recebimento de Pedidos Neste sistema, o cliente irá enviar um pedido através da emissão de um documento pedido.xml para o servidor. O servidor recebe o pedido, processa e armazena o pedido em um HashSet. O código do cliente é o seguinte: package edi.client; import java.io.*; import java.net.*; import system.interface1; public class Emissor { public Emissor() { public static void main(string[] args) throws IOException { Socket kksocket = null; PrintWriter out = null; BufferedReader in = null; try { /** A declaraçao * kksocket = new Socket(Interface1.HOST, 4444); * ria um novo objeto Socket com o nome de kksocket. * Um socket estará associado a um ponto final TCP (Host +porta) * Neste caso o HOST está configurado como localhost e a porta é * a de número 4444, onde o servidor estár esperando por uma conexao kksocket = new Socket(Interface1.HOST, 4444);
21 /** * A Declaraçao * out = new PrintWriter(kkSocket.getOutputStream(), true); * obtem o stream de saída do socket e o associa ao objeto * PrintWriter out. Entao, para escrever no kksocket usaremos o objeto out. out = new PrintWriter(kkSocket.getOutputStream(), true); /** * A Declaraçao * in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream())); * obtem o stream de entrada do socket e o associa ao objeto BufferReader in. * Entao para lermos dados do kksocket usamos o objeto in. in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream())); /** * Se o host nao for encontrado gera a exceçao abaixo catch (UnknownHostException e) { System.err.println("Nao encontrei o host:" + Interface1.HOST + "."); System.exit(1); /** * Se o servidor nao estiver escutando a porta procurada ocorre a exceçao abaixo catch (IOException e) { System.err.println("Nao obtive uma conexao com o servidor no host:" + Interface1.HOST + "."); System.exit(1); /** * A declaraçao * BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); * Cria um objeto BufferReader para permitir a leitura do teclado BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); String fromserver; String fromuser; String linha; BufferedReader pedido = new BufferedReader(new FileReader("pedido.xml")); /** * Enquanto a leitura do Socket retornar uma string nao nula continua no * while abaixo System.out.println("Enviando o arquivo Pedido.xml.."); while ((linha = pedido.readline())!= null) { out.println(linha); System.out.println("Arquivo Pedido.xml enviado com sucesso..");
22 out.close(); in.close(); stdin.close(); kksocket.close(); A interface Interface1 especifica a constante HOST package system; public interface Interface1 { public static final String HOST = "LOCALHOST"; A implementação do Servidor envolve as seguintes classes: HashSet (from util) IOException (from io) Interface (from server) ColecaoDePedidos (from server) Interface() main() ColecaoDePedidos() Pedido (from server) 1 umpedido Receptador (from server) Receptador() recebepedido() * Item (from server) Processador (from server) DefaultHandler (from helpers) Attributes (from sax) Date (from util) -$out Writer (from io) SAXException (from sax) As classes Pedido e Item possuem os seguintes atributos e operações:
23 Pedido empresa : Logical View::java::lang::String data : Date cliente : Logical View::java::lang::String itens : HashSet getitens() getempresa() getdata() setcliente() setitens() setempresa() setdata() getcliente() AdicionaItem() Pedido() Item descricao : Logical View::java::lang::String marca : Logical View::java::lang::String embalagem : Logical View::java::lang::String quantidade : int getmarca() getdescricao() getquantidade() setembalagem() setmarca() setdescricao() setquantidade() getembalagem() Item() A seguir temos o código de cada classe implementada: Item package edi.server; public class Item { private String descricao; private String marca; private String embalagem; private int quantidade; public String getmarca() { return marca; public String getdescricao() { return descricao; public int getquantidade() { return quantidade; public void setembalagem(string embalagem) { this.embalagem = embalagem; public void setmarca(string marca) { this.marca = marca; public void setdescricao(string descricao) { this.descricao = descricao; public void setquantidade(int quantidade) { this.quantidade = quantidade;
24 public String getembalagem() { return embalagem; public Item() { Pedido package edi.server; import java.util.calendar; import com.sun.tools.javac.v8.util.set; import java.util.date; import java.util.hashset; public class Pedido { private String empresa; private Date data; private String cliente; private HashSet itens; public HashSet getitens() { return itens; public String getempresa() { return empresa; public Date getdata() { return data; public void setcliente(string cliente) { this.cliente = cliente; public void setitens(hashset itens) { this.itens = itens; public void setempresa(string empresa) { this.empresa = empresa; public void setdata(date data) { this.data = data; public String getcliente() { return cliente; public void AdicionaItem(Item item){ itens.add(item); public Pedido() { this.itens= new HashSet();
25 ColecaoDePedidos package edi.server; import java.util.hashset; public class ColecaoDePedidos extends HashSet{ public ColecaoDePedidos() { Receptador package edi.server; import java.net.*; import java.io.*; public class Receptador { public Receptador() { public Pedido recebepedido() throws IOException { ServerSocket serversocket = null; try { /** * A declaraçao * serversocket = new ServerSocket(4444); * tenta criar um objeto ServerSocket associado a porta 4444 * Se esta porta estiver em uso ocorre a exceçao IOException serversocket = new ServerSocket(4444); catch (IOException e) { System.err.println("Nao consigo escutar na porta: Ela deve estar ocupada"); System.exit(1); Socket clientsocket = null; try { /** * A declaracao * clientsocket = serversocket.accept(); * é bloqueante e fica esperando até um cliente faça uma conexao. clientsocket = serversocket.accept(); catch (IOException e) { System.err.println("Falha no Accept."); System.exit(1); /** * Apos um cliente estabelecer uma conexao valida * o servidor cria um objeto out e um in para escrever e ler no * socket associado ao cliente conectado PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
26 BufferedReader in = new BufferedReader( new InputStreamReader( clientsocket.getinputstream())); BufferedWriter doc= new BufferedWriter(new FileWriter("doc.xml")); String inputline, outputline; while ((inputline = in.readline())!= null) { doc.write(inputline); out.close(); in.close(); doc.close(); clientsocket.close(); serversocket.close(); Processador p= new Processador(); return p.processapedido("doc.xml"); Processador package edi.server; import java.io.*; import org.xml.sax.*; import org.xml.sax.helpers.defaulthandler; import javax.xml.parsers.saxparserfactory; import javax.xml.parsers.saxparser; import java.util.date; public class Processador extends DefaultHandler { static private Writer out; Pedido umpedido; public Processador() { umpedido = new Pedido(); public Pedido processapedido(string pedido){ DefaultHandler handler = this; SAXParserFactory factory = SAXParserFactory.newInstance(); try { out = new OutputStreamWriter(System.out, "ISO "); // Parse the input SAXParser saxparser = factory.newsaxparser(); saxparser.parse( new File(pedido), handler ); catch (Throwable t) { t.printstacktrace(); return this.umpedido;
27 private void emit(string s) throws SAXException { try { out.write(s); out.flush(); catch (IOException e) { throw new SAXException("I/O error", e); private void nl() throws SAXException { String lineend = System.getProperty("line.separator"); try { out.write(lineend); catch (IOException e) { throw new SAXException("I/O error", e); public void startdocument() throws SAXException { public void enddocument() throws SAXException { try { // nl(); out.flush(); catch (IOException e) { throw new SAXException("I/O error", e); public void startelement(string namespaceuri, String sname, // simple name (localname) String qname, // qualified name Attributes attrs) throws SAXException { Item umitem; String ename = sname; // element name if ("".equals(ename)) ename = qname; // namespaceaware = false if (ename.equals("pedido")){ this.umpedido = new Pedido(); name if (attrs!= null) { for (int i = 0; i < attrs.getlength(); i++) { String aname = attrs.getlocalname(i); // Attr if ("".equals(aname)) aname = attrs.getqname(i); if (aname.equals("empresa")) this.umpedido.setempresa(attrs.getvalue(i));
28 if (aname.equals("date")) this.umpedido.setdata(new Date(attrs.getValue(i))); if (aname.equals("cliente")) this.umpedido.setcliente(attrs.getvalue(i)); else if (ename.equals("item")){ umitem = new Item(); if (attrs!= null) { for (int i = 0; i < attrs.getlength(); i++) { String aname = attrs.getlocalname(i); // Attr name if ("".equals(aname)) aname = attrs.getqname(i); if (aname.equals("descricao")){ umitem.setdescricao(attrs.getvalue(i)); emit("descricao: " + attrs.getvalue(i)); if (aname.equals("marca")) umitem.setmarca(attrs.getvalue(i)); if (aname.equals("embalagem")) umitem.setembalagem(attrs.getvalue(i)); if (aname.equals("quantidade")) umitem.setquantidade(new Integer(attrs.getValue(i)).intValue()); umpedido.adicionaitem(umitem); public void endelement(string namespaceuri, String sname, // simple name String qname // qualified name ) throws SAXException { // emit("</"+sname+">"); // nl(); public void characters(char buf[], int offset, int len) throws SAXException { String s = new String(buf, offset, len); // emit(s);
29 Usando XSTL para apresentar os dados XSLT é uma linguagem para transformar documentos XML em outros documentos XML. XSL é abreviação de extensible Stylesheet Language (Linguagem de Folha de Estilos Extensível). O World Wide Web Consortium (W3C) começou a desenvolver o XSL porque havia uma necessidade linguagem de filha de estilos baseada em XML. XML não usa tags predefinidas (as tags podem ser ao "gosto do freguês") e os significados dessas tags são não "interpretáveis". A tag <table> pode significar uma tabela HTML ou um móvel, e o browser não sabe como mostrá-la. Deve haver algo então, que adicionado ao documento XML, descreve como o documento deve ser mostrado; e isso é o XSL! XSL consiste de 3 partes: XSLT é uma linguagem para transformar documentos XML XPath é uma linguagem para definir partes de um documento XML XSL-FO é uma linguagem para formatar documentos XML Pense em XSL como um conjunto de linguagens que podem transformar XML em XHTML, filtrar e ordenar dados XML, definir partes de um documento XML, formatar dados XML baseados nos valores dos dados, como mostrar valores negativos em vermelho, e exportar dados XML para mídias diferentes, como telas, papel ou voz. Transformações 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. Um modo comum de descrever o processo de transformação é dizer que o XSLT transforma uma árvore de origem XML em uma árvore de resultado XML. Declarando um documento XSL O elemento raiz que declara o documento a ser uma folha de estilos XSL é <xsl:stylesheet> ou <xsl:transform>. Nota: <xsl:stylesheet> e <xsl:transform> são completamente sinônimos e um ou outro pode ser usado! A maneira correta de declarar uma folha de estilos XSL de acordo com a Recomendação W3C XSLT é:
30 <xsl:stylesheet version="1.0" xmlns:xsl=" ou: <xsl:transform version="1.0" xmlns:xsl=" Exemplo: Vamos supor que queiramos apresentar o conteúdo do documento XML abaixo: <?xml version="1.0" encoding="iso "?> <catalog> <cd> <title>empire Burlesque</title> <artist>bob Dylan</artist> <country>usa</country> <company>columbia</company> <price>10.90</price> <year>1985</year> </cd>... </catalog> O documento original está em cdcatalog.xml. Para tanto vamos criar uma folha de estilo (cdcatalog.xsl) com o seguinte conteúdo: <?xml version="1.0" encoding="iso "?> <xsl:stylesheet version="1.0" xmlns:xsl=" <xsl:template match="/"> <html> <body> <h2>my CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th align="left">title</th> <th align="left">artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
31 Para ligar o documento XML com a folha de estilo deve-se adicionar a seguinte linha após a declaração do arquivo XML: <?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?> O elemento <xsl:template> Uma folha de estilos XSL consiste de um conjunto de regras chamados moldes (templates). Cada elemento <xsl:template> contém regras para aplicar quando um nó específico é encontrado. XSL utiliza moldes para definir como um elemento deve ser aproesentado. O atributo match é usado para associar um molde com um elemento XML. O atributo match também pode ser usado para definir um molde para toda uma seção de um documento XML (por exemplo, match="/" define o documento todo).. A folha de estilos XSL a seguir contém um molde para emitir o Catálogo de CDs XML de nosso exemplo: <?xml version="1.0" encoding="iso "?> <xsl:stylesheet version="1.0" xmlns:xsl=" <xsl:template match="/"> <html> <body> <h2>my CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>title</th> <th>artist</th> </tr> <tr> <td>.</td> <td>.</td> </tr> </table> </body> </html> </xsl:template> </xsl:stylesheet> A tag <xsl:template> define o início de um molde. O atributo match="/" associa (combina) o molde com a raiz (/) do documento XML de origem. O resto do documento contém o molde propriamente dito, exceto pelas duas últimas linhas que definem o fim do molde e o fim da folha de estilos. O elemento <xsl:value-of> O elemento <xsl:value-of> extrai o valor de um nó selecionado e pode ser usado para selecionar o valor de um elemento XML e adicioná-lo no resultado da transformação:
32 <?xml version="1.0" encoding="iso "?> <xsl:stylesheet version="1.0" xmlns:xsl=" <xsl:template match="/"> <html> <body> <h2>my CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>title</th> <th>artist</th> </tr> <tr> <td><xsl:value-of select="catalog/cd/title"/></td> <td><xsl:value-of select="catalog/cd/artist"/></td> </tr> </table> </body> </html> </xsl:template> </xsl:stylesheet> O valor do atributo select requerido contém uma expressão XPath. Ela funciona como a navegação num sistema de arquivos onde uma barra à frente (/) seleciona subdiretórios. O elemento <xsl:for-each> O elemento <xsl:for-each> permite a você fazer iterações (loops) em XSLT e pode ser usado para selecionar todo elemento XML de um conjunto de nós específico: <?xml version="1.0" encoding="iso "?> <xsl:stylesheet version="1.0" xmlns:xsl=" <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> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
33 O for-each aparece no exemplo 6 Filtrando a saída Nós podemos filtrar a saída de um arquivo XML adicionando um critério ao atributo select de um elemento <xsl:for-each>. <xsl:for-each select="catalog/cd[artist='bob Dylan']"> Operadores de filtragem válidos são: = (igual)!= (diferente) < (menor que) > (maior que) <?xml version="1.0" encoding="iso "?> <xsl:stylesheet version="1.0" xmlns:xsl=" <xsl:template match="/"> <html> <body> <h2>my CD Collection</h2> <table border="1"> <tr> <th>title</th> <th>artist</th> </tr> <xsl:for-each select="catalog/cd[artist='bob Dylan']"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="artist"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> O filtro está no exemplo 6 O elemento <xsl:sort> O elemento <xsl:sort> é usado para ordenar o resultado. 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: <xsl:for-each select="catalog/cd"> <xsl:sort select="artist"/> o sort aparece no exemplo 7.
34 O elemento <xsl:if> O elemento <xsl:if> contém um padrão que só será aplicado se uma condição específica for verdadeira. Para colocar um teste condicional frente ao conteúdo de um arquivo, simplesmente adicione um elemento <xsl:if> no documento XSL como abaixo: <xsl:if test="price > 10"> alguma saida... </xsl:if> O valor do atributo obrigatório test será a expressão a ser avaliada. O if aparece no exemplo 8. O elemento <xsl:choose> O elemento <xsl:choose> é usado em conjunto com <xsl:when> e <xsl:otherwise> para expressar múltiplos testes condicionais. Para inserir o teste condicional choose frente ao conteúdo de um arquivo XML, simplesmente adicione os elementos <xsl:choose>, <xsl:when> e <xsl:otherwise> no seu arquivo XSL como abaixo: <xsl:choose> <xsl:when test="price > 10">...algum código... </xsl:when> <xsl:otherwise>...algum código... </xsl:otherwise> </xsl:choose> Os arquivos xsl 9 e 10 apresentam o uso de choose.
Programação para Internet I Aulas 10 e 11
Programação para Internet I Aulas 10 e 11 Fernando F. Costa [email protected] XML Definição e origem extensible Markup Language (XML) é linguagem de marcação de dados que provê um formato para descrever
Mecanismos de Comunicação. Sockets em java (http://java.sun.com/docs/books/tutorial/networking/sockets/)
Mecanismos de Comunicação Sockets em java (http://java.sun.com/docs/books/tutorial/networking/sockets/) Sockets o que é? Um socket é um mecanismo de comunicação (dois sentidos) entre dois programas a funcionar
Simbiose entre Tecnologias: XML e Java
Simbiose entre Tecnologias: XML e Java Marcio H. Zuchini USF - Itatiba [email protected] Oclair G. Prado Unisal - Americana [email protected] Márcio Henrique Zuchini (Mestre em Engenharia
Sockets. Introdução. Introdução. Programando para redes em Java. mecanismo de alto nível para acessar recursos na Internet.
Sockets Programando para redes em Java Introdução n O URLs e URLConnections fornecem um mecanismo de alto nível para acessar recursos na Internet. n Em aplicações de servidor de cliente, o servidor fornece
Transformação de documentos XML
Transformação de documentos XML César Vittori [email protected] Outubro de 2000 Resumo XSLT: Transformações XSL. Transformação de documentos XML. XSLT Introdução XSLT: transformações XSL (inglês: XSL
5a. Aula - XML 2013.2
5a. Aula -XML 2013.2 Introdução Criando Documentos XML Validando Documentos XML DTD ( Documents Type Definition) XML Schema ConsultandoXML com Xpath com XQuery Modularizando XML Namespaces Entities TransformandoXML
Extensible Markup Language (XML) Júnio César de Lima Cedric Luiz de Carvalho. Instituto de Informática Universidade Federal de Goiás www.inf.ufg.
Extensible Markup Language (XML) Júnio César de Lima Cedric Luiz de Carvalho Technical Report - RT-INF_002-05 - Relatório Técnico June - 2005 - Junho The contents of this document are the sole responsibility
XML para transferência de dados Estrutura hierárquica do XML DTDs e XML Schema Consultas de documentos XML: XPath e XQuery Transformação de
Capítulo 9: XML XML para transferência de dados Estrutura hierárquica do XML DTDs e XML Schema Consultas de documentos XML: XPath e XQuery Transformação de documentos XML: XSLT Mapeamento entre documentos
XML e XSL. Ciência da Computação DESENVOLVIMENTO DE APLICAÇÕES PARA WEB. Claudinei Dias email: [email protected]
Ciência da Computação DESENVOLVIMENTO DE APLICAÇÕES PARA WEB XML e XSL Prof. Claudinei Dias email: [email protected] Fundamentos XML Extensible Markup Language Linguagem de marcação de dados
extensible Markup Language (XML) XML é uma linguagem de anotação. XML utiliza tags para descrever informação.
extensible Markup Language (XML) XML é uma linguagem de anotação. XML utiliza tags para descrever informação. Em XML, os tags não são pré-definidos. Temos de definir os nossos tags. XML utiliza um Document
XML - Extensible Markup Language
Por Sergio Crespo XML - Extensible Markup Language Extensible Markup Language (XML) é linguagem de marcação de dados (meta-markup language) que provê um formato para descrever dados estruturados. Isso
Programação para Internet I 4. XML. Nuno Miguel Gil Fonseca [email protected]
Programação para Internet I 4. XML Nuno Miguel Gil Fonseca [email protected] Standard do W3C (www.w3c.org) Formato de ficheiros de texto derivado de SGML (Standard Generalized Markup Language)
XML XML. XML extensible Markup Language HTML. Motivação. W3C: World Wide Web Consortium XML 1.0. Mário Meireles Teixeira DEINF-UFMA
Mário Meireles Teixeira DEINF-UFMA Motivação extensible Markup Language W3C: World Wide Web Consortium http://www.w3.org 1.0 W3C Recommendation, 10/Fev/1998 (inicial) W3C Recommendation, 04/Fev/2004, 3
XSL - extemsible Stylesheet Language. Prof. Antonio Almeida de Barros Jr.
XSL - extemsible Stylesheet Language Prof. Antonio Almeida de Barros Jr. Agenda Conceitos XSLT - XSL Transformations Iteração e Classificação Processamento Condicional Copiando Nodos Variáveis Estude de
XMLs E INTEGRAÇÃO COM BANCOS DE DADOS
Faculdade de Tecnologia de Guaratinguetá. 07, novembro de 2011. XMLs E INTEGRAÇÃO COM BANCOS DE DADOS Abel Vieira, Cleber Lopes, Pedro Lemes [email protected], [email protected], [email protected]
Linguagem de Programação II Implementação
Linguagem de Programação II Implementação Prof. Alessandro Borges 2 Tópicos Implementação em Java Variáveis Palavras reservadas Pacotes Identificador this Acessando membros de outros objetos API Java Nossa
Programação Orientada por Objectos com Java. Ademar Aguiar. www.fe.up.pt/~aaguiar [email protected]. MRSC, Programação em Comunicações
Programação Orientada por Objectos com Java www.fe.up.pt/~aaguiar [email protected] 1 Java Networking java.net.* 141 Package java.net Java dispõe de diversas classes para manipular e processar informação
Roteiro de Auxílio para as Atividades Práticas de Sistemas de Informação
Roteiro de Auxílio para as Atividades Práticas de Sistemas de Informação A linguagem XML no contexto do curso de Sistemas de Informação é utilizada principalmente para o armazenamento e a manipulação de
http://rogerioaraujo.wordpress.com Série Rações Semanais Xpath e XSLT Rogério Araújo
http://rogerioaraujo.wordpress.com Série Rações Semanais Xpath e XSLT Rogério Araújo http://rogerioaraujo.wordpress.com Série Rações Semanais Xpath e XSLT Rogério Araújo Questões A persistência é o menor
Estrutura Lógica DTD
Estrutura Lógica DTD Carina Dorneles [email protected] http://www.inf.ufrgs.br/ dorneles DTD Introdução DTD - Document Type Definition Conjunto de regras que definem a estrutura do documento Hierarquia
Entrada e Saída Exercício. Linguagem Java. Adenilso da Silva Simão 01/09/05
01/09/05 Onde conseguir informações sobre os pacotes: http://java.sun.com/j2se/1.5.0/docs/api/ Tutorial http://java.sun.com/docs/books/tutorial/essential/ io/overview.html (II) Tanto a entrada quanto a
Folhas de estilo. Jomi Fred Hübner [email protected]. (XSL e XPath) FURB / DSC
Folhas de estilo (XSL e XPath) Jomi Fred Hübner [email protected] FURB / DSC Fevereiro, 2004 XML Stylesheet Language (XSL) XSL é uma linguagem para descrever folhas de estilo para documentos XML. Transformer
Análise de Programação
Análise de Programação Fundamentos da Linguagem de Programação Java Prof. Gilberto B. Oliveira Variáveis Atributos: Variáveis Declaradas fora de um método, sem o modificador static Variáveis membro ou
Redes de Computadores II. Programação com Sockets em Python
v.2016 Redes de Computadores II Programação com Sockets em Python Prof. Ricardo Couto A. da Rocha [email protected] UFG Regional de Catalão Camada de Transporte Arquitetura TCP/IP APLICAÇÃO TRANSPORTE REDE
Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java
Guia da Sintaxe do Java TIPOS PRIMITIVOS DE DADOS DO JAVA São os tipos nativos de dados do Java, que podem ser usados na declaração de atributos, variáveis, parâmetros. Tipo primitivo Tamanho Valor padrão
Documentos XML 1/20. Exemplo de documento XML:
1/20 Documentos XML XML é a abreviatura de extensible Markup Language. É uma linguagem de marcas ou anotações como HTML. Mas a linguagem XML foi concebida para descrever informação enquanto que a linguagem
User Datagram Protocol
User Datagram Protocol UDP: Protocolo utiliza para distinguir para qual usuário ou aplicativo deve ser encaminhado um datagrama destinado a uma máquina que esteja executando mais de um processo. Problemas:
Simulado de Linguagem de Programação Java
Simulado de Linguagem de Programação Java 1. Descreva o processo de criação de programas em Java, desde a criação do código-fonte até a obtenção do resultado esperado, por meio de sua execução. Cite as
Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura
Java First-Tier: Aplicações Orientação a Objetos em Java (I) Paradigmas de Programação Programação Funcional Programação Procedural Programação Orientada por Objetos Grupo de Linguagens de Programação
Classes e Objetos. Sintaxe de classe em Java
Classes e Objetos Classes e Objetos A Programação Orientada a Objetos (POO) é uma técnica de programação que se baseia na construção de classes e utilização de objetos. Os objetos são formados por dados
TECNOLOGIA WEB INTRODUÇÃO CONSTRUÇÃO DE PÁGINAS ESTÁTICAS HTML / XHTML
INTRODUÇÃO CONSTRUÇÃO DE PÁGINAS ESTÁTICAS HTML / XHTML 1 INTRODUÇÃO TECNOLOGIA WEB Começaremos desvendando o poder do desenvolvimento de aplicações baseadas na Web com a XHTML (Extensible HyperText Markup
REST. Representational State Transfer. É um estilo arquitetural usado por muitas aplicações Web para estender as suas funcionalidades.
REST Representational State Transfer É um estilo arquitetural usado por muitas aplicações Web para estender as suas funcionalidades. Não é um padrão. Exemplo ASP.NET Web API namespace WebAPIApp.Models
FEUP Faculdade de Engenharia da Universidade do Porto XSL. Porto, Maio de 2002. Gabriel David [email protected]. FEUP, Maio 2002 XML/XSL
1 FEUP Faculdade de Engenharia da Universidade do Porto XSL Porto, Maio de 2002 Gabriel David [email protected] Estilo vs Conteúdo 2 Reutilização de fragmentos de dados: o mesmo conteúdo pode ter um aspecto
Dados armazenados em um objeto podem ser tanto primitivos, tais como inteiros ou caracteres, ou referências para outros objetos.
2. Classes e Objetos Uma classe é um modelo que define os atributos e métodos comuns a um conjunto de objetos de forma encapsulada. Atributos são informações ou dados que descrevem, categorizam ou quantificam
Sistemas de Informação: XML- Java
XL 1 : XL- Java Todos os exemplos bem como o conteúdo teórico tem por base o livro: Steven Holzner, SAS Teach Yourself XL, SAS Publishing, 2004 XL Java e XL 2 Documentos XL podem ser abordados de dois
Prof. Esp. Andrew Rodrigues 1
Prof. Esp. Andrew Rodrigues www.andrewrodrigues.com.br www.andrewrodrigues.com.br 1 PHP em Ação PHP é uma linguagem de programação que pode fazer todo o tipo de coisas: avaliar dados de formulários enviados
Array em Java. Figura 1 - Exemplo de um array de inteiros
Array em Java 1. Objetivos Nesta lição, abordaremos Array em Java. Primeiro, definiremos o que é array e, então, discutiremos como declará-los e usá-los. Ao final desta lição, o estudante será capaz de:
Fundamentos da programação Parte - 1
Fundamentos da programação Parte - 1 1. Objetivos Nesta lição discutiremos as partes básicas de um programa em Java. Começaremos explicando as partes do programa Hello.java mostrado na última lição. Discutiremos
Notas sobre XSLT. O modo correcto para declarar um documento xsl é:
Notas sobre XSLT XSLT é a abreviatura de extensible Stylesheet Language Tansformations. É uma linguagem para transformação de documentos xml. Permite transformar um documento xml noutro documento xml,
DOM (Document Object Model)
DOM (Document Object Model) Modelo de dados para XML estrutura hierárquica (árvore) métodos de acesso (API DOM) principais classes de objetos document, node, nodelist e element execução de consultas e
Programação Orientada a Objetos
Programação Orientada a Objetos Pacotes e Encapsulamento Msc. Paulo de Tarso F. Júnior 1 Introdução Permite o agrupamento de classes em uma coleção chamada pacote Um pacote é uma coleção de classes e interfaces
Algoritmos e Programação
Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes [email protected] 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;
Orientação a Objetos e Java
Orientação a Objetos e Java Daves Martins [email protected] Mestre em Computação de Alto Desempenho pela UFRJ Especialista em Banco de Dados Analista Web Orientação a Objetos e Java Características
Exercícios de Revisão Java Básico
Exercícios de Revisão Java Básico (i) Programação básica (estruturada) 1) Faça um programa para calcular o valor das seguintes expressões: S 1 = 1 1 3 2 5 3 7 99... 4 50 S 2 = 21 50 22 49 23 48...250 1
Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan
Introdução a classes e objetos Prof. Marcelo Roberto Zorzan Aula de Hoje Abstração de Dados Classes e Objetos Definição de Métodos Métodos com parâmetro Abstração de Dados Processo mental através do qual
Tipos, Literais, Operadores
Tipos, Literais, Operadores Identificadores São palavras utilizadas para nomear variáveis, métodos e classes Na linguagem Java, o identificador sempre começa por letra, sublinhado(_) ou cifrão ($) Não
Tipos, Literais, Operadores
Tipos, Literais, Operadores Identificadores São palavras utilizadas para nomear variáveis, métodos e classes Na linguagem Java, o identificador sempre começa por letra, sublinhado(_) ou cifrão ($) Não
Tratamento de Erros. Sérgio Luiz Ruivace Cerqueira
Tratamento de Erros Sérgio Luiz Ruivace Cerqueira [email protected] Agenda Introdução Try, catch, finally Unchecked Exceptions Como levantar exceções Boas práticas O problema Calculadora numero1:
Lógica de Programação e Algoritmos
Lógica de Programação e Algoritmos com exemplos na linguagem JAVA Cap. 4 Estruturas de Dados Homogêneas Vetores e Matrizes Conteúdo: 4.1 Variáveis compostas homogêneas... 55 4.2 Vetores... 56 Exercícios
Palavras Reservadas da Linguagem Java
Palavras Reservadas da Linguagem Java Palavras Reservadas da Linguagem Java: Categorias Tipos de dados primitivos Literais Pseudo-variáveis Desvio e controle de fluxo Pacotes Exceções Modificadores de
Tratamento de Exceções. LPG II Java. Tratamento de Exceções. Conceito de Exceções. Exemplo
Tratamento de Exceções LPG II Java Tratamento de Exceções Introdução Princípios do tratamento de exceções em Java Cláusula try Cláusula catch Cláusula finally Hierarquia de exceções em Java Considerações
<NOME>ABIAS FRANCISCO DE SOUZA</NOME> <CNPJCPF>68884087872</CNPJCPF> <NMATRICULA>101264</NMATRICULA>
1. ARQUIVO XML 1.1. O arquivo XML deverá possuir o seguinte formato: ABIAS FRANCISCO DE SOUZA 68884087872 101264
Rui Carneiro, Rui Pereira, Tiago Orfão
Geração de Gráficos SVG através de PHP Rui Carneiro, Rui Pereira, Tiago Orfão Faculdade de Engenharia da Universidade do Porto, R. Dr. Roberto Frias, 4200-465 Porto. {ei04073,ei04077,ei03102}@fe.up.pt
Variáveis primitivas e Controle de fluxo
Variáveis primitivas e Controle de fluxo Material baseado na apostila FJ-11: Java e Orientação a Objetos do curso Caelum, Ensino e Inovação, disponível para download em http://www.caelum.com.br/apostilas/
A composição de uma Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos)
Desenvolvimento de Sistemas Web A composição de uma Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos) Prof. Mauro Lopes 1-31 24 Objetivos Dando continuidade aos estudos sobre JSP,
Prof. A. G. Silva. 28 de agosto de Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de / 1
INE5603 Introdução à POO Prof. A. G. Silva 28 de agosto de 2017 Prof. A. G. Silva INE5603 Introdução à POO 28 de agosto de 2017 1 / 1 Comandos de decisão simples e compostas Objetivos: Utilização de controles
Capítulo 9 - Imagens. Imagens
Capítulo 9 - Imagens 9 Imagens EM JAVASCRIPT, É POSSÍVEL MANIPULAR COM AS IMAGENS DE UMA PÁGINA, alterando a URL que localiza o arquivo de imagem. Assim, pode-se trocar a imagem que está sendo exibida
Unidade 7: Documentação de Código A Importância dos Comentários Prof. Daniel Caetano
Linguagem de Programação 1 Unidade 7: Documentação de Código A Importância dos Comentários Prof. Daniel Caetano Objetivo: Desenvolver a habilidade de comentar código adequadamente INTRODUÇÃO Até o momento
Linguagem Java - Introdução
Linguagem Java - Introdução Identificadores válidos resultado teste01 _numeroclientes $fortuna Identificadores Identificadores inválidos 101dalmatas 34 #x Palavras reservadas abstract assert*** boolean
Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;
1 Microprocessador Um microprocessador é um circuito eletrônico capaz de realizar diversas tarefas conforme os comandos específicos. Para isso ele deve ler esses comandos da memória de programa (ROM) e
XML Básico. Murillo Vasconcelos Henriques B. Castro. 17 de maio de 2011
XML Básico Murillo Vasconcelos Henriques B. Castro 17 de maio de 2011 O QUE É? Sigla para extensible Markable Language É uma linguagem de marcação, assim como HTML Desenvolvida para ser auto explicativa
Familiarização com a ferramenta JavaCC
Ficha nº 2 Familiarização com a ferramenta JavaCC Estrutura do ficheiro JavaCC O JavaCC utiliza um ficheiro com a extensão.jj, onde são descritos, pelo utilizador, o léxico e a sintaxe da linguagem e gera
Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos)
Linguagem de Programação para Web Java Server Pages (Diretivas, Elementos de Script e Objetos Implícitos) Prof. Mauro Lopes 1-31 28 Objetivos Dando continuidade aos estudos sobre JSP, apresentaremos os
Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }
Lista 05 Herança 1. Analisando a classe Java abaixo podemos observar que a mesma possui apenas um atributo, um construtor e dois métodos. Perceba que dentro do método main estão sendo invocados métodos
JAVA. Professor: Bruno Toledo
JAVA Professor: Bruno Toledo Funcionamento de uma LP Em uma Linguagem de Programação (LP) como C e Pascal, temos o seguinte quadro quando vamos compilar um programa. Código fonte em c Teste.c Gera código
Tec. Prog. Internet II ADVANCEPG Prof. Andrea Garcia
Laços de Repetição for, as estruturas de controle alinhadas, o break e o continue no PHP Vamos continuar com o mesmo problema para quem não se lembra: Bart Simpson ficou novamente na detenção no final
Como pôde verificar, a criação de um objecto do tipo File não cria o ficheiro em disco.
Folha 1-1 I/O em java (pakage java.io) A classe File A classe File (subclasse de Object) permite manipular os ficheiros e as directorias de um sistema de ficheiros. 1 - Substituindo o texto d:\\my_work\\
Notas de Aula 09: Tratamento de exceções
Notas de Aula 09: Tratamento de exceções Objetivos da aula: Compreender o conceito de exceção Aprender a tratar exceções nos programas Entender a hierarquia das exceções Criar e lançar uma exceção proprietária
XML: uma introdução prática <xml:introdução />
XML: uma introdução prática Helder da Rocha www.argonavis.com.br 1 Objetivos Oferecer uma visão geral da tecnologia XML Responder às questões Como implementar soluções de gestão de informações
Num sistema de objectos distribuídos, dois conceitos são fundamentais.
Folha 9-1 Java RMI - Remote Method Invocation No modelo de programação orientada a objectos, vimos que um programa consiste numa colecção de objectos que comunicam entre si através da invocação dos seus
Processamento de dados XML
Processamento de dados XML Vanessa Braganholo Vanessa Braganholo Introdução } Dois pontos básicos: } Como escrever um documento XML? } Como ler um documento XML? 2 Escrevendo um documento XML } Documentos
