Java 从整个本体中检索实例的同义词
输出Java 从整个本体中检索实例的同义词,java,owl,ontology,apache-jena,Java,Owl,Ontology,Apache Jena,输出 Individual ind = model.createIndividual("http://www.semanticweb.org/ontologies/Word#Human", isSynonymOf); System.out.println( "Synonyms of given instance are:" ); StmtIterator it =ind.listProperties(isSynonymOf); while( it.hasNext() )
Individual ind = model.createIndividual("http://www.semanticweb.org/ontologies/Word#Human", isSynonymOf);
System.out.println( "Synonyms of given instance are:" );
StmtIterator it =ind.listProperties(isSynonymOf);
while( it.hasNext() ) {
Statement stmt = ((StmtIterator) it).nextStatement();
System.out.println( " * "+stmt.getObject());
}
问题1:我的输出显示整个URI,但我需要如下所示的输出
Synonyms of given instance are:
http://www.semanticweb.org/ontologies/Word#Human
http://www.semanticweb.org//ontologies/Word#Mortal
http://www.semanticweb.org/ontologies/Word#Person
问题2:我有26个实例,每次我都要提到它的URI来显示它的同义词。我将如何显示整个本体模型中任何实例的同义词,而不是一次又一次地提到URI。我正在使用EclipseMars2.0和JenaAPI
之后的子字符串。注意,最佳实践是提供URI的可读表示,而不是在URI中对其进行编码。例如,rdfs:label
是执行此操作的常用属性
model.listIndividuals()
- 您使用的方法
与预期不同。第二个参数表示一个类,你给它一个属性。请为将来使用createIndividual
- 我不明白你为什么要将
转换为it
-这没有意义StmtIterator
- 使用
更方便,因为您只对值感兴趣listPropertiesValues
- 使用Java8使代码更加紧凑
model.listIndividuals().forEachRemaining(ind -> {
System.out.println("Synonyms of instance " + ind + " are:");
ind.listPropertyValues(isSynonymOf).forEachRemaining(val -> {
System.out.println(" * " + val);
});
});
extendede迭代器indIter=model.listIndividuals();
while(indIter.hasNext()){
单个ind=indIter.next();
System.out.println(“实例的同义词”+ind+”是:”;
节点运算符valueIter=ind.listPropertyValues(isSynonymOf);
while(valueIter.hasNext()){
RDFNode val=valueIter.next();
系统输出打印项次(“*”+val);
}
}
当我使用java 8时,上面的代码运行良好。但我有Java6的限制。Lamda表达式在Java6中不起作用。我必须使用Java6。如何为java 6生成上述代码???model.listIndividuals()
返回一个迭代器。像往常一样使用它ind.listPropertyValues(isSynonymOf)
还返回一个迭代器。谢谢。我没有正确地理解它。请在上面的代码中反映一下。您不应该知道如何在Java中使用迭代器吗?我的意思是这很基本<代码>扩展迭代器it=model.listIndividuals();虽然(it.hasNext()){…我不明白现在用迭代器替换foreachrestaining
的两种用法有多么困难。我告诉过你model.listIndividuals()
返回一个个体迭代器。对于每个这样的个体ind
你调用方法ind.listPropertyValues(Issynoymof)
它还返回一个迭代器,这次是节点的迭代器。
model.listIndividuals().forEachRemaining(ind -> {
System.out.println("Synonyms of instance " + ind + " are:");
ind.listPropertyValues(isSynonymOf).forEachRemaining(val -> {
System.out.println(" * " + val);
});
});
ExtendedIterator<Individual> indIter = model.listIndividuals();
while(indIter.hasNext()) {
Individual ind = indIter.next();
System.out.println("Synonyms of instance " + ind + " are:");
NodeIterator valueIter = ind.listPropertyValues(isSynonymOf);
while(valueIter.hasNext()) {
RDFNode val = valueIter.next();
System.out.println(" * " + val);
}
}