Java API Jena-获取数据属性的值

Java API Jena-获取数据属性的值,java,awt,rdf,jena,owl,Java,Awt,Rdf,Jena,Owl,我用java创建了一个界面,有4个标签、4个文本字段和一些按钮,如“添加”、“修改”、“下一步”等。用户将输入姓名、名字、出生日期等。单击“添加”按钮后,他输入的信息将添加到rdf文件中。我使用的是API Jena。“下一步”(法语“Suivant”)按钮不起作用。当我单击“下一步”时,文本字段上没有显示任何内容。我不明白为什么。你能解释一下怎么回事吗 完整代码: import java.util.*; 导入com.hp.hpl.jena.rdf.model.*; 导入com.hp.hpl.je

我用java创建了一个界面,有4个标签、4个文本字段和一些按钮,如“添加”、“修改”、“下一步”等。用户将输入姓名、名字、出生日期等。单击“添加”按钮后,他输入的信息将添加到rdf文件中。我使用的是API Jena。“下一步”(法语“Suivant”)按钮不起作用。当我单击“下一步”时,文本字段上没有显示任何内容。我不明白为什么。你能解释一下怎么回事吗

完整代码:
import java.util.*;
导入com.hp.hpl.jena.rdf.model.*;
导入com.hp.hpl.jena.ontology.*;
导入com.hp.hpl.jena.ontology.impl.*;
导入com.hp.hpl.jena.util.*;
导入java.io.*;
导入java.awt.*;
导入java.awt.event.*;
导入com.hp.hpl.jena.词汇表.RDF;
导入com.hp.hpl.jena.词汇表.XSD;
导入com.hp.hpl.jena.util.iterator.ExtendedIterator;
公共类FamilyModel扩展框架
{   
TextField[]tabTF=新的TextField[4];
按钮按钮,B修改器,B供应者,B接收器,B向导;
OntModel模型;
登上;
按钮过滤器按钮(字符串S、整数x、整数y)
{
按钮b=新按钮;
添加(b);
b、 立根(x,y,120,30);
返回b;
}
void creerLabel(字符串,整数x,整数y)
{
标签la=新标签(礼仪);
la.立根(x,y,100,25);
添加(la);
}
公共家庭模式()
{
setLayout(空);
挫折背景(颜色:粉红色);
立根(100200600450);
creerLabel(“Prenom:”,10,50);
筒子架标签(“名称:”,10100);
creerLabel(“诞生日期:”,10145);
creerLabel(“流派(H OUF):”,10190);
//文本字段

对于(int i=0;i好,下面是发生的情况。当用户点击
Suivant
按钮时,操作侦听器读取
Onto1.rdf
文件的内容,并尝试使用
rdf:type
资源的rdf值填充表单http://www.something.com/FAM#personne
。在该RDF文件中,有两个资源s包括
…#FAMRita
,属于
rdf:type
http://www.something.com/FAM#femme
。因为
#femme
是一个子类型(即
rdfs:subassof
#personne
,您有理由期望personne
OntClass
的列表实例将返回
FAMRita
实例

但是,这并没有发生,这就是为什么您没有填写表单字段的原因。原因如下:

public Onto() {
    model = ModelFactory.createOntologyModel( OntModelSpec.OWL_DL_MEM );
在Jena中,使用
xxx_MEM
配置文件创建的
OntModel
没有启用任何推理。这意味着该模型不会推断
#FAMRita
也有类型
#personne
,因此它不会由
列表实例
迭代器返回

简单的解决方法是:

public Onto() {
    model = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM_MICRO_RULE_INF );

这意味着您将得到推断,Rita将出现。

好的,下面是发生的情况。当用户点击
Suivant
按钮时,动作侦听器将读取
Onto1.rdf
文件的内容,并尝试使用
rdf:type
资源的rdf值填充表单http://www.something.com/FAM#personne
。在该RDF文件中,有两个资源,包括
…#FAMRita
:type
http://www.something.com/FAM#femme
。因为
#femme
是一个子类型(即
rdfs:subassof
#personne
,您有理由期望personne
OntClass
的列表实例将返回
FAMRita
实例

但是,这并没有发生,这就是为什么您没有填写表单字段的原因。原因如下:

public Onto() {
    model = ModelFactory.createOntologyModel( OntModelSpec.OWL_DL_MEM );
在Jena中,使用
xxx_MEM
配置文件创建的
OntModel
没有启用任何推理。这意味着该模型不会推断
#FAMRita
也有类型
#personne
,因此它不会由
列表实例
迭代器返回

简单的解决方法是:

public Onto() {
    model = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM_MICRO_RULE_INF );

这意味着你会得到推断,Rita会出现。

如果看不到整个情况,很难诊断-你能发布一份“D:/Onto1.rdf”中的内容吗?如果没有这一点,我们就无法判断ActionSuivant在数据方面可能有什么问题。如果看不到整个情况,很难诊断-你能发布一份“D:/Onto1.rdf”中的内容吗“?如果没有这些,我们就无法判断ActionSuivant在数据方面可能存在哪些问题。我将System.out.println()放在传递给tabTF[I].setText()的每个参数上,以查看正在打印的内容。rf文件中有两个实例,当按下“下一步”按钮时,它会在控制台中同时显示有关这两个实例的信息。单击一次,两个实例…不仅仅是我预期的一个。当我再次单击“下一步”时,它会再次返回两个实例的信息。我编辑了我的主题以添加代码更新d、 你能告诉我出了什么问题吗?谢谢,实际上,如果你没有这样做会更好。StackOverflow尝试收集特定问题的一组好答案。一旦你对该问题有足够好的答案,你应该将其标记为“已接受”,以便其他用户将来可以找到该答案。如果你有新问题,甚至如果它与以前的讨论有关,你应该向stackoverflow发布一个新的顶级问题。对不起,伊恩。我删除了我添加的内容,发布了一个新的顶级问题。谢谢!我看到你现在对另一个问题有了一个很好的答案。如果你觉得你收到的答案解决了你的问题,请“接受”这个问题通过单击首选答案旁边的灰色勾号(在左侧)。这有助于其他用户在遇到类似问题时找到一个好的解决方案。我将System.out.println()放在传递给tabTF[I].setText()的每个参数上,以查看正在打印的内容。rf文件中有两个实例,当按下“下一步”按钮时,它会在控制台中同时显示有关这两个实例的信息。单击一次,两个实例