gpt4 book ai didi

Java - Jena API - 获取多个数据类型属性

转载 作者:行者123 更新时间:2023-12-01 15:11:55 25 4
gpt4 key购买 nike

我正在使用 Java 和 Jena API。我有一个 类 Marriage,它有 3 个对象属性,分别为 "hasHusband""Haswife" “结婚日期”。前两个与 类 Person 相关联,该类具有数据类型属性 hasFirstNamehasLastNamedateOfBirth....

通过下面的代码我可以访问丈夫的 hasFirstName 属性。

StmtIterator iter = onto.model.listStatements(null,onto.hasHusband,(RDFNode)null);  
while (iter.hasNext()) {
Statement stmt = iter.nextStatement();
Resource P = ((Resource) stmt.getObject());

StmtIterator iter2 = onto.model.listStatements(((Resource) P),onto.hasFirstName,(RDFNode)null);
while (iter2.hasNext()) {
Statement stmt2 = iter2.nextStatement();
firstnameHusband = stmt2.getObject().toString();
}}

我想修改此行

 StmtIterator iter2 = onto.model.listStatements(((Resource) P),onto.hasFirstName,(RDFNode)null);  

为了还访问 hasLastName 和 hasDateofBirth...

你能解释一下我该怎么做吗?

谢谢

编辑:@皮埃尔现在它只涉及 Person 类。如果是女性,我想在一个新文件(文本文件)中为每个女性输出下面的这一行:

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

对于每个人这个:

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

区别在于形状的值。我遇到的问题是他只输出了一名女性和一名男性。

一个人在我的 rdf 文件中是这样表示的:

  <rdf:Description rdf:about="http://www.fam.com/FAM#Bruno04/02/1980 ">
<j.0:FAMhasGender>H</j.0:FAMhasGender>
<j.0:FAMhasDateOfBirth>04/02/1980</j.0:FAMhasDateOfBirth>
<j.0:FAMhasLastName>DS </j.0:FAMhasLastName>
<j.0:FAMhasFirstName> Bruno</j.0:FAMhasFirstName>
</rdf:Description>

相关代码如下:

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

你能告诉我应该做什么来解决我的问题吗?

谢谢

最佳答案

如果我理解问题的意图,您需要一个迭代器来为您提供每个资源的名字、姓氏、出生日期等。迭代器将为每个资源一行。

这就是 SPARQL 可以为您做的事情。

概述:

PREFIX  : ...
SELECT *
{ ?z :hasHusband ?p .
?p :hasFirstName ?firstName ;
:hasLastName ?lastName ;
:hasDateOfBirth ?dob ;
.
}

并查询onto.model。

关于Java - Jena API - 获取多个数据类型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12226295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com