Jena - Gerar ficheiro Rdf

0 respostas
A

Olá a todos,

Graças à API Jena, o código aqui em baixo gera um ficheiro RDF, que vai conter todas as informacoes sobre uma familia: filiacoes, etc (como uma arvore genealogica). O codigo executa um interface com 4 labels e 4 textfields para que o utilizador possa introduzir o nome de familia, primeiro nome, data de nascimento e sexo. Depois em baixo, tem os botoes "Adicionar", "Modificar", "Apagar", "Seguinte", "Precedente".

O que vou fazer depois é criar as relacoes de filiacao (exemplo: Pedro temPorFilha Ana). Para isso, penso em criar 3 combox.: Combox1 contendo uma lista das pessoas existentes, combox2 para as propriedades temPorFilho/temPorFilha/etc, e combox3 para a lista de pessoas igual à combox1. E um botao Validar, para adicionar os statement Pessoa X temPorFilho/temPorFilha Pessoa Y ao ficheiro Rdf.

Como eu disse, o código aqui em baixo ainda só permite adicionar pessoas. Só o botao Adicionar funciona por agora. Tou um pouco bloqueado no botao modificar. Alguém me poderia dar pistas que me orientem sobre como permitir ao utilizador modicar os statements relativos a uma pessoa?

Muito obrigado.

Aqui está o meu código:

import java.util.*;

import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.ontology.*;
import com.hp.hpl.jena.ontology.impl.*;
import java.io.*;
import java.awt.*; 	
import java.awt.event.*;
import com.hp.hpl.jena.vocabulary.XSD;


public class FamilyModel extends Frame{
	
	
	TextField[]tabTF=new TextField[4];
	Button bAdicionar, bModificar, bApagar, bPrecedente, bSeguinte;
	
	Button criarBotao(String S, int x, int y)
	{
		Button b=new Button(S);
		add(b);			
		b.setBounds(x,y,120,30);
		return b;
	}
	
	void criarLabel(String etiqueta, int x, int y)
	{
		Label la=new Label(etiqueta);
		la.setBounds(x,y,120,25);
		add(la);
	}
	
	public FamilyModel ()
	{
			
			setLayout (null);
			setBackground (Color.pink);
			setBounds (100,200,600,450);
			addWindowListener(new FecharJanela());	

			criarLabel("Nome : ",10,50);
			criarLabel("Apelido : ",10,100);
			criarLabel("Data de nascimento: ",10,145);
			criarLabel("Sexo (H ou M): ",10,190);
						
			for(int i=0;i<4;i++)
			{
				tabTF[i]=new TextField("");
				tabTF[i].setBackground(Color.white);
				add(tabTF[i]);
			}
			tabTF[0].setBounds(120,50,150,25);
			tabTF[1].setBounds(120,100,150,25);
			tabTF[2].setBounds(120,145, 100,25);
			tabTF[3].setBounds(120,190, 45,25);
			
			bAdicionar=criarBotao("Adicionar",20,250);
			setVisible(true);
			
			bModificar=criarBotao("Modificar",138,250);
			setVisible(true);
			
			bApagar=criarBotao("Apagar",250,250);
			setVisible(true);
			
			bPrecedente=criarBotao("Precedente",360,250);
			
			bSeguinte=criarBotao("Seguinte",450,250);
			setVisible(true);
			
			tratar(this);

	}
	
	
	
	void traitar(Frame janela)
	{
		bAdicionar.addActionListener(new AcaoAdicionarPessoa());
	}
	
	
	
	class AcaoAdicionarPessoa implements ActionListener
	{
		public void actionPerformed(ActionEvent evt)
		{
			OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);
			String uriBase = "http://www.something.com/FAM";
			model.createOntology(uriBase);
			
			//Classes
			OntClass pessoa = model.createClass(uriBase+"#pessoa");
			
			OntClass mulher = model.createClass(uriBase+"#mulher");
			OntClass homem = model.createClass(uriBase+"#homem");
			OntClass sexo = model.createClass(uriBase+"#sexo");
			OntClass feminino = model.createClass(uriBase+"#feminino");
			OntClass masculino = model.createClass(uriBase+"#masculino");
			OntClass acontecimento = model.createClass(uriBase+"#acontecimento");
			OntClass deces = model.createClass(uriBase+"#falecimento");
			OntClass casamento = model.createClass(uriBase+"#casamento");
			OntClass divorce = model.createClass(uriBase+"#divorcio");
			
			
			//Sub-classes
			sexo.addSubClass(feminino);
			sexo.addSubClass(masculino);
			pessoa.addSubClass(homem);
			pessoa.addSubClass(mulher);
			acontecimento.addSubClass(falecimento);
			acontecimento.addSubClass(casamento);
			acontecimento.addSubClass(divorcio);
			
			ObjectProperty temPorFilho = model.createObjectProperty(uriBase+"#temPorFilho");
			temPorFilho.setDomain(pessoa);
			temPorFilho.setRange(homem);
			
			ObjectProperty sexo = model.createObjectProperty(uriBase+"#sexo");
			aGenre.setDomain(pessoa);
			aGenre.setRange(sexo);
			
			DatatypeProperty temPorNome = model.createDatatypeProperty(uriBase+"#temPorNome"); 
			aPourNom.setDomain(pessoa);
			aPourNom.setRange(XSD.xstring);
			
			DatatypeProperty temPorApelido = model.createDatatypeProperty(uriBase+"#temPorApelido"); 
			aPourPrenom.setDomain(pessoa);
			aPourPrenom.setRange(XSD.xstring);
			
			DatatypeProperty DataNascimento = model.createDatatypeProperty(uriBase+"#DataNascimento"); 
			aDateNaiss.setDomain(pessoa);
			aDateNaiss.setRange(XSD.xstring);
			
		
			for(int i=0;i<4;i++)
			{
				tabTF[i].getText();	
				if (i==0) 
				{
					Resource P1 = model.createResource(uriBase+tabTF[i].getText(), pessoa);
					Statement statement1 = model.createStatement(P1,temPorNome,tabTF[i].getText());
					model.add(statement1);
				}
				if (i==1)
				{
					Resource P1 = model.createResource(uriBase+tabTF[i].getText(), pessoa);
					Statement statement2 = model.createStatement(P1,temPorNome,tabTF[i].getText());
					model.add(statement2);
				}
				if (i==2)
				{
					Resource P1 = model.createResource(uriBase+tabTF[i].getText(), pessoa);
					Statement statement3 = model.createStatement(P1, DataNascimento,tabTF[i].getText());
					model.add(statement3);
				}
				if (i==3)
				{
					if (tabTF[i].getText().equals("M"))
					{
						Resource P1 = model.createResource(uriBase+tabTF[i].getText(), sexo);
						Statement statement4 = model.createStatement(P1,sexo,tabTF[i].getText());
						model.add(statement4);
					}
					else 
						if (tabTF[i].getText().equals("H"))
						{
							Resource P1 = model.createResource(uriBase+tabTF[i].getText(), sexo;
							Statement statement4 = model.createStatement(P1,sexo,tabTF[i].getText());
							model.add(statement4);
						}
				}
			}
			
				StringWriter sw = new StringWriter();
				model.write(sw, "RDF/XML-ABBREV");
				String owlCode = sw.toString();
				File file = new File("d:/t6.rdf");
				try{
				FileWriter fw = new FileWriter(file);
				fw.write(owlCode);
				fw.close();
				} catch(FileNotFoundException fnfe){
				fnfe.printStackTrace();
				} catch(IOException ioe){
				ioe.printStackTrace();
				}
			
		}
	}
	
	
	public class FecharJanela extends WindowAdapter {

		public void windowClosing(WindowEvent evt)
		{
			if(evt.getWindow().getName().equals("frame0"))
			{
				System.exit(0);
			}
			else
			{
				evt.getWindow().dispose();
			}
		}
	}
	
	public static void main(String args[]) {
		
		new FamilyModel();
		
	}
}
Criado 6 de agosto de 2011
Respostas 0
Participantes 1