我正在使用sparql和一个Java应用程序进行冒险,发现一些连接基础知识可以照常运行,但是我担心自己犯了一个错误,以后会变得更糟。
无论使用哪种库,每个连接建议都说要连接到"http://dbpedia.org/sparql/"
,但这对我不起作用。
我检查了使用在线编辑器运行查询时返回的URL,并注意到实时前缀,因此我将其添加为连接字符串,并且可以正常工作。也就是说,我的连接字符串看起来像"http://live.dbpedia.org/sparql"
它确实返回结果,但是,结果附加了XML模式,这使我想知道是否是由于添加的live.
引起的。
以下是我正在使用的简单连接代码,对吗?任何和所有帮助,非常感谢。
如果“实时”是正确的,是否有可能在Schema之外增加额外的值?
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
最佳答案
好了,显示出来的结果缺少一些括号和引号,但是我认为这是由于您复制粘贴了它造成的。通常,它看起来像这样:
"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。关于java - sparql使用live.dbpedia并在结果中获取XML模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54845980/