• Nenhum resultado encontrado

2.4. NoSQL

3.2.5. Java DOM Parser

Para efetuar o parsing, ou seja a leitura e interpretação, dos ficheiros RDF, como foi referido anteriormente, é possível usar o Apache Jena. No entanto, após a execução de alguns testes com os resultados obtidos nos passos anteriores, verificou-se que não disponibilizava as funcionalidades pretendidas. Além de não tornar possível a obtenção dos atributos de diferentes recursos encadeados, não possibilitava a ordenação, por exemplo pela data, dos conteúdos partilhados de uma forma simples e fácil.

Desse modo optou-se por pesquisar uma biblioteca diferente que fosse capaz de efetuar o parsing de um ficheiro RDF de modo simples e eficaz. Foi escolhido o Document Object Model (DOM).

O DOM não é mais do que uma API para documentos HTML e XML corretamente formados. Define a estrutura lógica dos documentos e o modo como um documento é acedido e manipulado.

O DOM surgiu como uma especificação para possibilitar que programas em JavaScript e Java pudessem ser portáveis em browsers web. No entanto, quando o grupo de trabalho DOM foi formado no W3C, juntaram-se pessoas de outros domínios, como o HTML e o XML, acabando por influenciar o desfecho desta biblioteca.

Um dos pontos fortes do DOM é o facto de ser uma especificação do W3C. Como tal, um dos objetivos principais é providenciar uma interface de programação standard que pode ser usada em diferentes ambientes e aplicações. Foi desenhado para permitir o uso de qualquer linguagem de programação. No caso deste trabalho, como nas situações anteriores, optou-se por usar o Java.

O DOM está separado em 3 níveis distintos, definindo os objetos e propriedades de todos os elementos, bem como os métodos para aceder aos mesmos:

• Core DOM – modelo standard para qualquer documento estruturado; • XML DOM – modelo standard para documentos XML;

• HTML DOM – modelo standard para documentos HTML.

Como a notação de um ficheiro RDF, numa análise generalizada, pode ser vista como XML, interessa-nos a parte responsável por este, neste caso o XML DOM. Este é caracterizado por ser, como já foi referido em parte:

• Um modelo de objeto standard para XML;

• Uma interface de programação standard para XML;

• Independente da plataforma e da linguagem de programação; • Um standard W3C.

Resumidamente, o XML DOM é um standard para obter, alterar, adicionar e remover elementos XML.

Tendo, por exemplo, o XML representado na Tabela 9, o XML DOM transforma essa informação numa árvore DOM como está representada na Figura 34.

<book>

<title>Título do Livro</title> <author>Autor do Livro</author> <ISBN>Número ISBN do Livro</ISBN> </book>

Tabela 9 - Ficheiro XML

Figura 34 - Árvore DOM do ficheiro XML [58]

Depois de ser obtida esta árvore DOM, a mesma pode ser manipulada como qualquer outra árvore ou grafo, podendo aceder aos seus elementos.

De acordo com o DOM, tudo o que está num documento XML é um nó. Desse modo, o DOM indica-nos que:

• O documento inteiro é um nó de documento; • Qualquer elemento XML é um nó de elemento;

• O texto presente nos elementos XML é um nó de texto; • Qualquer atributo é um nó de atributo;

• Comentários são nós de comentários.

Um erro comum, quando se usa o DOM, é esperar que um nó de elemento contenha texto já que, como foi referido anteriormente, o texto será sempre guardado em nós de

texto. Como exemplo, se tivermos “<year>2012</year>”, o nó de elemento “<year>” contém um nó de texto com o valor “2012”. “2012” não é o valor do elemento “<year>”.

O objeto DOM Document representa um documento XML. Quando se efetua o parsing de um ficheiro XML usando o Java DOM Parser, obtém-se um objeto Document.

As duas características mais utilizadas do DOM são: 1. Aceder a elementos-filho de um elemento; 2. Aceder a atributos de um elemento.

Inicialmente, um Document contém apenas um elemento de raiz, que pode ser obtido utilizando o método getDocumentElement().

Este elemento raiz pode ter filhos que podem ser outros elementos, comentários, instruções de processamento, caracteres, entre outros. Para se obter os filhos de um elemento, existe um método com o nome getChildNodes que retorna um objeto NodeList, que não é mais do que uma lista de nós, que pode ser percorrida para obter a informação desejada.

Para obter os atributos de um elemento, existem dois métodos especialmente criados para este efeito, o getAttribute e o getAttributeNode. Na maioria das vezes será suficiente usar o getAttribute, mas podem surgir casos em que seja necessário passar o atributo obtido para um ou mais métodos que necessitem de aceder a mais informação acerca do atributo para o processar, desse modo passa a ser necessário utilizar a segunda opção [58,59,60].

Para mostrar um exemplo funcional desta biblioteca será usada, mais uma vez, a informação presente na Figura 8. O código usado para este exemplo está na Figura 35.

Figura 35 - Código Java para exemplificar o funcionamento do DOM Parser

De notar que este exemplo é meramente para mostrar o funcionamento desta biblioteca já que, por exemplo, no trabalho final existe um método para o processo que vai desde a obtenção da NodeList ao retorno do NodeValue.

Neste exemplo começa-se por definir o ficheiro que contém o documento RDF. Como foi referido, neste ficheiro está o conteúdo representado na Figura 8.

De seguida são executados 4 métodos que permitem a construção de um novo Document, o início do parsing e a normalização do ficheiro.

Seguidamente é feito o acesso aos elementos pretendidos, neste caso pretende-se obter os valores representados por “foaf:name”, “vcard:EMAIL”, “cv:studiedIn”, “dc:title”, “teach:teacher” e “dcterms:date”, obtendo desse modo todos os nós-filho existentes. O valor estará guardado no primeiro elemento, já que só temos um valor para cada um destes elementos. No caso de existir mais do que um poderia ser feito um ciclo para obter toda a informação pretendida.

Por último é feito um getNodeValue, para obter o valor da informação pretendida. Neste passo poderia ser obtida toda a informação associada a um nó, mas como se pretende apenas o seu valor, não foi necessário obter qualquer informação adicional.

No final é mostrada a informação pretendida no ecrã. O resultado deste pequeno programa está representado na Figura 36.

Figura 36 - Resultado da execução do programa anterior

Como se pode ver, tornou-se possível extrair a informação pretendida de uma forma rápida e simples.

Documentos relacionados