我正在使用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
答案 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。