发现SPARQL端点的版本

时间:2015-04-21 10:30:03

标签: service version sparql linked-data discoverability

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

[一种选择是尝试使用aggregate functions之类的1.1功能,看看它是否有效,但我想应该有更好的方法来实现这一点。

SPARQL 1.1服务描述规范says

  

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

进一步,

  

3.2.10 sd:supportedLanguage   将sd:Service的实例与其实现的SPARQL语言(例如,查询和更新)相关联。   subPropertyOf:sd:feature domain:sd:服务范围:sd:语言

     

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

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

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

在发现和监控SPARQL端点方面已经完成了一些工作,例如SPARQL Web-Querying Infrastructure: Ready for Action?Discoverability of SPARQL Endpoints in Linked Open Data,但我没有看到直接查找版本的方法。

1 个答案:

答案 0 :(得分:1)

您应该检查的第一件事是,当您解除引用端点时,您要求提供RDF格式的内容,而不是文本/ html等,Web浏览器会指定默认情况下,端点不会根据用户代理等提供某些输出。例如,如果您在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。)

&#13;
&#13;
/** 
 * 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);
  });
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
&#13;
&#13;
&#13;