Comunicação Digital – Elementos de TI Banco de Dados implementação e integração com aplicações Prof.: Sandro Rigo Banco de dados: implementação e integração Roteiro: • Revisão de conceitos básicos • Caso de estudo: filmes • BD Filmes / RSS • Acesso com HTML/PHP • Exercícios Arquitetura Cliente Servidor na Internet Cliente + http MS Internet Explorer Netscape Navigator Opera NeoPlanet Amaya ....... http://www.unisinos.br 1 2 4 3 <html> ... </html> Servidor Web + http MS IIS Apache Nestcape <xml> ... </xml> ....... Arquitetura Cliente Servidor na Internet Servidor Web, documentos e scripts Internet Information Server CGI Internet: Requisições http Filtros W W W scripts xml .... html .... Cliente Web: linguagens de script Usuário Navegador html Javascript VBScript Web Server Documentos HTML <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> <HTML> <HEAD> <TITLE>Primeiro documento html</TITLE> </HEAD> <BODY> <p>Primeiro parágrafo</p> <h1>Título grande</h1> <h2 align=center>Título centralizado</h2> </BODY> </HTML> Documentos HTML HTML - Editores WYSIWYG HTML - Editores WYSIWYG Introdução Editores WYSIWYG <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><title>Untitled</title></head> <body> <script language="JavaScript" type="text/javascript"> <!--// original code by Bill Trefzger 12/12/96 function go1(){ if (document.selecter1.select1.options[document.selecter1.select1.selectedInde x].value != "none") { location = document.selecter1.select1.options[document.selecter1.select1.selectedIndex ].value } } //--> </script> <script language="JavaScript" type="text/javascript"> <!-document.write('<form name="selecter1"><select name="select1" size=1>'); document.write('<option value=none>Select your destination'); document.write('<option value=none>--------------------'); document.write('<option value="www.local1.br">U1'); document.write('<option value="www.l2.com">R5'); document.write('</select>'); document.write('<input type="button" value="Go" onclick="go1()">'); document.write('</form>'); // end hiding contents --> </script> </body></html> Documentos HTML Arquivo 1: <a href="descricao.htm#parte1”>Parte 1</a> <br> <a href="descricao.htm#parte2”>Parte 2</a> <br> Arquivo 2 (descricao.htm) .....<a name="parte1"> ...... .....<a name="parte2"> ...... CSSP – Cascading Style Sheets Positioning (400,0) (0,0) x z (0,200) y (400,200) CSS: Posicionamento PROPRIEDADES: position left top width height clip overflow z-index visibility absolute relative static valor porcentagem auto valor porcentagem auto valor porcentagem auto valor porcentagem auto retângulo auto none clip scroll auto valor inherit visible hidden width clip height CSS: Posicionamento CSS: Posicionamento <body bgcolor="#FFFFFF"> <div id="Layer1“ style="position:absolute; width:200px; height:115px; z-index:1; left: 240px; top: 176px; overflow: scroll; clip: rect(10 100 50 12); visibility: visible; background-color: #6699FF; layer-background-color: #6699FF; border: 1px none #000000"> </div> </body> CSS: Posicionamento z-index=1 z-index=0 CSS: Posicionamento CSS: Posicionamento CSS: Posicionamento CSS: Posicionamento CSS: Posicionamento CSS: Posicionamento CSS: Posicionamento <div id="imagem"> <img src="seta.gif" width=50 height=31 border=0> </div> <form name="move" action="javascript:movimenta()"> X: <input type=text size=4 name="p_x" value=20><br> Y: <input type=text size=4 name="p_y" value=10><br> <input type=submit value="muda"> <input type=button value="volta ao início“ onclick="javascript:retorna()"> </form> CSS: Posicionamento <style type="text/css"> #imagem {position:relative;top:10; left:10} </style> <div id="imagem"> <img src="seta.gif" width=50 height=31 border=0> </div> <form name="move" action="javascript:movimenta()"> X: <input type=text size=4 name="p_x" value=20><br> Y: <input type=text size=4 name="p_y" value=10><br> <input type=submit value="muda"> <input type=button value="volta ao início“ onclick="javascript:retorna()"> </form> <script language="javascript"> function movimenta(){ a_p_x=document.forms[0].elements[0].value; a_p_y=document.forms[0].elements[1].value; imagem.style.left = a_p_x; imagem.style.top = a_p_y; } CSS: Posicionamento <div id="imagem"> <img src="seta.gif" width=50 height=31 border=0> </div> <form name="move" action="javascript:movimenta()"> X: <input type=text size=4 name="p_x" value=20><br> Y: <input type=text size=4 name="p_y" value=10><br> <input type=submit value="muda"> <input type=button value="volta ao início“ onclick="javascript:retorna()"> </form> CSS: Posicionamento <style type="text/css"> #imagem {position:relative;top:10; left:10} </style> <script language="javascript"> function movimenta(){ a_p_x=document.forms[0].elements[0].value; a_p_y=document.forms[0].elements[1].value; imagem.style.left = a_p_x; imagem.style.top = a_p_y; } function retorna(){ imagem.style.top = 10; imagem.style.left = 20; imagem.style.visibility = 1; } PHP - Execução no servidor web - Integração com HTML <html><head><title>Teste com PHP</title></head> <body> <?php echo “Primeira mensagem!<P>"; ?> </body></html> PHP Exemplo com formulário: <form action=“teste.php3" method="POST"> Nome: <input type=text name=nome> Idade: <input type=text name=idade> <input type=submit> </form> Teste.php3: .... Seu nome é: <?php echo $nome?>. Você tem mesmo <?php echo $idade?> anos de idade? .... Suporte em PHP para acesso a BD $pguser=“nome_usuario"; $pgpass=“senha_usuario"; $db = mysql_connect("freesql.org", $username, $password); ... $query="select * from tabela1"; $resultado=mysql_query($query); … $nro_registros=pg_num_rows($resultado); for($i=0; $i<$nro_registros;$i++){ $linha = pg_fetch_row($conn, $i); echo(“reg.:”.$i.” id = “.$linha[0].” nome= “.$linha[1].”<br>”); } Aplicação exemplo lista.htm SGBD Lista..... lista.php Index.htm Insere Lista insere.htm Formulário inseriu.htm Resultado..... insere.php Uso de XML (eXtensible Markup Language): Exemplo de documento xml: <?xml version="1.0" standalone="no"?> <!DOCTYPE mail system “http://infowest.com/DTDS/mail.dtd”> <Mail> <From>Autor</From> <To>Alguém</To> <-- ISTO É UM COMENTÁRIO --> <Date> Terça - 14 de agosto de 2000</Date> <Subject>Introdução ao XML </Subject> <body>Comentários:<p align=“left”>Obrigado pela leitura<Br/> desta introdução</p> </body> </Mail> Interação por Voz – Voice XML Características: Um documento VoiceXML descreve: • Texto sintetizado (prompts) • Saídas de áudio e stream • Reconhecimento de palavras e frases • Reconhecimento de teclas pressionadas • Gravação de entradas faladas • Controle do fluxo de diálogo • Controle do telefone Interação por Voz – Voice XML Modelo: Servidor de documentos Interpretador VoiceXML (gateway) Resposta (voz) Pedido(voz) clientes Interação por Voz – Voice XML Exemplo uso do voicexml Resultado: Computador: Say one of: Sports; Weather; <?xml version="1.0"?> News. <vxml version="2.0"> Humano:Astrology <menu> Computador :I did not <prompt> Say one of: <enumerate/> understand </prompt> what you said. <choice next="http://www.sports.example/start.vxml"> Sports Computador : </choice> Say one of: Sports; Weather; <choice next="http://www.weather.example/intro.vxml"> News. Weather </choice> Humano:Sports <choice next="http://www.news.example/news.vxml"> News Computador : </choice> (acessa http://www.sports. <noinput>Please say one of <enumerate/></noinput> example/start.vxml) </menu> </vxml> Interação por Voz – Voice XML Exemplo 2: <form id=”informacao_do_tempo"> <block>Bem vindo ao serviço de informações de tempo.</block> <field name=”estado"> <prompt>Qual estado?</prompt> <grammar src="state.gram" type="application/x-jsgf"/> <catch event=”ajuda"> Por favor, fale o nome do estado onde você está.</catch> </field> </form> 1. RSS RSS: “Rich Site Summary” “RDF Site Summary” “Really Simple Syndication” Origem: UserLand (1997) Netscape “channels” para o Netcenter Referência: http://my.netscape.com/publish/formats/rss-0.91.dtd 1.RSS “Syndication” – compartilhamento/troca de conteúdo entre sites - notícias - listas de eventos - atualizações em projetos - avisos - informação corporativa - .... “Push” – envio automático de informação, mediante um cadastro prévio do interessado 1. RSS Sites “usuários”: • Netscape Netcenter • Userland Software • Slashdot • Wired News • Linux Today • diversos jornais (CNN, Reuters, ...) • portais ... • blogs ... 1.RSS “Syndication” Métodos: - “copy-paste” - APIs - Acesso a bases de dados - Aplicações específicas OU: - RSS 1.RSS Roteiro básico: - o site de origem disponibiliza as notícias em rss, xml, texto ou outro formato. - se necessário é realizada uma transformação (texto -> rss, BD -> rss, html->rss, .....) - o documento no formato rss é publicado na web - leitores de rss realizam a verificação e informam usuários cadastrados 1.RSS Leitores: FeedReader (http://www.feedreader.com) AmphetaDesk Beaver Figby dynamicobjects spaces ForumZilla Headline Viewer HotSheet Meerkat My UserLand News Is Free Novobot Peerkat Radio UserLand rss2email SOAPClient.com RSS News Reader (fonte: http://blogspace.com/rss/readers) 1. RSS 1. RSS 1. RSS 1. RSS 1.RSS Sintaxe básica: <?xml version="1.0"?> <!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/ formats/rss-0.91.dtd"> <rss version="0.91" encoding= "ISO_8859-1"> <channel > <item> ....... </item </channel > </rss> 1. RSS http://my.netscape.com/publish/formats/rss-0.91.dtd ........ <!ELEMENT rss (channel)> <!ATTLIST rss version CDATA #REQUIRED> <!ELEMENT channel (title | description | link | language | item+ | rating? | image? | textinput? | copyright? | pubDate? | lastBuildDate? | docs? | managingEditor? | webMaster? | skipHours? | skipDays?)*> <!ELEMENT title (#PCDATA)> <!ELEMENT description (#PCDATA)> <!ELEMENT link (#PCDATA)> <!ELEMENT image (title | url | link | width? | height? | description?)*> <!ELEMENT url (#PCDATA)> <!ELEMENT item (title | link | description)*> <!ELEMENT textinput (title | description | name | link)*> <!ELEMENT name (#PCDATA)> ..... 1.RSS Sintaxe básica: <channel > • title – o nome do canal • description – descrição breve do canal • link – um link html para o site • language – linguagem (my.netscape.com) • item – um ou mais elementos “item” Exemplo: <channel> <title>Web Insider</title> <link>http://webinsider.globo.com/main.php</link> <description>Web Insider</description> <publisher>Web Insider</publisher> <language>pt</language> 1.RSS Sintaxe básica: <item > • title – o nome do item • description – descrição breve do item • link – um link html para o local referenciado Exemplo: <item> <title>Novos players da TV brasileira</title> <link>http://www.webinsider.com.br/vernoticia.php?id=182 3 </link> <description> Boni, Gugu e J. Hawilla. Por Sergio Kulpas </description> </item> 1. RSS <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd"> <rss version="0.91"> <channel> <title>Web Insider</title> <link>http://webinsider.globo.com/main.php</link> <description>Web Insider</description> <publisher>Web Insider</publisher> <language>pt</language> <item> <title>Novos players da TV brasileira</title> <link>http://www.webinsider.com.br/vernoticia.php?id=1823</link> <description> Boni, Gugu e J. Hawilla. Por Sergio Kulpas </item> </channel> </rss> </description> 1. RSS Outros exemplos: uso com o Dublin Core Módulo RSS-DC: http://web.resource.org/rss/1.0/modules/dc/ Metadados p/ descrição de documentos Exemplo: 1. RSS <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntaxns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" > <channel rdf:about="http://example.com/news.rss"> <title>Example Channel</title> <link>http://example.com/</link> <description>My example channel</description> <items> <rdf:Seq> <rdf:li resource="http://example.com/2002/09/01/"/> <rdf:li resource="http://example.com/2002/09/02/"/> </rdf:Seq> </items> </channel> <item rdf:about="http://example.com/2002/09/01"> <title>News for September the Second</title> <link>http://example.com/2002/09/01</link> <description>other things happened today</description> <dc:date>2002-09-01</dc:date> </item> ..... 1. RSS <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" > <channel rdf:about="http://example.com/news.rss"> <title>Example Channel</title> <link>http://example.com/</link> <description>My example channel</description> <items> <rdf:Seq> <rdf:li resource="http://example.com/2002/09/01/"/> <rdf:li resource="http://example.com/2002/09/02/"/> </rdf:Seq> </items> </channel> <item rdf:about="http://example.com/2002/09/01"> <title>News for September the Second</title> <link>http://example.com/2002/09/01</link> <description>other things happened today</description> <dc:date>2002-09-01</dc:date> </item> ..... dc:subject, dc:rights 1. RSS <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd"> <rss version="0.91"> <channel> <title>Web Insider</title> <link>http://webinsider.globo.com/main.php</link> <description>Web Insider</description> <publisher>Web Insider</publisher> <language>pt</language> <item> <title>Novos players da TV brasileira</title> <link>http://www.webinsider.com.br/vernoticia.php?id=1823</link> <description> Boni, Gugu e J. Hawilla. Por Sergio Kulpas </item> </channel> </rss> </description> 1.RSS Sintaxe básica: <channel > • title – o nome do canal • description – descrição breve do canal • link – um link html para o site • language – linguagem (my.netscape.com) • item – um ou mais elementos “item” <item > • title – o nome do item • description – descrição breve do item • link – um link html para o local referenciado 1.RSS Exercício: Notas de acompanhamento: Aula 1 - 29/07/2003 (Sandro & Renata) Apresentação geral da disciplina, datas e avaliação; Revisão geral: arquitetura da web, linguagens de marcação, aplicações web. Sugestão de material de leitura com resumo do assunto inicial. Aula 2 - 05/08/2003 (Sandro) Revisão da aula 1; apresentação de css(1)(2), xml(1)(2), exemplos de uso de DTD, xmlSchema e xsl. Exercício proposto: "descrição de alguma estrutura de informação em xml". Aviso: as próximas duas aulas no laboratório(6L116). Aula 3 - 12/08/2003 (Sandro e Renata) Revisão da aula 2; apresentação de xml e xsl/xslt(1), exemplos de criação de documentos xml e modificação com xsl (exemplos). Exercícios em aula. Aviso: a próxima aula no laboratório(6L116). 1.RSS Exercício: <?xml version="1.0" encoding="ISO-8859-1" ?> Notas de acompanhamento: <!DOCTYPE rss (View Source for full doctype...)> <rss version="0.91"> Aula 1 - 29/07/2003 (Sandro & Renata) <channel> Apresentação geral da disciplina, datas e avaliação; Revisão geral: arquitetura da web, linguagens de marcação, aplicações web. <title>Tópicos Sugestão de material de leitura com resumo do assunto inicial. V - Notas de acompanhamento</title> <link>http://www.inf.unisinos.br/~rigo/.../topicosv</link> <description>Notas de acompanhamento da disciplina 60250 Aula 2 - 05/08/2003 (Sandro) Revisão da aula 1; apresentação de css(1)(2),- xml(1)(2), de uso de DTD, xmlSchema e xsl. Tópicosexemplos especiais em informática V</description> Exercício proposto: "descrição de alguma estrutura de informação em Vieira xml". e sandro Rigo</publisher> <publisher>Renata Aviso: as próximas duas aulas no laboratório(6L116). <language>pt</language> <item> Aula 3 - 12/08/2003 (Sandro e Renata) <title>Notas dadeaula1</title> Revisão da aula 2; apresentação de xml e xsl/xslt(1), exemplos criação de documentos xml e modificação com xsl (exemplos). <link>http://www.inf.unisinos.br/~rigo/graduacao/topicosv/i Exercícios em aula. Aviso: a próxima aula no laboratório(6L116).ndex.htm#aula01</link> <description>Assuntos tratados</description> </item> <item> <title>Aviso: aulas em laboratório</title> <link>http://www.inf.unisinos.br/~rigo/graduacao/topicosv/i ndex.htm#aula02</link> <description>Troca de sala: aulas em laboratório</description> </item> </channel> </rss> 1.RSS Recursos: • • • • • • • • • xpath2rss – Seleção de partes de docs HTMl/XML com XPath RSS.py – API Python p/ geração e parsing XML::RSS - API Perl p/ geração e parsing Orchard RSS – Suporte para parsing em Python, Perl e C. Site Summaries in XHTML – Serviço online para selecionar partes HTML e gerar rss myRSS – geração online de rss Online RSS 0.9x Validator - Valida rss(0.9x) (UserLand) Online RSS 1.0 Validator - Valida rss(1.0) Online RSS 1.0 Validator - Valida rss (Dave Beckett) Sites: • • • • • Syndic8 – Portal comunitário RSS Workshop – Introdução e tutoriais (Utah Online Services division) Content Syndication with XML and RSS – Informações e livro de Ben Hammersley RSSInfo - Listas de agregadores, ferramentas, tutoriais RSS Devcenter – Portal da O'reilly para RSS PHP Exemplo com formulário: <form action=“teste.php3" method="POST"> Nome: <input type=text name=nome> Idade: <input type=text name=idade> <input type=submit> </form> Teste.php3: .... Seu nome é: <?php echo $nome?>. Você tem mesmo <?php echo $idade?> anos de idade? .... Suporte em PHP para acesso a BD $pguser=“nome_usuario"; $pgpass=“senha_usuario"; $db = mysql_connect("freesql.org", $username, $password); ... $query="select * from tabela1"; $resultado=mysql_query($query); … $nro_registros=pg_num_rows($resultado); for($i=0; $i<$nro_registros;$i++){ $linha = pg_fetch_row($conn, $i); echo(“reg.:”.$i.” id = “.$linha[0].” nome= “.$linha[1].”<br>”); } Caso de estudo: http://www.imdb.com Exercício: Tratar a modelagem de um conjunto de tabelas e de operações para uma base de dados de filmes produzidos por alunos de um curso de comunicação digital Resumo das propostas Campo Tabela “filmes” Tipo Nulo Padrão id int(11) Não nome varchar(80) Não tipo int(11) Não 0 ano int(11) Não 0 duracao tinyint(4) Não 0 produtora int(11) Não 0 diretor int(11) Não 0 site varchar(160) Não genero int(11) Não 0 roteirista int(11) Não 0 sinopse varchar(255) Não cartaz int(11) Não 0 fotos int(11) Não 0 curiosidades varchar(200) Não cenas int(11) Não 0 nota float Não 0 lancamento date Não 0000-00-00 professor_resp int(11) Não 0 classificacao tinyint(4) Não 0 justificativa varchar(120) Não origem varchar(40) Não Resumo das propostas Tabelas “genero” Campo Tipo Nulo id int(11) Não nome varchar(30) Não observacoes varchar(255) Não Padrão e Campo Tipo Nulo “tipo” id int(11) Não nome varchar(30) Não obs varchar(255) Não Padrão Resumo das propostas tabela “equipe” Campo Tipo Nulo id int(11) Não nome varchar(60) Não nacionalidade varchar(60) Não data_nascim date Não premios varchar(120) Não naturalidade varchar(60) Não mini_biografia varchar(255) Não home_page varchar(120) Não email varchar(120) Não sexo char(1) Não Padrão 0000-00-00 Resumo das propostas tabela “funcao” Campo Tipo Nulo id int(11) Não nome varchar(60) Não obs varchar(255) Não Padrão Resumo das propostas Tabelas de ligação “filme-atores Campo Tipo Nulo Padrão id_filme int(11) Não 0 id_atores int(11) Não 0 Campo Tipo Nulo Padrão Equipe-funcao id_equipe int(11) Não 0 id_funcao int(11) Não 0 Resumo das propostas Resumo das propostas Possibilidades: • consulta de filmes por nome • consulta de filmes por diretor/atores/.... • consulta de atores por filme • consulta de filmografia • acesso a cartaz/imagens/cenas • outras... Exercícios: -Implementação -Inserção de dados reais -Modelagem de consultas -Modelagem de interface de acesso Exemplos de implementação Consulta: Codificação HTML <b>Sql utilizado:</b> <br> SELECT * FROM filme ORDER BY nome <hr> <b>Resultado:</b><br> <table> <tr bgcolor=#cccccc> <td><b>Nome</b></td> <td><b>Sinopse</b></td> <td><b>Ano</b></td> </tr> <tr bgcolor=#CCCCCC><td>A estória de José e Maria</td> <td>Primeira linha da sinopse. Segunda linha. Terceira linha.</td> <td>1977</td></tr> <tr bgcolor=#FFFFFF><td>A Paixão de Jacobina</td><td>Texto da sinopse: a paixão de jacobina</td> ... </table><hr><a href="http://maia.unisinos.br/_elti">Home</a><hr> Codificação PHP (1/2) include("/usr/local/website/configdb_elti.inc.php"); $link = mysql_connect($servidor, $usuario, $senha); if (!$link) { die('Não foi possível conectar: ' . mysql_error()); } $db_selected = mysql_select_db('elti_filme', $link); if (!$db_selected) { die('Não foi possível selecionar base de dados: ' . mysql_error()); } $sql = "SELECT * FROM filme ORDER BY nome"; $result = mysql_query($sql, $link); if (!$result) { die('Query inválida: ' . mysql_error()); } Codificação PHP (2/2) $lista =""; $pos=1; while($row = mysql_fetch_array($result)){ $nome = $row["nome"]; $sinopse=$row["sinopse"]; $ano =$row["ano"]; if ($pos==1) {$cor="#FFFFFF"; $pos=0;} else{$cor="#CCCCCC"; $pos=1;} $lista .= "<tr bgcolor=".$cor.">”; $lista .=“<td>$nome</td><td>$sinopse</td><td>$ano</td></tr>"; } mysql_close($link); $conteudo=""; $conteudo .="<b>Sql utilizado:</b> <br>".$sql."<hr><b>Resultado:</b><br>"; $conteudo .="<table><tr bgcolor=#cccccc>”; $conteudo .="<td><b>Nome</b></td><td><b>Sinopse</b></td>”; $conteudo .="<td><b>Ano</b></td><td>"; $conteudo .= $lista."</table>"; echo $conteudo; include_once ("rodape.php"); Inserção de gênero: Inserção de gênero: Resultado do script de inserção: servidor script parâmetros Inserção de gênero: Trecho da codificação: ..... $sql = "INSERT INTO `genero` ( `id` , `nome` , `observacoes` ) VALUES ('', '".$nome."', '".$obs."')"; $result = mysql_query($sql, $link); if (!$result) {die('Query inválida: ' . mysql_error()); } mysql_close($link); echo("<br>Dados recebidos: <hr> Nome: $nome<br> Observações: $obs<br><hr>"); Inserção de filme: Inserção de filme: Não foi implementada como documento HTML A tabela “equipe” foi consultada para a montagem da lista de seleção de diretores Consulta por filme/diretor: Formulário: Opção de indicação de nome de filme ou de nome de diretor Consulta por filme/diretor: Teste: Opção de nome de filme com a letra “A” Geração de RSS: Execução sempre atualiza arquivo xml com todos os filmes. Configuração de leitor de RSS (Feedreader) Geração de RSS: Exemplo de acesso ao resultado: Visão de todo o canal Geração de RSS: Exemplo de acesso ao resultado: seleção de uma notícia Geração de RSS: Exemplo de acesso ao resultado: acesso ao link da notícia (gera consulta ao sistema e recupera a informação do filme) Geração de RSS: Exemplo de codificação PHP: $sql = "SELECT f.nome nomefilme, f.sinopse sinopse_filme, f.ano ano_filme, e.nome nome_diretor FROM filme f, equipe e WHERE f.diretor = e.id ORDER BY f.nome"; $result = mysql_query($sql, $link); if (!$result) {die('Query inválida: ' . mysql_error());} $lista =""; while($row = mysql_fetch_array($result)){ $nome = $row["nomefilme"]; $sinopse = $row["sinopse_filme"]; $diretor = $row["nome_diretor"]; $ano = $row["ano_filme"]; $lista_ = explode(".",$sinopse); $lista .= "<item> <title>".$nome." - ".$ano." - ".$diretor."</title> <link>http://maia.unisinos.br/_elti/consultas.php?filme=".$nome."</link> <description>".$lista_[0]."</description> </item>"; } Geração de RSS: Exemplo de codificação PHP: $cabecalho = '<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd"> <rss version="0.91"> <channel> <title>Elementos de TI - Testes com RSS</title> <link>http://maia.unisinos.br/_elti/</link> <description>Testes com uso de banco de dados para geração de rss</description> <publisher>Sandro Rigo</publisher> <language>pt</language> '; $rodape = '</channel></rss>'; $conteudo = $cabecalho.$lista.$rodape; $arquivo = 'rss/elti_rss.xml'; gravar($arquivo, $conteudo); Exercícios: 1 - Inserção de roteirista na opção de Consulta simples 1 (indicar mudanças no SQL e HTML) 2 – Indicar a consulta de filmes por diretor 3 – Listar o nome do diretor junto ao filme na consulta 4- Geração de feed RSS com escolha de filme 5 – Geração de RSS com comentários/críticas recebidos 6 – Busca de filmografia de ator/diretor