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();
}
}