Usando XML e DOM

Usando XML e DOM e para organizar uma coleção de arquivos MP3

Jonas Knopman, D.Sc.
NCE/UFRJ

1. Introdução

A popularização do formato MP3 para o armazenamento de arquivos de áudio e a facilidade para baixar tais arquivos da Internet fez de cada um de nós proprietários de uma coleção de centenas ou milhares de arquivos de músicas. Freqüentemente estes arquivos são baixados por aplicativos diferentes, ou são recebidos por e-mail, e se espalham por diversas pastas no hard disk do usuário. Este artigo descreve uma aplicação simples usando a API DOM em Java para gerar um arquivo XML contendo informações sobre os arquivos MP3 encontrados no sistema de arquivos da máquina do usuário. As informações apresentadas são aquelas descritas nas tags ID3 dos arquivos MP3.


O arquivo XML gerado pode ser importado por um banco de dados e utilizado por uma aplicação relacional através de consultas SQL. Pode-se ainda manter a base de dados no arquivo XML e percorrê-la usando DOM. Finalmente, pode-se aplicar uma folha de estilo XSLT ao arquivo XML original e transformá-lo, por exemplo, em HTML para visualização no browser.

2. DOM

O XML DOM (XML Document Object Model) define uma forma padrão para acessar e manipular documentos XML.

A API DOM transforma um documento XML em uma estrutura em árvore e fornece acesso a essa estrutura através de um conjunto de objetos. Todos os elementos, o texto que eles contêm e seus atributos podem ser acessados através da árvore DOM. Seu conteúdo pode ser modificado ou apagado e novos elementos podem ser criados pelo DOM. Os elementos, seu texto e seus atributos são todos conhecidos como nós da árvore DOM.

Um parser XML é um componente que permite às aplicações analisar um documento XML, validá-lo, montar a árvore DOM e alterar a estrutura deste documento. Esta aplicação usa a implementação de referência da API JAXP (Java API for XML Processing) incluída como parte do J2SE v1.4.2 (pacote javax.xml.parsers). Usando as classes deste pacote, podemos obter uma instância da classe DOM Document que, conceitualmente, corresponde à raiz da árvore DOM, e fornece o acesso básico aos dados do documento. A figura a seguir mostra os detalhes de algumas das classes do pacote org.w3c.dom. Observe a utilização de uma classe concreta XmlDocument, pertencente ao pacote org.apache.crimson.tree e que implementa a interface Document.

Figura 1 - Algumas classes da interface DOM (clique na imagem p/ ampliar)



3. Arquivos MP3 e as tags ID3v2

ID3v2 é um novo sistema de tags que permite que você acrescente informações relevantes sobre seus arquivos de áudio dentro dos próprios arquivos. As informações com as quais você provavelmente está acostumado são: o título da música, o nome do artista, o nome do álbum, ano e gênero. Esta é a informação mostrada no display dos aparelhos eletrônicos quando você reproduz um arquivo MP3.

O formato original foi desenvolvido em 1996 por Eric Kemp e, naquele tempo, significava apenas “IDentificar um mp3”. As tags ID3 podem ser atualizadas por um dos inúmeros editores de ID3 disponíveis para download na Internet ou por algum dos players MP3 mais populares, como por exemplo o Winamp da Nullsoft.

Neste projeto, para ler as tags ID3 dos arquivos MP3, utilizamos um conjunto de classes disponíveis para download em http://sourceforge.net/projects/mp3info. Este projeto é conhecido como mp3info no Sourceforge.

Neste pacote, todas as informações do arquivo MP3 são obtidas por uma instância da classe ExtendedID3Tag como mostrado no código a seguir:

ID3Reader x = new ID3Reader(file.getAbsolutePath());
ExtendedID3Tag tag = x.getExtendedID3Tag();

Os seguintes métodos são disponibilizados na interface da classe ExtendedID3Tag:
String getAlbum()
String getArtist()
String getComment()
byte getGenre()
String getGenreS()
String getTitle()
byte getTrack()
String getTracks()
String getYear()
boolean isValidTag()
void setAlbum(String alb)
void setArtist(String art)
void setComment(String c)
void setGenre(byte g)
void setGenre(int g)
void setTitle(String tit)
void setTrack(byte t)
void setTrack(int t)
void setYear(String y)
byte[] toByteArray()


4. O programa
O programa percorre recursivamente uma sub-árvore do sistema de arquivos do usuário a partir de um diretório raiz especificado (figura a seguir).


Figura 2 - Detalhes da interface com o usuário

Para cada arquivo MP3 encontrado, é criada uma instância da classe ExtendedID3Tag para ler as informações da tag ID3v2. As informações lidas são então gravadas em um novo nó da árvore DOM. Ao final do processamento, toda a árvore DOM é gravada no arquivo XML de saída (figura a seguir).


Figura 3 - Trecho de um arquivo XML resultante da execução do aplicativo
(clique na imagem p/ ampliar)

Observe na linha 2 do arquivo XML a associação com uma folha de estilo XSLT que transforma o arquivo XML em HTML.

5. Visualização do arquivo XML

Uma das possibilidades de utilização do arquivo XML resultante é associá-lo a uma folha de estilo para transformá-lo em um documento HTML. A figura a seguir mostra o resultado da aplicação de uma folha de estilo simples ao documento XML da Figura 3.


Figura 4 - Arquivo HTML resultante da aplicação de uma folha de estilo XSLT ao arquivo XML

Observe que o elemento no arquivo XML, foi utilizado para criar um atributo href no arquivo HTML de saída. Desta forma, quando o usuário clicar sobre o nome do arquivo, o aplicativo associado à execução de arquivos MP3 em sua máquina é aberto automaticamente (figura abaixo).

Figura 5 - Execução automática de um arquivo MP3 a partir da página HTML

6. Conclusão

Este artigo apresenta um aplicativo simples para a organização de uma coleção de arquivos MP3 usando XML e DOM.

Todos os arquivos necessários para rodar a aplicação encontram-se disponíveis para download em http://equipe.nce.ufrj.br/jonas/conceito/mp3.

Se você quiser aprender mais sobre Java, XML, XSLT, DOM e tecnologias associadas, consulte o catálogo de cursos disponíveis em http://www.nce.ufrj.br.
Postar um comentário

Postagens mais visitadas deste blog

MANUAL DE REDAÇÃO DA PRESIDÊNCIA DA REPÚBLICA

Plural de substantivos compostos

Atualidades - 15 de agosto de 2016