我正在使用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/

10-13 01:02