Обнаружение версии конечной точки SPARQL

Учитывая конечную точку SPARQL (которая может быть либо SPARQL 1.0, либо 1.1), скажем, например, http://pt.dbpedia.org/sparql, как узнать, какую версию SPARQL он поддерживает?

[Один из вариантов — попробовать функцию 1.1, такую ​​как функции агрегирования, и посмотреть это работает, но я думаю, должен быть лучший способ сделать это].

Спецификация описания службы SPARQL 1.1 говорит

Службы SPARQL, доступные через протокол SPARQL, должны возвращать документ с описанием службы в конечной точке службы при разыменовании с использованием операции HTTP GET без предоставления каких-либо строк параметров запроса. Это описание службы должно быть доступно в сериализации RDF, может быть встроено в (X)HTML посредством RDFa [RDFA] и должно использовать согласование содержимого [CONNEG], если оно доступно в других представлениях RDF.

и далее,

3.2.10 sd:supportedLanguage Связывает экземпляр sd:Service с языком SPARQL (например, Query and Update), который он реализует. 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: класс subClassOf: sd: функция

Но когда я разыменовываю большинство конечных точек SPARQL, они просто присылают мне редактор запросов HTML SPARQL.

ОБНОВЛЕНИЕ: проблема с редактором HTML была связана с тем, что я не использовал надлежащее согласование содержимого на конечной точке. Но теперь возникает вопрос: есть ли хороший способ отличить конечную точку SPARQL 1.0 от конечной точки SPARQL 1.1, которая не предоставляет описание службы?

Проделана некоторая работа по обнаружению и мониторингу конечных точек SPARQL, таких как Инфраструктура веб-запросов SPARQL: готова к действию?, Обнаружение конечных точек SPARQL в связанных открытых данных, но я не видел прямой -forward способ найти версию.


person Nandana    schedule 21.04.2015    source источник
comment
Но когда я разыменовываю большинство конечных точек SPARQL, они просто присылают мне редактор запросов HTML SPARQL. Какие конечные точки вы разыменовывали? Это работает, например, с конечной точкой SPARQL DBpedia и с Конечная точка Sparql для связанных данных боеприпасов   -  person Joshua Taylor    schedule 21.04.2015
comment
Спасибо. Да, я должен был использовать согласование контента. Конечная точка: pt.dbpedia.org/sparql . Он не поддерживает согласование содержимого на конечной точке SPARQL, поэтому имеет только HTML-представление для операций GET.   -  person Nandana    schedule 21.04.2015


Ответы (1)


Первое, что вы должны проверить, это то, что когда вы разыменовываете конечную точку, вы запрашиваете контент в формате RDF, а не в формате text/html и т. д., который веб-браузер указал бы по умолчанию, и что конечная точка не дает вам определенных выходных данных на основе пользовательского агента и т. д. Например, если вы посещаете конечную точку DBpedia по адресу http://dbpedia.org/sparql вы получаете редактор 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>

Вот живая версия, которая использует функциональность XmlHttpRequest d3. (Я знаю, что вы можете сделать это без библиотек, но в последнее время я часто использую 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>

person Joshua Taylor    schedule 21.04.2015
comment
Спасибо! Да, это решает мой комментарий об отправке запроса на конечную точку SPARQL без согласования содержимого. Кроме того, если конечная точка SPARQL отправляет мне описание службы, даже если у нее нет информации sd:Language, я могу сделать вывод, что она может поддерживать SPARQL 1.1, поскольку описания служб были введены в версии 1.1. Но если нет описания службы, есть ли способ узнать, является ли конкретная конечная точка точкой SPARQL 1.0? Меня интересует конечная точка pt.dbpedia.org/sparql. - person Nandana; 21.04.2015
comment
@Nandana Да, эта конечная точка, похоже, не возвращает подходящее описание RDF. Я не уверен, что доступно для SPARQL 1.0. Я думаю, что протокол SPARQL для RDF (для SPARQL 1.0) мог бы быть самое близкое, что вы получаете. - person Joshua Taylor; 21.04.2015