【发布时间】:2013-09-11 01:45:35
【问题描述】:
我正在尝试用 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 中通过 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);
门徒:
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 }
【问题讨论】:
-
请显示您正在查询的 RDF 数据、您正在运行的 SPARQL 查询以及您获得的实际结果。如果可能,您用于运行查询的代码也可能会有所帮助。如果没有这些数据,几乎不可能诊断出您的问题。
-
您使用 Protégé 进行了标记,因此当您说“在本体编辑器中它可以完美运行”时,我假设您指的是 Protégé 而不是 Eclipse,尽管“我使用 Eclipse 作为编辑器”。您是否在 Protégé 中运行相同的查询?或许你可以附上截图?
-
我没有收到错误,也没有在 Protege 或 Eclipse 中。但是我确实得到了不属于我在 eclipse 中查询的类的个人,而在 protege 中我得到了正确的查询结果。
-
感谢您的澄清。正如我在第一条评论中所问的那样,请显示您的数据和您正在使用的实际 SPARQL 查询(问题中的查询不可能是它,因为前缀
:和rdf:没有在其中定义),您从每个中获得的结果,可能还有您正在运行的 Java 代码。如果没有看到数据,我们作为用户就无法知道 Protégé 是否有问题,或者 Jena 是否有问题,或者是什么。我们需要数据。 -
您的更新出现在我发布最后一条评论时。感谢您的代码。 (虽然,它并不完全完整,
model来自哪里?)。不过,我们仍然需要本体。