Tutorial do HierarchicalMap - Nível Intermediário

HierarchicalMap é uma interface. Assim, qualquer um pode implementá-la. Este tutorial é baseado em BasicHierarchicalmap, uma implementação referência em Java da interfae HierarchicalMap.

Este tutorial abrange os seguintes assuntos:

    Nível Básico
  1. O Primeiro Contato
  2. Criação de Estruturas
  3. Recuperação dos Dados
  4. Interação com Coleções
  5. Reestruturação do Mapa

  6. Nível Intermediário
  7. Trabalhando com Stream
  8. Trabalhando com XML
  9. Trabalhando com XML Grande
  10. Acessando Banco de Dados
  11. Acessando Preferências

  12. Nível Avançado
  13. Preenchimento de Template (inglês)
  14. Interoperabilidade com .NET (inglês)
  15. Runtime schema validation (inglês)

(O recurso de Javascript precisa estar habilitado, no seu navegador, para permitir a visualização dos códigos utilizados nos exemplos deste tutorial)

Nível Intermediário

8. Trabalhando com XML Grande

Ler um XML grande, por inteiro, pode ser demorado e requerer uma grande quantidade de memória da máquina. Neste capítulo, iremos apresentar uma nova forma de manipular documentos XML.

Inicialmente, execute o código a seguir:

Neste ponto, o XML criado até então seria:

Aqui, iremos introduzir três conceitos:

  • Posição do Cursor: posição onde o próximo componente do documento XML será inserido.
  • Posição de Referência: XML pode ter elementos aninhados. A posição de referência indica o elemento pai onde, as próximas operações de escritas, adicionarão os elementos filhos.
  • Posição de Inserção: Representa o ponto onde o próximo mapa será adicionado. Este é a intersecção entre posição de cursor e de referência.
  • Agora, vamos adicionar o seguinte pedaço de HierarchicalMap:

    Para tanto, substitua o código entre a primeira escrita e o método "close" pelo código abaixo:

    A estrutura do XML resultante será:

    Agora, adicione o próximo código antes de fechar a XMLMapOutputStream. Note que o conteúdo do segundo capítulo é diferente.

    A estrutura final do XML resultante será como abaixo:

    A rigor, este não é um XML válido, pois contem três nós raizes. Você provavelmente receberá uma mensagem de erro caso tente abrir o documento resultante utilizando um editor compatível com XML. No entanto, esta estrutura é válida para uma HierarchicalMap.

    Alterando a Posição de Referência

    Acrescentar a HierarchicalMap numa posição fixa é muito limitante para criar documentos XML complexos. Alternativamente, mostraremos como adicionar uma HierarchicalMap numa posição arbitrária. Para tanto, iremos utilizar a classe MapWriter. Primeiro, prepare o seguinte código e execute-o.

    O documento XML resultante será o seguinte:

    Primeiro, a instanciação da MapWriter é bem simples. Basta instanciá-la passando a classe MapOutputStream ou XMLMapOutputStream. Depois, escreva o mapa como sempre utilizando o método writeMap(). Agora, apresentaremos mais dois conceitos:

  • Posição Corrente: geralmente é a mesma posição da Referência. Quando o método writeMap() é chamado especificando o nó inicial,a posição corrente será a posição do nó inicial e a posição corrente será a posição do nó inicial.
  • Última Posição: posição onde foi escrito o último elemento.
  • O relacionamento entre estas posições para a "mw", a primeira MapWriter criada no exemplo, após a chamada do método "mw.writeMap("Document", map);" é mostrado abaixo:

    Desta forma, o seguinte trecho de código, extraído do exemplo anterior, criará uma MapWriter "mw2" cuja referência é aponta para o nó "Section".

    A linha "mw2.writeMap("Chapter", chapter);" adicionará o capítulo sob a última posição da "mw". O relacionamento das posições da "mw2" é mostrado abaixo:

    Lendo um XML grande

    Pela mesma razão, existe a MapReader que permite leitura parcial de um documento XML. Experimente executar o código abaixo e note a semelhança com a MapWriter.

    O resultado será como abaixo (quebra de linhas foram inseridas para caber na tela. O resultado verdadeiro produz apenas três linhas):

    <Document><Author>author's name</Author>
    <Summary>summary</Summary><Section></Section></Document>
    
    <Title>title 1</Title><Content>content 1</Content>
    
    <Title>title 2</Title><Content>content 2</Content>
    

    Continua para Nível Intermediário - Acessando Banco de Dados