Helder da Rocha (helder@argonavis.com.br) Atualizado em setembro de 2001 2 O que XML? ! eXtensible Markup Language: padro W3C ! Uma maneira de representar informao ! no uma linguagem especfica ! no define vocabulrio de comando ! no define gramtica, apenas regras mnimas de estrutura ! Exemplo: documento XML usuario_33.xml <contato codigo="33"> <nome>Severino Severovitch</nome> <email>bill@norte.com.br</email> <telefone tipo="celular"> <area>11</area> <numero>9999 4321</numero> </telefone> </contato> elemento atributo "n" de texto 3 XML versus HTML HTML mostra como apresentar XML mostra o que significa <nome>Severino Severovitch</nome> <email>bill@norte.com.br</email> <telefone> <ddd>11</ddd> <numero>9999 4321</numero> </telefone> <h1>Severino Severovitch</h1> <h2>bill@norte.com.br</h2> <p> <b>11</b> <i>9999 4321</i> </p> 4 Anatomia de um documento XML ! Documentos XML so documentos de texto Unicode ! uma hierarquia de elementos a partir de uma raiz ! Menor documento tem um elemento (vazio ou no): ! Menor documento contendo elemento vazio ! Menor documento contendo elemento e contedo texto <nome> !"#"$%&' !"#"$'#%( </nome> <nome> !"#"$%&' !"#"$'#%( </nome> Etiqueta inicial Contedo do Elemento Etiqueta final Elemento raiz <nome/> <nome></nome> = 5 XML Namespaces ! Estabelecem um contexto para elementos e atributos ! formalmente declarado atravs de um identificador (um string, geralmente uma URI) atravs de atributo reservado do XML: xmlns ! Podem ser associados a um prefixo para qualificar elementos e atributos ! Quando o prefixo no usado, estabelece um namespace default adotado pelo elemento onde declarado e seus elementos filho !"#$%&'(')* !,-$.) %/#0'0-12"-3%/0)"2*456!7,-$.)* !(&#$' !"#$%&'()*+,,-../0#*"-'* !,-$.)*(8%9)")!7,-$.)* !7(&#$'* !7"#$%&'(')* !"#$%&'(') :$&/"+112%;#<77'..=(&#$'2* !,-$.) %/#0'0-12"-3%/0)"2*456!7,-$.)* !1+(&#$'* !1+,-$.)*(8%9)")!71+,-$.)* !,-$.) %/#0'0-128);'"2*>?@!7,-$.)* !71+(&#$'* !7"#$%&'(')* Escopo do namespace vale para elemento <clima> e herdado por todos os seus descendentes Escopo do namespace vale para descendentes de <simulacao> qualificados com o prefixo 'w' Nos dois casos, elementos <tempo> significam coisas diferentes, mas no h conflito porque pertencem a namespaces diferentes (um deles no tem namespace) 6 Documentos XML bem formados ! Para que possa ser manipulado como uma rvore, um documento XML precisa ser bem formado ! Documentos que no so bem formados no so documentos XML use um editor XML para descobrir ! Documentos bem-formados obedecem as regras de construo de documentos XML genricos ! Regras incluem ! Ter um, e apenas um, elemento raiz ! Valores dos atributos estarem entre aspas ou apstrofes ! Atributos no se repetirem ! Todos os elementos terem etiqueta de fechamento ! Elementos estarem corretamente aninhados 7 Exemplos de algumas regras ! (1) Elementos no devem se sobrepor ! No pode !'*!A*!7'*!7A* ! (2) Atributos tm que ter valores entre aspas ! No pode !8; B#0,8146* ! Deve ser !8; B#0,812462* ! (3) Nomes de elementos so case-sensitive ! No pode !'*???!7C* ! (4) Todos os elementos tm marcadores de abertura e de fechamento ! No pode !A;*:!A;* ! Deve ser !A;7*:!A;7* ou !A;*!7A;*:!A;*!7A;* 8 XML vlido ! Um XML bem construdo pode no ser vlido em determinada aplicao ! Aplicao tpica pode esperar que ! elementos faam parte de um vocabulrio limitado, ! certos atributos tenham valores e tipos definidos, ! elementos sejam organizados de acordo com uma determinada estrutura hierrquica, etc. ! preciso especificar a linguagem! ! Esquema: modelo que descreve todos os elementos, atributos, entidades, suas relaes e tipos de dados ! Um documento considerado vlido em relao a um esquema se obedecer todas as suas regras 9 Esquema ! O esquema representa uma classe ! Os documentos so instncias Esquema (universo de documentos vlidos) Documentos que aderem especificao (vlidos) Documento fora da especificao ! Como definir esquemas: ! DTD - Document Type Definition ! W3C XML Schema 10 DTD vs. XML Schema ! Um esquema essencial para que haja comunicao usando XML ! Pode ser estabelecido "informalmente" (via software) ! Uso formal permite validao usando ferramentas genricas de manipulao de XML ! Solues padro do W3C DTD XML Schema 234546478 0:$;-;: <$:"=> ="-*#> ;=#=?:$=@A 23B885CD8 0:$;-;: 0:E*F: 768GH47 IJ4KLCJ4MA 2!%E+%0N="- !"#$%+!%E&'OOO,P65D0N="-'A 2!%E+=#="=$; $-"=&'0:$;-;:'A 2!%E+0:".#=!8Q.=A 2!%E+-;;)*R(;= $-"=&'0:E*F:' (%=&')=S(*)=E'A XML, porm mais complexo Suporta namespaces Permite definio de tipos Simples mas no XML No suporta namespaces Limitado quando a tipos de dados 11 Por que usar XML para compartilhar dados? ! Porque um padro aberto ! Facilidade para converter para formatos proprietrios ! Porque texto ! Fcil de ler, fcil de processar, menos incompatibilidades ! Porque promove a separao entre estrutura, contedo e apresentao ! Facilita gerao de dados para visualizao dinmica ! Evita repetio de informao / simplifica manuteno ! Porque permite semntica na Web ! Elementos HTML no carregam significado, apenas dicas de formatao: mecanismos de busca ficam prejudicados 12 Como produzir XML ! Criando um documento de texto Unicode a partir de qualquer editor de textos ! Gerando um documento a partir de uma rvore montada dinamicamente 20:$;-;: 0:E*F:&'TT'A 2$:"=AD=U=)*$: D=U=):U*;0N2,$:"=A 2="-*#AR*##V$:);=O0:"OR)2,="-*#A 2;=#=?:$= ;*.:&'0=#(#-)'A 2-)=-AWW2,-)=-A 2$("=):AXXXX YTZW2,$("=):A 2,;=#=?:$=A 2,0:$;-;:A 20:$;-;: 0:E*F:&'TT'A 2$:"=AD=U=)*$: D=U=):U*;0N2,$:"=A 2="-*#AR*##V$:);=O0:"OR)2,="-*#A 2;=#=?:$= ;*.:&'0=#(#-)'A 2-)=-AWW2,-)=-A 2$("=):AXXXX YTZW2,$("=):A 2,;=#=?:$=A 2,0:$;-;:A celular 11 9999 4321 33 Severino Severovitch bill@norte.com.br 13 Visualizao em um browser ! Folha de estilo: conjunto de regras para formatar ou transformar as informaes de um documento XML ! CSS - Cascading Style Sheets ! Transformao visando apresentao visual ! Aplicao do estilo em tempo de execuo no cliente ! XSLT - eXtensible Stylesheet Language ! Transformao em texto, HTML ou outro formato ! Aplicao em tempo real ou prvia (no servidor) ! Se no estiver associado a uma folha de estilo, o documento XML no tem uma "aparncia" definida ! Vrios browsers por default mostram a rvore-fonte XML ! Outros mostram apenas os ns de texto sem formatao 14 Formas de processamento XML ! Via APIs de programao ! SAX Simple API for XML: leitura seqencial, ideal para extrao de dados ! DOM Document Object Model: leitura completa, ideal para manipulao (insero, reordenao, alterao, remoo de ns) ! Via linguagens de processamento (suportadas por parsers e processadores padronizados pela W3C) ! XSLT, XPath, XLink, XPointer e XQuery: extrao, transformao e localizao de dados ! XSL-FO, XHTML, SVG: apresentao de dados 15 Processamento XML PDF PDF PDF 2000 2001 SGBD <xml> <xml> <xml> 2!"#A !:$&* Web XML para SGBD e vice-versa HTML CSS JavaScript VRML PDF e PostScript Grficos SVG Imagens JPG e PNG WML VoiceXML "custom" XML DOM SAX texto RTF TeX SGML 16 XPath ! Linguagem usada para navegar na rvore XML ! Uma expresso XPath um caminho na rvore que resulta em um valor (nmero, texto, booleano), objeto (elemento, atributo, n de texto) ou conjunto de objetos ! Expresses XPath so usadas dentro de atributos XML ! Usadas em XSLT, XLink, XQuery e XPointer celular 11 9999 4321 33 Severino Severovitch bill@norte.com.br Caminhos absolutos ,0:$;-;:,V0:E*F: ,0:$;-;:,;=#=?:$=,V;*.: ,0:$;-;:,;=#=?:$=,$("=):,;=!;<@ Relativos ao contexto ,0:$;-;: : V0:E*F: !"# O,V0:E*F:% ;=#=?:$=,V;*.: !"# O,;=#=?:$=,V;*.:% ;=#=?:$=,$("=):,;=!;<@ 17 XLink, XPointer e XQuery ! XLink: especificao W3C que define vnculos (de diversos tipos) entre documentos XML ! Funcionalidade mnima igual ao <a href> do HTML ! uma coleo de atributos, com namespace prprio, que podem ser usados em elementos de qualquer linguagem XML. ! XPointer: aponta para partes de documentos XML ! Identificador no destino, acessvel por XLink: !#*$[+N)=?&'I*E=$;' ! Caminho resultante de expresso XPath: !.:*$;=)<,#*U):,*E@ ! XQuery: linguagem para pesquisar documentos XML atravs de queries com sintaxe inspirada em SQL ! Exemplo: \GJ ]R C7 E:0("=$;<'(%(-)*:^TTO!"#'@,0:$;-;: _`4J4 $:"=&'D=U=)*$: D=U=):U*;0N' J48LJ7 ]R 18 XSL ! eXtensible Stylesheet Language ! Aplicao de XML para transformao e apresentao de dados disponveis em XML ! No existe mais como uma especificao. Foi dividida em duas ! XSLT foca em transformao de dados. XSLT uma linguagem funcional para processamento de templates ! XSL-FO linguagem de descrio de pgina (como PDF, HTML+CSS) ! Cada especificao define um namespace prprio ! XSLT usa o identificador 8,,.<77BBB?B5?);374DDD7EFG7H;'/"I);$ ! XSL-FO usa 8,,.<77BBB?B5?);374DDD7EFG7J);$', ! Importante: as URLs acima so usadas como identificadores de namespace, e no representam nenhum endereo Web ! muito comum usar URLs como identificadores de namespace ! Todas as aplicaes XML do W3C usam URLs da forma: N;;.+,,111O1TO:)F,!"#$%&'%()*"("$+,!,'(#$-$.*"+ 19 XSLT ! XSL Transformations (XSLT) ! Linguagem (XML) para criao de documentos que contm regras de transformao para documentos XML ! Documentos escritos em XSLT so chamados de folhas de estilo (mas so na verdade templates) e contm ! Elementos XSLT: !,-$.&',-*, !#I*, !I);=-'(8*, ... ! Expresses XPath para localizar ns da rvore-fonte ! Texto ou XML a ser gerado no documento-resultado ! Usa-se um processador XSLT Processador XSLT Xalan, TrAX, Saxon Firefox, I. Explorer, etc. Folha de estilos Documento Resultado Documento Fonte fonteToHtml.xslt fonte.xml <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="livro/titulo"> <td><xsl:value-of select="." /></td> 20 XSLT: documento-fonte (1) ! Considere o seguinte documento-fonte: !'-;)/'9- #012KHLMN2* !);#3-$ .';,#0'126O<4@2*P#) 0- Q'/-#;)!7);#3-$* !0-",#/)*FR) K'%&)!70-",#/)* !7'-;)/'9-* ! E sua representao como uma rvore-fonte J*: E= a-$=*): bc+Wd , V*E V.-);*E- 2-=):$-U=A 2:)*F="A 2E=%;*$:A e8f_g Dh: e-(#: 21 XSLT: folha de estilos (2) ! O seguinte template (parte de uma folha de estilos XSLT) pode extrair os dados do documento-fonte !:"&<,-$.&',- $',(812'-;)/'9-2* !.*C '-;)/'9- 0- .;-I#:) !:"&<9'&%-=)I "-&-(,12S#02 7* 0-()&)% 0- !:"&<9'&%-=)I "-&-(,12);#3-$2 7* T" !:"&<9'&%-=)I "-&-(,12);#3-$7S.';,#0'2 7* ,-/0) ()$) 0-",#/) ) '-;).);,) 0- !:"&<9'&%-=)I "-&-(,120-",#/)2 7*?!7.* !7:"&<,-$.&',-*
! Elementos XSLT so qualificados com prefixo (da forma 2!%#+=#="=$;:A) para evitar conflitos com o documento-resultado ! O prefixo xsl e namespace precisam ser declarados com xmlns:xsl documento-fonte (em azul - XPath) documento resultado (em preto) elementos XSLT (em vermelho, com prefixo xsl) 22 XSLT: documento-resultado (3) ! Aps a transformao, o resultado ser !.*C '-;)/'9- 0- .;-I#:) KHLMN 0-()&)% 0- P#) 0- Q'/-#;) T" O<4@ ,-/0) ()$) 0-",#/) ) '-;).);,) 0- FR) K'%&)?!7.* ! Para obter outros resultados e gerar outros formatos com os mesmos dados, pode-se criar folhas de estilo adicionais 23 XSL-FO ! XSL Formatting Objects ! Linguagem XML de descrio de pgina com os mesmos recursos que PostScript ou PDF ! Descreve o layout preciso de texto e imagens ! Possui centenas de elementos, atributos e propriedades (que so semelhantes s propriedades do CSS) ! Pginas so facilmente convertidas para PDF e PostScript ! Ideal para gerar documentos para impresso (livros, etc.) ! Normalmente gerada via XSLT Processador XSLT XSLT Documento XSLFO Fonte FOP Documento PDF XML XML XML <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name="p1"> <fo:region-body/> 24 XSL-FO: menor documento !I)<;)), !"#$%+?:&'N;;.+,,111O1TO:)F,WXXX,PD5,\:)"-;'* !I)<&'U)%,=$'",-;="-,* !I)<"#$.&-=.'3-=$'",-; $'",-;=/'$-12.42* !I)<;-3#)/=A)0U7* !7I)<"#$.&-=.'3-=$'",-;* !7I)<&'U)%,=$'",-;="-,* !I)<.'3-="-V%-/(- $'",-;=/'$-12.42* !I)<I&)B I&)B=/'$-12:"&=;-3#)/=A)0U2* !I)<A&)(W ()&);12A&%-2 I)/,="#X-12>6.,2* Y-&&) KZJ[ !7I)<A&)(W* !7I)<I&)B* !7I)<.'3-="-V%-/(-* !7I)<;)),* Este o "<body>" do XSL-FO Este o "<head>" do XSL-FO Ligao entre as regras de layout e o contedo afetado 25 XHTML ! eXtensible HTML ! Linguagem XML de descrio de pgina Web ! Mesmos elementos do HTML 4.0 Strict ! Elementos descrevem somente a estrutura dos componentes da pgina. A forma precisa ser especificada usando CSS: no h elementos/atributos para mudar cor, alinhamento, etc. ! Pode ser misturada (estendida) com outras linguagens XML (MathML, SVG, linguagens proprietrias) ! Normalmente gerada via XSLT Processador XSLT XSLT Documento XHTML Documento Fonte XML XML XML <html xmlns="http://www.w3.org/1999/xhtml"> <head><title>Pgina XHTML</title></head> <body> <h1>Pgina XHTML</h1> 26 SVG ! Scalable Vector Graphics (padro W3C) ! Grficos vetoriais em XML ! Plug-ins para principais browsers: concorre com Flash ! Suporta animaes, links, JavaScript, CSS ! Produzido por ferramentas como Adobe Ilustrator ! Pode ser embutido no cdigo XHTML e XSL-FO Zoom + Zoom + <svg xmlns="http://www.w3.org/2000/svg"> <circle style="fill: red" cx="3cm" cy="3cm" r="2.5cm" /> <rect style="fill: blue" x="6cm" y="6cm" height="2.5cm" width="1.5cm" /> 27 Exemplo de SVG !"93 B#0,81246($2 8-#38,1246($2* !3 )/(&#(W12'&-;,\]^&#()% /) 3;%.) 4[]_2* !(#;(&- ",U&-12I#&&< ;-02 (:125($2 (U125($2 ;12>?@($2 7* !;-(, ",U&-12I#&&< A&%-2 :12`($2 U12`($2 8-#38,12>?@($2 B#0,8124?@($2 7*!73* !3 )/(&#(W12'&-;,\]^&#()% /) 3;%.) >[]_2* !(#;(&- ",U&-12I#&&< 3;--/a ).'(#,U< 6?@2 (:12@($2 (U12@($2 ;12>($2 7*!73* !' :$&/"<!#*$[128,,.<77BBB?B5?);374DDD7:&#/W2 !#*$[<8;-I128,,.<77BBB?B5?);37L;'.8#("7FbL2* !,-:, ",U&-12()&);< A&'(Wa I)/,=I'$#&U< ,'8)$'a I)/,="#X-< 4>.,2 :125($2 U12O($2* FbL c EdG!7,-:,*!7'* !7"93* CSS JavaScript XLink 28 Outras aplicaes populares do XML Classe oper(): void oper2(): int MathML SOAP WSDL UDDI ebXML CML Web Services XML-RPC XMI 1 * WML VoiceXML Classe3 oper(): void oper2(): int Classe2 oper(): void oper2(): int TEI DocBook 29 Demonstrao ! Exemplo de transformao XML Saxon FOP JFOR Texto texto texto texto texto texto texto texto texto <xslt> FO <xslt> HTML PDF 2000 2001 <xml> HTML <xsl:fo> (1) (2) <xslt> SVG (3) <xslt> Texto (4) (1.a) (1.b) SVG 30 Concluses ! XML uma tima soluo para compartilhar dados ! Para implementar solues em gesto de informaes usando XML, pode-se usar ! DTD ou XSchema para especificar o modelo de dados e validar as informaes ! As APIs DOM ou SAX para extrair dados dos documentos, gerar documentos, ler e gravar em bancos de dados ! XSLT e XPath para transformar os dados em outros formatos ! XLink, XPointer e XQuery para criar vnculos lgicos entre os documentos e localizar seus componentes ! XSL-FO ou XHTML para formatar os dados para impresso ou visualizao na tela (PDF, Word ou Web) ! SVG para gerar informaes em forma de grfico vetorial