嗯,抱歉这个天真的问题,但到目前为止我还没有找到任何相关信息......我使用Jena schemagen从pottery.java
生成pottery.rdf
。我的本体中的属性和类被翻译成类似的东西:
public static final DatatypeProperty colors = m_model.createDatatypeProperty( URL_0 );
public static final OntClass Class_1 = m_model.createClass( URL_1 );
public static final OntClass Class_2 = m_model.createClass( URL_2 );
pottery.java
中的。
说我想列出Class_1
所有实例的名称和颜色。我该怎么做?我现在所知道的是如何使用以下代码列出所有实例,无论它们属于哪个类:
ResIterator iter = model.listResourcesWithProperty(pottery.colors);
while (iter.hasNext()) {
Resource r = iter.nextResource();
System.out.println(" " + r.getLocalName() + " " +
r.getRequiredProperty(pottery.colors).getString() );
}
简而言之,我的问题是如何在上面的代码中添加类限制。
答案 0 :(得分:1)
您可以通过检查资源resource
是否具有值type
来检查资源RDF.type
是否具有特定的RDF类型type
。如果您的代码在上面,您可以添加以下形式的条件:
if ( r.hasProperty( RDF.type, importantType ) ) {
System.out.println(" " + r.getLocalName() + " " +
r.getRequiredProperty(pottery.colors).getString() );
}
答案 1 :(得分:0)
你大部分时间都在那里:
ResIterator iter = model.listResourcesWithProperty(RDF.type, Class_1);
将列出所有类型为RDF.type
属性)值Class_1
的内容。
试试jena tutorial。你可能会发现jena本体api对于这类任务来说更方便,但基本的api很好。
答案 2 :(得分:0)
假设:
Pottery.java
是您使用schemagen生成的Java类,包含公共常量,例如Class_1
,Class_2
等。
model
是包含您要检查的RDF数据的OntModel
然后:
// list the resources that are instance of Class_1 in model:
for (ExtendedIterator<Individual> i = model.listIndividuals(Pottery.Class_1);
i.hasNext(); ) {
Individual instance = i.next();
System.out.println( instance.toString() + " is an instance of Class_1" );
}
编辑:我看到你也想要实例的颜色:
for (ExtendedIterator<Individual> i = model.listIndividuals(Pottery.Class_1);
i.hasNext(); ) {
Individual instance = i.next();
RDFNode cs = intance.getPropertyValue( Potter.colors );
System.out.println( instance.toString() + " is an instance of Class_1" +
" with colors " + cs );
}
有关详细信息,请参阅耶拿Ontology API documentation。