Благодаря предложению Теда о заголовках и обновлении EasyRDF я нашел решение после прочтения немного больше о проблеме EasyRDF # 226. Проблема в том, что требуется переписать код php для использования новых пространств имен и т. Д. Если кто-нибудь знает решение с версией 0.9.1, это было бы очень полезно!
Похоже, что возвращаемый тип объекта (EasyRdf_Graph
/ EasyRdf_Sparql_Result
) зависит от параметра Accept
заголовков. Я попытался изменить его (добавил различные типы контента, перечисленные в Virtuoso doc ) через Firebug и повторно отправить запрос, но пока не получал объект EasyRdf_Graph
с Virtuoso.
Как спросил Тед, вот соответствующая часть заголовков запроса (с приведенным выше кодом php и EasyRDF 0.0.1):
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Чтобы получить заголовки ответов конечной точки, я добавил эту строку:
print_r(get_headers($endpointUrl));
Вот заголовки ответа для Fuseki (который дает объект EasyRdf_Graph
):
[0] => HTTP/1.1 200 OK
[1] => Date: Tue, 11 Sep 2018 06:14:56 GMT
[2] => Fuseki-Request-ID: 13
[3] => Vary: Accept,Accept-Encoding,Accept-Charset
[4] => Content-Type: application/n-quads
[5] => Vary: User-Agent
А для Виртуоза (http://data.bnf.fr)
[0] => HTTP/1.1 302 Found
[1] => Date: Tue, 11 Sep 2018 06:12:29 GMT
[2] => Server: Apache
[3] => Location: http://data.bnf.fr/sparql/
[4] => Content-Length: 210
[5] => Content-Type: text/html; charset=iso-8859-1
[6] => Vary: Accept-Encoding,User-Agent
[7] => Connection: close
[8] => HTTP/1.1 200 OK
[9] => Date: Tue, 11 Sep 2018 06:12:29 GMT
[10] => Server: Apache
[11] => Last-Modified: Mon, 19 Feb 2018 10:34:21 GMT
[12] => ETag: "200036-3a99-5658e3ca8a540"
[13] => Accept-Ranges: bytes
[14] => Content-Length: 15001
[15] => Vary: Accept-Encoding,User-Agent
[16] => Access-Control-Allow-Origin: *
[17] => Content-Type: text/html
[18] => Content-Language: fr
[19] => Connection: close
N.B. : для data.bnf.fr код 302 (перенаправление), но, похоже, это не имеет значения, см. ответ dbpedia:
[0] => HTTP/1.1 200 OK
[1] => Date: Tue, 11 Sep 2018 07:17:23 GMT
[2] => Content-Type: text/html; charset=UTF-8
[3] => Content-Length: 14172
[4] => Connection: close
[5] => Vary: Accept-Encoding
[6] => Server: Virtuoso/07.20.3229 (Linux) i686-generic-linux-glibc25-64 VDB
[7] => Expires: Tue, 18 Sep 2018 07:17:23 GMT
[8] => Cache-Control: max-age=604800
[9] => Access-Control-Allow-Origin: *
[10] => Access-Control-Allow-Credentials: true
[11] => Access-Control-Allow-Methods: GET, POST, OPTIONS
[12] => Access-Control-Allow-Headers: DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Accept-Encoding
[13] => Accept-Ranges: bytes
Итак, вот решение с новым кодом php и обновлением композитора , чтобы получить EasyRDF dev-master:
1) Редактировать composer.json:
{
"require": {
"easyrdf/easyrdf": "dev-master"
}
}
2) пробег
php composer.phar update
3) переписать php код:
require_once './third_party/vendor/autoload.php';
$endpointUrl = "http://data.bnf.fr/sparql";
$dummyConstructQueryString = "construct { ?s ?q ?r } where { ?s ?p ?o . ?o ?q ?r } limit 1";
$endPoint = new \EasyRdf\Sparql\Client($endpointUrl); // <-- here use the namespace
$result = $endPoint->query($dummyConstructQueryString);
var_dump($result);
EDIT
Наконец, я не уверен, что параметр заголовка http-запроса «Accept» является условием для получения объекта EasyRdf_Graph
. Вот заголовки для запроса и ответа с обновленным кодом Easyrdf (версия «dev-master»). Возможно, EasyRDF анализирует запрос и результат для создания объекта EasyRdf_Graph
.
Запрос
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Ответ от http://data.bnf.fr/sparql/ (получено с print_r(get_headers($endpointUrl));
)
[0] => HTTP/1.1 302 Found
[1] => Date: Wed, 12 Sep 2018 06:21:48 GMT
[2] => Server: Apache
[3] => Location: http://data.bnf.fr/sparql/
[4] => Content-Length: 210
[5] => Content-Type: text/html; charset=iso-8859-1
[6] => Vary: Accept-Encoding,User-Agent
[7] => Connection: close
[8] => HTTP/1.1 200 OK
[9] => Date: Wed, 12 Sep 2018 06:21:48 GMT
[10] => Server: Apache
[11] => Last-Modified: Mon, 19 Feb 2018 10:34:21 GMT
[12] => ETag: "200036-3a99-5658e3ca8a540"
[13] => Accept-Ranges: bytes
[14] => Content-Length: 15001
[15] => Vary: Accept-Encoding,User-Agent
[16] => Access-Control-Allow-Origin: *
[17] => Content-Type: text/html
[18] => Content-Language: fr
[19] => Connection: close