java处理rdf文件_Java-使用Jena APi-从RDF文件获取数据

本文档介绍了如何使用Java和Apache Jena API从RDF文件中提取Person类的数据,包括firstName、lastName、dateOfBirth和gender属性。在处理过程中,根据gender属性的不同,将数据写入文本文件中,分别用shape2和shape表示女性和男性。代码示例中展示了如何遍历RDF文件中的实例,并检查gender属性以决定写入文件的格式。在实际运行时,代码只输出了一个男性和一个女性,而RDF文件中应有多个。问题可能在于listInstances()方法没有正确处理所有实例,或者gender值的比较不匹配。
摘要由CSDN通过智能技术生成

我的问题与数据类型属性hasFirstName,hasLastName,hasDateOfBirth,hasGender的类Person有关.

我正在使用Java和Jena API.

这是我的RDF文件中代表一个人的方式.

H

04/02/1980

DS

Bruno

如果性别是女性,我想在下面写下这一行:

[label= \"" +firstName+ " \"\n\n\"D.Naiss:"+dnai1+"\", "+shape2+"]

因此,例如,如果有3位女性,则文件必须包含3种格式的行.形状值(然后是输出线)将取决于性别,这就是为什么我不能对两种性别都使用同一条线.如果是女性则为Shape2,如果是男性则为shape.

对于每个性别为男性的人,我想在下面输出此行:

[label= \"" +firstName+ " \"\n\n\"D.Naiss:"+dnai1+"\", "+**shape**+"]

我的问题是,在相应行中,他仅输出一个女人和一个男人.但是,我的rdf文件中有不止一个男人和女人.

这是相关的代码.您能告诉我该如何修改以解决此问题?

非常感谢你.

public void accessProp() {

readFile(inputFile); // rdf

String fname;

String dd;

String gen;

ExtendedIterator instances = onto.person.listInstances();

Individual instance = null;

Individual firstInstance = null;

while (instances.hasNext()) {

instance = (Individual) instances.next();

gen = instance.getPropertyValue(onto.hasGender).toString();

fname = instance.getPropertyValue(onto.hasFirstName).toString();

dd = instance.getPropertyValue(onto.hasDateOfBirth).toString();

writeFile(fname, dd, genr);

}

}

// Write text file

public void writeFile(String fn, String dbir, String gn) {

String fileout = "D:/file1.txt";

String firstName = fn;

String dateB = dbir;

String gender = gn;

BufferedWriter out;

try {

out = new BufferedWriter(new FileWriter(fileout, true));

if (gender.equals("F")) {

out.write("[label= \"" + firstName + " \"\n\n\"D.Naiss:" + dnai1 + "\", " + shape + "]");

} else if (gender.equals("M")) {

out.write("[label= \"" + firstName + " \"\n\n\"D.Naiss:" + dnai1 + "\", " + shape2 + "]");

}

out.newLine();

// flushes and closes the stream

out.close();

} catch (IOException e) {

System.out.println("There was a problem:" + e);

}

}

解决方法:

不知道耶拿,我在您的代码中看不到任何仅选择男性条目的地方.

检查while(instances.hasNext()){循环以查看其循环经过的实例.

因为您为每个实例都写了一行,所以writeLine()方法同时写入男性和女性条目,这可能是因为

ExtendedIterator instances = onto.person.listInstances();

返回您在文件中看到的两个男性和女性条目.

另外,示例RDF条目的性别值为H,但是在代码中,您正在使用M和F进行检查.

标签:owl,jena,java,sparql,rdf

来源: https://codeday.me/bug/20191013/1907851.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值