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

数据(x个人):


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

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


rdf:CLassA类型的结果:


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


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


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


我正在使用Eclipse作为Java中的编辑器
我正在使用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 }

最佳答案

如果本体是正确的,那么您可以向我们展示您的代码吗?

你确定“:Class”是正确的吗?

如果默认名称空间是owl或其他词汇表,则有可能返回使用该词汇表的所有个人,或者Jena中使用的推理规则可能有所不同。这是一个假设。

关于java - SPARQL查询以检索类的个人,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18666574/

10-12 23:35