sparql使用live.dbpedia并在结果中获取XML模式

时间:2019-02-23 20:37:51

标签: java sparql dbpedia

我正在使用sparql和一个Java应用程序进行冒险,我发现一些连接基础知识可以按原样启动并运行,但是担心我犯了一个错误,以后会变得更糟。

每个连接建议,无论用于连接"http://dbpedia.org/sparql/"的库是什么,但这对我都不起作用。

我检查了使用在线编辑器运行查询时返回的URL,并注意到实时前缀,因此我将其添加为连接字符串,并且可以正常工作。也就是说,我的连接字符串看起来像"http://live.dbpedia.org/sparql"

它确实返回了结果,但是,结果附加了XML模式,这使我怀疑是否是因为我添加了这个live.

下面是我正在使用的简单连接代码,对吗?任何帮助都非常感谢,谢谢。

如果“实时”是正确的,是否有可能在模式之外增加额外的值?

StringBuilder sb = new StringBuilder();
    sb.append("PREFIX dbr: <http://dbpedia.org/resource/> \n");
    sb.append("PREFIX dbp: <http://dbpedia.org/property/> \n");
    sb.append("PREFIX dbo: <http://dbpedia.org/ontology/> \n");
    sb.append("SELECT ?dob \n");
    sb.append("WHERE {dbr:Tony_Blair dbp:birthDate ?dob} \n");

    Query query = QueryFactory.create(sb.toString());
    QueryExecution qexec = QueryExecutionFactory.sparqlService("http://live.dbpedia.org/sparql", query);

    try {
        ResultSet results = qexec.execSelect();
        for ( ; results.hasNext() ; )
        {
            QuerySolution soln = results.nextSolution() ;
            System.out.println(soln.get("?dob"));
        }

结果是:

1953-05-06^^http://www.w3.org/2001/XMLSchema#date

1 个答案:

答案 0 :(得分:3)

结果如您所见,缺少一些方括号和引号,但我认为这是由于您将其复制粘贴而引起的。通常,它看起来像这样:

"1953-05-06"^^<http://www.w3.org/2001/XMLSchema#date>

但是实质上,您的查询和代码是正确的。这里的“附加的XML模式”是返回的文字字符串的数据类型

RDF文字包含词汇值(在您的情况下为“ 1953-05-06”)和数据类型(在您的情况下为http://www.w3.org/2001/XMLSchema#date) 。它还可以(可选)具有语言标记,例如"colour"@en-UK

如果您希望从结果中删除数据类型并仅检索词法值,则可以将STR()函数用作查询中SELECT子句的一部分:

SELECT (STR(?dob) as ?date_of_birth)

对于您正在苦苦挣扎的连接字符串:有两个单独的DBPedia端点。 “常规”是http://dbpedia.org/sparql(不带斜杠)-这查询一个静态数据集,该数据集每6个月左右与Wikipedia更改同步/更新一次。 “活动”端点http://live.dbpedia.org/sparql是一项工作,旨在为查询提供更新的数据集。有关更多详细信息,请参见https://wiki.dbpedia.org/online-access/DBpediaLive