2

给定一个 SPARQL 端点(可以是 SPARQL 1.0 或 1.1),例如http://pt.dbpedia.org/sparql,我如何找到它支持的 SPARQL 版本?

[一种选择是尝试 1.1 功能,例如聚合函数并查看它的工作原理,但我想应该有更好的方法来做到这一点]。

SPARQL 1.1 服务描述规范

通过 SPARQL 协议提供的 SPARQL 服务在使用 HTTP GET 操作取消引用时应在服务端点返回服务描述文档,而无需提供任何查询参数字符串。此服务描述必须在 RDF 序列化中可用,可以通过 RDFa [RDFA] 嵌入 (X)HTML,如果在其他 RDF 表示中可用,则应使用内容协商 [CONNEG]

并进一步,

3.2.10 sd:supportedLanguage 将 sd:Service 的实例与它实现的 SPARQL 语言(例如查询和更新)相关联。subPropertyOf: sd:feature domain: sd:Service range: sd:Language

3.3.3 sd:Language sd:Language 的一个实例代表一种 SPARQL 语言,包括提供特定功能或扩展的特定配置。本文档定义了 sd:Language 的三个实例:sd:SPARQL10Query、sd:SPARQL11Query 和 sd:SPARQL11Update。类型:rdfs:Class subClassOf: sd:Feature

但是当我取消引用大多数 SPARQL 端点时,它们只会向我发送一个 HTML SPARQL 查询编辑器。

更新:HTML 编辑器问题是因为我没有在端点上使用正确的内容协商。但现在的问题是,是否有一种很好的方法可以区分 SPARQL 1.0 端点和不提供服务描述的 SPARQL 1.1 端点?

在发现和监控 SPARQL 端点方面已经完成了一些工作,例如SPARQL Web 查询基础设施:准备好行动了吗?链接开放数据中 SPARQL 端点的可发现性,但我没有看到找到版本的直接方法。

4

1 回答 1

1

您应该检查的第一件事是,当您取消引用端点时,您请求的是 RDF 格式的内容,而不是 web 浏览器默认指定的 text/html 等内容,并且端点没有基于用户代理等为您提供某些输出。例如,如果您访问http://dbpedia.org/sparql上的 DBpedia 端点,您将获得一个 HTML 查询编辑器。但是,如果您请求该页面时将 Accept 标头设置为“application/rdf+xml”,您将获得服务描述。在不知道您遇到问题的端点的情况下,我们真的无法提供更多帮助。这应该工作,但某些端点不这样做,这不是我们可以调试的真正技术问题,特别是如果您不告诉我们您遇到问题的端点。这是使用 curl 的样子:

$ curl -H "Accept: application/rdf+xml" http://dbpedia.org/sparql 
<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF
        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
        xmlns:sd="http://www.w3.org/ns/sparql-service-description#" >
  <rdf:Description rdf:about="http://dbpedia.org/sparql">
    <rdf:type rdf:resource="http://www.w3.org/ns/sparql-service-description#Service" />
    <sd:endpoint rdf:resource="http://dbpedia.org/sparql" />
    <sd:feature rdf:resource="http://www.w3.org/ns/sparql-service-description#UnionDefaultGraph" />
    <sd:feature rdf:resource="http://www.w3.org/ns/sparql-service-description#DereferencesURIs" />
    <sd:resultFormat rdf:resource="http://www.w3.org/ns/formats/SPARQL_Results_JSON" />
    <sd:resultFormat rdf:resource="http://www.w3.org/ns/formats/SPARQL_Results_XML" />
    <sd:resultFormat rdf:resource="http://www.w3.org/ns/formats/Turtle" />
    <sd:resultFormat rdf:resource="http://www.w3.org/ns/formats/N-Triples" />
    <sd:resultFormat rdf:resource="http://www.w3.org/ns/formats/N3" />
    <sd:resultFormat rdf:resource="http://www.w3.org/ns/formats/RDF_XML" />
    <sd:resultFormat rdf:resource="http://www.w3.org/ns/formats/SPARQL_Results_CSV" />
    <sd:resultFormat rdf:resource="http://www.w3.org/ns/formats/RDFa" />
    <sd:supportedLanguage rdf:resource="http://www.w3.org/ns/sparql-service-description#SPARQL10Query" />
    <sd:url rdf:resource="http://dbpedia.org/sparql" />
  </rdf:Description>

这是一个使用 d3 的 XmlHttpRequest 功能的实时版本。(我知道你可以在没有库的情况下做到这一点,但我最近一直在使用很多 d3。)

/** 
 * Make a GET request to dbpedia.org/sparql
 * and show the response in a PRE element.
 */
d3.xhr("http://dbpedia.org/sparql")
  .get(function(error,data) {
    console.log(error);
    console.log(data);
    d3.select("body")
      .append("pre")
      .text(data.response);
  });
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

于 2015-04-21T12:02:40.890 回答