Você está na página 1de 316
INCLUI CD ++ XML O autor é o desenv da linguagem Re! em Fabio Arciniegas C++ XML Destaques do Sumario: lee ni ae ae More ee € esti conforme a demanda de 300-+ MB de Exemplos Exclusives ae ee ae ‘Todas as Principais Tecnologias XML Especificamente aa Huceuesnk ore ‘cura uma introdugio ao assun- ‘cat to. Por outro lado, setores im- DOM portantes e especializados ain- XPath da estio sedentos por uma co- XPointer bertura profunda e focalizado XSLT no XML em sens proprios ter- Técnicas Avangadas C++ Apenas mos. Escrevi este livro para Tépicos C++ Avangados preencher essa lacuna para os Representagio e Conversio de Caracteres programadores de C++ dan- © Questdes SAX C++ do énfase aos exemplos ¢ ex- . , " plicagdes adequadas as parti- Interface com Expat ¢ Outta Biblotecas C tairtais Peete dite + ODBC + XML no Visual C++ Farnentds disrias® + Relax NG (antigo TREX) no C++ Escolha este livro se estiver Aplicativos Windows Visual C++ Completamente Reais procurando por algo além do Estruturas C++ para Acelerar o Seu Desenvolvimento ERM de fora gersd Pasclers C+4+XML ver disso, precisa de uma co- Extensies do Assistente do Windows Visual C++ berturs| C++ complenle Modelos de Cédigo do Linux aprofundada, com todas as Interface XML Totalmente Exemplificada com Bibliotecas specificidades de C++, sig oe c exemplos e codigo reutilizavel. enGL, epee — Fabio Ariniggas MFC “C++ XML 6 um guia de referéncia excelente para > os desenvolvedores que trabalham ou no em plataformas Microsoft para construir aplicatives XML usando o C++. XML ¢ padres semethantes sio explicaclos e ilustrados com varios exemplos C++ utilizando toolkits. Tanto principiantes quanto desenvolvedores experientes aproveitarao este livro” Darshan Singh, Eiitor de Gerenciamento, PerfecXML.com C++ XML Fabio Arciniegas Tradugio Flavia Barktevicius Cruz Reviséo Técnica Ulisses Ponticelli Giorgi Mestre em Ciéncias da Computagéo pela UFRGS Gerente de Desenvolvimento da Infovia Computing Microsoft Certified Solution Developer eee | ——— Makron BSc Sao Paulo Brasil Argentina Colémbia Costa Rica Chile Espanha Guatemala México Peru Porto Rico Venezuela WAG SS Do Original: C++ XML 112 edicao by Fabio Arjona Arciniegas Copyright® 2002 by New Riders Publishing. Todos os direitos reservados Copyright® 2002 by Pearson Education do Brasil Editora: Gisélia do Carmo Costa Gerente de Producao: Silas Camargo Produtora Editorial: Renatha Prado Capa: Marcelo da Silva Francozo, sobre o projeto original da Brainstorm Design, Inc. Editoracéo ¢ Fotolito em Alta ResolucSo: J.A.G. Dados de Catalogagao na Pul Arciniegas, Fabio C++ XML, Traducdo: Flavia Barktevicius Cruz Revisdo Técnica: Ulisses Ponticelli Giorgi Titulo Original: C++ XML 2002 ~ S40 Paulo — Pearson Education do Brasil Ltda. ISBN: 85.346.1418-0 indice para catdlogo sistematico 1, C++ XML 2002 1H edigao Direitos exclusivos para a lingua portuguesa cedidos & Pearson Education do Brasil, uma empresa do grupo Pearson Education Av. Ermano Marchetti, 1435 CEP 05038-001 — Lapa - Sao Paulo - SP Tol: (11) 3613-1222 Fax (11) 3611-0484 e-mail: vendas@pearsoned.com A minha mée, minha inspiracdo e forga. “Isso quer dizer alguna coisa,” diz Tayler — Chuck Palahiniik Sumario Introdugio XV I Fundamentos do XML 1 1 XML: Construgées e Conceitos 3 Construgées Bisicas 4 DTDs 7 Espagos de Nome 19 Resumo 22 2 Viséo Geral XML/C++ 23 ‘A Familia de Teenologias doXML 24 APIs 32 Aplicatives 35 Resumo 36 IL Processando oXML comoC++ 37 3 Processamento Dirigido a Eventos 39 © Modelo Dirigido a Eventos 39 expat 41 Outros Toolkits C/C++ 55 Resumo 58 4 SAXC++ 59 Uma Introdugio Pritica 60 Estrutura SAX em C++ 67 OSAX1.0 67 Resumo 80 It Sumario IX SAX C++ 2.0 e Técnicas Avangadas 81 Interfaces em Comum 81 Os Manipuladores Bisicos 85 Interfaces ¢ Classes Exclusivas do SAX 2.0 85 Resumo 98 DOM Nivel 2.0 99 Introdugio 0 DOM 99 Histérico do DOM = 101 Natureza do DOM 101 Um Guia para as Interfaces Principais 109 Um Exemplo Completo: Um Editor XML 109 Resumo 114 Manipulacao Avangada do DOM emC++ 115 Vinculando 9 Modelo de Decumento a um Modelo Nativo 115 Estendendo o DOM com os Visitantes 121 Resumo ¢ Préximos Passos 125 Aspectos C++ Avangados do SAX edoDOM 127 C++ SAX versus C4+ DOM 127 SAX Mais DOMem C++ 133 Gerenciamento de Meméria no SAXem C++ 137 Gerenciamento de Meméria no DOM em C++ 138 Resumo 146 Usando Padrées Relacionados ao KML comoC++ 147 XML Schema, TREX e Outras Linguagens de Modelagem 149 XML Schema: ALinguagem 150 Ferramentas C++ para o XML Schema 15 TREX: ALinguagem 157 Ferramentas C++ pata o TREX: Lorenza 163 RELAX ¢ Schematron 166 Resumo 168 Sobre o Autor Fabio Arciniegas é 0 Chief Technical Officer da post- graphy (ww.postgraphy.com) onde aplica sua perfcia em C++ eXML para o desenvolvimento de aplicativos de co- nhecimento visual € processamento de imagens. Ele é um participante ativo da comunidade XML como desenvolvedor ¢ escritor. Entre as suas contribuigdes para a comunidade XML est4 o desenvolvimento da implementagio C++ da linguagem Relax NG (antigo TREX), 0 software XLink e muitos artigos (principalmente em www.xml .com) e programas tutoriais lidando com tecnologias XML. Fabio freqiientemente dé palestras em conferéncias e tutoriais sobre XML, inclusive na XML Developers Conference, O'Reilly Open Source Conference ¢ na XML and Distributed Applications (na qual é 0 Presidente), entre outras. Sobre os Revisores Técnicos Esses revisores contribuiram com sua excelente pritica para todo 0 proceso de desenvolvimento do C++ XML. Conforme escrevia este livro, esses profissionais dedicados revisaram todo o material quanto ao contetido técnico, organizacio ¢ fluxo. O retorno deles foi importantissimo para garantir que C++ XML estivesse de acor- do com a necessidade de nossos leitores quanto as informagées técnicas da mais alta qualidade. Beth Breindenbach é uma Arquiteta de Produtos da Getronics, um provedor de software ¢ solugSes de infra-estrutura para todo o mun- do localizada nos Paises Baixos. O seu grupo desenvolve aplicativos de software direcionados para as instituigGes financeiras de mais alto nivel. Uma “profissional dos dados” autodidata, ela tem um enorme interesse por todos os aspectos do projeto de dados, armazenamento, transmissio e tradugio. Esses topicos foram naturalmente uma passa- gem para a exploragio das possibilidades inerentes as novas tecnologias da familia XML. O seu projeto mais recente foi a aplicagao do XML e tecnologias ¢ banco de dados para organizar mecanismos de processamento. Atualmente, ela esti explorando os aspectos do projeto de dados das interfaces de linguagem natural. xi Jason A. Buss comecou a trabalhar com computadores precoce- mente, Depois de trabalhar como um programador CNC, ele pas- sou para as publicagdes técnicas em 1996. Atualmente, ele trabalha no desenvolvimento ¢ aprimoramento do sistema de publicacio SGML/XML para uma grande empresa de fabricacio de aeronaves. Ele aproveita o tempo livre ao lado de sua esposa e filhos. Seus hobbies sio: construir PCs, trabalhar com © software XML open- source, ler e tocar violio. Novas regulamentagées estaduais com relagéo a0 aprendi- zado obrigat6rio tornaram esse hobby bastante impraticével (ao menos em Kansas). Xi Agradecimentos Um obrigado especial a Stephanie Wall, Laura Loveall, Allison Johnson, Beth Breidenbach, Jason Buss e todo o time da New Riders por terem dado prova do gran de valor de um bom proceso. Finalmente, muito obrigado a minha familia ¢ a todos aqueles que, enfim, pagaram o preco da minha obsessio em fazer o melhor trabalho posstvel. XIV Introdugao Este livro ndo é uma introdugio leve a0 XML para os interessados em geral. Muito pelo contrario, ele tem como ptiblico-alvo programadores interessados em criar aplicativos de alta performance ¢ qualidade usando unicamente oXMLe 0 C++. Em um mercado saturado com informagées no nivel de entrada de dados, este livro fornece técnicas valiosas de alto nivel e de ponta e ferramentas para a construgio bem- sucedida de programas de XML em C++ reais indo desde editores XML até aplicativos 3D e sistemas distribufdos. O Que Este Livro Aborda De um ponto de vista orientado por habilidade: * Todos os aspectos de um desenvolvimento eficiente para XML, seja cle no lado do servidor , standalone ou do cliente Técnicas avangadas para o desenvolvimento de aplicativos XML no Windows € no Linux Os detalhes cruciais para uma correta utilizagao de todos os toolkits ¢ frameworks do XMLem C++ = A integracio de vérias plataformas e técnicas de extensio © que hi de mais novo no desenvolvimento de aplicativos usando o XML e 0 C++ Do lado tecnolégico, es abaixo: = Espago de nomes do XML 1.0+ SAX 2.0 DOM 2.0 Analisadores sintiticos nio-SAX/DOM = XPath = XPointer livro aborda a manipulagio em C++ de todas as tecnologias * XMLSchema e outras linguagens de modelagem * Cédigos em C++ = XML e banco de dados + XSLT = Linguagens de extensiio para os aplicativos C+ + usando oXML XV = Os modelos estendidos para o processamento XML usando recursos C++ exclusives = Topicos do servidor tais como a integragio XML+XSLT +Apache usando o C++ Para Quem Se Destina? Este livro € para programadores que C+t. Caso precise de um livro que explique a complexidade e a forga de manipulagio de todas as principais tecnologias KML com C++, vocé fez a escolha certa. Caso queira construir softwares como um aplicativo OpenGL SAX com 0 KML como seu formato 3D, um aplicative MFC Windows usando mensagens SOAP ou XML-RPC, um aplicativo Linux GTK usando 0 DOM, aplicativos Windows usando vises em XML dos bancos de dados acessados por ADO ¢ por ODBC, interpretadores de linguagens de extensio que usam o XSLT em C++ ou qualquer outro uso do XML em C++, este livro lhe dard a teoria, 0 cédigo e a informagio interna necesséria para compreendé-lo e cris-lo. iejam procurando construir aplicativos XML ¢ Para Quem Nao Se Destina? Este é um livro espectfico em C++. Caso voeé precise de uma exposigio diferente dos tépicos XML discutidos aqui, vocé devera consultar livros gerais, como XML Black Book, Makron Books. Nivel do Livro e Principios do Projeto O nivel deste livro é de intermedisrio a avangado. Ele foi escrito com os seguintes principios em mente: = Completude. Trata de todas as tecnologias ¢ técnicas relevantes e as dicas ne- cessérias para se criar aplicativos XML em C++ néo usuais (veja 0 Capftulo 2 para saber a organizacio completa). + Suporte de cédigo absoluto para a teoria. API, construgio ¢ metodologia sio suportadas pelo cSdigo de trabalho. ‘Téda a linha do cédigo mostrada no livro fz parte de sim aplicativo C++ totalmente fimncional que tem 0 seu cédigo-fonte completo no CD. = Capacidade de reutilizagao. Os programas, médulos e padres por todo o livro foram escritos de forma que possam ser passiveis de reutilizagio ao méxi- mo em seus préprios projetos. XVI Quais Sao os Requisitos Para Este Livro? Do ponto de vista do leitor, o tinico requisito € a familiaridade com 0 C++, Uma idéia minima do formato XML também seri titil (embora o Capitulo 1 explique completamente todas as construgées dos espacos de nome doXML 1.0+). Os requisitos de software ¢ hardware sio um computador pessoal ¢ um compilador C/C++. Os exemplos foram desenvolvidos principalmente no Visual Studio C-+-+ 6.0 para Windows e a maior parte dos executiveis sio aplicativos Win32. Entretanto, para os aplicativos Linux deste livro, os ELFs sio fornecidos. Sempre que possivel, os makefiles para o Linux usando o gcc 2.95 ou posterior ¢ o gee do Cygnus 2.95 ou posterior para Windows foram incluidos. XVII I Fundamentos do XML 1 XML: Construgées e Conceitos 2 Visao Geral do XML/C++ er XML: Construcées e Conceitos E... LIVRO NAO £ UMA INTRODUGAO AO XML para todos os leitores (intimeros livros ¢ recursos gratis da Web cobrem este assunto). Em vez disso, este livro se concentra no tratamento avangado das tecnologias XML usando a linguagem C++, de forma que ele prestime que vocé tenha uma familiaridade bisica com ambas. A fim de sermos completos, contudo, este capitulo resume todas as construges € conceitos do XML, desde a estrutura para construir comandos bem-formados até 0 espaco de nomes. Se voce jé se sentir confortével quanto ao XML, fique a vontade para pular esse capitulo e usé-lo apenas como uma referéncia. Este capitulo esté dividido em trés segoes. A primeira secdo revé as construgées € os conceitos basicos do XML, a segunda passa pelas DTDs (document type definitions — definigdes do tipo de documento) ¢ a terceira explica os espaco de nomes. Finalmente, é importante lembrar que este capitulo apresenta o XML 1.0 mais os espagos de nomes como tima linguagem, nio a familia de tecnologias XML (¢ 0 sett relacionamento com 0 C+ +4). Isso ser o assunto do préximo capitulo. C++ XML Construcées Basicas O ponto de partida de nossa discussio sio os constituintes bésicos de um documento XML: elementos e atributos. As segdes a seguir explicam a sua estrutura e 0 seu uso. Elementos, Atributos e Aninhamento Todos os documentos XML sio formados por elementos. Os elementos sio delimitados por tags de inicio e fim ¢ podem conter outros elementos ¢ textos. Uma tag de inicio 6 composta de uma tag de nome e um conjunto de atributos. Uma tag de fim contém apenas © nome do elemento, precedido de /, Alguns exemplos sio mostrados na Listagem 1.1. Listagem 1.1 _Elementos tynon thonpy Um homen que fala apenas en anagranas. Na verdade, s&o apenas trocadilhos Por conveniéncia, se uma tag nio tiver nenhum contetido cla podera ser abreviada como segue: pode ser abreviado para Um atributo € um par nome/valor separado por um sinal de igual (=). Os valores de atributo devem estar envoltos em sinais de aspas simples ou duplas (a escolha é irrelevante desde que © seu uso seja consistente). O espagamento entre o nome do elemento ¢ os atributos, bem como o espagamento entre nomes e valores de atributos, é irrelevante, permitindo, porém, recuos (endentagdes) como 0 seguinte: © aspecto simples mais importante da boa formacio no XML é¢ 0 aninhamento correto. Resumindo, um elemento esti corretamente aninhado se as suas tags de inicio e de fim estio dentro do mesmo elemento pai: Capitulo 1 XML: Construcées e Conceitos Finalmente, vocé certamente jé adivinhou que os comentirios comegam com Outro mecanismo de escape sao as referéncias de caracteres como Ф € А , que permitem a inclusio de caracteres reservados ¢ especiais em um documento. As referéncias de caracteres serao discutidas de forma mais aprofundada quando eu introduzir o conceito de entidades. Instrugées de Processamento As instrugées de processamento (geralmente conhecidas como Pls) sio um recurso raramente usado do XML que permitem que um documento passe dados especificos e diretos para o aplicativo (e nao para o analisador sintitico). Elas possuem uma sintaxe simples: O alvo do PI é um nome XML identificando o aplicativo que deve receber a instrucio. A instrugio € uma string de forma livre que € passada para o aplicativo. O XML nio coloca qualquer restrigao no formato das Pls, exceto que ele considera os alvos que comegam coma string xml (ou qualquer variavel de fontes da mesma) reservadas. Abaixo esté uma PI tipica usada para vincular folhas de estilo XML (XML stylesheets) a documentos em determinados navegadore Abaixo esté uma PI bem mais local (mas igualmente valida): As instrugées de processamento podem aparecer em qualquer ponto do contetido do elemento. Linguagem Natural A fim de identificar explicitamente a linguagem natural usada no contetido de um determinado atributo, vocé deverd usar o atributo especial xml: lang. O valor xm] :1ang deveré estar em uma das seguintes categorias: = Um cédigo de duas letras definido pelo ISO-639. Esta é a forma intuitiva mais comumente utilizada (en para inglés, es para espanhol, de para alemio, pt para portugués, eassim por diante). A lista completa pode ser acessada em Capitulo 1 XML: Construcées e Conceitos http: //nww.evertype.com/standards/iso639/iso639-en htm! * Um identificador IANA (Internet Assigned Numbers Authority - Autoridade de Naimeros Atribuidos na Internet), como I-navajo. Todos os identificadores [ANA devem comegar por I-. E possivel encontrar uma lista de identificadores da linguagem IANA em: http: //uww.isi.edu/in-notes/iana/assignments/1anguages/ = Umnome definido pelo ustidtio prefixado por x-. Nem é necessario dizer que essa é uma escolha incomum, Se os valores do xml :]ang comecarem com um cédigo de duas letras ISQ639, ele poder ser expandido com subcddigos para lugares em particular. A seguir esto alguns exemplos: L' enfer Arizona Dream Boa Formacao Agora que j4 vimos os conceitos bisicos, estamos prontos para formular uma definigio funcional de boa formagio. (O aparte mais adiante intitulado “Boa Formacio versus Validade” discute as diferengas entre a boa formagio ¢ a validade.) Um documento é bem-formado se ele seguir a sintaxe que é descrita aqui, tiver um elemento-raiz e tiver todos os seus subelementos corretamente aninhados, DTDs As DTDs (document type definitions — definigdes do tipo de documento) sio a forma b4sica ¢ mais amplamente utilizada das especificagdes de tipo para documentos XML. Elas sio usadas para especificar os tipos de elementos que podem aparecer em um documento, a sua ordem e atributos, ¢ seu contetido. As DTDs sao formadas por declaragGes marcadas: tipo de elemento, lista de atributos, notagio e declarages de entidade. As segSes a seguir examinam cada um desses quatro tipos de construgdes e mostram como elas est4o vinculadas ao documento. Declaragées de Tipo de Elementos Una declaragio de tipo de elemento contém os tipos de valores que podem aparecer dentro de um determinado elemento. Ura declaragio de tipo de elemento possui o seguinte formato: 8 C++ XML em que nome é um nome XML e contefido possui um dos seguintes formatos (veja os exemplos na Listagem 1.2): = ENPT . Indica que o elemento nao possi qualquer descendente. = N-. O elemento pode conter quaisquer combinagdes de dados de caracteres (comumente chamado de #PCDATA) ¢ quaisquer otttros elementos na DTD. (Este modelo de contetido é muito comume geralmente indica uma subespecificagao.) * “Children”. Neste caso, 0 modelo de contetido € uma seqiiéncia entre parénteses (separada por virgulas) ou escolha (separada por |). Os elementos de uma seqiténcia ou escolha podem ser nomes de elementos ou grupos de escolhas owas prdprias seqiiéncias. Cada grupo de seqiténcia ou escolha pode ser afetado por tim ou mais modi-ficadores de multiplicidade: ? para zero ou um, + para um ou mais ou * para zero ou mais * Misto. Neste caso, 0 modelo de contetido é representado por uma escolha entre parénteses entre #PCDATA (a palavra reservada para dados de caractere dentro de uma declaragio do tipo de elemento) e todos os elementos que possam aparecer intercalados com os dados de caracteres. Toda a seqiiéncia deverd terminar pelo modificador *. Isso significa que vocé nao poder restringir a ordem dos elementos dentro de um elemento de contetido misto. Tado 0 que pode fazer € dizer que alguns elementos aparecerio e que eleso farao em meio aos dados de caracteres. Listagem 1.2 _DeclaracGes de Tipo de Elementos aise Nome: Shows Descrigdo: Una DID para a descricao de programas de TV Versdo: $Id: shows.dtd,y 1.3 2001/01/21 16:10:00 Default Exp $ **** Declaragdes de Tipo de Elementos **** Um modelo ‘Children’ mais complexo --> Mostra uma escolha de um elenento ou de uma seqiéncia de elementos --> Note como “zero ou mais" @ especificado com o '*' familiar continua Capitulo 1 XML: Construcées e Conceitos Listagem 1.2 (Continuagao) Vinculando um Documento a uma DTD Antes de seguirmos em frente, é importante ver como associar um documento a uma DTD a fim de validé-lo. Logo depois da declaragao XML (), o documento deverd conter uma declaragio de tipo de documento que use um dos dois formatos abaixo: Em ambos os casos, idSistema é uma URL usada para recuperar a DTD. Ela pode ser tio simples quanto o nome do arquivo que contém a DTD ou uma URL como “http://www. foo.net/bar.dtd”. idPGblico é uma string para identificar DTDs conhecidas (como 6 HTML 4.0 ou DocBook). Um analisador sintatico pode usar 0 ID pablico para tentar encontrar a DTD, usando um catdlogo, por exemplo. A Listagem 1.3 mostra uma instincia vilida da DTD na Listagem 1.2. Listagem 1.3 Instancias Validas do shows.dtd tymon thonpy snumero>32 Um homen que fala apenas em anagramas Na verdade, so apenas trocadilhos. s 9 10 C++ XML Declaracées da Lista de Atributos O préximo tipo de restri¢io de marcagio € a declaragio de lista de atributos. Uma declaragio de listas de atributos declara o nome, tipo e valor padrao (se existir) de todo atributo para um determinado elemento. As listas de atributos possuem a seguinte estrutura geral: Ha trés tipos de atributos: tipo string, tipo token e tipo enumeragio. As segGes a seguir descrevem o formato de cada declaragio ATTLIST. Tipos String O tipo mais simples de atributo é 0 tipo string. Em uma declaragio desse tipo, o tipoAtrib é a string CDATA, sinalizando que o valor desse atributo é uma string de forma livre contendo quaisquer caracteres, exceto <. Exclusividade da Declaracao de Elemento ede Atributo Como vocé pode escrever varias sentencas 0u , € perfeitamente legitimo perguntar-se como 0 analisador sintatico iré comportar-se nestes casos. As declaracgées de elementos devem ser exclusivas. £ um erro declarar um elemento mais de umavez. Diferentes declaragées de listas de atributos referindo-se a0 mesmo elemento podem ser condensadas em uma sé lista. Se varias declaracées para o mesmo atributo forem encantradas, apenas a primeira delas serd levada em consideracdo. O restante sera ignorado. Os tipos string podem exibir (assim como qualquer outro tipo) uma declaragio de atributo padrdo que pode ser seguida por um dos especificadores abaixo: * FRE IRED. Indica que todas as instincias do elemento deverdo ter um valor para este atributo. Nenhum valor padrio fornecido para este tipo de atributo. * IMPLIED. Indica que o atributo nao € necessério e que nenhum valor padrio seré fornecido. * Default. Indica que o valor padrao para o atributo é Default. Se o elemento especificado na declaracdo nao fornecer um valor especifico para esse atributo, Default serdassumido. * # IXED Default. Indica que o atributo pode ou niio pode ser apresentado, mas se for, ele deverd ter o valor Default. Isso costuma ser til para modelar atributos “flag” como oficial, como mostraa Listagem 1.4. A Listagem 1.4 mostra os tipos string, expandindo a DTD da Listagem 1.1.

Você também pode gostar