从整个 ontology 中检索实例的同义词
Retrieval of synonyms of an instance from whole ontology
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());
}
输出
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
问题 1:我的输出显示了整个 URI,但我需要如下所示的输出
Synonyms of given instance are:
Human
Mortal
Person
问题2:我有26个实例,每次我都必须提到它的URI来显示它的同义词。我将如何显示整个 ontology model 中任何实例的同义词,而不是一次又一次地提及 URI。我正在使用 eclipse Mars 2.0 和 Jena API
可以使用REGEX或者简单的Java字符串操作来提取#
之后的子串。请注意,最佳做法是提供 URI 的人类可读表示,而不是在 URI 中对其进行编码。例如,rdfs:label
是常用的 属性。
它只是遍历 ontology 中由
返回的所有个体
model.listIndividuals()
一些评论:
- 您使用的方法
createIndividual
与预期不符。第二个参数表示一个 class 而你给它一个 属性。以后请用Javadoc。
- 我不明白你为什么要将
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);
});
});
Java 6兼容版本:
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);
}
}
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());
}
输出
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
问题 1:我的输出显示了整个 URI,但我需要如下所示的输出
Synonyms of given instance are:
Human
Mortal
Person
问题2:我有26个实例,每次我都必须提到它的URI来显示它的同义词。我将如何显示整个 ontology model 中任何实例的同义词,而不是一次又一次地提及 URI。我正在使用 eclipse Mars 2.0 和 Jena API
可以使用REGEX或者简单的Java字符串操作来提取
#
之后的子串。请注意,最佳做法是提供 URI 的人类可读表示,而不是在 URI 中对其进行编码。例如,rdfs:label
是常用的 属性。它只是遍历 ontology 中由
返回的所有个体model.listIndividuals()
一些评论:
- 您使用的方法
createIndividual
与预期不符。第二个参数表示一个 class 而你给它一个 属性。以后请用Javadoc。 - 我不明白你为什么要将
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);
});
});
Java 6兼容版本:
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);
}
}