我有一个函数,当我点击Add按钮时,它会在RDF文件中添加类Person
的实例(及其属性值)。我可以添加第一个实例,但是当我尝试添加第二个实例时,它会用第二个实例替换第一个实例。
我认为这是因为在添加第一个实例后我没有增加Resource P1 = model.createResource(personURI+"Name")
。
如何将java中的Resource
从P1
增加到P2
再增加到P3
等?
public class ActionAjoutPersonne implements ActionListener
{
public void actionPerformed(ActionEvent evt)
{
Onto f = new Onto();
Resource p1 = f.model.createResource(f.uriBase+tabTF[0].getText());
p1.addProperty(f.aPourPrenom, tabTF[0].getText());
p1.addProperty(f.aPourNom, tabTF[1].getText());
p1.addProperty(f.aDateNaiss, tabTF[2].getText());
if (tabTF[3].getText().equals("F"))
{
p1.addProperty(f.aGenre, tabTF[3].getText());
p1.addProperty(RDF.type, f.femme);
}
else if (tabTF[3].getText().equals("H"))
{
p1.addProperty(f.aGenre, tabTF[3].getText());
p1.addProperty(RDF.type, f.homme);
}
StringWriter sw = new StringWriter();
f.model.write(sw, "RDF/XML-ABBREV");
String owlCode = sw.toString();
File file = new File("d:/teste20.rdf");
try{
FileWriter fw = new FileWriter(file);
fw.write(owlCode);
fw.close();
} catch(FileNotFoundException fnfe){
fnfe.printStackTrace();}
catch(IOException ioe){
ioe.printStackTrace();
}
}
}
答案 0 :(得分:2)
我假设你正在使用耶拿?
如果使用相同的URI参数再次调用现有资源,createResource(uri)
方法将覆盖现有资源。
因此,您必须确保为每个人分配不同的URI。
您可以使用某种自动递增计数器,或通过将此人的姓名作为URI的一部分(例如using URLEncoder.encode(name, "utf-8")
)来实现此目的。
答案 1 :(得分:1)
我有点不清楚你的确切目标是什么,A.R。,但我可以看到两种可能性:
在第一种情况下,您需要每次都更改输出文件。目前你有:
File file = new File("d:/teste20.rdf");
所以文件名固定为'teste20.rdf'。您必须将其更改为每次使用不同的文件名。有多种方法可以实现这一目标:一种方法是在您的班级上设置一个private static int
字段,每次都会增加:
File file = new File("d:/teste_" + fileCounter++ + ".rdf");
还有其他方法,您可以在this question中看到。
但是,如果您想要第二种情况:一个文件中有多个RDF资源,那么在没有看到更多代码的情况下诊断问题有点困难。但是,如果模型在:
Resource p1 = f.model.createResource(...)
每次都不是同一个模型(我无法从你的代码中看出该模型是如何创建的),每次监听器运行时,你创建一个只包含用户表单中的新数据的模型,然后把它写到位。在这种情况下,您有两个选择:要么每次都不要继续创建新模型(但这意味着模型最终会变得非常大,并且每次应用程序重新启动时也会重置),或者读取{的现有内容{1}} 在之前写出模型的内容(未经过测试,但应该有效):
d:/teste20.rdf
如果您不是每次都创建新模型,则假设表达式 File file = new File("d:/teste20.rdf");
f.model.read( new FileReader( file ) );
f.model.write( new FileWriter( file ), "RDF/XML-ABBREV" );
为每个用户提供了唯一的URI字符串(否则问题是非唯一主题URI,如Richard建议的那样),那么我们需要看到更多的代码才能找到根本原因。
答案 2 :(得分:-2)
你只是重写了四次文件。我建议你使用一些结构化的编程实践来避免将来出现这种错误。