SPARQL查询以检索类的个体

时间:2013-09-06 21:03:54

标签: java sparql jena protege

我正在尝试用Java中的rdf:type Jena检索类的个体(注意:该类没有子类)。

Onto Data(x个人):

  

A类:x1,x2,x3,x4 B类:x5,x6,x7,x8 C类:x9,x10,x11,   X12

     

对象属性:z1(带有B的CLASS A),z2(带有C的CLASS A),z3(CLASS   B与C)

rdf的结果:CLassA的类型:

  

在Protege中:x1,x2,x3,x4在Eclipse中通过jena:x1,x2,x3,x4,   x5,x6,x7,x8,x9 ....

Select ?x
where { ?x rdf:type :ClassA }

在本体编辑器中它完美运行。但是,在Java中,当我执行查询时,我也会得到不属于该类的个体,但它们通过属性与其中一个类个体连接。谁知道如何解决这个问题?本体论是正确的。

  • 我在java中使用eclipse作为编辑器
  • 我正在使用Protege来构建本体

的Eclipse /耶拿:

PropertyConfigurator.configure("D:\\apache-jena-2.10.1\\jena-log4j.properties");
OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_MICRO_RULE_INF);
FileManager.get().readModel( model, "file:.owl" );

String queryString =
    "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> " +        
    "PREFIX owl: <http://www.w3.org/2002/07/owl#> " +
    "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> " +
    "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> " +
    "PREFIX bio: <http://www.semanticweb.org/vassilis/ontologies/2013/5/Bio#> " +

    " SELECT ?x " +
    " WHERE { ?x rdf:type bio:Class } " ;

Query query = QueryFactory.create(queryString);
QueryExecution qe= QueryExecutionFactory.create(query, model);
com.hp.hpl.jena.query.ResultSet resultset = qe.execSelect();
ResultSetFormatter.out(System.out, resultset, query);

Protégé:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>       
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX bio: <http://www.semanticweb.org/vassilis/ontologies/2013/5/Bio#> 

SELECT ?x 
WHERE { ?x rdf:type bio:ClassA }

2 个答案:

答案 0 :(得分:1)

如果本体是正确的那么你能告诉我们你的代码吗?

您确定“:Class”是否正确?

如果默认命名空间是owl或其他词汇表,那么它可能会返回使用该词汇表的所有个体,或者可能是Jena中使用的推理规则的差异。这是一个假设。

答案 1 :(得分:0)

检查数据类型属性的域和范围 例如,如果您将z3的域设置为CLASS A,则参与此属性的每个人都被视为A类的成员,尽管您在该本体中将该个人指定为B类个体