Você está na página 1de 42

PREFCIO Um utilizador de XML, normalmente, quer fazer alguma coisa com os documentos que vai criando.

Para isso, necessrio transformar os documentos XML. PARTE I XML CAP.1 INTRODUO 1.1. Motivao 90% da informao correspondem a textos que so produzidos e circulam dentro da instituio ou entre instituies. Ento temos de estruturar esses textos. Documentos estruturados so documentos que tm uma estrutura explcita, as suas componentes esto identificadas. A estrutura definida formalmente atravs de regras. Este probelam, de tentar manter viva a informao correspondente aos 90% do patrimnio de uma instituio, fornece a primeira motivao para a utilizao da tecnologia de anotao (XML, XSL). O segundo mote vem de uma rea relacionada: a publicao electrnica. Acrescenta tambm metainformao aos documentos, que uma espcie de registo bibliogrfico que se agrega a um documento de modo a disponibilizar facilmente informao como a data da sua criao, autores, memria descritiva. Recentemente, uma das reas que tem registado significativos contributos e que tem evoludo muito a da representao abstracta de documentos ou de objectos com a forma de documento. Aqui os problemas comeam logo pela definio de documento (texto a ser vivo). 1.2. Estrutura do Livro No cap. 2 expem-se os conceitos subjacentes aos documentos estruturados: contedo e anotao, linguagem de anotao. No cap. 3 apresenta-se o XML, a norma para definio de linguagens de anotao e criao de documentos estruturados. No cap. 7 apresenta-se um cap. inteiramente dedicado a uma das mais recentes normas, o XML Schema. Sero abordados os temas da esdpecificao e da utilizao de schemas. termina com casos de estudo onde, para cada um, so apresentados o DTDs, o Schema e uma instncia documental. A segunda parte do livro dedicada transformao e formatao de documentos XML. H 2 abordagens: a declarativa (nica que estudaremos) baseia-se na norma XSL, desde a criao de stylesheets simples at s de 2 gerao. CAP.2 DOCUMENTAO ESTRUTURADA Para que os documentos tenham valor necessrio que sejam fceis de lovcalizar, de consumir (interpretar, validar, reutilizar. A estrutura de um documento a chave para a informao que nele est contida e pode determinar o seu valor. As vantagens da explicitao da estrutura: - Acesso permite que os elementos dos documentos sejam rapidamente localizados e manipulados. Por ex., pode-se seleccionar todos os ttulos de captulos de um livro para fazer um ndice alfabtico. - Validao A verificao de que a informao apresentada est completa e de acordo com as regras estruturais. - Reutilizao localizar alguns elementos e utiliz-los para outro fim (cartes de tarefa de um manual). - Normalizao Com a publicao e posterior adopo de DTDs, possvel normalizar a criao de documentos de um determinado tipo. 2.1. Anotao Por analogia, a publicao electrnica adoptou a mesma designao para a tarefa de colocar marcas no texto para instruir os programas de formatao e impresso. Generalizando, pode-se definir uma anotao de um texto como um meio de tornar explcita uma interpretao desse texto 8ex. carta comercial). Para o computador ser muito mais fcil processar este tipo de documento se ele estiver anotado, ie, etiquetado o que o cabealho, a assinatura, a data,... A anotao serve 2 propsitos: - Divide o documento em componentes - d organizao lgica (explicitamente)

- D indicaes para o processamento (implicitamente) - Reala o texto - D interpretao (inmplicitamente) - D instrues de formatao (explicitamente) H 3 passos distintos na tarefa de anotao 8que requer esforo e consome tempo): - Primeiro, h que analisar a estrutura da informao e os atributos que a caracterizam - Depois, h que determinar, quais as funes de processamento que produziro o formato/transformao desejado para cada elemento - Po ltimo, h que inserir as anotaes no texto. Quanto ao gnero, ou estilo, das marcas, distinguem-se 2 tipos de anotao: procedimental e descritiva. a primeir a mais orientada para os aspectos tipogrficos, o utilizador tem conscincia do impacto fsico. A 2 preocupa-se mais com os aspectos lgicos e estruturais. 2.1.1. Anotao Procedimental Ex. 1 uma carta anotada Comit Organizador da conferncia Sistemas de Informao para o Futuro .vspace .... tab4 of 4 Pode muito rapidamente tornar-se complexa, mas permite controlo directo sobre os aspectos visuais. S para imprimir, no para armazenar e reutilizar. 2.1.2. Anotao Descritiva Ao contrrio, usa cdigos que apenas classificam as componentes do documento. Ex. <P> em html Ex.2 Poema Anotado <poema> <titulo>Soneto J Antigo</titulo> <autor>(lvaro de Campos)</autor> <corpo> <quadra> <verso>Olha, <nome>Daisy</nome>:quando eu morrer tu hs-de</verso> ...completo na pg. 14 H anotaes como quadra, terceto e verso que esto relacionadas com a estrutura do documento e h outras como nome e lugar que esto relacionadas com a semntica que se pretende associar ao contedo. As vantagens: o mesmo documento susceptvel de ser tratado, sem nenhuma alterao, por vrios processadores diferentes, podendo, cada um destes, aplicar funes de processamento distintas s vrias componentes do documento. 2.1.3. Linguagens de Anotao O conjunto de anotaes, utilizado por uma dada comunidade de utilizadores num determinado contexto, designa-se por Linguagens de Anotao. Como se ver mais frente, existem mecanismos formais para definio destas linguagens. No definem apenas quais as anotaes que se podero utilizar num determinado contexto, mas tambm especifica qual a ordem em que essas anotaes devem ou podem ser usadas. Ex. LaTex, RTF, SGML, WordStar (texto) e mais actuais utilizadas na anotao de documentos para a web: HTML, XML. 2.1.4. Perspectivas de Anotao H 3 abordagens bsicas tarefa de anotar: - Anotao orientada ao formato - estrutura - Ao contedo. Uma boa linguagem de anotao ter de surgir de um equilbrio destas 3 aproximaes. Anotao Orientada ao Formato Ex. Texto carregado, itlico, quebra de pgina, tabelas, paginao. ex: ... <quadra>

<verso>Olha, <realado>Daisy>/realado>: quando eu morrer tu hs-de</verso> O perigo o de no permitir, no futuro, utilizaes alternativas do contedo do documento. Ex. quisssemos obter lista de nomes ou lugares. A anotao orientada ao formato descreve o aspecto visual de um elemento, mas no o identifica nem especifica qual a sua funo. Anotao Orientada Estrutura Baseia-se na hierarquia genrica. Ex. documento com seces; cada seco pode conter novas seces, listas e pargrafos. O uso abusivo pode levar a situaes em que elementos diferentes em termos de contedo mas que ocorrem na mesma posio hierrquica sejam anotados com a mesma marca. Anotao Orientada ao Contedo o corao da anotao genrica. a identificao dos elementos pelo seu contedo e propsito, em lugar da sua forma ou posio hierrquica, faz com que se atinja o expoente mximo da flexibilidade no contexto aplicacional. Mais uma vez, o uso abusivo pode levar a situaes problemtica. Em situaes extremas podese estar a anotar elementos com marcas diferentes sem que, mais tarde, se tire partido dessas anotaes e as anotaes pesam no processamento do documento. Uma Anotao Equilibrada Depois do que vimos, torna-se claro que a soluo bvia usar os 3 de forma equilibrada. Uma das mais usadas pela indstria da publicao electrnica, o DocBook, esto representados os 3 paradigmas como se exemplifca: - Formato - EMPH para realar texto e TABLE para organizar visualmente a informao - Estrutura SECT1, SECT2 e SECT3 para marcar os nveis de seces e subseces. - Contedo - NAME, AUTHOR, PUBDATE, COMMAND, ... para marcar vrios itens de informao. 2.2. Evoluo das Linguagens de Anotao Comeou nos anos 60. A associao americana Graphic Communications Association (GCA) criou a GenCode para desenvolver anotaes para os documentos dos seus clientes, que usavam diferentes aplicaes e formatos para os seus documentos. A IBM criou a GML (Generalized Markup Language) para resolver os seus problemas internos de publicao electrnica. O mesmo documento podia produzir um livro, um relatrio ou edio electrnica, atravs de processamento. No incio dos 80s os representates do GenCode e GML juntaram-se num esforo de normalizao formando um comit ANSI Computer Languages for the Processing of Text. O objectivo era normalizar a metodologia de especificao, a definio e a utilizao de anotaes em documentos, o qual foi atingido com a criao do SGML (Standardized Generalized Markup Language) que foi lanada em 1986 como a norma ISO 8879. Desenhada com o objectivo de permitir a definio e utilizao de formatos de documentos. suficientemente formal para permitir validar os dcumentos, tem estrutura suficiente para permitir a especificao e manuseamento de documentos complexos e extensvel de modo a suportar a gesto de grandes repositrios de informao. No CERN escolheu um conjunto de anotaes SGML e adoptou-as como linguagem da sua aplicao. Em Nexus, o editor e navegador original da www, ele usou essas anotaes, folhas de estilo para formatar visualmente as pginas e aquilo que lanou definitivamente este gnero de aplicaes: links. Em 1993 aparece o Mosaic. Mesmo a ltima verso do HTML, a 4.0, lanada em 1997, fornece apenas um conjunto limitado de anotaes. Desde 1992, o HTML evoluiu de uma sintaxe adhoc para uma linguagem de anotao definida em SGML (ideia-ferramentas genricas). Mas isso era complicado pois as pessoas queriam era pouca coisa para saberem tirar partido. Foi um 1 esforo. Ento apareceu o XML, eXtensible markup Language: por um lado o reconhecimento do SGML como uma boa metodologia para estruturar e representar documentos, por outro, a identificao de limitaes do conjunto fixo de anotaes do HTML. 2.2.1. HTML versus XML

O HTML o formato universal para quem produz documentos para a www. O seu sucesso encontra-se associado sua pobreza semntica. O XML uma alternativa mais rica. O XML/SGML possibilita a criao do contexto especfico para cada comunidade. O HTML s se pode estender atravs de ps-processamentos especficos e no atravs de novos elementos adicionados linguagem. Pelo contrrio, o XML possibilita 3 funcionalidades crticas: - Extensibilidade o autor pode definir novas anotaes, relacion-las com as existentes na estrutura e acrescentar-lhe os atributos que desejar. - Estrutura O autor pode definir uma estrutura para uma dada famlia ou classe de documentos que pode mais tarde ser associada s instncias documentais. - Validao o autor pode proceder, ou solicitar, a validao do contedo do documento relativamente estrutura. CAP.3 XML ... Um documento XML composto por 3 partes distintas: - Declarao obrigatoriamente e no incio. ex: <?xml version=1.0 encoding=iso-8859-1?> O objectivo dar algumas indicaes sobre a natureza do documento: verso do XML, qual a tabela de caracteres utilizada, qual a especificao de estilo, etc. - DTD (Document Type Declaration) em conjunto especificam um tipo de documento. opcional. Documentos com estrutura diferente (carta, memo, livro, artigo, manual, ...) tero DTDs distintos. - Texto anotado (instncia) Contm a informao, as anotaes e, opcionalmente, uma referncia ao DTD, que pode ser externo (armazenado noutro ficheiro). Um DTD: - Define qual a estrutura de uma famlia (classe ou tipo) de documentos. - Especifica quais as anotaes/marcas disponveis para anotar cada um dos elementos constituintes dos documentos deste tipo. - Especifica quais os atributos que esto associados a cada elemento. Para cada atributo, indica qual o domnio e quais os valores por omisso. - Define a estrutura do contedo de cada elemento: que subelementos tem; em que ordem; onde que pode aparecer texto normal; onde que podem aparecer dados que no sejam texto. O XML, com os DTDs opcionais, veio criar dosi novos conceitos: o de documento vlido e o de documento bem-formado. 3.2.1. Documento Vlido vs. Bem-Formado O DTD corresponde gramtica e o parser ao verificador. No entanto, o XML foi pensado para suportar aplicaes web, pelo que o DTD e as respectivas verificaes podem tornar-se um fardo bem pesado. Ento introduziram-se 2 nveis de verificao: vlido, se tiver um DTD associado e o texto estiver de acordo com as especificaes; bemformado se obedecer a: - Tiver um ou mais elementos; - Tiver um s elemento raiz; - Todas as anotaes estiverem aninhadas correctamente. 3.3. Ciclo de Vida de um Documento XML Comea numa fase de anlise. O resultado a definio de um DTD ou Schema. As fases seguintes so: edio/criao; validao; armazenamento; e formatao/transformao. 3.3.1. Anlise Documental a modelao da informao. O objectivo compreender todas as componentes, ou elementos, que constituem uma dada famlia de documentos, bem como as relaes entre eles. uma tarefa subjectiva. O XML pode facilmente albergar pequenas variaes da estrutura da mesma informao. Os resultados so tanto melhores quanto maior e mais representativo for o envolvimento de futuros utilizadores da aplicao na equipa de anlise.

composta pelas seguintes etapas: 1. Identificao dos tipos de documentos no universo em causa; 2. Definio de uma estratgia para o DTD; 3. Identificao dos utilizadores; 4. Escolha de um nome para o DTD; 5. Reconhecimento dos elementos lgicos do tipo de documento em causa; 6. Escolha entrte elementos e atributos; 7. Determinao da estrutura hierrquica. Identificao dos Tipos de Documento no Universo em Causa A ideia agrupar documentos com propriedades semelhantes em classes. Defino de uma Estratgia para o DTD Um DTD desenhado de raiz para documentos que vo ser criados diferente de um DTD desenhado para suportar documentao j existente compatibilidade. Identificao dos Utilizadores So as pessoas que vo produzir ou manipular os documentos XML anotados segundo o DTD que vai ser definido, para quentodos sejam ouvidos. O Nome do DTD O XML reduz o grau de liberdade do utilizador. O nome deve ser elucidativo do tipo de documento Elementos Lgicos do DTD Nesta fase, o objectivo obter uma descrio da estrutura do documento ; interessa, portanto, encontrar e distinguir os elementos que compem o documento a nvel lgico. Ex. memo: MEMO tem um emissor e um destinatrio, que designamos por DE e PARA. O resto pode induzir alguma subjectividade, mas podemos dizer que tem um CORPO e este est estruturado por pargrafos designados por P. Podemos ainda identificar elementos como ASSUNTO e ASSINATURA, ou mesmo um elemento mais complexo que visa registar o percurso do documento dentro da instituio. Durante este processo h questes que devem estar sempre presentes: ser necessario distinguir este elemento? O que que se pretende fazer com ele? Convm cobrir todos os ngulos do problema. Por ltimo, devem ter-se presentes os processamentos a que iro ser submetidos os documentos. Cada processamento pode ter implicaes na estrutura. Elemento ou Atributo? No mundo real h casos fronteira; a hesita-se entre um elemento e um atributo. ex. links em html. Este problema crtico e tem de ser resolvido caso a caso, baseando-nos, no entanto, nos seguintes princpios: - A informao estrutural? Um objecto que por natureza deve estar presente um bom candidato a elemento. - A informao qualifica o contedo ou faz parte de um padro repetitivo? Uma carta pode ser privada ou de negcios. No est relacionada estruturalmente com o elemento carta, apenas qualifica ou cataloga o documento (lista numerada). um bom candidato a atributo. - A informao est relacionada com o aspecto visual? -> elemento - A informao requer um processamento especial? -> elemento. Determinao da Estrutura Hierrquica Agora necessario especificar as relaes: quem contm quem, em que ordem, qual o n de ocorrncias, etc. Neste momento pode colocar-se a questo de como representar a estrutura para facilitar a escrita de um DTD. A rvore estrutural do documento d uma boa maneira de visualizar a sua estrutura. No entanto no tem informao sobre a frequncia de cada um dos elementos (opcionais e

repeties). Ento introduzem-se os diagramas de estrutura ou o ELM-tree (Element Lucid Model tree), formal. 3.3.2. Edio de Documentos XML Corresponde criao. Em princpio basta ediotor de texto, mas se se quiser tirar partido do DTD, usa-se um Editor de XML. um editor estruturado parametrizvel pelo DTD, isto , um editor que, lendo um DTD, vai ser contextualmente sensvel a esse DTD. Ajudam o escritor a marcar o seu texto sem ter de saber de cor a sintaxe de todas as anotaes em uso na medida em que lhe mostram, em cada momento (em cada contexto), a lista de todas as marcas que a se podem usar; alm disso, possibilitam a validao estrutural imediata do documento que est a ser editado. ex: XMetal da Softquad. No editor de XML preciso fazer a sua configurao relativamente ao DTD, que no mais que a sua compilao com uma ferramenta prpria que acompanha o editor. Depois de compilado adicionado biblioteca de DTDs do editor. 3.3.3. Validao uma das mais-valias da documentao estruturada tem para o processamento de documentao. Esta validao estrutural e verifica se um dado documento respeita um determinado DTD. feita por um parser configurvel por uma especificao de estrutura, um DTD. Normalmente aparecem integrados noutras aplicaes como esditores estruturados. Produz 2 resultados: um uma lista de erros; outro um texto declarativo correspondente travessia da estrutura de dados interna usada para guardar o documento durante o processo de reconhecimento. Relativamente linguagem/formato usado para a sada dos dados da travessia, pode haver algumas variaes, mas h uma assumida como norma: o ESIS Element Structure Information Set. Ex: (MEMO (DE - Camarada Napoleo ) DE (PARA - Bola de neve )PARA (CORPO (P -Na obra intitulada A Quinta dos Animais, ... \\n (P - Ser que o XML--- Qual a tua opinio? )P )CORPO )MEMO Elementos principais: (elem-id Incio do elemento com o identificador elem-id. Se tiver atributos, eles j apareceram em linhas precedentes com o prefixo A )elem-id Fim... -texto Contedo do ltimo elemento indicado Anome valor O prximo elemento a ser iniciado ter um atributo de nome nome e com o valor valor. ?proc-inst Instruo de processamento proc-inst Muitas vezes o documento processado para obter o formato ESIS que preciso para a formatao. ex de parsers: expat Xerces XML for C++ Depois de acabar de escrever o DTD a altura de pensar no estilo de apresentao. uma tarefa complexa. 3.3.4. Formatao e Transformao

Quem opta por uma soluo XML separa o contedo da formatao. De uma maneira geral, o que se pretende fazer com um documento XML transform-lo: simplesmente traduzi-lo para RTF, PDF ou HTML; Uma soluo seria ferramenta de configurao do parser, mas isso contraria o objectivo de independncia das plataformas. Em 1996, foi publicado o DSSSL, Document Style and Semantics Specification Language, a norma ISO/IEC 10179:1996 (o Assembly...). Entretanto foi desenvolvida uma nova linguagem XML, com a mesma funcionalidade mas com nvel de abstraco mais elevado o XSL eXtended Stylesheet Language. 3.3.5. Armazenamento Para o trabalho com os documentos preciso extrair partes, executar procuras inteligentes, criar indces, etc. O leque de solues de armazenamento so 3: 1. Armazenar os documentos no sistema de ficheiros do prprio sistema 2. Armazenar os documentos numa base de dados relacional Parece bvia, mas no . Existem 2 grandes famlias de documentos XML: orientados informao e orientados ao texto. Para estes h uma ordem linear inerente sua essncia, que no h nas bases de dados, resultando daqui uma perda. No entanto, devido a baixos custos, esta soluo foi implementada Omnimark Micro-Document Architecture MDA. 3. Armazenar os documentos numa base de dados orientada a objectos. cara mas eficaz. O modelo hierrquico de objectos modela directamente qualquer rvore documental. O sistema de ficheiros um recurso utilizado at ao limite. CAP. 4 DOCUMENTOS XML BEM FORMADOS Um documento XML formado por dados e anotaes. Num documento XML, os dados so os blocos de texto. A anotao de um documento descreve a sua estrutura e induz uma interpretao do seu contedo. A anotao composta por: marcas de incio de elementos, marcas de fim de elementos, marcas de elementos vazios, referncias a entidades, comentrios, limitadores de seces especiais de texto (CDATA-seco 4.6), declaraes de tipo de documento e instrues de processamento. Uma anotao comea sempre por < e termina por > 4.1. A declarao XML Um documento XML deve comear sempre por uma declarao XML. Podem ser usados 3 atributos numa declarao XML: version obrigatrio standalone opcional. yes indica que o documento est autocontido, isto , no tem referncias a entidades externas. encoding opcional e indica qual a codificao usada para os caracteres. O valor por omisso UTF-8. Para caracteresd portugueses iso-8859-1 4.2. Comentrios Um comentrio pode aparecer em qualquer ponto de um documento XML. Comea pela marca <!- - e termina com a marca - -> Existem algumas restries: - No podem aparecer antes da declarao - No podem aparecer dentro de uma anotao - No se podem usar as sequncias de caracteres -- dentro de um comentrio. Alm da sua funod e documentao usam-se para remover temporariamente partes do documento. 4.3. Instrues de Processamento

Comea por <?id-processador e termina por ?>;id-processador dever indicar a que tipo de processamento a instruo se destina. ex: <?html action=hr?> <?html?> estas instrues de processamento identificam ordens que devero ser executadas aquando da transformao deste documento para HTML. 4.4. Elementos Determinam os blocos lgicos em que o texto global pode ser partido ou decomposto. Cada elemento composto pela sua anotao de incio ( <...> ), pelo seu contedo e pela sua anotao de fim ( </...> ). Um elemento tem de estar completamente contido noutro elemento, excepto o ancestral de todos os elementos (o elemento raiz). Algumas estruturas hierrquicas podem ser recursivas, o que pode causar problemas no momento de processar a informao. As regras de formao do nome de um elemento: 1. O primeiro caractr dever ser uma letra, um underscore ou um sinal de dois pontos; 2. Os caracteres seguintes podem ser letras, dgitos, underscores, hfens, pontos e dois pontos. 3. O espao em branco no pode aparecer no nome de uma anotao. Em XML h distino entre maisculas e minsculas. Por outro lado, no contedo de um elemento, nunca devero aparecer os caracteres < e >. Em lugar deles deve-se usar as entidade &lt; e &gt; 4.4.1. Tipos de Contedo Os elementos podem incluir outros elementos (ditos elementos filho) e texto. H os que no contm texto directamente so os estrutrantes. ex: RECEITAS. Os caracteres brancos (espaos, mudanas de linha, tabulaes) so irrelevantes e no so considerados como fazendo parte do documento. Um elemento que contenha apenas texto designado como tendo contedo textual. ex: <INGRDIENTE>Meia dzia de ovos</INGREDIENTE> Quando contm simultaneamente texto e elementos filho, designa-se por elemento de contedo misto. ex: <verso>Olha, <nome>Daisy</nome>:quando...</verso> Um elemento pode no ter qualquer contedo elemento diz-se vazio. So normalmente usados pelo seu significado posicional. ex: BR e HR do HTML (so um pouco procedimentais). H, no entanto, elementos vazios puramente descritivos, como o caso dos que representam referncias. Para alm da posio, contm informao nos atributos. ex: Como ser discutido num captulo mais frente (<ref ident=cap5/>) <figura path=/> Estes elementos tm forma abreviada. 4.5. Atributos Visam qualificar o elemento a que esto associados. definido por um par constitudo por um nome e um valor, que devem estar separados pelo sinal = e o valor deve estar dentro de aspas simples ou duplas. As regras de formao do nome so as mesmas que vimos para os elementos. Problema: no existe fronteira e o problema no simples a escolha entre elemento e atributo. 4.5.1. Atributos Reservados H caractersticas universais que o contedo dos elementos pode partilhar em diferentes aplicaes. Normalmente, incluem-se nestas caractersticas a lngua utilizada e a importncia dos caracteres brancos. Para evitar conflitos com os nomes do utilizador, a norma reservou o prefixo xml. Na norma h apenas 2 atributos reservados, xml:lang e xml:space. xml:lang este atributo pode ser associado a qualquer elemento e indica qual a lngua em que o texto desse elemento est escrito. til em ambientes multilingusticos. xml:space associvel tambm a qualquer elemento e pode ter 2 valores: default 8indica que o espao no contedo do elemento no relevante) e preserve. 4.6. Seces Especiais de Texto Se se pretender usar os caracteres < > e & devem ser usadas antes entidades &lt; &gt; &amp;

No caso em que estes caracteres abundem, o XML dispe do mecanismo Seces Marcadas de Texto, onde se pode escrever livremente, sem ser necessrio substituir aqueles caractres pelas entidades correspondentes. sempre iniciada por <![CDATA[ e terminada por ]] ex: <![CDATA[Prima a tecla <<<ENTER>>>.]> 4.7. Regras de Bem Formao - Um documento XML deve ter sempre uma declarao XML no incio - Um documento deve incluir um ou mais elementos - Todos os elementos tm anotaes de incio e fecho - Os elementos devero estar aninhados correctamente. - Os valores de atributos tm de estar entre aspas 4.8. NameSpaces No XML h liberdade total de atribuir nomes a elementos e atributos. Mas, assim, h possibilidade de conflitos de nomes, nomeadamente quando se importam pedaos de outros documentos XML escritos por outros autores. ex: livro de catlogo e de encomenda. Os NasmeSpaces so a soluo do problema. Um NameSpace uma superetiqueta formada pelo nome da anotao ao qual concatenado um prefixo. Esse prefixo definido pelo utilizador e dever ser nico. Para garantir tal unicidade, convencionou-se que se usaria a sintaxe dos URL para o prefixo. Assim, partindo do princpio de que cada utilizador tem um URLprprio acabam-se os conflitos. 4.8.1. Criao de NameSpaces O World Wide Web Consortium (W3C) publicou recomendao que define NameSpace: Uma coleco de nomes, identificados por uma referncia URI (Universal Resource Identifier) que usada nos documentos XML como prefixo dos nomes de elementos e de atributos. Na mesma recomendao dizem como devem ser criados e declarados os NameSpaces. Convencionou-se existir um atributo global xmlns. ex: xmlns=http://xml.di.uminho.pt/XMLSamples/livro.dtd 4.8.2. Prefixos Esta string identificadora de um NameSpace demasiado grande para ser manipulada. Assim, associa-se-lhe uma abreviatura, que pode ser mais tarde usada como referEncia do NameSpace. xmlns:catalogo=http://xml.di.uminho.pt/XMLSamples/livro.dtd Exemplo 28: Utilizao de NameSpaces com prefixo <catalogo:livro xmlns:catalogo=http://xml.di.uminho.pt/Samples/livro.dtd xmlns:jcr=http://jcr.di.uminho.pt/DTD/coment/dtd> <catalogo:titulo>XML: da teoria prtica </catalogo:titulo> <jcr:opinio>Um bom ponto de partida...</jcr:opiniao> <catalogo:resumo>Livro que cobrer duma maneira geral mas com alguma profundidade a temtica XML. </catalogp:resumo> ... </catalogo:livro> 4.8.3. NameSpaces Locais O atributo xmlns pode ser usado em qualquer elemento. Logo, para tornar mais explcito, podia ter s declarado o jcr a seguir ao jcr:opiniao A declarao do NameSpace fica assim junto do elemento que faz uso dela. 4.8.4. NameSpaces por Omisso

O atributo xmlns pode ser utilizado isoladamente sem a declarao de um prefixo. Nesse caso declarou-se por omisso. Todos os elementos filho do elemento onde se declarou o NameSpace pertencem agora a esse NameSpace. Deixo de usar catalogo, por exemplo. 4.9. Forma Cannica de Documentos XML Preocupao actual: como representar, de uma forma abstracta, a informao num documento XML de modo a ser possvel comparar documentos? Reduzi-los a XML cannico. Isto conseguido base de uma sintaxe bastante estrita: s permitida a codificao de caracteres em UTF-8, os pares CR/LF so substitudos por LF, nos elementos textuais as sequncias de caracters brancos sosubstitudos por um nico espao... Os pacotes j trazem redutor ex: Alphaworks, o XML4J da IBM. CAP. 5 DOCUMENTOS XML VLIDOS Na maioria dos caso em que o utilizador que edita e manipula os documentos XML, h necessaidade de estipular um conjunto de regras que estabeleam a valaidade dos documentos. especificao de um tipo de documentos d-se o nome de DTD ou XML Schema. Neste captulo veremos em detalhe a linguagem com a qual se especifica um DTD. 5.1. Componentes de um Documento XML Vlido Um documento XML vlido composto por 2 grandes e distintas partes: o DTD e a Instncia. O DTD define as regras a que a instncia tem de obedecer para pertencer ao tipo de documento definido pelo DTD. Pode dizer-se que um DTD composto por um conjunto de declaraes. Existem quatro tipos de declaraes: elementos, atributos, entidades e instrues de processamento. 5.2. Elementos <!ELEMENT identificador (expresso-contedo)> identificador o nome do elemento, o qual depois usado nas anotaes. Pode ser formado por letras, dgitos, dois pontos, hfens, underscores e pontos. Mas s pode comear por letra, underscore ou dosi pontos. expresso-contedo a definio do contedo do elemento escrita numa linguagem de expresses regulares que obedece a uma lgebra. essa expresso especifica que subelementos podem aparecer, em que ordem e em que nmero. ex: <!ELEMENT contact (nome, email, telefone)> Relativamente ao contedo, pode ser: vazio este tipo de elemento tem apenas um valor posicional textual estruturado o contedo do elemento formado por uma combinao de outros elementos misto o contedo do elemento texto no meio do qual podero surgir alguns elementos soltos livre o contedo do elemento no tem qualquer restrio, pode ser uma mistura de texto com uma combinao qualquer de outros elementos definidos no DTD; este tipo de elementos ser usado apenas nos estados iniciais do desenvolvimento de uma aplicao. 5.2.1. lgebra do Contedo Contedos Atmicos Elementos vazios: a constante EMPTY ex: <!ELEMENT imagem EMPTY> depois, na instncia: <imagem path=../imagens/mapa.jpg/> Elementos Textuais: a constante #PCDATA (Parsed Characater Data) <!ELEMENT para (#PCDATA)> depois, na instncia: <para>Este livro tenta dar uma viso...</para> Note que #PCDATA o nico tipo de dados primitivo possvel. Mesmo os elementos cujo contedo seja numrico ou temporal tero de ser especificados como textuais. Esta uma das limitaes dos DTD que os XML Schemas resolvem. Contedos Compostos

neste tipo de elementos que surge a lgebra. Para definir a combinao de elementos temos 2 operadores: Operadores de Conexo e Operadores de Ocorrncia Operadores de Conexo So normalmente colocados entre 2 elementos e define a ordem em que estes podem ocorrer ou combinar-se. , operador de sequncia (a,b) significa que o elemento tem de ser composto por um elemento a e um elemento b, e que a deve preceder b. <!ELEMENT CARTA (DEST, ABERTURA, CORPO, FECHO> | operador de alternativa (a|b) significa que o elemento composto por um elemento a ou por um elemento b. <!ELEMENT PARA (#PCDATA | LISTA)*) Operadores de Ocorrncia So aplicados a um termo e visam limitar o n de ocorrncias desse termo. ? (0 ou 1 vez) a? * (0 ou mais vezes) a* + (1 ou mais vezes) a+ Elementos Mistos um elemento textual, onde podem ocorrer livremente, entre o texto, alguns elementos previamente identificados. <!ELEMENT elem-misto (#PCDATA | elem1 | elem2 | ... ) * > So aqueles que mais problemas levantam. No entanto h situaes em que no possvel evitlos. Um dos exemplos mais comuns o elemento pargrafo: <!ELEMENT paragrafo (#PCDATA | data | nome)*> Elementos Livres: a constante ANY Acabam por ser elementos de contedo misto onde, no meio do texto, pode aparecer livremente qualquer um dos outros elementos definidos na DTD, um n de vezes tambm livre. <!ELEMENT doc (para)+> <!ELEMENT nome (#PCDATA)> <!ELEMENT lugar (#PCDATA)> <!ELEMENT data (#PCDATA)> <!ELEMENT para ANY> 5.2.2. Exemplos: o DTD Agenda e o DTD Poema Como exemplo da primeira superclasse, informao estruturada, apresentamos a agnda de contactos. E, como exemplo do segundo caso (semi-estruturada), um poema. <!ELEMENT AGENDA (ENTRADA | GRUPO)+> <!ELEMENT ENTRADA (IDENT, TIPO, NOME, EMAIL, TELEFONE)> <!ELEMENT GRUPO (IDENT, (ENTRADA | GRUPO | REF)+)> <!ELEMENT NOME (#PCDATA)> <!ELEMENT EMAIL (#PCDATA)> <!ELEMENT TELEFONE (#PCDATA)> <!ELEMENT IDENT (#PCDATA)> <!ELEMENT TIPO (#PCDATA)> <!ELEMENT REF (#PCDATA)> Note que a definio do elemento grupo recursiva. <!ELEMENT poema (titulo, autor, corpo, data)> <!ELEMENT titulo (#PCDATA)> <!ELEMENT autor (#PCDATA)> <!ELEMENT corpo (quadra, quadra, terceto, terceto)> <!ELEMENT quadra (verso, verso, verso, verso)> <!ELEMENT terceto (verso, verso, verso)> <!ELEMENT verso (#PCDATA | nome | lugar)*> <!ELEMENT nome (#PCDATA)>

<!ELEMENT lugar (#PCDATA)> <!ELEMENT data (#PCDATA)> Como foi dito, note-se que temos agora um lemento com contedo misto: verso. Este eleemtno, que corresponde ao conedo semi-estruturado do poema, est definido como uma mistura de texto com elementos nome e lugar. Podamos generalizar para qualquer n de quadras e tercetos ou at para qualquer n de estrofes, mas avisa-se que a generalizao pode ser perigosa pois implica perdas semnticas. O ideal termos o objectivo final bem claro. 5.3. ATRIBUTOS No caso da agenda, pensando bem, TIPO uma caracterstica do elemento ENTRADA e no um dos seus elementos constituintes, por isso pode passar a atributo (subjectivo, sempre). Por seu lado, IDENT e REF devem ser vistos como um par pois com os seus valores que se monta um mecanismo de referenciao. Ora, para este fim, existe no XML, um par de tipos de atributos, ID e IDREF que tm a eles associada a validao que garante que a referenciao est bem feita. Logo: <!ATTLIST ENTRADA IDENT ID #REQUIRED> <!ATTLIST GRUPO IDENT ID #REQUIRED> <!ATTLIST REFERENCIA REF IDREF #REQUIRED> A primeira declarao associa um atributo de nome IDENT ao elemento ENTRADA. N ltimo caso, foi necessrio criar um elemento, REFERENCIA, ao qual pudesse ser associado o atributo REF. <!ELEMENT REFERENCIA EMPTY> 5.3.1. Declarao <!ATTLIST elem-id att1-id att1-tipo att1-class att1-val-omissao attn-id attn-tipo attn-class attn-val-omissao > Usar uma declarao deste tipo ou declarar um de cada vez, s depende do gosto pesoal. 5.3.2. Tipos So 10 e apenas eles, isto , no so permitidos tipos definidos pelo utilizador nem tipos compostos. CDATA o mais geral. qualquer texto livre sem anotaes. Usado para preos, URLs, endereos de email, etc. ID deve conter um identificador que nico em todo o documento. Este tipo de atributos deve ser usado para associar identificadores nicos a elementos. IDREF aponta para um atributo do tipo ID de outro elemento no documento. Usado normalmente para implementar relaes entre elementos, em que cada relao representada por um par de atributos ID/IDREF. As razes podem ser simples de um para um ou de um para muitos, ou complexas de muitos para muitos. Ex: ... <AGENDA> <ENTRADA IDENT=e1 TIPO=pessoa> ... </ENTRADA> <GRUPO IDENT=ep1> ... <REFERENCIA REF=e1/> <GRUPO/> Note-se que poupei, usando REF=e1 na entrada da mesma pessoa, agora par um grupo. As relaes de muitos para muitos representam outra situao onde necessrio utilizar este tipo de atributos, para evitar repetio de informao. Ex. caso de autores e livros. IDREFS til quando se pretende fazer referncia a mais que um elemento. ex:

<!ELEMENT AUTOR ...> <!ATTLIST AUTOR id ID #REQUIRED> <!ELEMENT LIVRO ...> <!ATTLIST LIVRO autores IDREFS #REQUIRED> poderamos ter: <AUTOR id=jcr></AUTOR> <AUTOR id=prh></AUTOR> ... <LIVRO autores=jcr prh>...</LIVRO> Enumerado No utiliza uma palavra chave. Em vez disso, oferece uma lista (ou eneumerao) de valores possveis para esse atributo. ex: <!ATTLIST ENTRADA IDENT ID #REQUIRED TIPO (PESSOA | EMPRESA | INSTITUICAO) pessoa> ENTITY pode conter como valor o nome de uma entidade (declarada algures no DTD. Em desuso. ex: <!ATTLIST ENTRADA IDENT ID #REQUIRED TIPO (PESSOA | EMPRESA | INSTITUICAO) pessoa FOTO ENTITY> Se no DTD existisse uma entidade de nome paulo com a fotografia do Paulo Jos, podia usar-se este atributo para associar a entidade entrada: ... <ENTRADA IDENT=e7 FOTO=paulo> <NOME>Paulo Jos Bastos</NOME> ... </ENTRADA> ... ENTITIES contm o nome de vrias entidades declaradas algures no DTD. ex: cada slide de uma apresentao uma imagem declarada como uma entidade no DTD. ENTITIES indica a ordem de visonameno do slides: ... <apresentaao id=ap3 slides=slide2 slide5 slide6 slide7/> NOTATION o menos utilizado. usado para associar um tipo de dados externo a um determinado atributo ou elemento. NMTOKEN Os valores de atributos deste tipo so identificadores no contexto do XML. semelhante ao tipo ID, s que em termos semnticos no tem a restrio da unicidade. Em desuso. NMTOKENS Quando o valor de um atributo precisa de ser composto por uma lista de NMTOKEN separados por espao, usa-se este tipo. Em desuso. Usa-se numa situao a evitart: quando se coloca a informao nos atributos em vez de nos elementos. ex: ALCUNHA NMTOKENS na entrada ALCUNHA=trinca espinhas 5.3.3. CLASSES A classe de um atributo interfere directamente com a tarefa de validao e de processamento, indicando qual o comportamento esperado do utilizador relativamente ao atributo: se o atributo opcional, se obrigatrio ou se tem um valor fixo. H 3 classes de atributos: #IMPLIED o atributo opcional. #REQUIRED o atributo obrigatrio

#FIXED o atributo constante e imutvel e o seu valor ser sempre o que estiver na declarao frente da palavra chave #FIXED. ex: <!ELEMENT data...> <!ATTLIST data tipo CDATA #FIXED data> Ex: de definio do tipo data para posterior transformao, j que o XML no o tem. A indicao da classe na declarao de um atributo opcional. Se no for especificado, os processadores assumem #FIXED. 5.3.4. Valores Por Omisso O valor por omisso uma string, entre aspas. 5.4. Associao de um DTD a um Documento <!DOCTYPE agenda SYSTEM agenda.dtd> Esta declarao especifica que o elemento raiz do documento agenda e que o DTD pode ser encontrado no sistema, no ficheiro agenda.dtd Deve aparecer sempre aps a declarao XML e antes do elemento raiz. 5.4.1. Redefinio Parcial de um DTD A sintaxe da declarao DOCTYPE pode ter um bloco extra onde possvel redefinir partes do DTD; para o caso do documento ter necessidades especficas. ex: ... <!DOCTYPE agenda SYSTEM agenda.dtd [ <!ELEMENT ENTRADA (NOME, EMAIL, TELEFONE, URL?)> <!ELEMENT URL (#PCDATA)> ]> ... Nesta instncia de agenda, as entradas podero ter um URL associado.

CAP. 6 ESTRUTURA FSICA: ENTIDADES Um documento XML pode estar espalhado por vrios ficheiros do sistema. Facilita-se desta maneira a reutilizao de subcomponentes. 6.1. CONCEITOS O XML tem um mecanismo que permite isolar fisicamente e armazenar separadamente qualquer parte de um documento (ex. cada cap. de um livro, ou figuras). Cada uma destas unidades de informao designada por entidade e tem um identificador nico associado pelo qual referenciada. A nica excepo a entidade correspondente ao documento principal, que no precisa do identificador, pois normalmente referenciada pelo nome do ficheiro que a contm. Uma entidade definida numa declarao prpria que normalmente aparece no incio do DTD. Nesta declarao atribudo um nome entidade e -lhe associado um contedo ou uma referncia para um ficheiro externo onde est esse contedo. As entidades so usadas por referncia, isto , o autor coloca uma referncia no texto que identifica univocamente uma entidade. Mais tarde, quando o documento for processado, as referncias so substitudas pelos respectivos contedos. No so permitidas referncias cclicas. Deve-se ter cuidado; o seu uso abusivo aumenta a complexidade do tratamento do documento. H no entanto situaes em que deve ser considerada: - quando a mesma informao utilizada algumas vezes no documento. - quando a informao tem representaes diferentes em sistemas incompatveis. - quando a informao diz respeito a um grande documento que deve ser separado em unidades mais pequenas de modo a facilitar a manuteno. - quando a informao composta por dados num formato diferente do XML (imagem,...) Entidades Gerais so usadas como mecanismo de abreviatura para strings de grande dimenso que se iro repetir Entidades Carcter representam a maneira de codificar caracteres especiais Entidades Externas servem para referenciar ficheiros externos Entidades Paramtricas so usadas como variveis na escrita de um DTD 6.2. ENTIDADES GERAIS Sintaxe da declrao: <!ENTITY identificador contedo> Exemplo: <!ENTITY XML eXtended Markup Language> Sintaxe da referncia: &identificador Exemplo: Este livro descreve o XML(&XML;)... pode ser mais que texto pode ser txto anotado Exemplo 37: Entidades Gerais com anotaes <!ENTITY jcr <NOME>Jos Carlos Ramalho</NOME> Na instncia: ... <AGENDA> <ENTRADA id=e1 tipo=pessoa> &jcr; <EMAIL>... 6.3. ENTIDADES CARCTER A norma XML ao adoptar o Unicode, tornou obsoleta a utilizao deste tipo de unidades. H, no entanto, uma situao em que leas ainda so utilizadas: na representao de alguns caracteres especiais do XML. Entidade/Carcter: &amp;/& &lt;/< &gt;/> &quot;/ &apos;/ Os caracteres so representados pelo seu valor decimal ou hexadecimal. Sinatxe da referncia: &#cdigo decimal; &#xcdigo hexadecimal Exemplo: O &#169 ( ou &#xA9); deste livro da FCA 6.4. ENTIDADES EXTERNAS Podem ser de 2 espcies: representar um pedao do documento XML e, neste caso, o seu contedo analisado e validado; ou um bloco de informao binria. 6.4.1. Entidades Externas Textuais

Quando um documento cresce e atinge dimenses considerveis, a sua edio pode tornar-se penosa e difcil. Este livro por exmplo podia encontrar-se repartido em vrios ficheiros XML um por captulo. Esta filosofia implementada em XML atravs de entidades externas, que corresponde a uma das parties do documento original. No documento principal, colocam-se referncias s entidades externas no local onde devem ser inseridos os respectivos ficheiros XML. <!ENTITY identificador [SYSTEM path] [PUBLIC identificador-pblico] Os blocos entre [ e ] so opcionais, mas pelo menos um deles dever estar presente. Os 2 blocos dizem repeito aos 2 mtodos possveis de endereamento dos ficheiros externos: directamente, atravs do nome e local do ficheiro no sisteme ou indirectamente, atravs de identificador pblico. O mtodo indiorecto surge para facilitar a gesto dos ficheiros dentro do sistema. Pressupes a existncia de um ficheiro com o nome catalog, que faz o emparelhamento entre identificadores pblicos e nomes de ficheiros. Um identificador pblico uma string que obedece a um conjunto de requisitos estipulados na Formal Public Identifiers. ex: <!ENTITY capitulo2 PUBLIC -//jcr//Capitulo 2 da tese//PT> temos de ter o catalog. ex: PUBLIC -//jcr//Capitulo 2 da tese//PT a:cap2.xml A utilidade mais bvia deste mecanismo a movimentao de ficheiros, alterando apenas os respectivos paths no catlogo. As externas textuais: Sintaxe da referncia: &identificador Exemplo: ... &capitulo1;... 6.4.2. Entidades Externas Binrias no DTD <!ENTITY foto-autor SYSTEM imagens/fotojcr.jpg NDATA jpeg> Notaes NDATA especifica o tipo de dados. Mas para ser reconhecido como iomagem haque definir algures no DTD: <!NOTATION jpeg image/jpeg> Variam de aplicao para aplicao. Exemplo 41: Entidades Binrias ... <!NOTATION jpeg image/jpeg> <!ENTITY paulo SYSTEM imagens/fotopaulo.jpg NDATA jpeg> ... <!ELEMENT imagem EMPTY <!ATTLIST imagem imdata ENTITY #REQUIRED> no documento: <imagem imdata=paulo/> ... Este mecanismo muito pouco suportado pelas aplicaes existentes. Da: Exemplo 42: Esquema alternativo par incluso de dados binrios ... <!ELEMENT imagem EMPTY> <!ATTLIST imagem path CDATA #REQUIRED formato CDATA #IMPLIED no documento: <imagem path=paulo.jpg formato=JPEG/>

6.5. ENTIDADES PARAMTRICAS Num DTD, h sempre subconjuntos de elementos que tm listas de atributos em comum ou mesmo parte da sua definio estrutural. Se fssemos definir o DTD sem colocar em evidncia as partes comuns, iramos ter mltiplas declaraes do mesmo objecto com a agravante de que, sempre que quisssemos alterar esse objecto, teramos de alterar todas as definies. Enquanto as entidades vistas at aqui so usadas para expanso do documento XML, uma entidade paramtrica normalmente usada para abreviar a escrita de partes constantes. ex: <!ENTITY \% para-list (para)+> <!ENTITY \% at-base id ID #REQUIRED> <!ELEMENT captulo ()> <!ELEMENT figura EMPTY> <!ATTLIST figura \%at-base; ficheiro CDATA #REQUIRED formato (gif | jpeg | png> <!ELEMENT exemplo (\%para.list; | cdigo | ...)> <!ELEMENT resumo (\%par-list;)> 6.5.1. Redefinio de Entidades Paramtricas As entidades paramtricas so particularmente poderosas pois podem ser redefinidas. As redefinies so feitas no bloco DOCTYPE usando entre [ ] Podemos at levar ao extremo de definir o contedo de todos os elementos e atributos como entidades paramtricas. 6.5.2. Modularidade na Especificao de um DTD Um DTD pode ser modular se forem utilizadas entidades paramtricas externas na sua especificao. Declara-se da mesma maneira que as normais s que, em vez de um texto de substituio, leva a palavra chave SYSTEM seguida da string indicativa do ficheiros ao qual se pretende associar a entidade. ex: 46 DTD Modular <!ENTITY \% estrutura SYSTEM estrutura.dtd> <!ENTITY \% dados SYSTEM dados.dtd> ... <!ELEMENT base-de-dados (estrutura, dados)> \%estrutura; \%dados; ... 6.6. INCLUSO CONDICIONAL Usado na gesto de modularidade. Em XML, existe uma directiva IGNORE que indica ao processador que no deve analisar um determinado conjunto de declaraes. <![IGNORE [ <!ELEMENT corpo (quadra, quadra, terceto, terceto> ]]> Esta directiva e a INCLUDE podero parecer inteis. Porm podem ser usadas atravs de entidades paramtricas e no directamente. Se for o caso: Comeamos por definir uma entidade soneto: <!ENTITY % soneto INCLUDE> Agora podemos usar essa entidade paramtrica no lugar da directiva: <![%soneto;[ <!ELEMENT corpo (quadra, quadra, terceto, terceto)> ]]> Como uma entidade paramtrica pode ser redefinida num bloco de redeclaraes de um DTD, esta combinao fornece-nos um mecanismo muito poderoso para especificar e utilizar um DTD. com esta utilizao de incluses condicionais e entidades paramtricas, possvel desenvolver

um DTD de grandes dimenses que pode ser parametrizado no instante da criao das instncias documentais como se demonstra no ex. 47 seguinte: Um DTD para poemas mais verstil: <!ELEMENT poema (titulo, autor, corpo, data)> <!ELEMENT titulo (#PCDATA)> <!ELEMENT autor (#PCDATA)> <!ELEMENT data (#PCDATA)> <![\%soneto;[ <!ELEMENT corpo (quadra, quadra, terceto, terceto)> <!ELEMENT quadra ...> <!ELEMENT terceto ...> ]]> <!ENTITY \% soneto INCLUDE> <![\generico;[ <!ELEMENT corpo (quadra | terceto)+> <!ELEMENT quadra ...> <!ELEMENT terceto ...> ]]> <!ENTITY \%generico IGNORE> ... depois podemos redefinir: <?xml version=1.0 ... ?> <!DOCTYPE poema SYSTEM poema.dtd [ <!ENTITY \% generico INCLUDE> <!ENTITY \% soneto INCLUDE> ]> <poema> </poema> Os grandes DTDs que se afirmaram na indstria documental usam este mecanismo de parametrizao para tornar mais amplo o seu universo de aplicaes e para permitir que o utilizador tenha uma maneira de personalizar o DTD, desencorajando-o, desta forma, de desenvolver um DTD especfico.

CAP. 7 XML SCHEMAS conceitos bsicos. 7.1. Introduo O XML Schema foi desenvolvido numa tentaiva de dar resposta a alguns problemas que se sentiam na utilizao de um DTD, sobretudo porque esta no era suficientemente poderosa e expressiva para a especificao de restries ao contedo dos documentos XML. As vantagens so: - Escrevem-se em XML - Suportam os tipos de dados comuns maior parte das linguagens de programao e permitem, adicionalmente, que o utilizador defina outros tipos de dados. - Fornecem um poderoso sistema de classes e tipos que permite a extenso e a reutilizao de estruturas no prprio XML Schema (mais poderoso que paramtricas) - Suportam utilizao de Namespaces -> modularidade mais fcil - Disponibilizam vrias facilidades importantes para o tratamento de elementos de contedo misto. 7.2. O Primeiro Exemplo <?xml version=1.0 encoding=iso-8859-1?> <aluno> <numero>4238</numero> <nome>Jos Alberto Rodrigues</nome> <curso>LESI</curso> </aluno> XML Schema que torna este documento XML bem formado num documento XML vlido <?xml version=1.0 encoding=ISO-8859-1?> <schema xmlns=http://www.w3.org/2001/XMLSchema> <element name=aluno> <complexType> <sequence> <element name=numero type=int/> <element name=nome type=string/> <element name=curso type=string/> </sequence> </complexType> </element> </schema> O XML auto-descritivo, como vemos. 7.3. Tipos Simples Os tipos simples (simple types) restringem o texto que pode aparecer no valor de um atributo ou no contedo de um elemento textual (um elemento textual contm apenas texto, no tem elementos filho nem atributos. H 4 tipos primitivos para sequncias de caracteres (texto): string anyURI
NOTATION uma declarao de um link para um documento externo num formato diferente do XML

QName um nome qualificado; segue as regras do nome de um elemento ou atributo Existem 3 tipos primitivos para dados numricos: decimal float um n de vrgula flutuante de preciso simples (32 bits) double - ... dupla preciso (64 bits) Suporta 9 tipos de dados para representao de datas e dados temporais: duration dateTime um instante preciso no tempo date uma data especfica time um isntante no tempo (hh,mm,ss) gYearMonth um ano e um ms gYear um ano

gMonthDay gMonth gDay Ex. 49 (parte) <element name=nome type=string/> ... <nome>123</nome> Ex. 50 (parcial) tipos de dados numricos <element name=elem-aval1 type=decimal/> <element name=media-final type=float/> <elem-aval1>10.25</elem-aval1> <media-final>129.1E-1</media-final> Ex. 51 (parcial) tipos de dados temporais uma instncia do tipo duration obedece norma ISO 8601 e tem o seguinte formato: PnYnMnDTnHnMnS, em que n um n, P um designador que indica que o contedo da string corresponde a um perodo, T o separador da data e do tempo em horas. ex: <qq-elemento durao=2P11Y7M9DT0H23M3.5S/> O perodo associado ao atributo durao corresponde a 11 anos, 7 meses, 9 dias, 0 horas, 23 minutos e 3,5 segundos. O tipo date tem a forma yyy-mm-dd. Instanciando ex. <qq-elemento momento=2000-07-13/> 7.4 Tipos Compostos A declarao de um tipo composto usada para definir um elemento do tipo estruturado, isto , permite especificar quais so os elementos filho, como se compem esses filhos, a cardinalidade dos elementos filho, os atributos, a obrigatoriedade dos atributos, etc. regra: Se um elemento tem elementos filho ou atributos, ento um elemento do tipo composto. Forma elegante e verstil de definir o nosso ex. inicial usar separadamente um tipo de dados abstracto. <complexType name=Taluno> <sequence> <element name=numero type=int> <element name=aluno type=Taluno/> Isto torna possvel algumas funcionalidades importantes: - possvel declarar mais elementos como sendo do tipo abstracto definido sem repetir o bloco da sua definio - possvel, em qualquer momento, alterar o tipo abstracto e essas alteraes sero propagadas. 7.4.1. Contedo de um Tipo Composto Para se especificar um tipo composto como uma combinao de outros elementos, tem de se usar um dos 3 operadores de composio disponveis: sequence, choice e all sequence permite especificar um contedo formado por vrios elementos que tm de obedecer a uma ordem fixa. choice permite especificar um contedo formado por um elemento escolhido arbitrariamente entre um conjunto de elementos alternativos. all todos os elementos contidos num compsitor all podem aparecer uma ou nenhuma vez e podem aparecer em qualquer ordem. mas tem algumas restries: s pode aparecer no nvel mais elevado eos elementos nele contidos tm de ser todos de um tipo simples. Ex.52 submisso electrnica de trabalhos prticos verso 2 Vamos, ento, registar os dados de uma submisso electrnica de um trabalho prtico atendendo aos seguintes considerandos: a equipa de trabalho constituda por um conjunto de alunos at ao mximo de 3; alm dos alunos, dever ser registada a data e hora da submisso e o nome do ficheiro enviado. <?xml version=1.0 encoding=ISO-8859-1?>

<schema xmlns=http://www.w3.org/2001/XMLSchema> <complexType name=Taluno> <sequence> <element name=numero type=int/> <element name=nome type=string/> <element name=curso type=string/> </sequence> </complexType> <element name=submisso> <complexType> <sequence> <element name=equipe> <complexType> <sequence> <element name=aluno type=Taluno/> <element name=aluno type=Taluno/> <element name=aluno type=Taluno/> </sequence> </complexType> </element> <element name=fich-env type=string/> <element name=2data-hora type=dateTime/> </sequence> </complexType> </element> </schema> De acordo com este XML Schema, o documento XML seguinte representa uma instncia de uma submisso electrnica <?xml version=1.0 encoding=ISO-8859-1?> <submisso> <equipe> <aluno> <numero>4238</numero> <nome>Jos Alberto Rodrigues</nome> <curso>LESI</curso> </aluno> <aluno> <numero>4140</numero> <nome>Jos Carlos Ramalho</nome> <curso>LESI</curso> </aluno> <aluno> <numero>4156</numero> <nome>Paulo Jorge Domingues</nome> <curso>LESI</curso> </aluno> </equipe> <fich-env>ZXcomplier.zip</fich-env> <data-hora>1986-03-26T16:05:13</data-hora> </submisso> 7.4.2. Especificao de Ocorrncia O XML Schema possui um mecanismo que permite especificar o n de ocorrncias de um determinado elemento. implementado com 2 atributos: minOccurs e maxOccurs. Com estes atributos, os seus pares de valores podem corresponder aos operadores de ocorrncia num DTD:

minOccurs=0, maxOccurs=1 torna o elemento opcional (? no DTD) minOccurs=0, maxOccurs=unbounded 0 ou mais vezes (+ no DTD) minOccurs=1, maxOccurs=unbounded 1 ou + vezes (+ no DTD). no Schema anterior era s pr <sequence maxOccurs=3> e assim era escusado repetir 3 vezes a mesma coisa <element name=aluno type=Taluno/> A ausncia do minOccurs significa, por omisso, 1. O valor por omisso do maxOccurs o valor de minOccurs. 7.5. Tipos Simples Derivados (a partir de um tipo simples primitivo existente) especifica-se utilizando um mecanismo de restries. Ex 53 o dia do ms <simpleType name=Tdia> <restriction base=integer> <minInclusive value=1/> <maxInclusive value=31/> </restriction> </simpleType> e j podamos declarar elementos ou atributos do tipo: <element name=D type=Tdia/> e perante instncias do tipo <D>43</D> a validao daria erro. Estas restrio designada de domnio ou intervalo. Um operador de restrio tem a forma de um elemento XML e contm um atributo de nome value onde especificado o valor para arestrio correspondente. Enumerao de alguns operadores de restrio existentes no XML: minInclusive fechado minExclusive semelhante mas aberto maxInclusive maxExclusive Length permite fixar o tamanho de um contedo textual pattern permite especificar uma expresso regular a que o contedo dos lementos associados ao tipo deve obedecer enumeration permite especificar cada um dos valores de uma lista fixa de valores de um tipo enumerado. Combinaes so infinitas ex. 54 Tipo simples derivado: o n de telefone restries: - os ns tm todos 9 dgitos; so todos da zona de Braga; hfen a separar dgitos de zona dos outros. claramente uma restrio de formato, pelo que se deve usar o operador pattern, que um dos mais poderosos: <simpleType name=Ttelefone> <restriction base=integer> <pattern value=253-[0-9]{6}/> </restriction> <simpleType> Outro dos mais usados o Enumeration Ex. 55 o dia da semana Este tipo de restrio em que se quer limitar o contedo de um elemento a um dos valores predefinidos de uma lista, chama-se restrio por enumerao. <simpleType name=TdiaSemana> <restriction base=string> <enumeration value=Domingo/> </restriction> </simpleType> 7.6. Atributos

Como j foi discutido nos cap. 3 e 4, um documento XML tambm pode ter atributos que visam caracterizar os elementos aos quais se aplicam. Em XML Schema, um atributo definido de modo semelhante ao de um elemento. as principais diferenas so: - no pode conter elementos ou atributos filho - sempre de um tipo simples (+ imp. tipo primitivo ou derivado pelo utilizador) - No ordenado Um elemento que tenha atributos do tipo composto. ex 56 Submisses (verso 3) Pretende-se acrescentar um atributo ao elemento aluno para indicar o seu estatuto: ordinrio, trabalhador-estudante ou militar: <complexType name=Taluno> <sequence> <element name=numero type=integer/> <element name=nome type=string/> <element name=curso type=string/> </sequence> <attribute name=regime type=string use=optional default=ordinrio/> </complexType> 7.6.1. Ocorrncia de Atributos Por omisso opcional. Para especificar o tipo de ocorrncia de um atributo, recorre-se ao atributo use do XML Schema, que pode ter um dos seguintes valores: - required o atributo tem de estar presenta - optional opcional ( o valor por omisso) - prohibited o atributo no pode aparecer, dever ser omitido 7.6.2. Restries ao valor de um atributo. Para alm do default, podemos especificar que o valor do atributo deve ser o igual ao prescrito no schema, quer o atributo esteja presente ou no na instncia documental, podemos, em vez de default, usar fixed, que tem uma utilidade um pouco marginal. default e fixed so conhecidos como restries ao valor de um atributo, pois restringem os valores que um determinado atributo pode ter. 7.6.3. Restries ao tipo de um atributo Por ex. para indicar que um determinado atributo s pode ter valores num determinado intervalo ou que o seu valor ter de pertencer a uma lista de valores predefinida. Ex. 57 Restries ao tipo de um atributo ... <simpleType name=TRegime> <restriction base=string> <enumeration value=ordinario/> <enumeration value=trabalhador-estudante/> <enumeration value=militar/> <enumeration value=dirigente-acadmico/> </restriction> </simpleType> <complexType name=Taluno> <sequence> </sequence> <attribute name=regime type=Tregime use=optional default=ordinrio/> </complexType>

7.7. Elementos Vazios No tem contedo textual nem elementos filho. S pode pois conter atributos, caso contrrio no passa duma simples marca, o que raro. Ex. 59: Declarao de Elementos Vazios 2 caso mais comum. Pretende-se especificar um elemento que assinale a incluso de uma imagem num documento. Para isso vamos especificar um elemento imagem com atributos path e formato: <element name=imagem> <complexType> <attribute name=path type=string use=required/> <attribute name=formato type=TiFormato/> </complexType> </element> <simpleType name=TiFormato> <restriction base=string> <enumeration value=GIF/> <enumeration value=BMP/> <enumeration value=PNG/> </restriction> </simpleType> 7.8. Elementos de Contedo Misto uma combinao de elementos filhos e texto. A necessidade quando um autor tem necessidade de associar um significado ou uma nfase especial a um bocado do texto. Por ex. no caso do verso para especificar nomes e lugares, vimos que no DTD se fazia: <!ELEMENT verso (#PCDATA|nome|lugar)*> pelo que no era possvel restringir nem a ordem nem o n de ocorrncias. Num XML Schema teremos: <element name=verso> <complexType mixed=true> <choice minOccurs=0 maxOccurs=unbounded> <element name=nome type=string/> <element name=lugar type=string/> </choice> </complexType> </element> Ex. 60 Elementos de contedo misto Voltando ao caso das submisses electrnicas, o sistema devia responder com uma mensagem tpica, com restries de ordem (nome, ttulo e data-hora) e apenas 1 vez. Ento: <element name=recibo> <complexType mixed=true> <sequence> <element name=nome type=string/> <element name=titulo type=string/> <element name=data-hora type=dateTime/> </sequence> </complexType> </element> 7.9 Contexto: Elementos Globais versus Locais - Declaraes de elementos globais so filhas do elemento raiz schema - Declaraes de elementos locais esto aninhadas algures na estrutura de um schema e no so filhas directas do elemento schema. Se for declarado globalmente qualquer outro elemento do tipo composto pode usar aquela declarao criando uma referncia para ela, para evitar repeties em documentos que contm blocos estruturais repetidos. Ex. 61 Declaraes de elementos globais e sua reutilizao

Nas submisses o bloco estrutural aluno repete-se. A soluo at agora era declarar um tipo abstracto Taluno. A declarao de um elemento global Aluno permite: <?xml version=1.0 encoding=ISO-8859-1?> <schema xmlns=http://www.w3.org/2001/XMLSchema> <element name=Aluno> <sequence> <element name=numero type=int/> <element name=nome type=string/> <element name=curso type=string/> </sequence> </element> <element name=submisso> <complexType> <sequence> <element name=equipe> <complexType> <sequence maxOccurs=3> <element ref=Aluno/> </sequence> </complexType> </element> <element name=fich-env type=string/> <element name=data-hora type=dateTime/> </sequence> </complexType> </element> </schema> No XML Schema no h indicao explcita do elemento raiz e todos os elementos irmos declarados sob o elemento schema so potenciais razes de instncias documentais desse schema. O anterior garante a validao de documentos que servem de registo de submisses electrnicas, mas tambm garante a validade a documentos que contenham dados de um aluno. Pode-se portanto concluir que a utilizao de elementos globais tem algumas utilidades: permite a reutilizao desses elementos, permite validar parcialmente um documento e permite, quando levada ao exagero, ter vrios tipos de documento especificados no mesmo schema. O que vimos permite construir schemas para 75% dos problemas que podem surgir. 7.10 Exemplos: os schemas Agenda e Poema correspondem aos DTDs de 5.2.2. Vamos usar, como descrevemos, tcnicas de modularidade, usando tipos abstractos para modularizar e a seguir uma metodologia top-down. depois h uma nova soluo com elementos globais. Exemplo 62: A agenda de contactos com tipos de dados abstractos <?xml version=1.0 encoding=iso-8859-1?> <xs:schema xmlns:xs=2http://www.w3.org/2001/XMLSchema elementFormDefault=qualified> attributeFormDefault=unqualified> <xs:element nam=agenda> <xs:complexType> <xs:choice maxOccurs=unbounded> <xs:element name=entrada type=Tentrada/> <xs: element name=grupo type=Tgrupo/> </xs:choice> </xs:ComplexType> </xs:element>

<xs:complexType name=Tentrada> <xs:sequence> <xs:element name=nome type=xs:string/> <xs:element name=email type=xs:string/> minOccurs=0 maxOccurs=1/> <xs:element name=telefone type=Ttelefone/> </xs:sequence> <xs:attribute name=id type=xs:ID use=required/> </xs:complexType> <xs:simpleType name=Ttelefone> <xs:restriction base=xs:string> <xs:pattern value=253-[0-9]\{6}/> </xs:restriction> </xs:simpleType> <xs:complexType name=Tgrupo> <xs:choice maxOccurs=unbounded> <xs:element name=entrada type=Tentrada/> <xs:element name=ref type=Tref/> <xs:element name=grupo type=Tgrupo/> </xs:choice> <xs:attribute name=gid type=xs:ID use=required/> </xs:complexType> <xs:complexType name=Tref> <xs:attribute name=entref type=xs:IDREF use=required/> </xs:complexType> </xs:schema> Schema da Agenda com Elementos Globais PARTE II XSL O XML cada vez mais usado para estruturar e representar informao, quer em aplicaes web, quer em aplicaes ditas empresariais. A beleza do XML reside na sua simplicidade, um formato textual (e, assim, independente de paltaformas) e extensvel (permite sempre acrescentar novas descries para a informao em causa). Fornece, pois, uma maneira de descrever a informao sem nenhuma preocupao sobre a utilizao final que se quer dar a essa informao, criando uma separao entre contedo e forma. Mas um documento XML, um texto anotado, por si s, no apropriado para ser lido oumanipulado por quem no est interessado na estrutura. Para distribuir informao no formato XML, necessrio preservar o seu contedo fazendo desaparecer as marcas, ou anotaes, substituindo-as pela formatao ou transformao apropriada; por ex., <titulo>T</titulo> pode ser transformado em <H1>T</H1> para poder ser visionado num browser HTML. A norma XSL eXtensible Stylesheet Language foi desenvolvida para dar resposta a este problema. Nesta segunda parte do livro, discutida uma famlia de normas do World Wide Consortium (W3C) derivadas de uma proposta inicial para uma linguagem de especificao de estilo chamada XSL. contudo, durante a sua incubao, esta proposta dividiu-se em 3: A primeira, XPath, define um mtodo de localizao de informao em documentos XML, e tem diversas utilizaes nomeadamente, na transformao e an formatao. A segunda, XSLT (XSL Transformations), fornece uma metodologia para transformar documentos XML em outros formatos de dados, incluindo linguagens de formatao. E, finalmente, XSLFO (XSL Flow Objects), ou simplesmente XSL, usada para especificar a forma pretendida para os documentos XML.

Estas 3 normas juntas constituem um meio de formatar documentos XML. O XSLT atingiu a maturidade h j algum tempo e devido ao atraso do XSLFO, comeou por ser usado para converter documentos XML em HTML, para efeitos de apresentao e de distribuio de contedos XML. Devido ao grande n de aplicaes que so desenvolvidas diaraiamente neste paradigma, este ser o cerne desta segunda parte do livro. CAP. 8 O PASSADO: DSSSL E CSS Como j foi referido, o XSL surge como uma evoluo de duas outras tecnologias j existentes: o DSSSL Document Style Semantics and specification Language e o CSS Cascading style Sheets. 8.1. DSSSL Como j vimos, o XML especifica apenas a estrutura, no fornece qualquer facilidade para a especificao de aparncia visual ou formato. Ento, cada editor tinha a sua linguagem prpria para associar estilo aos documentos XML. A portabilidade estava assim ameaada. Foi pois na tentativa de normalizar o que faltava que o comit ISO lanou a norma ISO/IEC 1079:1996, hoje conhecida como DSSSL, que foi primeiro penasod para o SGML (antecessor do XML). O DSSSL muito complexo, havendo pouca literatura. uma linguagem de especificao na qual se podem distinguir 4 sublinguagens: 2 principais para preparar o documento final e format-lo: - uma para especificar a transformao de um ou mais documentos XML, num ou mais documentos XML - uma para especificar a aplicao de atributos de formatao a um documento XML (nica terminada) e 2 auxiliares: - uma de interrogao (Standard document Query Language SDQL), que se usa para identificar e seleccionar partes de um documento XML - uma funcional de clculo de expresses (subconjunto da Scheme) 8.1.1. Modelo conceptual Compreende 2 partes (independentes): - uma especificao de transformao h situaes em que o contedo do documento final pretendido difere do original, um subconjunto ou corresponde ainda a uma reordenao do contedo inicial (XML -> XML) - uma especificao de estilo que vai dirigir a formatao (XML -> RTF, PDF, HTML, Postscript, etc.) definio de matgens, tipo de letra, tamanho, etc. embora haja muita cois j estabelecida por cada processador. 8.1.2. Linguagem de Transformao Permite especificar processos de modificao (alterao/criao). Pode compreender operaes como: - Rearranjo de estruturas (reordenao ou agrupamento). Ex. registo de alunos que se quer agora ordenado por nome de aluno - Construo de novos elementos relacionados com outros elementos j existentes o analista especifica como os novos se obtm dos existentes ex. notas de rodap agrupadas e colocadas no fim do cap. - Associao de novas caractersticas a sequncias especficas de contedo ex. 1 pargrafo de cap. pode ter incio com estilo diferente - Associao de novas caractersticas a componentes especficos de contedo 8.1.3. O Processo de Transformao O processo de transformao, XML Tree Transformation Process (XTTP) compreende as etapas: construo da rvore Documental Abstracta (ADA); transformao propriamente dita; gearo de XML. Construo da rvore Documental Abstracta ADA feita por um parser. A estrutura pode ser bastante complexa. No entanto conclui-se que a estrutura mnima para representar um documento estruturado seria a seguinte (usa-se o XML Schema como notao na especificao formal da ADA). ... CAP. 9 XSL: eXtended Stylesheet Language

O XSL comeou a ser desenvolvido em 1997 e baseou-se em 2 normas existentes, DSSSL e CSS; foi partido em 2 normas que seguiram percursos diferentes: o XSLT e o XLSFO. O XSLFO define um conjunto de objectos grficos atravs dos quais possvel especificar como que os dados XML devem ser apresentados. Um processador de XSLFO, tambm chamado de formatador, usa esses objectos grficos para converter a informao para o formato final, por ex. PDF. Ainda tem pouca maturidade e por isso pouco usada. O assunto do resto do livro pois o XSLT. Na verso 1.0, juntamente com uma norma acessria, o XPath tornaram-se numa recomendao W3C em fins de 1999 e, desde ento tem sido a plataforma para a transformao de documentos XML. O XPath permite navegar e localizar elementos em documentos XML e uma parte vital do processo de transformao, permitindo-nos especificar que partes do documento queremos transformar. semelhana do DSSSL, o XSLT usado para transformar informao referente a documentos XML, de uma estrutura para outra, o que tem como fins: - A criao de novos contedos - A converso da ADA noutra ADA com estrutura diferente - A extraco de partes do contedo - A execuo de queries estruturais sobre o contedo dos documentos XML O XSLT tambm muito usado para transformar os documentos XML em documentos num formato apropriado para apresentao ou distribuio, tais como: - Gerao de HTML, CSS, JavaScript, e outros, para distribuir contedos na web - Gerao de VRML ou VoiceXML, para browsers no convencionais - Gerao de representaes grficas para o contedo como SVG 9.1. Folhas de Estilo XSLT Uma folha de estilo XSL composta por um conjunto de modelos ou templates e instrues baseadas em expresses XPath que indicam ao processador de XSLT como aplicar as templates aos nodos do documento XML a transformar. Para cada template, o processador percorre o documento at encontrar um nodo seleccionvel pela template. A seguir aplica as instrues da template ao contedo do nodo. O resultado pode ser um novo documento XML, HTML ou texto simples. 9.2. XSLT: Modelo de Processamento Permite 2 abordagens na especificao da transformao pretendida: funcional ou declarativa, no qual o processador reage aos elementos XML medida que os for encontrando, e outra, imperativa, na qual o processador explicitamente instrudo para realizar uma srie de aces. Ex. 75: Duas abordagens alternativas ao processamento de XML Considerando o ex. da submisso electrnica, pretende-se converter esse documento numa pgina HTML. Seguindo uma abordagem declarativa, a descrio da transformao : - Quando o elemento submisso for encontrado, gera-se o elemento h2 com o contedo Registo duma Submisso Electrnica dum TP e, a seguir, processam-se os elementos pertencentes ao contedo de submisso. - Quando o elemento equipe for encontrado, gera-se o elemento h3 com o contedo Work Team e gera-se um elemento table com o contedo processado de equipe, depois de se ter gerado um cabealho com um elemento tr e 3 elementos th - Quando o elemento aluno for encontrado, gera-se o elemento tr com o contedo processado de aluno - Quando o elemento numero for encontrado, gera-se o elemento td com o contedo processado de numero; idem para nome e curso. - Quando o elemento fich-env for encontrado no se faz nada (o contedo deste elemento filtrado) - Quando o elemento data-hora for encontrado, gera-se o elemento h3 com o contedo Data e Hora: e coloca-se o contedo do elemento. Na abordagem imperativa: - coloca na sada um elemento h2 com o contedo Registo duma Submisso Electrnica dum TP - coloca na sada um elemento h3 com o contedo Work Team seguido de um elemento table, por sua vez, seguido dum cabealho com um elemento tr e 3 th - Para cada elemento aluno, gera-se o elemento tr com o seguinte contedo:

- um elemento td com o contedo de numero; idem para nome e curso. - Coloca na sada um elemento h3 com o contedo Data e Hora: seguido do contedo do elemento data-hora. Conclui-se do exemplo que a abordagem declarativa mais reutilizvel. 9.3. Ferramentas Actualmente h muitos processadores de XSLT, destando: saxon completo, pequeno e rpido xt inclui algumas fune sextra como possibilidade de vrios ficheiros de sada sablotron desenvolvido em C++ Xalan Open source Apache 9.4. Utilizao do XSL O XML por si s no nos permite implementar aplicaes ou tirar partido da informao nele armazenada. Temos de conseguir manipular, interrogar, transformar e distribuir essa informao. Com o XSL possvel: - converter documentos entre diferentes formatos XML - formatar contedos XML para distribuio - Integrar o processamento de XML no servidor de aplicaes web - utilizar XSLFO e CSS para produzir documentos de alta qualidade a partir de documentos XML - interrogar e seleccionar partes do contedo de um documento XML. CAP. 10 XML Path Language (XPath) Vimos que as transformaes XSLT so determinadas pela estrutura lgica do documento XML (ADA) que se quer transformar e pelas templates na stylesheet XSLT. As expresses XPath includas nas templates so responsveis pela definio de qual a template que aplicada a determinado nodo. Em termos funcionais os objectivos do XPath so: - Seleco de nodos para processamento - Especificao de condies permitindo diferentes modos de processamento do mesmo nodo - Gerao de texto a ser includo na rvore final (ADA resultante). O XPath uma sintaxe usada para descrever partes de um documento XML. possvel ento referenciar o primeiro elemento aluno, o atributo regime de aluno, todos os elementos nome cujo contedo contm Jos, etc. Uma stylesheet XSLT usa expresses XPath em 2 atributos, match e select, que estoa ssociados a vrios elementos do XSLT e que permitem guia a transformao. O XPath foi desenvolvido para ser utilizado como valor de um atributo num documento XML. A sintaxe uma mistura da linguagem de expresses com a linguagem para especificao do caminho numa estrutura de directorias. Adicionalmente fornece um conjunto de funes para manipulao de texto, Namespaces e outras funcionalidades. Outro pormenor importante que o XPath trabalha com a verso do documento XML processada pelo parser, isto , com a s entidades de texto expendidas e as seces especiais de texto (CDATA) convertidas para texto. 10.1. O Modelo de Dados do XPath Do ponto de vista do XPath, um documento XML uma ADA, ou seja, uma rvore de nodos. Para o XPath, h 7 tipos de nodos: - o nodo raiz (um por documento) - nodos elemento - nodos atributo - nodos texto - nodos comentrio - nodos instruo de processamento - nodes namespace. EX: Usando a verso do poema (ex.35) 10.1.1. Nodo Raiz o nodo que contm o documento inteiro. No nosso caso contm o elemento poema. representado por / em XPath. No tem pai e tem pelo menos 1 filho o nodo que representa o documento. Tambm pode conter comentrios (h 1) e instrues de processamento (no nosso

caso h 1 xml) que estejam fora do elemento que representa o documento, e que so pois filhos da raiz. O valor textual do nodo raiz corresponde concatenao de todos os nodos texto existentes na sua descendncia. 10.1.2. Nodos Elemento Todos os elementos so representados por um nodo. No nosso caso poema, titulo, autor, corpo, etc. Os filhos de um nodo elemento podem ser nodos texto, elemento, comentrio e instruo de processamento que ocorrem nesse elemento. O valor textual a concatenao dle com os filhos. Como todas as referncias a entidades foram expandidas, no se pode manipular entidades gerais ou carcter em XPath. 10.1.3. Nodos Atributo Tem sempre um pai que um nodo elemento. No nosso caso, por ex. o nodo elemento poema pai de um nodo atributo com o nome tipo e valor soneto. Este tipo tem algumas funcionalidades distintas dos outros tipos de nodos: - No so filhos do pai (elemento). Os filhos deste so elementos texto, elemento, cometrio, instruo. Se se quiser seleccionar os nodos atributo tem de se indicar explicitamente, o que d jeito e o que se pretende. - Em circunstncias normais o processador cria um nodo atributo para todos os atributos instancados no documento original e para os atributos que tenham um valor por omisso declaradao no DTD ou no Schema. 10.1.4. Nodos Texto So os mais simples, apenas contendo o texto do elemento correspondente. Se no documento original existem referncias a entidades estas sero resolvidas antes do nodo ser criado, um nodo texto contm apenas texto puro. No tem irmos na ADA. 10.1.5. Nodos Comentrio muito simples. Contm apenas texto. Contm todo o contedo do comentrio original excepto as marcas <! e -> 10.1.6. Nodos Instruo de Processamento Tem 2 partes, um nome e um valor textual, que tudo o que aparece a seguir ao nome, excepto a marca de fecho ?> 10.1.7. Nodos namespace raramente usados. 10.2. XPath como Selector de Nodos O selector uma expresso XPath e esta a utilizao mais comum do XPath em XSLT. 10.2.1. Contexto Tudo aquilo que se faz em XPath relativo ao contexto. Por analogia, podemos ver a ADA como uma rvore de directorias e o contedo dos seus nodos como ficheiros. 10.2.2. Selectores Simples / no incio, selecciona o nodo raiz da ADA; no meio de uma expresso, funciona apenas como separador de 2 nveis da rvore. . representa o contexto actual; selecciona o nodo corrente .. selecciona o pai do nodo correspondente ao contexto actual Estes operadores podem combinar-se em expresses XPath mais complexas. EXpls: /poema/corpo/quadra selecciona todos os nodos do tipo quadra que so filhos de nodos corpo, que so filhos do nodo poema (s h um, o elemento raiz do documento), que, por sua vez, filho do nodo raiz da ADA (/). ./verso/nome ../titulo 10.2.3. Selectores Relativos e Selectores Absolutos A expresso absoluta facilita a vida ao processador de XSL, mas complica a vida ao programador dificultando a reutilizao. A relativa o contrrio, e mais universal (por ex. aplica-se aos ternos e quadras do nosso poema) 10.2.4. Seleccionar: Para Alm de Elementos (tb. se pode ter em conta o contexto) Seleco de Atributos Usa-se o carcter @ como prefixo do nome do atributo. Ex. /poema/@tipo. Seleco do Texto dum Elemento Usa-se uma funo selectora do XPath de nome text() se o nodo for intermdio corresponde concatenao do texto de todos os filhos. Ex.

/poema/titulo/text() /poema/text() Seleco de Comentrios e Instrues de Processamento comment() e processing-instruction() - uso espordico. 10.2.5. Selectores Complexos 1. * selecciona todos os elementos no contexto corrente (s nodos elemento) 2. @* selecciona todos os atributos no contexto actual 3. node() selecciona todos os nodos no contexto actual // no meio de uma expresso significa que entre as 2 barras podem ocorrer zero ou mais elementos. Ex. //verso selecciona todos os versos do poema quer sejam filhos de quadra ou terno. Expls: /poema/corpo/*/verso //nome //@* //* //node() //coment() //quadra/text() 2 Parte do XPath: 10.3. Eixos de Navegao No entanto, em muitas aplicaes, necessario seleccionar nodos segundo uma perspectiva diferente da relao pai-filho, como por ex: - Todos os nodos ancestrais do nodo corrente - Todos os nodos descendentes do nodo corrente - Todos os nodos irmos precedentes ( esquerda) ou sequentes ( direita) do nodo corrente. Para isso o XPath disponibiliza um mecanismo eixo de navegao (conceito fulcral do XPath). Ao todo so 13. Podemos afirmar que qualquer expresso XPath usa uma determinada relao (EN) entre elementos para encaminhar a seleco ao longo da ADA. J era nas anteriores mas por ser a mais simples pode-se omitir. Para se usar um EN numa expresso indic-se o nome do EN seguido de (::) seguido do nome do elemento que se quer seleccionar. Ex. quadra/verso equivalente a child::quadra/child::verso. ENs: - child Selecciona os filhos do nodo corrente (a omisso corresponde a este eixo). so includos nodos elemento, comentrio, IP e textuais; no atributo nem namespace. - parent selecciona o nodo pai do nodo corrente. Equivale ao .. - self Selecciona o nodo corrente. Equivale ao . self::* = . - attribute Selecciona os atributos do nodo corrente. equivale ao @ - ancestor - ancestor-or-self - descendant mesmas limitaes do child - descendant-or-self - preceding-sibling Selecciona todos os nodos que tm o pai do nodo corrente e que aparecem antes do nodo corrente no documento XML. - following-sibling - preceding selecciona todos os nodos que aparecem antes do nodo corrente no documento, excepto os nodos ancestrais e os nodos atributo e namespace - following - ... descendentes ... - namespace selecciona os nodos namespace do nod corrente ver expls. pg. 215 e 216 embora frente apaream integrados em ex. prticos. 10.4. Predicados um filtro que restringe os nodos seleccionados por uma expresso XPath. So avaliados em tempo de execuo e do como resultado um valor booleano. Se para um determinado nodo, o resultado da avaliao do predicado for verdadeiro, esse ndo seleccionado. ex. //quadra/verso[2] selecciona o 2 verso das quadras do poema.

Nmeros predicado constitudo apenas por um n selecciona os nodos que tm essa posio particular. Atributos Um predicado constitudo por uma seleco de atributo verdadeiro se esse atributo existir no lemento corrente. Ex. /poema[@tipo] selecciona o poema mas s se este tiver o atributo tipo instanciado //*[@*] selecciona qualquer elemento que tenha um qualquer atributo instanciado Funes um predicado pode conter invocaes de funes XSLT (ver prxima seco). Ex. quadra[last()] selecciona a ltima quadra do contexto corrente verso[position() mod 2 = 0] selecciona os versos do contexto corrente que se enecontram nas posies pares. Combinadores de Predicados - and or e unio | 10.5 Funes Existem algumas expresses de seleco que no possvel especificar com os mecanismos discutidos at agora. Por isso usam-se funes, que pode ser divididas em 4 categorias: . Funes para manipulao de listas de nodos Realizam clculos sobre a ADA -position() d como resultado um n correspondente posio do nodo na ADA -last() D como resultado um n correspondente ao total de nodos existentes no nvel da ADA do nodo corrente - count(xpath-exp) Resultado um n de nodos seleccionados pela expresso XPath.ex. count(//verso) conta o n de versos do poema count(quadra[1]/ancestor::*) conta o n de ancestrais da 1 quadra, ie, d o nvel da quadra. - id(identificador) d o nodo que tem um atributo do tipo ID com valor igual a identificador . Funes para manipulao de strings para manipular texto - concat(str1,str2,...) - starts-with(str1,str2) retorna um booleano true se str1 comear por str2 - contains(str1,str2) - substring(str,num,comp) retorna uma string que se extrai da string argumento comeando na posio num e de comprimento comp. - substring-before(str1,str2) Retorna uma substring da 1, composta pelos caracteres anteriores primeira ocorrncia da 2 string do argumento. - substring-after(str1,str2) - string-length(str) - normalize-space(str) Retorna a string arg. mas com os espaos do incio e fim retirados, e todas as sequncias de caracteres brancos no meio da string so substitudos por um nico espao em branco. - translate(str1,str2,str3) Retorna a 1 com as ocorrncias de caracteres de str2 substitudos pelo respectivo carctyer (na mesma posio) de str3. . Funes Booleanas - boolean(arg) converte o argumento (pode ser qualquer coisa) num valor booleano - not(bool-exp) - true() - false() - lang(str) - string(arg) converte o seu argumento, que pode ser de qualquer tipo, numa string. Utilizao: quando aplicada a elemento de contedo vazio devolve falso, o que nos fornece maneira de testar elementos vazios. . Funes Numricas number(arg) converte o seu argumento (qualquer tipo) num n. Se arg. for omitido a funo aplicada ao nodo corrente - sum(xpath-exp) Retorna o resultado da soma da converso para n de todos os elementos seleccionados pela expresso argumento. Se um dos nodos tiver um contedo que no seja um n, retorna NaN. - floor(num) - Retorna o maior inteiro menor ou igual ao argumento - ceiling(num) - round(num)

10.6 Exemplos de Expresses XPath //AAA selecciona o nodo filho da raiz com nome AAA /AAA/CCC Selecciona nodos de nome CCC filhos do nodo principal AAA que filho da raiz //BBB Selecciona todos os nodos de nome BBB existentes na ADA //DDD/BBB todos os BBB que seja filhos de CCCs existentes em qualquer ponto da ADA /AAA/CCC/DDD/*todos os nodos filhos de nodos DDD que, por sua vez, so filhos de nodos CCC... /*/*/*/BBB todos os nodos BBB posicionados no 4 nvel //* - todos os nodos do tipo elemento existentes na ADA /AAA/BBB[1] - o 1 filho com nome BBB do AAA que filho da raiz /AAA/BBB/[last()] ltimo filho de nome BBB do AAA //BBB[@ident] todos os nodos com nome BBB que tenham um atributo de nome ident instanciado //BBB[@*] todos os nodos com nome BBB que tenham pelo menos um atributo instanciado. //BBB[@ident=b1] todos os nodos com nome BBB que tenham um atributo de nome ident instanciado com valor b1. //BBB[normalize-space(@nome)=bbb] todos os nodos com nome BBB que tenham um atributo de nome nome cujo valor normalizado seja igual a bbb //*[count(*)=2] - todos os nodos que tenham exactamente 2 filhos //*[count(BBB)=2] - todos os nodos que tenham exactamente 2 filhos com nome BBB //*[name()=BBB] todos com nome BBB //*[starts-with(name(),B)] cujo nome se inicie por B //*[contains(name(),C] cujo nome contenha o carcter C //*[string-length(name())=3] cujo nome seja constitudo por 3 caracteres. //BBB | //CCC todos da ADA com nome BBB ou CCC /descendant::* - todos os descendentes do n raiz //CCC/descendant::*/DDD todos os descendentes de nodos com nome CCC e cujo nome seja DDD CAP.11 FOLHAS DE ESTILO - construo 1 discute-se a arquitectura de uma folha de estilo. Depois os vrios elementos XSL com os quais se constroem as folhas de estilo. 11.1. Conceitos Gerais Uma folha de estilo essencialmente constituda por um conjunto de modelos (templates) Um modelo constitudo por 2 partes: - um sleccionador de nodos (expresso XPath) - Um bloco de instrues XSL que aplicado aos nodos que vo sendo seleccionados. Um processador de XSL realiza uma travessia da ADA comeando pelo nodo raiz e visitando os filhos da esq. para a direita. Sempre que visita um novo nodo, o processador verifica se existe na folha de estilo algum modelo para lhe aplicar. Se existir aplica-o, se no aplica um por omisso para aquele tipo de n. Um conceito muito importante o contexto. 11.2. Anatomia de Uma Folha de Estilo Uma folha de estilo XSL um documento XML. Por issso, deve ser iniciado pela declarao XML. O elemento principal deste tipo de documentos sempre o mesmo e tem o nome de stylesheet. Como pode haver conflito de nomes entre elementos xsl e instncias XML, deve usar-se um namespace associado ao prefixo xsl. Assim, forma inicial: <?xml version=1.0 encoding=iso-8859-1 ...?> <xsl:stylesheet version=1.0 xlmns:xsl=http://www.w3.org/1999/XSL/Transform> </xsl:stylesheet> 11.2.1. Elementos de Topo filhos de stylesheet por ordem de utilizao normal: - xsl:import permite importar modelos definidos noutras folhas de estilo. A prioridade ser inferior. este elemento vazio e s pode aparecer no incio de uma folha de estilo. Ex. <xsl:import href=poema.xsl/>

- xsl:include usa-se quando se pretende desenvolver modularmente uma folha de estilo. O funcionamento semelhante ao anterior, mas a prioridade atribuda igual e pode aparecer em qualquer ponto. Quando se desenvolve modularmente uma folha de estilo, colocam-se os modelos genricos numa folha de estilo parte que, depois, includa por quem precisar de utilizar aqueles modelos. A sintaxe : <xsl: include href=generics.xsl/> - xsl:strip-space permite especificar os lementos aos quais deve ser retirado o espao em branco a mais. Tem um atributo de nome elements cujo valor dever ser uma lista de nomes de elementos separados por um espao simples. de topo -> s filho de stylesheet. <xsl: strip-space elements=quadra verso/> - xsl:preserve-space - xsl:output permite configurar o resultado final da transformao. um lemento vazio e toda a informao relativa configurao colocada em atributos. <xsl:output [method = html|text|xml] [encoding = encoding-name] [omit-xml-declaration = yes|no] [standalone=yes|no] [ident = yes|no] method xml: o processador verifica se o documento est bem formado; html: ignora uma srie de restrioes; text: no toma qualquer aco reletivamente ao que envia para a sada. encoding indica qual a tabela de caracteres a usar na sada. em 905 dos casos iso-8859-1 omit-xml-declaration d a opo ao utilizador de inserir ou no a declarao XML no documento resultado. yes s se method=xml standalone yes indica que o documento final s um. indent processador utiliza espaos e mudanas de linha para formatar de acordo com a estrutura se yes. Normalmente presente em todas as folhas de estilo. Em 90% dos caso de gerao para web: <xsl: output omit-xml-declaration=yes method=html encoding=isso-8859-1 indent=yes/> - xsl:key permite criar um ndice de acesso directo para um determinado grupo de elementos (especificado em expresso XPath). Sintaxe: <xsl:key name=nome match=xpath-exp use=chave/> use a entidade (atributo, elemento filho, contedo textual) do contexto actual que ir ser usada como chave do ndice. O ndice pode depois ser usado em qualquer ponto da folha atravs da funo key() que tem 2 argumentos. ex: <xsl:value-of select=key(/i-entrada,e3)/nome/> retornaria o nome associado entrada com o atributo id igual a 3. - xsl:decimal-format permite especificar um formato numrico que ser usado sempre que o processador enviar ns para a sada. Tem vrios atributos permitindo vrias variants: <xsl:decimal-format decimal-separator=carcter grouping-separator=carcter infinity=string minus-sign=carcter NaN=string percent=carcter per-mille=carcter zero-digit=carcter digit=carcter

pattern-separator=carcter /> Uma instncia deste elemento permite configurar o modo de funcionamento da funo formatnumber, que tem a sintaxe: format-number(num,string1,string2?) string1 o padro que especifica o formato string2 opcional e corresponde a um nome(atributo name) de um elemento xsl:decimal-format - xsl:text este elemento coloca o seu contedo na sada - xsl:value-of calcula o valor textual da expresso XPath especificada no atributo select e envia-o para a sada. - xsl:namespace-alias especificar um nome alternativo para o namespace sepre que no possa ser usado. A utilizao mais comum surge em folhas de estilo que do origem a outras folhas de estilo (aumentar o nvel de abstraco). um elemento de topo, que tem 2 argumentos: stylesheet-prefix o prefixo que ser usado na folha de estilo e que est associado a um namespace alternativo. result-prefix o prefixo pelo qual ser substitudo quando estiverem a ser enviados para a sada. ver ex. pg. 232. - xsl:attribute-set permite definir uma coleco de atributos que pode depois ser aplicado na criao de um elemento na sada. sintaxe: <xsl:attribute-set name=identificador use-attribute-sets=lista de identificadores> <xsl:attribute.../> ... </xsl:attribute-set> Ex de folha de estilo que especifica uma coleco de atributos para elementos imagem que depois utilizada na criao de um elemento IMG do HTML <?xml version=1.0 encoding=UTF-8?> <xsl:stylesheet version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform> <xsl:attribute-set> <xsl:attribute name=border>0</xsl:attribute> <xsl:attribute name=width>120</xsl:attribute> <xsl:attribute name=height>60</xsl:attribute> </xsl:attribute-set> <xsl:template match=imagem> <img scr={@url} xsl:use-attribute-sets=imagem/> </xsl:template> </xsl:stylesheet> - xsl:attribute permite especificar atributos. Tem um atributo de nome name com o qual se define o nome do atributo e o seu contedo define o valor do atributo. - xsl:use-attribute-sets=identificador Este atributo indica que se querem colocar neste ponto os atributos definidos na coleco identificada por identificador - scr=@url - As chavetas, quando utilizadas dentro de um atributo, indicam ao processador que se quer calcular uma expresso XPath. Neste caso, o clculo da expresso retorna o valor do atributo url do elemento imagem na instncia documental. - xls:variable permite definir uma varivel, que em XSL so constantes. As declaradas como elementos de topo so globais, as outras locais. Para se aceder ao valor duma varivel coloca-se $ antes do seu nome. Pode ser definida de 2 maneiras: - Com este elemento vazio e usando o atributo select para definir o seu valor atravs de uma exp. XPath ... <xls:template match=imagem> <xls:variable name=url select=@url/>

<img scr=$url xsl:use-attribute-sets=imagem/> </xsl:template> - Se no for vazio, o seu contedo define o valor da varivel: ... <xls:template match=imagem> <xls:variable name=url > <xls:value-of select=@url/> </xls:variable> - xsl: param permite especificar o nome e o valor por omisso de um parmetro que, mais tarde, poder ser usado por um modelo. O seu valor pode ser definido da mesma maneira que o valor de uma varivel. Tb. h globais e locais. Ex. 77 Passagem de valores da linha de comando Esta folha de estilo imprime o nmero que lhe passado na linha de comando e faz isso qualquer que seja o documento a que aplicada. <?xml version=1.0 encoding=UTF-8?> <xsl:stylesheet version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform> <xsl:param name=num select=7/> <xsl:output omit-xml-declaration=yes/> <xsl:template match=/> <xsl:value-of select=$num/> </xsl:template> </xsl:stylesheet> esta folha de estilo quando invocada na linha de comando com o saxom d o seguinte resultado: saxon rel.xml par-linha-com.xsl num=123 123 - xsl:template com este tipo de elementos que se especifica o conjunto de aces que se quer ver realizado por uma folha de estilo. Agrupa um conjunto de instrues (elementos xsl) que devem ser aplicados aos nodos seleccionados pela expresso XPath especificada num dos seus atributos. sintaxe: <xsl:template [match = xpath-exp] [priority = numero-inteiro] // para quando o nodo sel. por + que 1 template [name = identificador] [mode = identificador] > ... Instrues ... </xsl:template> name permite associar um nome ao template para usar mais tarde como uma subrotina. mode h muitos problemas cuja soluo implica realizar vrias travessias ao documento. Quando uma folha de estilo contm a especificao de mais do que uma travessia (mais que um conjunto de modelos) necessrio saber que modelo pertence a que travessia. A cada travesia associado um identificador e todos os modelos pertencentes a uma determinada travessia tm o atributo mode instanciado com o identificador dessa travessia. Vamos agora discutir a parte comportamental: como que uma folha de estilo executada e como que se pode controlar e alterar essa execuo. 11.2.2. Modelos ex: A Folha de Estilo mais simples <?xml version=1.0 encoding=UTF-8?> <xsl:stylesheet version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform> </xsl:stylesheet>

Qual o resultado quando aplicado a um documento? No string vazia. o contedo textual do documento XML. Isto deve-se ao facto de no existir nenhum modelo definido nesta folha de estilo e sempre que no h, para qualquer nodo, a norma XSL prev a aplicao dum modelo por omisso. Modelos Por Omisso - Modelo para nodos do tipo elemento e raiz qualquer que seja a travessia, aqueles ns so visitados. <xsl:template match=*|/ mode=x> <xsl:apply-templates mode=x/> </xsl:template> Modelo para nodos do tipo texto e atributo copia o texto dos nodos textuais e os valores dos atributos para a sada. Para que este modelo seja aplicado, a travessia dos respectivos nodos ter de ser explicitamente invocada. <xsl:template match=text()|@*> <xsl:value-of select=./> </xsl:template> Modelo para nodos do tipo comentrio e instruo de processamento no faz nada, tem aco de filtragem <xsl:template match=comment() | processing-intruction()/> Modelos para nodos do tipo namespace idem imp. - xsl:apply-templates se quisermos continuar a processar os nodos filho temos de o indicar explicitamente, caso contrrio ser filtrdao. sintaxe: <xsl:aplly-template select=xpath-exp mode=identificador instrues xsl:sort ou xsl:with-param </xsl:apply-templates> se select for omitido sero visitados todos os filhos do corrente. EXEMPLO: 11.2.3. UMA FOLHA DE ESTILO PARA A AGENDA Relembrar (ex34?) uma instncia vlida de uma agenda. Pretende-se especificar uma folha de estilo para agendas, que disponibilize numa pgina HTML, atendendo aos seguintes propsitos: - No incio da pgina, dever ser colocado um ndice para cada uma das entradas e grupos de entradas - Ao longo da pgina, cada entrada dever ter os seus campos agrupados numa lista - Sempre que aparecer uma referncia a uma entrada, aquela dever ser substituda pelo contedo da entraada que est a referenciar - um grupo dever ter as suas entradas agrupadas numa lista - no incio de cada grupo, dever haver um link para regressar ao ndice de entradas. <xsl:stylesheet version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform> <xsl:output method=html encofing=iso-8859-1 indent=yes/> <xsl:key name=i-entrada match=entrada use=@id/> <xsl:template match=agenda> <h1>Agenda de Contactos</h1>

<hr/> <h2> <a name=indice >ndice de Entradas</a> </h2> <xsl:apply-templates mode=indice/> <hr/> <h2>Entradas</h2> <xsl:apply-templates/> <hr/> <h6> by jcr 2002</h6> </xsl:template> // especificou-se o modelo principal que coordena a execuo dos restantes modelos. invocada a travessia que ir gerar o ndice de acesso directo s entradas e desencadeada a travessia. <xsl:template match=grupo> </hr> <h3><a name={@gid}> Grupo: <xsl:value-of select=@gid/> </a> </h3> [<a href=#indice<ndice</<>] <ol> <xsl:apply-templates/> </ol> <hr/> </xsl:template> // Este o odelo que trata a informao dos grupos. Utiliza-se o atributo gid para compor o cabealho do grupo. Cria-se um link para o ndice no incio da pgina html. <xsl:template match=entrada> <h3><a name={@id}>Entrada: <xsl:value-of select=@id/></a> </h3> <dl> <dt>Nome: </dt> <dd><xsl:value-of select=nome/></dd> <dt>Email: </dt> <dd>xsl:value-of select=email/></dd> <dt>Telefone:</dt> <dd><xsl:value-of select=telefone/></dd> </dl> </xsl:template> //No modelo especificado para entrada, cria-se uma marca no incio, que usada como ponto de referncia no ndice. Depois trata-se do contedo da entrada. <xsl:template match=ref> <h3>Entrada: <xsl:value-of select=@entref/></h3> <dl> <dt>Nome: </dt> <dd><xsl:value-of select=key(-entrada, @entref)/nome>>/dd> <dt>Email: </dt> <dd><xsl:value-of select=key(I-entrada,@entref)/email/></dd> <dt>Telefone: </dt> <dd><xsl:value-of select=key(I-entrada,@entref)/nome/></dd> </dl> </xsl:template>

// No modelo que trata as referncias vai-se buscar a informao da entrada referenciada. Utilizase a tabela de acesso directo i-entrada para aceder ao nodo da entrada referenciada e de l extrair a informao pretendida. <! -- Criao do ndice --> <xsl:template match=entrada mode=indice> [a href=#{@id}><xsl:value-of select=@id/></a> </xsl:template> <xsl:template match=grupo mode=indice> [a href=#{@gid}><xsl:value-of select=@gid/></a> </xsl:template> <xsl:template match=text() priority=-1 mode=indice/> </xsl:stylesheet> //Estes 3 ltimos modelos criam o ndice no incio da Pgina 39 de 42 11.3. Elementos de Controlo O XSLT tem 3 elementos que podem modificar a ordem de execuo de uma folha de estilo. 11.3.1. xsl:if como um if normal <xsl:if test=exp-booleana> </xsl:if> Se o resultado da expresso for verdadeiro ento os elementos filhos de xsl:if so processados. Ex. <xsl:if test=count(//entrada) &gt; 100> <xsl:text>O nmero de entradas j maior que 100</xsl:text> <xsl:text> Entradas = </xsl:text> <xsl:value-of select=count(//entrada)/> </xsl:if> A avaliao de test tem de ser booleano. Regras: - number (nmeros) zero, neagtivo ou NaN falso - node-set (conjunto de nodos) um conjunto vazio falso - string string vazia falso 11.3.2. xsl:choose <xsl:choose> <xsl:when test=exp-booleana> </xsl:when> <xsl:otherwise> </xsl:otherwise> </xsl:choose> equivalente instruo case ou switch. Pode tb. servir para implementar if-then-else 11.3.3 xsl:for-each uma alternativa ao elemento xsl:apply-templates, com uma diferena a nvel do paradigma que imperativo. <xsl:for-each select=xpath-exp <xsl:for-each> construda uma lista de nodos seleccionados pela expresso XPath e depois aplicam-se as aces a esses ns, especificadas na instruo for-each. Ex. 80 temos um excerto dum livro (pg.250) Pretendo criar uma pgina html com o ndice do livro, uma lista dos ttulos e captulos. Esta aco implementada pelo seguinte modelo:

<xsl:template match=livro> <OL> <xsl:for-each select=captulo> <LI> <xsl:value-of select=titulo/> <LI> <xsl:for-each> </OL> </xsl:template> O resultado da transformao seria: <OL> <LI>Introduo</LI> <LI>Anotao de Documentos</LI> <LI>XML</LI> <LI>XSL</LI> </OL> 11.4. Ordenao de Elementos Em alguma aplicaes, necessrio visitar os nodos documentais por outra ordem tal como a ordem alfabtica de um determinadao atributo ou subelemento. Para isso preciso reorganizar a lista de nodos que foram seleccionados. <xsl:sort select = xpath-exp [data-type = text|number] [lang = cdigo ISSO do idioma] [order = ascending|descending] //por omisso ascendente [case-order=upper-first|lower-first] /> Pode aparcer como filho do elemento xsl:apply-templates ou do elemento xsl:for-each. Por omisso do atributo data-type a ordem alfabtica, que no d para ns. EXEMPLO 81: O Ficheiro de Alunos Considere o contexto em que uma disciplina leccionada a alunos de vrios cursos. A avaliao contnua dos alunos foi registada num nico documento XML com a seguinte forma: <?xml version=1.0?> <!DOCTYPE aval SYSTEM aval.dtd> <aval> <disciplina>Processamento Estruturado de documentos </disciplina> <ano>2001</ano> <docente> <nome>Jos&#233, Carlos Ramalho</nome> <email>jcr@di.uminho.pt</email> <url>http://www.di.uminho.pt/~jcr/</url> </docente> <alunos> <aluno> <nome> JOSE ALVES DE CASTRO</nome> <numero>23187</numero> <curso>LMCC</curso> <nota>16</nota> </aluno> <aluno> <nome> BRUNO MIGUEL PEREIRA PINTO</nome> <numero>24806</numero> <curso>LESI</curso> <nota>sn</nota> </aluno> <aluno> <nome> FILIPE ALEXANDRE DA SILVA MARTINS</nome> <numero>24816</numero>

<curso>LESI</curso> <nota>18</nota> </aluno> <aluno> <nome> ALVARO JOSE DE CASTRO MOREIRA DA SILVA</nome> <numero>19469</numero> <curso>LESI</curso> <nota>18</nota> </aluno> <aluno> <nome> ANDRE FILIPE AZEVEDO DE SOUSA</nome> <numero>22639</numero> <curso>LESI</curso> <nota>18</nota> </aluno> <aluno> <nome> MARIO BENTO AZEVEDO</nome> <numero>20210</numero> <curso>LMCC</curso> <nota>10</nota> </aluno> </alunos> ... </aval> Para efeitos de registo, necessrio produzir uma listagem dos alunos ordenados por curso e dentro do curso por ordem alfabtica de nome. A folha de estilo produzindo uma tablea HTML : <?xml version=1.0 encoding=iso-8859-1 standalone=yes?> <xsl:stylesheet xmlns:xsl=http://www.w3.org/1999/XSL/Transform version=1.0> <xsl:output method=html omit-xml-declaration=no encoding=isso-8859-1 standalone=yes indent=yes/> <xsl:template match=/> <xsl:apply-templates/> <xsl:template> <xsl:template match=aval> <CENTER> <H3>Avaliao no perodo lectivo 2001/2002</H3> </CENTER> <xsl:apply-templates/> </xsl:template> (ver completo no Altova) Exemplo 82: O Ficheiro de alunos (2) Agora pretende-se uma folha de estilo que produza uma listagem, em texto livre, apenas do nmero e nome do aluno, um aluno por linha, e em que os alunos estejam ordenados por nmero. fizeram no saxon. Fazer como exerccio no Altova. Na folha de estilo destacam-se os pontos: - a configurao da sada para texto, atravs do elemento xsl:output; - a template com nome n1 que simplesmente coloca uma mudana de linha na sada e que invocada na template aluno atravs do elemento xsl:call-template - a colocao de um elemento xsl:sort no interior de um elemento xsl:apply-templates com o objectivo de alterar a ordem natural da travessia da rvore documental. 11.5 Tratamento de Referncias/Ligaes

H 3 mecanismos que permitem criar referncias/ligaes entre elementos de um documento XML. 11.5.1. Atributos do tipo ID A mais simples a associao de um atributo do tipo ID a cada elemento susceptvel de vir a ser referenciado. Exemplo 83: Gerao de um ndice de Navegao para o Livro. fazer no Altova 11.5.2. generate-id() Suponha que j tem a sua instncia criada e, devido sua dimenso, a adio de atributos do tipo ID aos elementos crticos no uma soluo vivel. existe uma funo que permite gerar automaticamente um identificador nico para todos os elementos com a garantia de que sempre que se invocar a funo sobre a mesma instncia, recebe sempre o mesmo identificador. Ex. 84: Gerao de um ndice de navegao para o livro fazer no Altova Tinha o mesmo excerto do livro mas sem os atributos tipo ID. A nica alterao na folha de estilofoi a substituio do atributo ident pela aplicao da funo generate-id() ao nodo corrente. 11.5.3. xsl:key (para os casos mais complexos) J foi usado mas complexo. Resumindo o que foi dito atrs, o elemento deve ser usado sempre que, na transformao de um sistema de referncias, se pretender substituir a referncia por informao pertencente ao objecto referenciado. Ex. citaes em livros. Ex. 85: Citaes Bibliogrficas Imagine um pequeno pargrafo com uma citao bibliogrfica que aparece descrita mais frente no documento. <para>Num trabalho anterior (<cit-bib refid=Ram99/>), o autor defendia que...</para> ... <bibitem id=Ram99> <titulo>O Desporto e a Osteoporose</titulo> ... </bibitem> ... Na pgina HTML, pretende-se substituir a referncia pelo ttulo da obra. ... <xsl:key name=i-cita match=//bibitem use=@id/> <xsl:template match=cit-bib> [<xsl:value-of select=key(I-cita,@refid)/titulo/>] </template> Nas linhas 2 a 4 usa-se o elemento xsl:key para criar uma tabela de acesso directo aos itens bibliogrficos. O atributo id do item bibliogrfico a chave de acesso nesta tabela. linhas 6 a 9 o modelo que trata as citaes faz a substituio destas pelo ttulo da obra correspondente (utiliza a tabela de acesso directo criada, para ir buscar o ttulo) colocado dentro de parentesis rectos.