0

好吧,对于这样一个幼稚的问题,我很抱歉,但到目前为止我还没有找到相关信息……我是pottery.javaJena schemagenpottery.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() );
}

简而言之,我的问题是如何在上面的代码中添加类限制。

4

3 回答 3

2

您可以通过检查 Resource是否具有具有 value的属性来检查Resource 是否resource具有特定的 RDF 类型。如果您的代码在上面,您可以添加形式的条件:typeRDF.typetype

if ( r.hasProperty( RDF.type, importantType ) ) {
  System.out.println("  " + r.getLocalName() + " " + 
                     r.getRequiredProperty(pottery.colors).getString() );
}
于 2013-05-24T12:39:07.183 回答
1

假设:

  • Pottery.java是您使用 schemagen 生成的 Java 类,并包含诸如 、 等公共Class_1常量Class_2

  • modelOntModel包含您要检查的 RDF 数据的

然后:

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

有关更多详细信息,请参阅 Jena Ontology API 文档

于 2013-05-24T12:44:48.100 回答
0

你大部分时间都在那里:

ResIterator iter = model.listResourcesWithProperty(RDF.type, Class_1);

将列出所有具有 type ( RDF.typeproperty) value的东西Class_1

试试耶拿教程。您可能会发现 jena 本体 api 对这类任务更方便,但基本 api 没问题。

于 2013-05-24T12:38:50.977 回答