相同的Sparql使用不同的程序会产生不同的结果 [英] Same Sparql with different result using different programs

查看:74
本文介绍了相同的Sparql使用不同的程序会产生不同的结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Java中使用TopBraid作为IDE和Jena.对于相同的SPARQL查询和相同的文件,我得到两个不同的结果集.本体可以在这里找到, https://dl.dropboxusercontent.com/u/108022472/本体论猫头鹰

I'm using TopBraid as IDE and Jena in Java. For the same SPARQL query and same file, I'm getting two different result sets. The ontology can be found here, https://dl.dropboxusercontent.com/u/108022472/ontology.owl

SPARQL是:

select ?individual ?type ?label where {
  ?individual rdf:type ?type .
  ?individual rdfs:label ?label
  filter (?type in (wo:Kingdom))
}

我的Java代码:

public class ExeSparql {
    static String prefix = "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 rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> " +
            "PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> " +
            "PREFIX : <http://dbpedia.org/resource/> " +
            "PREFIX dbpedia2: <http://dbpedia.org/property/> " +
            "PREFIX wo:<http://purl.org/ontology/wo/>" +
            "PREFIX dbpedia: <http://dbpedia.org/> ";

    public static ResultSet execute(String queryString){
        queryString = prefix + queryString;
        Model model = null;
        try {
            InputStream in = new FileInputStream(new File("/home/noor/TBCMEWorkspace/recreate/index.rdf"));
            // Create an empty in-memory model and populate it from the graph
            model = ModelFactory.createOntologyModel();
            model.read(in,null); // null base URI, since model URIs are absolute
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        Query query = QueryFactory.create(queryString);
        // Execute the query and obtain results
        QueryExecution qe = QueryExecutionFactory.create(query, model);
        ResultSet results = qe.execSelect();
        ResultSetFormatter.out(System.out, results, query);
        //qe = QueryExecutionFactory.create(query, model);
        //results = qe.execSelect();
        return results;
    }
}

Jena代码是否有问题?使用topbraid,结果很好,而使用Jena,结果是错误的.

Is there any problem with the Jena code? Using topbraid, the results is fine, while with Jena, the result is wrong.

结果应该是:

| wo:王国| 动物" | | | wo:王国| 动物"

| wo:Kingdom | "Animals" | | | wo:Kingdom | "animalia"

但是使用耶拿(Jena),它会返回一组类型不正确的结果

But with Jena, its returning a set of results with incorrect types

推荐答案

我已经尝试使用您提供的数据执行此查询(我必须添加前缀):

I've tried this query with the data that you provided (I had to add the prefixes):

prefix wo: <http://purl.org/ontology/wo/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

select ?individual ?type ?label where {
  ?individual rdf:type ?type .
  ?individual rdfs:label ?label
  filter (?type in (wo:Kingdom))
}

我使用Jena的命令行arq运行查询,结果如下:

I ran the query using Jena's command line arq with the following results:

$ arq --query query.sparql --data ontology.owl 
-------------------------------------------------------------------
| individual                            | type       | label      |
===================================================================
| <file:/nature/life/Animal#kingdom>    | wo:Kingdom | "Animals"  |
| <file:/nature/kingdom/Animal#kingdom> | wo:Kingdom | "animalia" |
-------------------------------------------------------------------

Jena(2.10.0)和ARQ(2.10.0)的版本如下:

The version of Jena (2.10.0) and ARQ (2.10.0) are as follows:

$ arq --version
Jena:       VERSION: 2.10.0
Jena:       BUILD_DATE: 2013-02-20T12:04:26+0000
ARQ:        VERSION: 2.10.0
ARQ:        BUILD_DATE: 2013-02-20T12:04:26+0000

这篇关于相同的Sparql使用不同的程序会产生不同的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆