Этот документ является неофициальным переводом исходной английской версии. Может содержать неточности и ошибки.
© PhD Щербак Сергей (ontolog[@]gmail.com), 2009. Комментарии к переводу оставляйте здесь! или на форуме || На главную

W3C

Протокол SPARQL для RDF

Рекомендация W3C, 15 января 2008

Текущая версия:
http://www.w3.org/TR/2008/REC-rdf-sparql-protocol-20080115/
Последняя опубликованная версия:
http://www.w3.org/TR/rdf-sparql-protocol/
Предыдущая версия:
http://www.w3.org/TR/2007/PR-rdf-sparql-protocol-20071112/
Редакторы:
Кендалл Грант Кларк, <kendall@monkeyfist.com >, Clark & Parsia LLC
Ли Фрейгенбаум, <lee@thefigtrees.net >, приглашенный эксперт
Элиас Торрес, <eliast@us.ibm.com >, IBM Corporation

Обращайтесь к списку опечаток где могут быть приведены нормативные исправления к текущему документу.

Также смотрите переводы.


Резюме

SPARQL (SPARQL протокол и язык RDF-запросов) — это язык запросов и протокол для RDF. Текущий документ регламентирует положения касательно SPARQL как протокола. SPARQL использует WSDL 2.0 для описания способов передачи SPARQL-запросов к сервису обработки SPARQL-запросов, а также для возврата результатов запроса той сущности, которая выполняла запрос. Данный протокол создан рабочей группой W3C, которая занимается доступом к RDF-данным (Data Access Working Group,DAWG). В соответсвии с положениями, изложенными в activity statement, протокол разработан в рамках Semantic Web Activity.

Статус текущего документа

Настоящий раздел описывает статус текущего документа на момент его публикации. Документ может быть заменен другими. Перечень текущих публикаций W3C и последних изменений этого технического отчета можно найти посредством указателя технических отчетов W3C на странице http://www.w3.org/TR/.

Этот документ является рекомендацией W3C.

Документ пересмотрен членами W3C, проверен разработчиками программного обеспечения и другими заинтересованными сторонами и группами W3C, одобрен директором как рекомендация W3C. Документ является неизменным и может быть использован в качестве ссылки или цитаты из другого документа. Создавая рекомендацию, W3C стремится привлечь внимание к спецификации и содействовать ее широкому распространению, что расширяет функциональность и интероперабельность Web.

Комментарии касательно данного документа могут быть отправлены по адресу public-rdf-dawg-comments@w3.org, список рассылки и архив сообщений. Вопросы и комментарии по SPARQL, не имеющие отношения к данной спецификации, в том числе расширения и дополнительные функции, могут обсуждаться в рассылке public-sparql-dev@w3.org, (архив сообщений).

Настоящий документ создан рабочей группой доступа к RDF-данным , деятельность которой осуществляется в рамках W3C Semantic Web Activity. Первая публикация документа в виде рабочего проекта датируется 14 января 2005 года, после чего рабочая группа получила ряд комментариев и замечаний. С ноября 2007 года (предлагаемая рекомендация) выполнена одна редакторская правка.

Отчет рабочей группы по применению протокола показал, что задачи интероперабельности, поставленные в апреле 2006 (возможная рекомендация) , были успешно решены.

Рабочая группа по доступу к данным (DAWG) отложила реализацию 12 замечаний, в том числе аггрегированные функции, и операции обновления.

При создании данного документа рабочая группа руководствовалась патентной политикой W3C от 5 февраля 2004 года.. W3C поддерживает публичный список открытых патентов, сформированных совместно с членами групп. На этой странице также представлены инструкции по раскрытию патента. Лица, обладающие актуальной информацией о патенте, который удовлетворяет основным требованиям, должны раскрыть эту информацию согласно пункту 6 патентной политики W3C.


Содержание

1. Введение

Настоящий документ (под названием "Протокол SPARQL для RDF") описывает протокол SPARQL — средства передачи SPARQL-запросов от клиентов к механизму обработки. Протокол SPARQL разрабатывался согласованно с документом SPARQL Query Language for RDF [SPARQL]. Протокол SPARQL рассматривается с точки зрения двух позиций: первая — как абстрактный интерфейс, независимый от какой-либо конкретной реализации, применения или привязки к другим протоколам; вторая — как привязка этого интерфейса к HTTP и SOAP. Этот документ (как собственно и связанные с ним документы W3C по WSDL и XML-схеме) предназначен главным образом для разработчиков программного обеспечения, заинтересованных в применении сервисов SPARQL-запросов, и клиентов.

Когда в тексте документа встречаются выделенные слова должен, не должен, следует, не следует, может и рекомендуется, их необходимо толковать в соответствии с RFC 2119 [RFC2119].

Если в данном документе встречаются фрагменты из других документов, в том числе экземпляры WSDL и XML-схемы, тогда используются нижеперечисленные пространства имен префиксов и пространства имен URI:

Префикс Пространство имен URI
st http://www.w3.org/2005/09/sparql-protocol-types/#
xs http://www.w3.org/2001/XMLSchema
vbr http://www.w3.org/2005/sparql-results#
rdf http://www.w3.org/1999/02/22-rdf-syntax-ns#
whttp http://www.w3.org/2006/01/wsdl/http
wsoap http://www.w3.org/2006/01/wsdl/soap
soap http://www.w3.org/2003/05/soap-envelope
wsdlx http://www.w3.org/2005/08/wsdl-extensions
tns http://www.w3.org/2005/08/sparql-protocol-query/#

2. Протокол SPARQL

Нижеприведенный набор документов обобщает спецификацию протокола SPARQL:

Протокол SPARQL для RDF
Текущий нормативный документ описывает протокол SPARQL на понятном человеку языке.
Описание протокола SPARQL на WSDL 2.0
Нормативное описание протокола SPARQL Protocol с помощью WSDL 2.0.
Типы протокола SPARQL
Нормативный документ схемы XML, в котором определены типы, используемые в протоколе SPARQL.

Прококол SPARQL представлен одним интерфейсом, SparqlQuery, который в свою очередь содержит одну операцию, query. Протокол SPARQL абстрактно описан на WSDL 2.0 [WSDL2] в терминах Web-сервиса, который реализует интерфейс, типы, ошибки и операции, а также привязки HTTP и SOAP. Обратите внимание, что, несмотря на использование WSDL 2.0 для описания протокола SPARQL, вовсе не обязательно применять какую-то определенную стратегию его реализации, как и не обязательно использовать какую-либо библиотеку WSDL или конкретную среду программирования.

2.1 Интерфейс SparqlQuery

2.1.1 Операция query

SparqlQuery является единственным интерфейсом протокола. В состав интерфейса входит одна операция, query, используемая для передачи строки SPARQL-запроса, а также (необязательно) для описания набора данных RDF.

Операция query описана в виде шаблона обмена входящими-исходящими сообщениями [WSDL-дополнения]. Далее приведены ограничения шаблона обмена входящими-исходящими сообщениями:

Этот шаблон состоит из двух сообщений:

  1. Сообщение:

    • определено компонентом Interface Message Reference, у которого значение {message label} соответствует "In", а {direction} — "in"

    • получено от некоторой вершины N

  2. Сообщение:

    • определено компонентом Interface Message Reference, у которого значение {message label} соответствует "Out", а {direction} — "out"

    • отправлено некоторой вершине N

Данный шаблон испольует правило 2.2.1 Замена сообщением об ошибке.

Этот интерфейс и его операция описаны в следующем фрагменте кода WSDL 2.0 (из protocol-query.wsdl, который содержит релевантные объявления пространств имен):

<!-- Abstract SparqlQuery Interface -->
<interface name="SparqlQuery" styleDefault="http://www.w3.org/2006/01/wsdl/style/iri">

   <!-- the Interface Faults -->
   <fault name="MalformedQuery" element="st:malformed-query"/>
   <fault name="QueryRequestRefused" element="st:query-request-refused"/>

   <!-- the Interface Operation -->
   <operation name="query" pattern="http://www.w3.org/2006/01/wsdl/in-out">

      <documentation>The operation is used to convey queries and their results from clients to services and back
      again.</documentation>

      <input messageLabel="In" element="st:query-request"/>
      <output messageLabel="Out" element="st:query-result"/>

      <!-- the interface faults are out faults -->
      <outfault ref="tns:MalformedQuery" messageLabel="Out"/>
      <outfault ref="tns:QueryRequestRefused" messageLabel="Out"/>
   </operation>

</interface>

Фрагмент 1.0 на WSDL 2.0

2.1.2 Входящее сообщение query

Фактически, содержимое входящего сообщения SparqlQuery операции query представляет собой экземпляр комплексного типа XML Schema, называемый во фрагменте 1.0 st:query-request. Этот экземпляр представлен двуми составляющими: строкой SPARQL запроса и поисаниями нулевого или одного набора данных RDF. Строка SPARQL-запроса определяется типом query и описана в [SPARQL] как последовательность символов языка, заданная граматикой [SPARQL], начиная с продукции Query". Описание набора данных RDF состоит из нулевого или одного RDF-графа по умолчанию, который в свою очередь представлен объединением RDF-графов, заданных с помощью нулевого или более многочисленного количества типов default-graph-uri и нулевого или большего количества поименованных RDF-графов, определенных нулевым или большим количеством типов named-graph-uri. Это касается ключевых слов FROM и FROM NAMED в [SPARQL], соответственно.

Эти типы определены в следующем фрагменте XML-схемы, из protocol-types.xsd:

<xs:element name="query-request">
  <xs:complexType>
    <xs:sequence>
      <xs:element minOccurs="1" maxOccurs="1" name="query" type="xs:string">
       <xs:annotation>
	      <xs:documentation>query is an xs:string constrained by the language definition,
         http://www.w3.org/TR/rdf-sparql-query/#grammar, as "a sequence of characters in 
         the language defined by the [SPARQL] grammar, starting with the Query production".</xs:documentation>
       </xs:annotation>
      </xs:element>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="default-graph-uri" type="xs:anyURI"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="named-graph-uri" type="xs:anyURI"/>
    </xs:sequence>
  </xs:complexType>

</xs:element>

Фрагмент 1.1, XML-схема

Определение набора данных RDF

Набор данных RDF может быть определен либо с помощью запроса [SPARQL] и ключевых слов FROM и FROM NAMED; либо посредством протокола (как описано в данном документе); либо и в строке запроса, и в протоколе.

Разрешение вопросов по неопределенным наборам данных RDF

В случае, когда набор данных RDF, определенный и в запросе, и в протоколе, не является идентичным, то для операции SparqlQuery query должен использоваться набор данных, определенный в протоколе.

Отклонение запросов к наборам данных RDF

Согласованный сервис протокола SPARQL может представлять набор данных RDF по умолчанию, над которым выполняются запросы в случае, если набор данных RDF не определен ни в протоколе , ни в запросе. Согласованный сервис протокола SPARQL может отклонить обработку любого запроса, который не опеределен набором данных RDF. И наконец, согласованный сервис протокола SPARQL может отклонить обработку любого запроса даже определенного набором данных RDF. См. раздел 2.1.4 Сообщения об ошибках query, QueryRequestRefused.

Установка базового IRI

Наличие ключевого слова BASE в строке запроса устанавливает базовый IRI, используемый для разрешения относительных IRI согласно Uniform Resource Identifier (URI): общий синтаксис [RFC3986] раздел 5.1.1, "Базовый URI, встроенный в содержимое (контент)". Раздел 5.1.2, ("Базовый URI от инкапсулированной сущности") определяет, что базовый IRI может поступать от инкапсулированного документа, как например, SOAP envelope c директивой xml:base. Протокол SPARQL не перенаправляет запросы URI, потому что раздел 5.1.3 не применяется. И наконец, согласно разделу 5.1.4, сервисы протокола SPARQL должны определить собственный базовый URI, с помощью которого сервис может быть вызван.

2.1.3 Исходящее сообщение query

Фактически, содержимое исходящего сообщения SparqlQuery операции query представляет собой экземпляр комлексного типа XML-схемы, называемый в фрагменте 1.2, query-result :

  1. Документ SPARQL-результатов [SRD] (для запроса SPARQL форм RDF-запросов (SPARQL Query for RDF query forms) SELECT и ASK); либо,
  2. RDF-графа [RDF-концепции], сериализованного, к примеру,в the RDF/XML- синтаксисе [RDF-Syntax], либо эквивалентной сериализации RDF-графа, для запроса SPARQL форм RDF-запросов DESCRIBE и CONSTRUCT).

Тип query-result определен в следующем фрагменте W3C XML-схемы, из protocol-types.xsd:

<xs:element name="query-result">
      <xs:annotation>
          <xs:documentation>The type for serializing query results,
          either as XML or RDF/XML.</xs:documentation>
      </xs:annotation>
      <xs:complexType>
          <xs:choice>
              <xs:element maxOccurs="1" ref="vbr:sparql"/>
              <xs:element maxOccurs="1" ref="rdf:RDF"/>
          </xs:choice>
      </xs:complexType>

</xs:element>

Фрагмент 1.2 XML-схемы

2.1.4 Сообщения об ошибках query

В документе [WSDL2-дополнения] установлено несколько правил обработки ошибок, которые определяют взаимодействие сообщений и ошибок в операциях. Операция query использует правило Замена сообщением от ошибке

Любое сообщение послед первого в шаблоне может быть заменено сообщением об ошибке, которое должно иметь идентичный адрес назначения. Сообщение об ошибке должно быть доставлено в целевую вершину, что и сообщение, которое было заменено, если не указано иного в расширении или в расширении связывания. Если путь к вершине отсутствует, сообщение об ошибке должно быть отменено.

Таким образом, операция query из интерфейса SparqlQuery может возвращать вместо Исходящего сообщения, либо сообщение MalformedQuery , либо сообщение QueryRequestRefused. Оба эти сообщения определены в следующем фрагменте XML-схемы из protocol-types.xsd:

<xs:element type="xs:string" name="fault-details">
    <xs:annotation>
      <xs:documentation> This element contains human-readable information about the fault
        returned by the SPARQL query processing service.</xs:documentation>
    </xs:annotation>
  </xs:element>
    <xs:element name="malformed-query">
      <xs:complexType>
          <xs:all><xs:element minOccurs="0" maxOccurs="1" ref="st:fault-details"/></xs:all>
      </xs:complexType>
  </xs:element>
  <xs:element name="query-request-refused">
      <xs:complexType>
          <xs:all><xs:element minOccurs="0" maxOccurs="1" ref="st:fault-details"/></xs:all>
      </xs:complexType>

</xs:element>

Фрагмент 1.3 XML-схемы

MalformedQuery

Когда значение типа query является неправильной последовательностью символов языка, определенного SPARQL-грамматикой, должнобыть возвращено сообщение об ошибке: MalformedQuery или QueryRequestRefused. Согласно правилу замены сообщением ошибки, если возвращается сообщение об ошибке WSDL,в том числе MalformedQuery, исходящее сообщение не должно быть возвращено.

При возврате сообщения об ошибке MalformedQuery, сервис обработки запросов должны включать пояснения,отладку, а также другую дополнительную информацию для удобства пользователей, что осуществляется благодаря типу fault-details, описанному в фрагменте1.3.

QueryRequestRefused

Это сообщение об ошибке WSDL должно быть возвращено, когда клиент выполняет запрос, который сервис отказывается обрабатывать. Сообщение об ошибке QueryRequestRefused вовсе не обначает ни то, что сервер будет или нет обрабатывать последующий идентичный запрос или запросы, ни то, что накладываются какие-либо ограничения на возврат согласованным сервисом SPARQL других кодов статуса HTTP или HTTP-заголовков в соответствии с семантикой [HTTP].

При возврате сообщения об ошибке QueryRequestRefused сервисы обработки запросов должны включать пояснения, отладку, а также другую информацию для удобства пользователей, что осуществляется благодаря типу fault-details, описанному в фрагменте 1.3.

2.2 HTTP-привязки

Ранее описанная операция query интерфейса SparqlQuery является абстрактной. Чтобы операция стала выполняемой6 необходимы привязки к протоколам. Последующие два раздела данного документа описывают HTTP и SOAP-привязки.Согласованный сервис протокола SPARQL должен поддерживать интерфейс SparqlQuery. В случае, если сервис протокола SPARQL поддерживает HTTP-привязки, он должен поддерживать привязки так, как описано в protocol-query.wsdl. Сервис протокола SPARQL может поддерживать другие интерфейсы. См. раздел 2.3 SOAP-привязки для более подробной информации.

[WSDL2-дополнения] определяют привязки операций абстрактного интерфейса к HTTP. HTTP-привязки для операции query (из protocol-query.wsdl) выглядят следующим образом:

<!-- the HTTP GET binding for query operation -->
 <binding name="queryHttpGet" interface="tns:SparqlQuery" 
	    type="http://www.w3.org/2006/01/wsdl/http"
	    whttp:version="1.1">

   <fault ref="tns:MalformedQuery" whttp:code="400"/>
   <fault ref="tns:QueryRequestRefused" whttp:code="500"/>

   <operation ref="tns:query"
        wsdlx:safe="true"
		whttp:method="GET"
		whttp:faultSerialization="*/*"
		whttp:inputSerialization="application/x-www-form-urlencoded"
		whttp:outputSerialization="application/sparql-results+xml, application/rdf+xml, */*" />
 </binding>

 <!-- the HTTP POST binding for query operation -->

 <binding name="queryHttpPost" interface="tns:SparqlQuery"
		 type="http://www.w3.org/2006/01/wsdl/http"
		 whttp:version="1.1">
		
	  <fault ref="tns:MalformedQuery" whttp:code="400"/>
	  <fault ref="tns:QueryRequestRefused" whttp:code="500"/>
		
   <operation ref="tns:query" 
        wsdlx:safe="true"
 		whttp:method="POST" 
		whttp:faultSerialization="*/*"
		whttp:inputSerialization="application/x-www-form-urlencoded, application/xml"
		whttp:outputSerialization="application/sparql-results+xml, application/rdf+xml, */*" />	
 </binding>

Существуют две разновидности HTTP-привязок, queryHttpGet и queryHttpPost, обе описаны как привязки интерфейса SparqlQuery . В каждой из привязок ошибки MalformedQuery и QueryRequestRefused описаны в интерфейсе SparqlQuery , связаны с кодами статуса HTTP 400 Bad Request и 500 Internal Server Error, соответственно [HTTP].

Следует использовать привязку queryHttpGet кроме случаев, когда URL- кодированный запрос превышает практические лимиты (в таком случае следует использовать привязку queryHttpPost).

Информативная заметка о сериализации ограничений. Результат сериализации привязок queryHttpGet и queryHttpPost намеренно ограничивается для отражения разнообразия типа сериализации RDF-графов. Сериализация ошибок queryHttpGet и queryHttpPost также специально ограничена.Согласованный сервис протокола SPARQL может предоставлять альтернативные WSDL-интерфейсы и привязки с различными ограничениями.

queryHttpGet

Эта привязка операции query использует [HTTP] GET со следующими ограничениями сериализации типа: значение whttp:faultSerialization равно */*; второе, значение whttp:inputSerialization равно application/x-www-form-urlencoded с кодировкой UTF-8 encoding; и,третье, значение whttp:outputSerialization равно application/sparql-results+xml с кодировкой UTF-8, application/rdf+xml с кодировкой UTF-8, и */*.

queryHttpPost

Эта привязка операции query использует [HTTP] POST со следующими ограничениями : значение whttp:faultSerialization равно */*; второе, значение whttp:inputSerialization равно application/x-www-form-urlencoded с кодировкой UTF-8 и application/xml с кодировкой UTF-8; и, третье, whttp:outputSerialization равно application/sparql-results+xml с кодировкой UTF-8, application/rdf+xml с кодировкой UTF-8, и */*.

2.2.1 Примеры HTTP

Следующие абстрактные примеры HTTP trace иллюстрируют вызов операции query, который осуществляется по нескольким разным сценариям. Эти абстрактные примеры с TRACE отличаются от законченных HTTP trace по трем параметрам: (1) В каждом примере строка "EncodedQuery" представляет эквивалент URL-кодированной строки SPARQL-запроса, заданного в первом блоке каждого примера; (2) отображается только часть отклика с результатами запроса; (3) значения URI default-graph-uri и named-graph-uri так же не являются URL-кодированными.

2.2.1.1 SELECT с сервисной поддержкой набора данных RDF

Этот SPARQL-запрос

PREFIX dc: <http://purl.org/dc/elements/1.1/> 
SELECT ?book ?who 
WHERE { ?book dc:creator ?who }

передается к сервису SPARQL-запросов, http://www.example/sparql/, как показано ниже в трассировке HTTP (trace):

GET /sparql/?query=EncodedQuery HTTP/1.1
Host: www.example
User-agent: my-sparql-client/0.1

Данный запрос осуществляется над набором данных RDF с сервисной поддержкой, выполняется сервисом SPARQL-запросов, возвращая следующий результат:

HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:12 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml

<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">

 <head>
   <variable name="book"/>
   <variable name="who"/>
 </head>
 <results distinct="false" ordered="false">
   <result>
     <binding name="book"><uri>http://www.example/book/book5</uri></binding>
     <binding name="who"><bnode>r29392923r2922</bnode></binding>
   </result>
...

   <result>
     <binding name="book"><uri>http://www.example/book/book6</uri></binding>
     <binding name="who"><bnode>r8484882r49593</bnode></binding>
   </result>
 </results>
</sparql> 
2.2.1.2 SELECT с простым набором данных RDF

Этот SPARQL-запрос

PREFIX dc: <http://purl.org/dc/elements/1.1/> 
SELECT ?book ?who 
WHERE { ?book dc:creator ?who }

передается к сервису SPARQL-запросов, http://www.other.example/sparql/, как показано ниже в трассировке HTTP:

GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.other.example/books HTTP/1.1
Host: www.other.example
User-agent: my-sparql-client/0.1

Данный запрос — осуществляется над набором данных RDF, определенных значением http://www.other.example/books параметра default-graph-uri. Запрос — выполняется сервисом SPARQL-запросов, возвращая следующий результат:

HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:12 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml

<?xml version="1.0"?>

<sparql xmlns="http://www.w3.org/2005/sparql-results#">
 <head>
   <variable name="book"/>
   <variable name="who"/>
 </head>
...
 <results distinct="false" ordered="false">
   <result>
     <binding name="book"><uri>http://www.example/book/book2</uri></binding>
     <binding name="who"><bnode>r1115396427r1133</bnode></binding>
   </result>
   <result>
     <binding name="book"><uri>http://www.example/book/book3</uri></binding>
     <binding name="who"><bnode>r1115396427r1133</bnode></binding>
   </result>
   <result>
     <binding name="book"><uri>http://www.example/book/book1</uri></binding>
     <binding name="who"><literal>J.K. Rowling</literal></binding>
   </result>
 </results>

</sparql> 
2.2.1.3 CONSTRUCT с простым набором данных RDF и поддержкой технологии HTTP по обсуждению контента (HTTP content negotiation)

Этот SPARQL-запрос

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX myfoaf: <http://www.example/jose/foaf.rdf#>

CONSTRUCT { myfoaf:jose foaf:depiction <http://www.example/jose/jose.jpg>.
            myfoaf:jose foaf:schoolHomepage <http://www.edu.example/>.
            ?s ?p ?o.}
WHERE { ?s ?p ?o. myfoaf:jose foaf:nick "Jo".
       FILTER ( ! (?s = myfoaf:kendall && ?p = foaf:knows && ?o = myfoaf:edd ) 
              && ! ( ?s = myfoaf:julia && ?p = foaf:mbox && ?o = <mailto:julia@mail.example> )
	      && ! ( ?s = myfoaf:julia && ?p = rdf:type && ?o = foaf:Person))
}

передается к сервису SPARQL-запросов, http://www.other.example/sparql/, как показано ниже в трассировке HTTP:

GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/jose-foaf.rdf HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1
Accept: text/turtle, application/rdf+xml

Отклик будет представлен следующим образом:

HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:11 GMT
Server: Apache/1.3.29 (Unix)
Connection: close
Content-Type: text/turtle

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
@prefix myfoaf: <http://www.example/jose/foaf.rdf#>.

myfoaf:jose foaf:name "Jose Jimeñez";
	    foaf:depiction <http://www.example/jose/jose.jpg>;
            foaf:nick "Jo";
...
	    foaf:schoolHomepage <http://www.edu.example/>;
            foaf:workplaceHomepage <http://www.corp.example/>;
            foaf:homepage <http://www.example/jose/>;
            foaf:knows myfoaf:juan;
	    rdf:type foaf:Person.

myfoaf:juan foaf:mbox <mailto:juan@mail.example>;
	   rdf:type foaf:Person.

Внимание: на момент публикации была начата (однако не завершена) регистрация медиа-типа text/turtle. Следите за появлением окончательного зарегистрированного медиа-типа для языка Turtle на Web-странице http://www.w3.org/TeamSubmission/turtle.

2.2.1.4 ASK с простым набором данных RDF

Этот SPARQL-запрос

PREFIX dc: <http://purl.org/dc/elements/1.1/> 
ASK WHERE { ?book dc:creator "J.K. Rowling"}

передается к сервису SPARQL-запросов, http://www.other.example/sparql/, как показано ниже в трассировке HTTP:

GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/books HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1

Отклик показан далее:

HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml

<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
 <head></head>
 <boolean>true</boolean>
</sparql>
2.2.1.5 DESCRIBE с простым набором данных RDF

Этот SPARQL-запрос

PREFIX books: <http://www.example/book/>
DESCRIBE books:book6

передается к сервису SPARQL-запросов, http://www.other.example/sparql/, как показано ниже в трассировке HTTP:

GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/books HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1

Отклик показан далее:

HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type:  application/rdf+xml

<?xml version="1.0"?>
<rdf:RDF ...
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:books="http://www.example/book/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
  <rdf:Description rdf:about="http://www.example/book/book6">
    <dc:title>Example Book #6 </dc:title>
  </rdf:Description>

</rdf:RDF>
2.2.1.6 SELECT со сложным набором данных RDF

Этот SPARQL-запрос

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>

SELECT ?who ?g ?mbox
WHERE {  ?g dc:publisher ?who .
   GRAPH ?g { ?x foaf:mbox ?mbox }
}

передается к сервису SPARQL-запросов, http://www.other.example/sparql/, как показано ниже в трассировке HTTP: (с разрывами строк для большей наглядности):

GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/publishers
&default-graph-uri=http://www.example/morepublishers&named-graph-uri=http://your.example/foaf-alice
&named-graph-uri=http://www.example/foaf-bob&named-graph-uri=http://www.example/foaf-susan
&named-graph-uri=http://this.example/john/foaf
Host: www.example
User-agent: sparql-client/0.1

Отклик представлен далее:

HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type:  application/sparql-results+xml

<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
  <head>
    <variable name="who"/>
    <variable name="g"/>
    <variable name="mbox"/>
  </head>
...
  <results ordered="false" distinct="false">
    <result>
      <binding name="who">
        <literal>Alice</literal>
      </binding>
      <binding name="g">
        <uri>http://your.example/foaf-alice</uri>
      </binding>
      <binding name="mbox">
        <uri>mailto:alice@example.org</uri>
      </binding>
    </result>
    <result>
      <binding name="who">
        <literal>Bob</literal>
      </binding>
      <binding name="g">
        <uri>http://www.example/foaf-bob</uri>
      </binding>
      <binding name="mbox">
        <uri>mailto:bob@work.example</uri>
      </binding>
    </result>
    <result>
      <binding name="who">
        <literal>Susan</literal>
      </binding>
      <binding name="g">
        <uri>http://www.example/foaf-susan</uri>
      </binding>
      <binding name="mbox">
        <uri>mailto:susan@work.example</uri>
      </binding>
    </result>
    <result>
      <binding name="who">
        <literal>John</literal>
      </binding>
      <binding name="g">
        <uri>http://this.example/john/foaf</uri>
      </binding>
      <binding name="mbox">
        <uri>mailto:john@home.example</uri>
      </binding>
    </result>
  </results>

</sparql>
2.2.1.7 SELECT с набором данных RDF только для запроса

Этот SPARQL-запрос

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>

SELECT ?who ?g ?mbox
FROM <http://www.example/publishers>
FROM NAMED <http://www.example/alice>
FROM NAMED <http://www.example/bob>
WHERE { ?g dc:publisher ?who .
        GRAPH ?g { ?x foaf:mbox ?mbox }
}

передается к сервису SPARQL-запросов, http://www.other.example/sparql/, как показано ниже в трассировке HTTP:

GET /sparql/?query=EncodedQuery HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1

Отклик представлен далее:

HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml

<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
...
  <head>
    <variable name="who"/>
    <variable name="g"/>
    <variable name="mbox"/>
  </head>
  <results ordered="false" distinct="false">
    <result>
      <binding name="who">
      	<literal>Bob Hacker</literal>
      </binding>
      <binding name="g">
	<uri>http://www.example/bob</uri>
      </binding>
      <binding name="mbox">
        <uri>mailto:bob@oldcorp.example</uri>
      </binding>
    </result>
    <result>
      <binding name="who">
	<literal>Alice Hacker</literal>
      </binding>
      <binding name="g">
	<uri>http://www.example/alice</uri>
      </binding>
      <binding name="mbox">
	<uri>mailto:alice@work.example</uri>
      </binding>
    </result>
  </results>

</sparql>
2.2.1.8 SELECT с неопределенным набором данных RDF

Этот SPARQL-запрос

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>

SELECT ?who ?g ?mbox
FROM <http://www.example/publishers>
FROM NAMED <http://www.example/john>
FROM NAMED <http://www.example/susan>
WHERE { ?g dc:publisher ?who .
        GRAPH ?g { ?x foaf:mbox ?mbox }
}

передается к сервису SPARQL-запросов, http://www.other.example/sparql/, как показано ниже в трассировке HTTP:

GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/morepublishers
&named-graph-uri=http://www.example/bob&named-graph-uri=http://www.example/alice HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1

Данная операция включает неопределенный набор данных RDF: набор данных, определенных в запросе, отличается от того, что определен в протоколе (посредством параметров default-graph-uri и named-graph-uri). Согласованный сервис протокола SPARQL должен разрешить эту неопределенность, выполнив запрос набора данных RDF, определенных в протоколе:

HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml

<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
  <head>
    <variable name="who"/>
    <variable name="g"/>
    <variable name="mbox"/>
  </head>
  <results ordered="false" distinct="false">

    <result>
      <binding name="who">
      	<literal>Bob Hacker</literal>
      </binding>
      <binding name="g">
	<uri>http://www.example/bob</uri>
      </binding>
      <binding name="mbox">
        <uri>mailto:bob@oldcorp.example</uri>
      </binding>
    </result>
    <result>
      <binding name="who">
	<literal>Alice Hacker</literal>
      </binding>
      <binding name="g">
	<uri>http://www.example/alice</uri>
      </binding>
      <binding name="mbox">
	<uri>mailto:alice@work.example</uri>
      </binding>
    </result>
  </results>

</sparql>
2.2.1.9 SELECT с неправильно сформированным запросом

Это синтаксически неверный SPARQL-запрос

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name
WHERE { ?x foaf:name ?name
ORDER BY ?name }

передается к сервису SPARQL-запросов, http://www.other.example/sparql/, как показано ниже в трассировке HTTP:

GET /sparql/?query=EncodedQuery&default-graph-uri=http://www.example/morepublishers HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1

Отклик - сообщение об ошибке MalformedQuery заменяет исходящее сообщение, согласно разделу 2.1 SparqlQuery — проиллюстрирован ниже:

HTTP/1.1 400 Bad Request
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: text/plain; charset=UTF-8

4:syntax error, unexpected ORDER, expecting '}'
2.2.1.10 SELECT с отказом обработки запроса

Этот SPARQL-запрос

PREFIX bio: <http://bio.example/schema/#>
SELECT ?valence
FROM <http://another.example/protein-db.rdf>
WHERE { ?x bio:protein ?valence }
ORDER BY ?valence

передается к сервису SPARQL-запросов, http://www.other.example/sparql/, как показано ниже в трассировке HTTP:

GET /sparql/?query=EncodedQuery&default-graph-uri=http://another.example/protein-db.rdf HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1

Отклик — сообщение об ошибке QueryRequestRefused заменяет исходящее сообщение согласно 2.1 SparqlQuery — проиллюстрирован ниже:

HTTP/1.1 500 Internal Server Error
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: text/html; charset=UTF-8

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>SPARQL Processing Service: Query Request Refused</title>
</head>
<body>

<p> Query Request Refused: your request could not be processed because 
 <code>http://another.example/protein-db.rdf</code> could not be retrieved within 
 the time alloted.</p>
</body>
</html>
2.2.1.11 Очень длинный запрос SELECT с использованием привязки POST

Некоторые SPARQL-запросы, в основном машинно-сгенерированные, могут оказаться слишком длиннными, чтобы гарантировать надежную их передачу посредством привязки HTTP GET, описанной в разделе 2.2 HTTP-привязки. В подобных ситуациях может использоваться привязка POST, описання в разделе 2.2. Этот SPARQL-запрос

PREFIX : <http://www.w3.org/2002/12/cal/icaltzd#>
PREFIX Chi: <http://www.w3.org/2002/12/cal/test/Chiefs.ics#>
PREFIX New: <http://www.w3.org/2002/12/cal/tzd/America/New_York#>
PREFIX XML: <http://www.w3.org/2001/XMLSchema#>

SELECT ?summary
WHERE {
    {
	Chi:D603E2AC-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-09-08T16:00:00"^^New:tz;
         :dtstamp "2002-09-06T03:09:27Z"^^XML:dateTime;
         :dtstart "2002-09-08T13:00:00"^^New:tz;
         :summary ?summary;
         :uid "D603E2AC-C1C9-11D6-9446-003065F198AC" .
   	}
	UNION
    {
	Chi:D603E90B-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-09-15T16:00:00"^^New:tz;
         :dtstamp "2002-09-06T03:10:19Z"^^XML:dateTime;
         :dtstart "2002-09-15T13:00:00"^^New:tz;
         :summary ?summary;
         :uid "D603E90B-C1C9-11D6-9446-003065F198AC" .
   	}
	UNION
    {
	Chi:D603ED6E-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-09-22T16:00:00"^^New:tz;
         :dtstamp "2002-09-06T03:11:05Z"^^XML:dateTime;
         :dtstart "2002-09-22T13:00:00"^^New:tz;
         :summary ?summary;
         :uid "D603ED6E-C1C9-11D6-9446-003065F198AC" .
   	}
	UNION
    {
	Chi:D603F18C-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-09-29T16:00:00"^^New:tz;
         :dtstamp "2002-09-06T03:15:46Z"^^XML:dateTime;
         :dtstart "2002-09-29T13:00:00"^^New:tz;
         :summary ?summary;
         :uid "D603F18C-C1C9-11D6-9446-003065F198AC" .
   	}
	UNION
    {
	Chi:D603F5B7-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-11-04"^^XML:date;
         :dtstamp "2002-09-06T03:12:53Z"^^XML:dateTime;
         :dtstart "2002-11-03"^^XML:date;
         :summary ?summary;
         :uid "D603F5B7-C1C9-11D6-9446-003065F198AC" .
   	}
	UNION
    {
	Chi:D603F9D7-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-11-10T20:15:00"^^New:tz;
         :dtstamp "2002-09-06T03:14:12Z"^^XML:dateTime;
         :dtstart "2002-11-10T17:15:00"^^New:tz;
         :summary ?summary;
         :uid "D603F9D7-C1C9-11D6-9446-003065F198AC" .
    }
	UNION
    {
	Chi:D604022C-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-11-17T17:00:00"^^New:tz;
         :dtstamp "2002-09-06T03:14:51Z"^^XML:dateTime;
         :dtstart "2002-11-17T14:00:00"^^New:tz;
         :summary ?summary;
         :uid "D604022C-C1C9-11D6-9446-003065F198AC" .
    }
	UNION
    {
	Chi:D604065C-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-10-06T19:05:00"^^New:tz;
         :dtstamp "2002-09-06T03:16:54Z"^^XML:dateTime;
         :dtstart "2002-10-06T16:05:00"^^New:tz;
         :summary ?summary;
         :uid "D604065C-C1C9-11D6-9446-003065F198AC" .
    }
	UNION
    {
	Chi:D6040A7E-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-10-13T19:15:00"^^New:tz;
         :dtstamp "2002-09-06T03:17:51Z"^^XML:dateTime;
         :dtstart "2002-10-13T16:15:00"^^New:tz;
         :summary ?summary;
         :uid "D6040A7E-C1C9-11D6-9446-003065F198AC" .
    }
	UNION
    {
	Chi:D6040E96-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-10-20T16:00:00"^^New:tz;
         :dtstamp "2002-09-06T03:18:32Z"^^XML:dateTime;
         :dtstart "2002-10-20T13:00:00"^^New:tz;
         :summary ?summary;
         :uid "D6040E96-C1C9-11D6-9446-003065F198AC" .
    }
	UNION
    {
	Chi:D6041270-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-10-27T17:00:00"^^New:tz;
         :dtstamp "2002-09-06T03:19:15Z"^^XML:dateTime;
         :dtstart "2002-10-27T14:00:00"^^New:tz;
         :summary ?summary;
         :uid "D6041270-C1C9-11D6-9446-003065F198AC" .
    }
	UNION
    {
	Chi:D6041673-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-11-24T20:05:00"^^New:tz;
         :dtstamp "2002-09-06T03:22:09Z"^^XML:dateTime;
         :dtstart "2002-11-24T17:05:00"^^New:tz;
         :summary ?summary;
         :uid "D6041673-C1C9-11D6-9446-003065F198AC" .
    }
	UNION
    {
	Chi:D6041A73-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-12-01T17:00:00"^^New:tz;
         :dtstamp "2002-09-06T03:22:52Z"^^XML:dateTime;
         :dtstart "2002-12-01T14:00:00"^^New:tz;
         :summary ?summary;
         :uid "D6041A73-C1C9-11D6-9446-003065F198AC" .
    }
	UNION
    {
	Chi:D60421EF-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-12-08T17:00:00"^^New:tz;
         :dtstamp "2002-09-06T03:24:04Z"^^XML:dateTime;
         :dtstart "2002-12-08T14:00:00"^^New:tz;
         :summary ?summary;
         :uid "D60421EF-C1C9-11D6-9446-003065F198AC" .
    }
	UNION
    {
	Chi:D6042660-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-12-15T20:05:00"^^New:tz;
         :dtstamp "2002-09-06T03:25:03Z"^^XML:dateTime;
         :dtstart "2002-12-15T17:05:00"^^New:tz;
         :summary ?summary;
         :uid "D6042660-C1C9-11D6-9446-003065F198AC" .
    }
	UNION
    {
	Chi:D6042A93-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-12-22T17:00:00"^^New:tz;
         :dtstamp "2002-09-06T03:25:47Z"^^XML:dateTime;
         :dtstart "2002-12-22T14:00:00"^^New:tz;
         :summary ?summary;
         :uid "D6042A93-C1C9-11D6-9446-003065F198AC" .
    }
	UNION
    {
	Chi:D6042EDF-C1C9-11D6-9446-003065F198AC     a :Vevent;
         :dtend "2002-12-28T21:00:00"^^New:tz;
         :dtstamp "2002-09-06T03:26:51Z"^^XML:dateTime;
         :dtstart "2002-12-28T18:00:00"^^New:tz;
         :summary ?summary;
         :uid "D6042EDF-C1C9-11D6-9446-003065F198AC" .
    }
}

передается к сервису SPARQL-запросов, http://www.other.example/sparql/, как показано ниже в трассировке HTTP:

POST /sparql/ HTTP/1.1
Host: www.example
User-agent: sparql-client/0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 9461

query=EncodedQuery&default-graph-uri=http://another.example/calendar.rdf

Отклик показан ниже:

HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml

<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
    <head>
        <variable name="summary"/>
    </head>
    <results ordered="false" distinct="false">
        <result>
            <binding name="summary">
                <literal>Chiefs vs. Cleveland @ Cleveland Stadium</literal>
            </binding>
        </result>
        <result>
            <binding name="summary">
                <literal>Chiefs vs. Jacksonville @ Arrowhead Stadium</literal>
            </binding>
        </result>
        <result>
            <binding name="summary">
                <literal>Chiefs vs. New England @ Gillette Stadium</literal>
            </binding>
        </result>
        ...

        <result>
            <binding name="summary">
                <literal>Chiefs vs. Miami @ Arrowhead Stadium</literal>
            </binding>
        </result>
        <result>
            <binding name="summary">
                <literal>BYE</literal>
            </binding>
        </result>
        <result>
            <binding name="summary">
                <literal>Chiefs vs. San Francisco @ 49ers Stadium at Candlestick Point</literal>
            </binding>
        </result>
        <result>
            <binding name="summary">
                <literal>Chiefs vs. Buffalo @ Arrowhead Stadium</literal>
            </binding>
        </result>
        <result>
            <binding name="summary">
                <literal>Chiefs vs. NY Jets @ Giants Stadium</literal>
            </binding>
        </result>
        <result>
            <binding name="summary">
                <literal>Chiefs vs. San Diego @ Qualcomm Stadium</literal>
            </binding>
        </result>
        <result>
            <binding name="summary">
                <literal>Chiefs vs. Denver @ Arrowhead Stadium</literal>
            </binding>
        </result>
        <result>
            <binding name="summary">
                <literal>Chiefs vs. Oakland @ Arrowhead Stadium</literal>
            </binding>
        </result>
        <result>
            <binding name="summary">
                <literal>Chiefs vs. Seattle @ Seahawks Stadium</literal>
            </binding>
        </result>
        <result>
            <binding name="summary">
                <literal>Chiefs vs. Arizona @ Arrowhead Stadium</literal>
            </binding>
        </result>
        <result>
            <binding name="summary">
                <literal>Chiefs vs. St. Louis @ Arrowhead Stadium</literal>
            </binding>
        </result>
        <result>
            <binding name="summary">
                <literal>Chiefs vs. Denver @ INVESCO Field at Mile High</literal>
            </binding>
        </result>
        <result>
            <binding name="summary">
                <literal>Chiefs vs. San Diego @ Arrowhead Stadium</literal>
            </binding>
        </result>

        <result>
            <binding name="summary">
                <literal>Chiefs vs. Oakland @ Network Associates Coliseum</literal>
            </binding>
        </result>
    </results>
</sparql>
2.2.1.12 SELECT с интернационализацией

Запросы SPARQL могут содержать интернациональные символы или наборы символов. Этот SPARQL-запрос

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX 食: <http://www.w3.org/2001/sw/DataAccess/tests/data/i18n/kanji.ttl#>
SELECT ?name ?food 
WHERE { [ foaf:name ?name ; 食:食べる ?food ] . }

передается к сервису SPARQL-запросов, http://www.other.example/sparql/, как показано ниже в трассировке HTTP:

GET /sparql/?query=EncodedQuery

Host: www.example
User-agent: sparql-client/0.1
HTTP/1.1 200 OK
Date: Wed, 03 Aug 2005 12:48:25 GMT
Server: Apache/1.3.29 (Unix)
Connection: close
Content-Type: application/sparql-results+xml

<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
...
</sparql>
2.2.1.13 SELECT с привязкой queryHttpPost и входными данными XML

В одной из последующих версий SPARQL-запросы смогут быть сериализованы в XML и переданы сервису SPARQL-запросов посредством HTTP POST. Этот SPARQL-запрос

<?xml version="1.0"?>
<rdf-query xmlns="http://example.org/SparqlX/">
 <select><variable name="book"/><variable name="who"/></select>
 <query-pattern>
	<triple-pattern>
		<subject><variable name="book"/></subject>
		<predicate><uri>http://purl.org/dc/elements/1.1/creator</uri></predicate>
		<object><variable name="who"/></object>
	</triple-pattern>
 </query-pattern>

</rdf-query>

передается к сервису SPARQL-запросов, http://www.other.example/sparql/, как показано ниже в трассировке HTTP:

POST /sparql/ HTTP/1.1
Host: www.example
User-agent: my-sparql-client/0.1
Content-type: application/xml

<?xml version="1.0"?>
<rdf-query xmlns="http://example.org/SparqlX/">
<select><variable name="book"/><variable name="who"/></select>

<query-pattern>
<triple-pattern>
	<subject><variable name="book"/></subject>
	<predicate><uri>http://purl.org/dc/elements/1.1/creator</uri></predicate>
	<object><variable name="who"/></object>
</triple-pattern>
</query-pattern>
</rdf-query>

Данный запрос осуществляется над набором данных RDF c сервисной поддержкой, выполняется сервисом SPARQL-запросов и возвращает следующий результат:

HTTP/1.1 200 OK
Date: Fri, 06 May 2005 20:55:12 GMT
Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3
Connection: close
Content-Type: application/sparql-results+xml

<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">

 <head>
   <variable name="book"/>
   <variable name="who"/>
 </head>
 <results distinct="false" ordered="false">
   <result>
     <binding name="book"><uri>http://www.example/book/book5</uri></binding>
     <binding name="who"><bnode>r29392923r2922</bnode></binding>
   </result>
...

   <result>
     <binding name="book"><uri>http://www.example/book/book6</uri></binding>
     <binding name="who"><bnode>r8484882r49593</bnode></binding>
   </result>
 </results>
</sparql> 

2.3 SOAP-привязки

[WSDL2-дополнения] определяют средства привязки операций абстрактного интерфейса к SOAP. SOAP-привязки для операции query (из protocol-query.wsdl) выглядят следующим образом:

   <binding name="querySoap" interface="SparqlQuery"
	    type="http://www.w3.org/2006/01/wsdl/soap"
            wsoap:version="1.2"
	    wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP">

    <fault ref="tns:MalformedQuery" wsoap:code="soap:Sender" />
    <fault ref="tns:QueryRequestRefused" wsoap:code="soap:Sender" />

    <operation ref="tns:query" wsoap:mep="http://www.w3.org/2003/05/soap/mep/request-response" />

  </binding>

SOAP-привязка операции query интерфейса SparqlQuery называется querySoap. Эта привязка является привязкой SOAP, потому ка значение атрибута type, заданного для URI, указывает на SOAP. Верси] SOAP - 1.2. В основе этой SOAP-привязки лежит протокол HTTP, заданный значением URI wsoap:protocol. Если сервис протокола SPARQL поддерживает привязки SOAP со значением атрибута {http://www.w3.org/2006/01/wsdl/soap, protocol}, установленного в http://www.w3.org/2003/05/soap/bindings/HTTP, то он должен поддерживать привязки в соответствии с protocol-query.wsdl. SOAP-привязки с другими протоколами передачи (отличными от HTTP) в качестве установленных значений wsoap:protocol, не описаны в данном документе.

Два элемента fault связаны с сообщениями об ошибках, определенных в рамках интерфейса SparqlQuery.

И наконец, элемент operation связан с операцией query интерфейса SparqlQuery, который был описан ранее во фрагменте 1.0. Так как эта SOAP-привязка описывает операцию с использованием HTTP в качетстве основного транспортного протокола, значение атрибута wsoap:mep определяет метод HTTP, который необходимо применить. Эта операция реализована посредством шаблона обмена SOAP-сообщениями http://www.w3.org/2003/05/soap/mep/request-response, который связан с HTTP-методом POST в соответствии с разделом [SOAP12] 7.4 Поддерживаемые функции.

2.3.1 Пример SOAP

POST /services/sparql-query HTTP/1.1
Content-Type: application/soap+xml
Accept: application/soap+xml, multipart/related, text/*
User-Agent: Axis/1.2.1
Host: www.example
SOAPAction: ""
Content-Length: 438

<?xml version="1.0" encoding="UTF-8"?>
   <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <soapenv:Body>
         <query-request xmlns="http://www.w3.org/2005/09/sparql-protocol-types/#">
            <query>SELECT ?z {?x ?y ?z . FILTER regex(?z, 'Harry')}</query>
         </query-request>
      </soapenv:Body>
   </soapenv:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml

<?xml version="1.0" encoding="utf-8"?>
   <soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope/"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <soapenv:Body> 
         <query-result xmlns="http://www.w3.org/2005/09/sparql-protocol-types/#">
            <ns1:sparql xmlns:ns1="http://www.w3.org/2005/sparql-results#">
               <ns1:head>
                  <ns1:variable name="z"/>
               </ns1:head>
               <ns1:results distinct="false" ordered="false">
                  <ns1:result>
                     <ns1:binding name="z">
                        <ns1:literal>Harry Potter and the Chamber of Secrets</ns1:literal>
                     </ns1:binding>
                  </ns1:result>
                  ...

                  <ns1:result>
                     <ns1:binding name="z">
                        <ns1:literal>Harry Potter and the Half-Blood Prince</ns1:literal>
                     </ns1:binding>
                  </ns1:result>
                  <ns1:result>
                     <ns1:binding name="z">
                        <ns1:literal>Harry Potter and the Goblet of Fire</ns1:literal>
                     </ns1:binding>
                  </ns1:result>
                  <ns1:result>
                     <ns1:binding name="z">
                        <ns1:literal>Harry Potter and the Philosopher's Stone</ns1:literal>
                     </ns1:binding>
                  </ns1:result>
                  <ns1:result>
                     <ns1:binding name="z">
                        <ns1:literal>Harry Potter and the Order of the Phoenix</ns1:literal>
                     </ns1:binding>
                  </ns1:result>
                  <ns1:result>
                     <ns1:binding name="z">
                        <ns1:literal>Harry Potter and the Prisoner Of Azkaban</ns1:literal>
                     </ns1:binding>
                  </ns1:result>

               </ns1:results>
            </ns1:sparql>
         </query-result>
      </soapenv:Body>
   </soapenv:Envelope>

3. Размышления о политике

3.1 Безопасность

Существует по меньшей мере две причины отказа от обработки запросов сервисом протокола SPARQL. Первая заключается в том, что запросы без ограничений могут обуславливать очень объемные результаты, требующие огромных ресурсов для обработки, хранения и возврата значений. Еще одна возможная причина заключается в слишком сложных описаниях наборов данных RDF в запросах. Сложность может состоять в размере ресурса, количестве извлекаемых ресурсов или одновременно и в размере, и в количестве. Сервис может оказаться не в состоянии обработать подобного рода запрос без расширения программно-аппаратных ресурсов, например, не увеличивая пропускную способность каналов, не увеличивая частоту процессора или объем вспомогательного запоминающего устройства. В некоторых случаях подобного рода расширения смогут ликвидировать причину отказа от обработки запросов. Сервис протокола SPARQL может задавать ограничения на извлекаемые ресурсы или устанавливать некоторый уровень для извлечения внешних ресурсов. Однако причины отказа сервисов от обработки SPARQL-запросов могут быть и другими.

Потому как сервис протокола SPARQL может выполнять HTTP-запросы других серверов по поручению их клиентов, сервисы могут использоваться в качестве вектора атак против других сайтов и сервисов. Поэтому сервисы протокола SPARQL могут эффективно работать как прокси для сторонних клиентов. Такие сервисы могут ставить ограничения на извлекаемые ресурсы или задавать уровень для извлечения внешних ресурсов. Сервисы протокола SPARQL могут вести журнал клиентских запросов для облегчения их трассировки, связанной со сторонними серверами или сервисами.

Сервисы протокола SPARQL могут определять эти или другие стоящие (или наоборот ненужные небезопасные) запросы, налагать ограничения на время выполнения запроса или память, отводимую под него, вводить другие ограничения, которые позволят уменьшить уязвимость сервисов (или иных сторонних сервисов). Сервисы также могут отказаться обрабатывать небезопасные запросы.

Иногда различные IRI отображаются одинаково. Символы разных скриптов могут выглядеть абсолютно идентично (так, "о" кириллицы отображается аналогично "o" в латинице). Комбинированные символы могут отображаться точно так же, как другие символы. Пользователи SPARQL должны создавать запросы с IRI, которые соответствуют IRI по данным. Дополнительную информацию по соответствию символов можно найти в Unicode Security Considerations [UNISEC] и Internationalized Resource Identifiers (IRIs) [RFC3987] раздел 8.

4. Соответствие

Статус составных частей настоящего документа (Протокол SPARQL для RDF) следующий:

Далее, оба protocol-query.wsdl и protocol-types.xsd являются нормативными.

Согласованный с протоколом SPARQL сервис:

  1. должен реализовывать интерфейс SparqlQuery;
  2. может реализовывать HTTP, SOAP, или оба - и HTTP и SOAP-привязки операции query интерфейса SparqlQuery ;
  3. должен реализовывать HTTP или SOAP-привязки операции query таким образом, как описано в данном документе (" Протокол SPARQL для RDF"), в protocol-query.wsdl, и protocol-types.xsd;
  4. может реализовывать другие интерфейсы, привязки операций этих интерфейсов или привязки операции query, отличные от нормативных HTTP или SOAP-привязок, описанных протоколом SPARQL для RDF;
  5. должен соответствовать нормативным ограничениям (установленным ключевыми словами [RFC 2119]), описанным в разделе 3. Размышления о политике.

5. Ссылки

1.Нормативные

[RFC2119]
Ключевые слова для использования в RFC в целях определения уровней, RFC 2119, С. Браднер, март 1997
[RFC3987]
Internationalized Resource Identifiers (IRIs), RFC 3987, M. Дюрст, M. Сьюигнард
[RFC3986]
Uniform Resource Identifier (URI): общий синтаксис, RFC 3986, T. Бернерс-Ли, Р. Фильдинг, Л. Масинтер, январь 2005
[HTTP]
Hypertext Transfer Protocol -- HTTP/1.1, RFC 2616, Р. Фильдинг, Дж. Геттис,Дж. Могул, Г. Фристик, Л. Масинтер, П. Лич, T. Бернерс-Ли, июнь 1999
[RDF-Concepts]
Resource Description Framework (RDF): концепции и абстрактный синтаксис, Дж. Клайн, Дж. Кэрролл, редакторы, рекомендация W3C, 10 января 2004, http://www.w3.org/TR/2004/REC-rdf-primer-20040210/ . Последняя версия http://www.w3.org/TR/rdf-concepts/ .
[RDF-Syntax]
Спецификация RDF/XML-синтаксиса (исправленная),Д. Бекетт, редактор, рекомендация W3C, 10 февраля 2004, http://www.w3.org/TR/2004/REC-rdf-syntax-grammar-20040210/ . Последняя версия доступна на http://www.w3.org/TR/rdf-syntax-grammar .
[SOAP12]
SOAP версия 1.2 часть 2: дополнения, M. Гудгин, M. Хэдли, Н. Мендельсон, Дж.-Дж. Мороу, Г.Ф. Нильсен, редакторы, рекомендация W3C, 27 апреля 2007, http://www.w3.org/TR/2007/REC-soap12-part2-20070427/ . Последняя версия http://www.w3.org/TR/soap12-part2/ .
[SPARQL]
Язык запросов SPARQL для RDF,A. Сиборн, Э. Прудхоммоукс, редакторы, рекомендация W3C, 15 января 2008, http://www.w3.org/TR/2008/REC-rdf-sparql-query-20080115/ . Последняя версия доступна по адресу http://www.w3.org/TR/rdf-sparql-query/ .
[SRD]
Результаты SPARQL запроса в формате XML ,Д. Бекетт, Дж. Броекстра, редакторы, рекомендация W3C, 15 января 2008, http://www.w3.org/TR/2008/REC-rdf-sparql-XMLres-20080115/ Последняя версия http://www.w3.org/TR/rdf-sparql-XMLres/ .
WSDL2
Web Services Description Language (WSDL) версия 2.0 часть 1: базовый язык , Р. Чинничи, Дж. Moроу, A. Райман, С. Вираварана, редакторы, рекомендация W3C, 26 июня 2007, http://www.w3.org/TR/2007/REC-wsdl20-20070626/ . Последняя версия доступна по http://www.w3.org/TR/wsdl20 .
WSDL2-Adjuncts
Web Services Description Language (WSDL) Версия 2.0 часть 2: дополнения,Р. Чинничи, Х. Хаас, A. A. Льюис, Дж. Moроу, Д. Орчард, С. Вираварана, редакторы, рекомендация W3C, 26 июня 2007, http://www.w3.org/TR/2007/REC-wsdl20-adjuncts-20070626/ . Последняя версия доступна на http://www.w3.org/TR/wsdl20-adjuncts .

2. Информативные

[UC&R]
Варианты использования доступа к данным RDF и требования , K. Кларк, редактор, рабочий проект W3C, 25 марта 2005, http://www.w3.org/TR/2005/WD-rdf-dawg-uc-20050325/. http://www.w3.org/TR/2005/WD-rdf-dawg-uc-20050325/ . Последняя версия доступна http://www.w3.org/TR/rdf-dawg-uc/ .
[WSDL2-Primer]
Web Services Description Language (WSDL) версия 2.0 часть 0: начальное руководство,K. Лью, Д. Бут, редакторы, рекомендация W3C, 26 июня 2007, http://www.w3.org/TR/2007/REC-wsdl20-primer-20070626/ . Последняя версия доступна на http://www.w3.org/TR/wsdl20-primer/ .
[UNISEC]
Unicode Security Considerations, Марк Дэвис, Майкл Сьюигнард

6. Благодарности

Мои благодарности членам DAWG, в особенности Биджану Парсиа, Брайану Томпсону, Энди Сиборну, Стиву Харрису, Эрику Прудхоммоуксу, Йошио Фукушиге, Ховарду Катцу, Дирк-Виллему ван Гулику, Дэну Коннолли и Ли Фейгенбауму. Особая благодарность Элиасу Торресу за его великодушную помощь и поддержку. Также выражаю благодарность своим коллегам из UMD, Джиму Хендлеру, Рону Альфорду, Эми Альфорд, Ярдену Катцу, Крису Теста и членам Mindlab Semantic Web Undergraduate Social. Особая благодарность моему коллеге из NASA и другу, Энди Шейну. Также хочу поблагодарить Джесек Копеки, Мортена Фредериксена, Марка Бэкера, Джена Алгермиссена, Дэнни Эйерса, Бернда Симона, Грэхема Клайна, Арджона Кампмана, Тима Бернерса-Ли, Дэна Брикли, Патрика Стиклера, Карла Дубоста, Джонатана Марша, Лей Додса, Дэвида Вуда, Рето Крумменахера, Томаса Росслера, Дэнни Веитцнера, Пола Доуни, Хуго Хааса, Ричарда Ньюмана.


Лог изменений

После предлагаемой рекомендации от ноября 2007 года, внесено одно изменение; в связи с регистрацией медиа-типа text/turtle обновлен пример CONSTRUCT с простым набором данных RDF

Этот документ является неофициальным переводом исходной английской версии. Может содержать неточности и ошибки.
©  PhD Щербак Сергей, 2009. Комментарии к переводу оставляйте здесь!|| На главную || Перепечатка? Valid HTML 4.01 Transitional Valid CSS!