XML (Extensible Markup Language) XML é uma Recmendaçã W3C XML apenas descreve s dads e que eles significam O HTML que fi desenvlvid para mstrar s dads e a aparência deles XML é um cmplement a HTML e nã um substitut deste XML fi desenvlvid para estruturar, armazenar e enviar s dads XML is a crss-platfrm, sftware and hardware independent tl fr transmitting infrmatin W3Schls Cm XML s dads sã mantids separads d seu códig HTML Cm XML a trca de dads entre sistemas incmpatíveis é pssível As tags d XML nã sã pré-definidas, vcê deve criar as suas próprias tags, bedecend a um pequen cnjunt de regras de sintaxe. Regras de Sintaxe d XML Tds s dcuments XML devem cnter a declaraçã XML Define a versã d XML e a cdificaçã de caracteres usada n dcument <?xml versin= 1.0 encding= ISSO-8858-1?> A declaraçã XML nã é parte d dcument XML, nã é um element d dcument XML, e pr iss nã precisa de uma tag de fechament Tds s dcuments XML devem cnter um, e apenas um, element raiz <raiz>... </raiz> Entre as tags d element raiz que estarã tdas as utras tags d seu dcument XML Element que diz que é dcument Tds s elements devem ter uma tag de fechament Existem duas cnstruções válidas <teste>teste 1</teste> element teste tem cnteúd <teste /> element teste é vazi Diferente d HTML que pde ter tags que nã sã fechadas XML é case sensitive <teste> é diferente de <Teste>> Os elements XML devem estar crretamente aninhads Crret: <b><i>text em negrit e em itálic</b></i> Incrret: <b><i>text em negrit e em itálic</i></b> Os valres ds atributs devem estar entre aspas Tant faz se sã aspas duplas u simples Crret: <data= 22/12/1981 ></data> Incrret:<data=22/12/1981></data> Os nmes ds elements devem seguir as regras Nmes pdem pssuir letras, númers e utrs caracteres Nmes nã pdem cmeçar cm númer u caractere de pntuaçã Nmes nã pdem cmeçar cm as letras XML e suas variações Nmes nã pdem cnter espaçs Sintaxe ds cmentáris: <!--Cmentári--> Um dcument XML que siga essas regras de sintaxe é um dcument XML Bem Frmad 1
Elements XML <?xml versin= 1.0 encding= ISSO-8859-1?> <familiares> <filh1 atribut= 1 >Cnteúd d element</filh1> <filh2 atribut= 332 >Cnteúd d element</filh2> </familiares> O element raiz é familiares Os elements filh1 e filh2 sã s elements filhs de familiares familiares é element pai de filh1 e filh2 filh1 e filh2 sã elements irmãs pr pssuírem mesm pai Atributs Tds s elements XML pdem cnter atributs Os atributs geralmente carregam infrmações que nã sã parte ds dads Cm já fi mencinad, tds s valres ds atributs devem estar entre aspas, duplas u simples Nã existem regras que digam quand usar elements filhs u atributs Os exempls a seguir carregam a mesma infrmaçã: <pessa sex= feminin > <primeir_nme>lya</primeir_nme> <ultim_nme>castr</ultim_nme> </pessa> <pessa> <sex>feminin</sex> <primeir_nme>lya</primeir_nme> <ultim_nme>castr</ultim_nme> </pessa> Dcument XML válid Um dcument XML é dit válid se, além de ele ser bem frmad, ele estiver de acrd cm um DTD u XML Schema. Utilizand CSS cm XML É pssível frmatar um dcument XML utilizand flhas de estil CSS Nã é padrã W3C Clca-se a descriçã abaix n dcument XML para ligar um CSS a dcument XML <?xml-stylesheet type= text/css href= arquiv.css?> Utilizand XSL cm XML É padrã W3C para frmatar dcuments XML: <?xml-stylesheet type= text/xsl href= simple.xsl?> Este assunt será abrdad mais adiante. 2
Prefixs e XML Namespaces Sã utilizads para reslver cnflits de nmes entre dcuments XML N primeir exempl a tag <table> se refere a uma tabela enquant que n segund exempl a tag <table> se refere a uma mesa, existind claramente um cnflit de nmes: <table> <tr> <td>apples</td> <td>bananas</td> </table> <table> <name>cffee Table</name> <width>80</width> <length>120</length> </table> Uma maneira de reslver cnflits é utilizand prefixs: <h:table> <h:tr> <h:td>apples</h:td> <h:td>bananas</h:td> </h:tr> </h:table> <f:table> <f:name>cffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> Outra maneira de reslver s cnflits é utilizand namespaces Utilizams atribut xmlns para definir um namespace em uma tag xmlns:namespace-prefix= namespaceuri Tds s filhs d element n qual namespace fi definid terã assciads a eles mesm namespace d element pai Os exempls abaix sã s mesms anterires só que cm a utilizaçã ds namespaces: <h:table xmlns:h="http://www.w3.rg/tr/html4/"> <h:tr> <h:td>apples</h:td> <h:td>bananas</h:td> </h:tr> </h:table> <f:table xmlns:f="http://www.w3schls.cm/furniture"> <f:name>cffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> Pdems definir um namespace padrã para dcument para que nã seja necessári us ds prefixs em tds s elements d dcument XML xmlns= namespaceuri <table xmlns="http://www.w3.rg/tr/html4/"> <tr> <td>apples</td> <td>bananas</td> </table> <table xmlns="http://www.w3schls.cm/furniture"> <name>cffee Table</name> <width>80</width> <length>120</length> </table> 3
Caracteres Ilegais Alguns caracteres sã ilegais n dcument XML e causarã err se utilizads. Para evitar iss utilizams as entidades de referência da tabela abaix: < < Menr que > > Mair que & & E cmercial &em; Apóstrf &qut; Aspas Cm err: <message>4m salary < 1000 then</message> Sem Err: <message>4m salary < 1000 then</message> Observaçã: smente s caracteres < e & sã ilegais n XML, s utrs sã legais, mas é uma ba prática também substituí-ls XML CDATA Td text em um dcument XML será analisad pel parser Para que algum text nã seja analisad pel parser devems clcá-l dentr de uma seçã CDATA: <![CDATA[... ]]> Td cnteúd de uma seçã CDATA é ignrad pel parser O XML nã permite que existam seções CDATA aninhadas <script> <![CDATA[ functin matchw(a,b) { if (a < b && a < 0) then { return 1 } else { return 0 } } ]]> </script> 4
DTD (Dcument Type Definitin) Um dcument XML é válid se ele, além de ser bem frmad, segue as regras de um DTD u de um XML Schema O prpósit d DTD é definir s blcs válids de um dcument XML. Ele define a estrutura d dcument cm uma lista de elements e atributs válids. O DTD pde ser declarad dentr d dcument XML u pde ser criad num utr dcument e ser referenciad n XML DTD define a cnstruçã de blcs válids para um dcument XML, bem cm a estrutura desse dcument, usand uma lista de elements válids FCC Permite descrever cada marca (tag) e frnecer regras para interpretar cada infrmaçã usada em um arquiv XML FCC Declaraçã Interna <!DOCTYPE element-raiz [declaraçã-ds-elements]> <?xml versin= 1.0 encding= ISO-8859-1?> <!DOCTYPE nte [ <!ELEMENT t (#PCDATA)> <!ELEMENT frm (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT bdy (#PCDATA)> ]> <nte> <t>jã</t> <frm>isa</frm> <heading>lembrete</heading> <bdy>é hje</bdy> </nte> Define element raiz Define tip de dads ds elements cm PCDATA Fecha DTD Declaraçã Externa É necessári assciar XML a DTD Adicina-se a linha abaix n dcument XML <!DOCTYPE element-raiz SYSTEM nme-d-arquiv > Cria-se um dcument cm as infrmações d DTD <?xml versin= 1.0 encding= ISO-8859-1?> <!DOCTYPE nte SYSTEM nte.dtd > <nte> <t>jã</t> <frm>isa</frm> <heading>lembrete</heading> <bdy>é hje</bdy> </nte> Arquiv XML <!ELEMENT nte (t,frm,heading,bdy)> <!ELEMENT t (#PCDATA)> <!ELEMENT frm (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT bdy (#PCDATA)> Arquiv nte.dtd 5
Blcs de Cnstruçã Um dcument DTD pde cnter: Elements Atributs Entidades PCDATA CDATA 1. Declaraçã ds elements Elements vazis <!ELEMENT nme-d-element categria> <!ELEMENT nme-d-element (cnteúd-d-element)> <!ELEMENT nme-d-element EMPTY> Exempl DTD: <!ELEMENT br EMPTY> Exempl XML: <br /> Elements cm PCDATA, CDATA u qualquer cnteúd <!ELEMENT nme-d-element (#PCDATA)> Exempl DTD: <!ELEMENT frm (#PCDATA)> <!ELEMENT nme-d-element ANY> Exempl DTD: <!ELEMENT nte ANY)> Elements cm filhs Os filhs devem aparecer n dcument XML na rdem exata na qual fram declarads n DTD <!ELEMENT nme-d-element (filh1)> <!ELEMENT nme-d-element (filh1,filh2,...)> Exempl DTD: <!ELEMENT nte (t,frm,heading,bdy)> Declaraçã de elements cm apenas uma crrência <!ELEMENT nme-d-element (nme-d-filh)> Exempl DTD: <!ELEMENT nte (mensagem)> smente uma crrência de mensagem Declaraçã de elements cm n mínim uma crrência <!ELEMENT nme-d-element (nme-d-filh+)> Exempl DTD: <!ELEMENT nte (mensagem+)> n mínim uma crrência de mensagem Declaraçã de elements cm zer u mais crrências <!ELEMENT nme-d-element (nme-d-filh*)> Exempl DTD: <!ELEMENT nte (mensagem*)> 6
Declaraçã de elements cm zer u uma crrência <!ELEMENT nme-d-element (nme-d-filh?)> Exempl DTD: <!ELEMENT nte (mensagem?)> zer u exatamente uma crrência de mensagem Declaraçã de cnteúd d tip um u utr Exempl DTD: <!ELEMENT nte (t,frm,header,(message bdy))> O exempl indica que element nte deve cnter um element t, um t e um header e ainda um message u um bdy Declaraçã de cnteúd mist Pdems misturar cnteúd ds elements da maneira que acharms cnveniente Exempl DTD: <!ELEMENT nte (#PCDATA t frm header message)*> O exempl indica que element nte pde cnter zer u mais crrências de PCDATA, t, frm, header u message 2. Declaraçã ds atributs <!ATTLIST element-name attribute-name attribute-type default-value> Attribute-type CDATA (em1 em2..) ID IDREF IDREFS NMTOKEN NMTOKENS ENTITY ENTITIES NOTATION XML: Default-value value #REQUIRED #IMPLIED #FIXED value Descriçã O valr é CDATA O valr deve ser um ds cntids na enumeraçã O valr é um identificadr únic O valr é um ID de utr element O valr é uma lista de Ids O valr é um nme XML válid O valr é uma lista de nmes XML válids O valr é uma entidade O valr é uma lista de entidades O valr é um nme de uma ntaçã O valr é um valr XML predefinid Descriçã O valr padrã d atribut se nada fr declarad O atribut é brigatóri O atribut nã é brigatóri O atribut tem um valr fix que nã pde ser mudad 7
DTD: <!ELEMENT quadrad EMPTY> <!ATTLIST quadrad largura CDATA "0"> XML válid: <quadrad largura="100" /> DTD: <!ATTLIST persn number CDATA #REQUIRED> XML válid: <persn number="5677" /> XML inválid: <persn /> DTD: <!ATTLIST telefne fax CDATA #IMPLIED> XML válid: <telefne fax="555-667788" /> Esse também é válid: <telefne/> DTD: <!ATTLIST sender cmpany CDATA #FIXED "Micrsft"> XML válid: <sender cmpany="micrsft" /> XML inválid: <sender cmpany="apple" /> DTD: <!ATTLIST pagament tip (check cash) "cash"> Exempl de XML: <payment type="check" /> u <payment type="cash" /> 3. Entidades As entidades sã variáveis usadas cm atalhs para algum text padrã u caracteres especiais A declaraçã das entidades pde ser interna u externa: <!ENTITY nme-da-entidade "valr-da-entidade"> <!ENTITY nme-da-entidade SYSTEM "URI/URL"> Exempl de declaraçã DTD interna: <!ENTITY escritr "Jã Castr."> <!ENTITY cpyright "Cpyright Resums&Apstilas."> Exempl XML <autr>&escritr;&cpyright;</autr> Exempl de declaraçã DTD externa: <!ENTITY escritr SYSTEM "http://resumsapstilas.blgspt.cm/entidades.dtd"> <!ENTITY cpyright SYSTEM" http://resumsapstilas.blgspt.cm/entidades.dtd "> Exempl XML <autr>&escritr;&cpyright;</autr> 8
XSL = extensible Stylesheet Language XSL sã as flhas de estil d XML XSL descreve cm dcument XML deve ser apresentad Recmedaçã W3C XSL cnsiste em três partes XSLT = linguagem para transfrmar dcuments XML Xpath = linguagem para navegar ns dcuments XML XSL-FO = linguagem para frmatar dcuments XML X = S extensible L T Stylesheet Language Transfrmer É uma recmendaçã W3C XSLT transfrma um dcument XML em utr dcument que pde ser XML, XHTML, HTML u qualquer linguagem recnhecida pr um brwser Um arquiv XSL uma flha de estils para XML. Os arquivs XSL sã na verdade arquivs XML que utilizam namespace específic d XSL, cm prefix "xsl O element raiz d XSLT pde ser <xsl:stylesheet> u, pcinalmente, <xsl:transfrm> <?xml versin= 1.0 encding= ISSO-8858-1?> <xsl:stylesheet versin= 1.0 xmlns:xsl= http://www.w3c.rg/1999/xsl/transfrm >... </xsl:stylesheet> Ou <?xml versin= 1.0 encding= ISSO-8858-1?> <xsl: transfrm versin= 1.0 xmlns:xsl= http://www.w3c.rg/1999/xsl/transfrm >... </xsl:transfrm> Exempls de arquivs XSL É necessári incluir uma referência a arquiv XSL n seu dcument XML <?xml-stylesheet type="text/xsl" href="arquiv.xsl"?> 9
Vams utilizar XML simplificad abaix e XSL lg a seguir <?xml versin="1.0" encding="iso-8859-1"?> <?xml-stylesheet type="text/xsl" href="cmbustível.xsl"?> <cmbustível> <abasteciment id="1"> <dia>22</dia> <mês>05</mês> <an>2007</an> <km_ttal>103045 km</km_ttal> <km_rdads>452,5 km</km_rdads> <gas>31,132 litrs</gas> <preç_litr>r$2,68</preç_litr> <valr>r$83,43</valr> </abasteciment>... </cmbustível> <?xml versin="1.0" encding="iso-8859-1"?> <xsl:stylesheet versin="1.0" xmlns:xsl="http://www.w3.rg/1999/xsl/transfrm"> <xsl:template match="/"> <html> <bdy> <h1>abasteciments</h1> <table brder="1"> <tr bgclr="#9acd32"> <th align="left">dia</th> <th align="left">mês</th> <th align="left">an</th> <th aling="left">km Ttal</th> <th align="left">km Rdads</th> <th align="left">gaslina</th> <th align="left">preç/litr</th> <th align="left">valr</th> <xsl:fr-each select="cmbustível/abasteciment"> <tr> <td><xsl:value-f select="dia"/></td> <td><xsl:value-f select="mês"/></td> <td><xsl:value-f select="an"/></td> <td><xsl:value-f select="km_ttal"/></td> <td><xsl:value-f select="km_rdads"/></td> <td><xsl:value-f select="gas"/></td> <td><xsl:value-f select="preç_litr"/></td> <td><xsl:value-f select="valr"/></td> </xsl:fr-each> </table> </bdy> </html> </xsl:template> </xsl:stylesheet> 10
Para testar grave primeir arquiv cm cmbustível.xml e segund cm cmbustível.xsl e abra XML n brwser: Abasteciments Dia Mês An KM Ttal Km Rdads Gaslina Preç/litr Valr 22 05 2007 103045 km 452,5 km 31,132 litrs R$2,68 R$83,43 29 05 2007 103480 km 434,8 km 30,38 litrs R$2,69 R$81,72 Observaçã! A FCC gsta de tentar cnfundir s candidats cm frmat d arquiv XSL XSL = extensible stylesheet language XLS = arquiv d Excel 1. Element <xsl:template match= XPath > (tem tag de fechament) É um element que define um mlde, u padrã em cnjunt cm atribut match O valr d atribut match é uma expressã XPath válida Uma expressã XPath funcina cm navegar em um filesystem, n qual uma barra / selecina s subdiretóris N exempl,<xsl:template match= / > asscia mlde a element raiz d dcument XML O cnteúd dentr da tag <xsl:template> é códig em XHTML que define cm será exibid cnteúd d arquiv XML n brwser 2. Element <xsl:value-f select= XPath > ( fechament é feit na própria tag) É utilizad para extrair valr de um nó específic dentr d arquiv XML O valr d atribut select deve ser uma expressã XPath válida N nss exempl element <xsl:value-f select="dia"/> extrai valr d nó dia 3. Element <xsl:fr-each select= XPath > (tem tag de fechament) Utilizad para criar lps Permite extrair tds s elements quand utilizad em cnjunt cm xsl:value-f O valr d atribut select deve ser uma expressã XPath válida N nss exempl definims que deve ser extraíd valr de cada um ds filhs d element abasteciment O blc de repetiçã n nss exempl é: <xsl:fr-each select="cmbustível/abasteciment"> <tr> <td><xsl:value-f select="dia"/></td> <td><xsl:value-f select="mês"/></td> <td><xsl:value-f select="an"/></td> <td><xsl:value-f select="km_ttal"/></td> <td><xsl:value-f select="km_rdads"/></td> <td><xsl:value-f select="gas"/></td> <td><xsl:value-f select="preç_litr"/></td> <td><xsl:value-f select="valr"/></td> </xsl:fr-each> 11
O element <xsl:fr-each> pde ser utilizad para filtrar resultad cm us ds peradres lógics: = Igual!= Nã igual < Menr que > Mair que Para extrair só s abasteciments feits n dia 22 <xsl:fr-each select= cmbustível/abasteciment[dia= 22 ] > Para extrair abasteciments cm valres maires que R$100 <xsl:fr-each select= cmbustível/abasteciment[valr> 100 ] > 4. Element <xsl:srt select= XPath > (nã tem tag de fechament) Serve para rdenar s resultads É clcad dentr de um element <xsl:fr-each> <xsl:fr-each select="cmbustível/abasteciment"> <xsl:srt select= valr > <tr> <td><xsl:value-f select="dia"/></td>... <td><xsl:value-f select="valr"/></td> </xsl:fr-each> 5. Element <xsl:if test= expressã de teste > (tem tag de fechament) Faz testes cndicinais Deve ser clcad dentr de um element <xsl:fr-each> <xsl:fr-each select="cmbustível/abasteciment"> <xsl:if test= valr > 100 > <tr> <td><xsl:value-f select="dia"/></td>... <td><xsl:value-f select="valr"/></td> </xsl:if> </xsl:fr-each> Mstra smente s abasteciments que cm valres maires que 100 6. Elements <xsl:chse>, <xsl:when>, <xsl:therwise> (tem tag de fechament) Utilizads para fazer múltipls testes cndicinas <xsl:chse> <xsl:when test="expressin">... algum códig... </xsl:when> <xsl:therwise>... algum códig... </xsl:therwise> </xsl:chse> 12
Bibligrafia W3Schls http://www.w3schls.cm/ W3C http://www.w3c.rg Mini Curs Virtual Link XML By Example XSLT, O Rilley 13