Original credits to: Ian dickinson
Eu com certa frequência recebo emails da seguinte forma:
Prezado Sr/Dr/Prof Dickinson Eu sou novo em Jena. Eu não consigo configurar o Jena no eclipse. Seria possível, por favor, me ajudar a resolver este problema?
A propósito, eu não sou um professor, mas seria bom ser promovido. Então, este artigo é para todos aqueles que são novos em Jena no Eclipese. Este artigo não é:
• Um tutorial de programação em Java
• Instruções sobre instalação do Eclipse
• Um tutorial de Jena
Em vez disto, meus objetivos para este artigo são mostrar a você como fazer um programa Jena bem básico no Eclipse. Em outras palavras, o equivalente em Jena do hello world.
Jena é uma API (application programming interface) de programação para aplicações de web semântica em Java. Ele não é um programa ou ferramenta que você “roda” – se é isto que você está procurando, eu sugiro TopBraid Composer como uma boa opção. Desta forma, o principal uso de Jena é ajudar você a escrever código em Java que dá suporte à documentação e descrição de RDF e OWL. Eu uso Eclipse como meu ambiente de programação Java, existem outros ambientes disponíveis, mas eu não os uso e, portanto, a experiência que eu posso passar é baseada no Eclipse.
Você precisará:
Para este tutorial eu irei usar Windows, mas os mesmos passos se aplicam ao
Linux e, eu presumo, ao MacOS. De fato, na minha máquina Windows eu uso uma
estrutura de diretório similar ao do Linux: ao invés de: c:\Documents and
Settings\ijd
como diretório padrão, eu uso c:\home\ijd
. Esta é uma escolha
pessoal que torna mais fácil escrever scripts que rodam no Linux e no Cygwin,
mas não há nenhuma razão especial para você fazer o mesmo. Entretanto,
geralmente é uma boa ideia evitar caminhos de diretórios com espaços entre
eles, se você puder. Então, a instalação do meu Jena está em: c:\home\ijd\projects\jena2
.
Em qualquer lugar que você vê este caminho de diretório neste tutorial, substitua-o pelo lugar onde você instalou o seu Jena.
Este tutorial é realmente para os novatos no Eclipse, então vou fazer um passo por vez. Se você já tem alguma experiência com Eclipse, sinta-se à vontade para pular alguns passos.
Eclipse organiza arquivos em projetos (projects), então nós vamos precisar de um projeto neste tutorial. Dependendo dos plugins instalados, o Eclipse pode mostrar um grande número de diferentes tipos de projetos. Um projeto simples em Java é o suficiente para uma aplicação simples em Jena. Se ao invés disso, você quisesse desenvolver um servlet Java que usa Jena, então use um tipo de projeto adequado. Por clareza, eu vou começar com um workspace vazio no Eclipse:
Eu preciso criar um novo Java project:
Então eu preciso configurar a estrutura interna do projeto.
Existe muitas formas de se fazer isso. Eu normalmente uso a
estrutura básica que vem do Maven. O código fonte está em src/main,
com o código Java em src/main/java
, ontologias em src/main/owl
, etc.
Arquivos Java .class compilados ficam em target/classes
.Então quando
eu crio um novo projeto, eu edito as configurações padrões para refletir
essas preferências. Entretanto, se o padrão é bom para você ou você não
conhece o suficiente para se importar com esses detalhes ainda, apenas
aceite as configurações padrões. Alternativamente, se o projeto que você
faz parte ou sua instituição educacional têm padrões já estabelecidos para
isto, use-os.
O código de Java fica em arquivos que correspondem à declaração de uma classe Java, então eu preciso criar uma classe para o meu exemplo de “hello world”. No project explorer (que fica no lado esquerdo por padrão, mas você pode movê-lo por quase todo o Eclipse), eu seleciono a pasta source (src) do projeto que estamos trabalhando e clico com o botão direito para abrir o menu de contexto (context menu):
OK, agora vamos escrever algum código em Jena.
A primeira coisa que eu precisarei para trabalhar é um Model
(modelo):
um container para comandos RDF. A classe Model
está no pacote (package)
com.hp.hpl.jena.rdf.model
, então primeiro eu irei importar (import) a
classe e só então criar uma instância dela.
Certo, então por que o código está sublinhando em vermelho? Este é o jeito do
Eclipse de indicar que existe um problema no código. Se eu tentasse compilar
este código usando javac
na linha de comando, eu receberia uma mensagem de
erro dizendo que o pacote com.hp.hpl.jena.rdf.model
não pôde ser encontrado,
e que a classe Model
não foi definida. Na linha de comando, eu consertaria
isto configurando o Java classpath
. Essencialmente, isso é o que eu faço no
Eclipse também, mas o Eclipse torna isto muito mais fácil. Note que eu não
disse em lugar nenhum neste texto que este é um projeto Jena. Tudo que eu
disse é que é um projeto Java. Qual a diferença? Simples: o Eclipse precisa
saber onde encontrar o projeto Jena que eu gostaria de referenciar no meu
programa. O Eclipse chama os locais onde ele pode achar o código que eu quero
referenciar como build path.
Existem algumas formas diferentes de configurar o build path no Eclipse.
Uma forma é criar um diretório lib
na pasta de mais alta ordem do meu projeto,
copiar o arquivo Jena .jar
lá e então linkar aquele diretório com o build
path do meu projeto. Isto funciona, mas existe uma forma melhor: definir
uma biblioteca de usuário (user library). Uma biblioteca de usuário é uma
declaração de biblioteca (coleção de códigos de suporte) que eu posso
referenciar a partir de qualquer projeto. Feito isso uma vez, eu posso
usar esta mesma biblioteca em vários projetos diferentes. Além do mais,
se eu em seguida atualizar Jena para uma nova versão, uma vez que a
biblioteca for atualizada, todo projeto no meu wordspace do Eclipse irá
enxergar a nova versão. Com o método de “copiar os arquivos para a pasta lib”,
eu tenho que recopiar para todo projeto que use Jena. Aqui está como eu crio
uma biblioteca Jena de usuário, começando com o menu Preferences:
Clique new para criar uma nova biblioteca de usuário (user library):
Agora eu clico em add jars (adicionar jars) para adicionar os arquivos .jar
do Jena. Arquivos .jar
contêm bibliotecas Java compiladas que Jena usa, junto
com o próprio código Jena em jena.jar
. A janela de selection (seleção)
que abre me permite selecionar quais arquivos .jar
estarão na minha biblioteca
de usuário. Eu selecionei todos (ALL) os arquivos .jar
no diretório /lib
do diretório de instalação do meu Jena.
Resultado:
Isso é na verdade suficiente para me permitir usar Jena no Eclipse, mas há
um par de passos adicionais que tornam a programação um pouquinho mais fácil.
Eu posso dizer ao Eclipse onde encontrar o código fonte e o javadoc para
as classes Jena (Eu vou mostrar como isso é útil mais na frente). Ao lado
do arquivo jena.jar
na biblioteca do usuário existe um pequeno ícone
de “+”. Clicar lá expande os detalhes daquele .jar
:
Eu posso informar ao Eclipse que o código fonte está na pasta src/
do
diretório de instalação do Jena. Eu clico na linha de Souce attachment
(anexo de código), então clico no botão Edit (editar). Na caixa de diálogo
de configurações de souce attachment, eu clico no botão de External folder
(pasta externa) e navego até a locação certa:
Similarmente, eu posso notificar o Eclipse da locação do Javadoc selecionando a linha Javadoc location (locação) da opção, então seguir um processo similar. Vale notar que o caminho da locação é a URL (ela começa com file:). Isto se dá porque a locação também pode ser um site Javadoc, embora eu não use este recurso aqui.
Com a biblioteca de usuário Jena configurada, eu clico em Ok para fechar a caixa de diálogo de configurações de biblioteca.
Agora eu posso voltar ao meu projeto e configurar o build path de Java para a biblioteca que eu acabei de criar. Para começar, clico com o botão direito no nó do projeto no Explorer window para abrir o menu de propriedades do projeto (properties menu), navego até a opção build path do menu e adiciono a biblioteca (add libraries).
Tendo atualizado o build path, o Eclipse irá automaticamente reconstruir
o projeto (i.e. recompilar o código Java). Com isto, alguns erros irão
desaparecer, dado que a declaração de import
pode agora achar a classe
para ser importada, e então a classe Model
agora faz sentido para o compilador.
Entretanto, ainda existe um erro porque ModelFactory
não está definido.
O que é preciso é uma declaração de import
adequada. Isto é facilmente
corrigido no Eclipse, seja clicando no símbolo (o ‘x’ vermelho na margem
esquerda), ou posicionando o cursor logo depois do nome da classe ModelFactory
e pressionando ctrl-space
, o que faz com que o Eclipse mostre os complementos
possíveis para o nome:
Quando eu seleciono a primeira das opções apresentadas (i.e. ModelFactory
ao
invés de ModelFactoryBase
), o Eclipse irá completar a declaração de import
automaticamente.
Olhe, não tem mais erros!
A opção de auto-complemento do Eclipse é também útil quando adicionando código.
Por exemplo, se eu digitar Resou
seguido por ctrl-space eu recebo do Eclipse
os possíveis complementos que casam com aquele nome:
Note o comentário Javadoc em amarelo ao lado do candidato a complemento
(No caso, Resource
). Esta informação extra vem de ter adicionado as locações
do código fonte e o do javadoc quando eu especifiquei as bibliotecas no passo
2 acima. Se você esquecer de especificar estas locações, o Eclipse não pode
ser tão prestativo em descrever os possíveis auto-complementos. Isto irá
também afetar a visão (view) de debug, embora eu não discuta isto neste
artigo.
Aqui está o programa hello world completo:
Para rodar este programa a partir do Eclipse, eu uso o menu run, acessado a
partir do botão mostrando um triângulo branco dentro de um círculo verde.
Dado que eu ainda não tinha rodado nenhum código, eu tenho que dizer ao
Eclipse qual programa rodar. Clique na setinha preta ao lado direito do
botão e informe ao Eclipse para rodar HelloREDFWorld
como uma aplicação Java:
O que resulta na seguinte saída no console do Eclipse:
E é isto: partindo de um Eclipse vazio até trabalhar numa aplicação RDF de hello world. É claro que existe muito mais para aprender (veja os links para tutoriais no início para obter acesso rápido a eles), mas espero que você agora possa ter alguma diversão desenvolvendo aplicações de web semântica.