bordercloud / sparql
Lib PHP very easy for SPARQL 1.1
Fund package maintenance!
BorderCloud
Installs: 40 583
Dependents: 0
Suggesters: 0
Security: 0
Stars: 27
Watchers: 5
Forks: 6
Open Issues: 3
Requires (Dev)
- clean/phpdoc-md: ^0.19.1
- phpunit/phpunit: ^9.5
README
Lib Sparql 1.1 HTTP Client
Very simple SparqlClient for PHP.
Thanks to contributors.
Installation
This project assumes you have composer installed. Simply add new dependency via Composer:
composer require bordercloud/sparql
To your composer.json, and then you can simply install with:
composer install
Test the lib with a php script : query
You can test your first query sparql with DBPEDIA via a command line :
./bin/query -r -e http://dbpedia.org/sparql -f ./example/queryReadDBpedia.rq
And the doc of this script with virtuoso, 4store, Allegrograph, Fuseki and Sesame :
USAGE : query [-r|-w][-e URL|--endpointQueryAndUpdate=URL]
[--file=FILE|-f FILE]
[-v|-verbose]
-r READ ONLY
-w WRITE ONLY
-e, --endpointQueryAndUpdate=URL Put url of endpoint to do query or
update :
URL/sparql/?query=...
URL/update/?update=... (POST)
-q, --endpointQueryOnly=URL Put url of endpoint to do query :
URL?query=...
-u, --endpointUpdateOnly=URL Put url of endpoint to do query :
URL?update=... (POST)
--nameParameterQuery=PARAMETER Change the name of parameter in
the request http to read.
(by default : query)
--nameParameterUpdate=PARAMETER Change the name of parameter in
the request http to write.
(by default : update)
-f,--file=File File of the query.
-t, --typeOutput=TYPE Type of response: table,txt,csv,tsv,ttl,srx,srj
(by default : table)
-l, --login=LOGIN Server login
-p, --password=PASSWORD Server password
-v, --verbose Mode verbose
-d, --debug Mode debug
EXAMPLE : Virtuoso
./query -w -e http://localhost/tests/ -f ./example/queryWrite1.rq
./query -r -e http://localhost/tests/ -f ./example/queryRead1.rq
EXAMPLE : 4Store
./query -w -e http://localhost/ -f ./example/queryWrite1.rq
./query -r -e http://localhost/ -f ./example/queryRead1.rq
EXAMPLE : Sesame
./query -w -q http://localhost/openrdf-sesame/repositories/tests \
-u http://localhost/openrdf-sesame/repositories/tests/statements \
-f ./example/queryWrite1.rq
./query -r -q http://localhost/openrdf-sesame/repositories/tests \
-u http://localhost/openrdf-sesame/repositories/tests/statements \
-f ./example/queryRead1.rq
EXAMPLE : Fuseki
./query -w -q http://localhost/tests/query \
-u http://localhost/tests/update \
-f ./example/queryWrite1.rq
./query -r -q http://localhost/tests/query \
-u http://localhost/tests/update \
-f ./example/queryRead1.rq
EXAMPLE : Allegrograph
./query -w -q http://localhost/repositories/tests \
-u http://localhost/repositories/tests \
--nameParameterUpdate=query \
-f ./example/queryWrite1.rq
./query -r -q http://localhost/repositories/tests \
-u http://localhost/repositories/tests \
--nameParameterUpdate=query \
-f ./example/queryRead1.rq
Examples
Send a simple query to Wikidata :
<?php use BorderCloud\SPARQL\SparqlClient; require_once ('../vendor/autoload.php'); $endpoint = "https://query.wikidata.org/sparql"; $sc = new SparqlClient(); $sc->setEndpointRead($endpoint); //$sc->setMethodHTTPRead("GET"); $q = "select * where {?x ?y ?z.} LIMIT 5"; $rows = $sc->query($q, 'rows'); $err = $sc->getErrors(); if ($err) { print_r($err); throw new Exception(print_r($err, true)); } foreach ($rows["result"]["variables"] as $variable) { printf("%-20.20s", $variable); echo '|'; } echo "\n"; foreach ($rows["result"]["rows"] as $row) { foreach ($rows["result"]["variables"] as $variable) { printf("%-20.20s", $row[$variable]); echo '|'; } echo "\n"; }
Send a simple query to DBpedia :
<?php use BorderCloud\SPARQL\SparqlClient; require_once ('../vendor/autoload.php'); $endpoint = "http://dbpedia.org/sparql"; $sc = new SparqlClient(); $sc->setEndpointRead($endpoint); $q = "select * where {?x ?y ?z.} LIMIT 5"; $rows = $sc->query($q, 'rows'); $err = $sc->getErrors(); if ($err) { print_r($err); throw new Exception(print_r($err, true)); } foreach ($rows["result"]["variables"] as $variable) { printf("%-20.20s", $variable); echo '|'; } echo "\n"; foreach ($rows["result"]["rows"] as $row) { foreach ($rows["result"]["variables"] as $variable) { printf("%-20.20s", $row[$variable]); echo '|'; } echo "\n"; }
Send a simple query via an endpoint sparql-auth (with OpenLink Virtuoso Open-Source Edition) :
<?php use BorderCloud\SPARQL\SparqlClient; require_once ('../vendor/autoload.php'); $endpoint = "https://example.com/sparql-auth"; $sc = new SparqlClient(); $sc->setEndpointRead($endpoint); //$sc->setEndpointWrite($endpoint); $sc->setLogin("login"); $sc->setPassword("password"); $q = "select * where {?x ?y ?z.} LIMIT 5"; $rows = $sc->query($q, 'rows'); $err = $sc->getErrors(); if ($err) { print_r($err); throw new Exception(print_r($err, true)); } foreach ($rows["result"]["variables"] as $variable) { printf("%-20.20s", $variable); echo '|'; } echo "\n"; foreach ($rows["result"]["rows"] as $row) { foreach ($rows["result"]["variables"] as $variable) { printf("%-20.20s", $row[$variable]); echo '|'; } echo "\n"; }
Documentation
Copy Sources and tests
git clone http://github.com/BorderCloud/SPARQL.git composer install
Before to execute tests, you need to start database's instances. For example, Virtuoso 7
systemctl start docker docker pull bordercloud/tft-virtuoso7-stable docker run --privileged --name instance.tft_virtuoso7_stable -h tft_virtuoso7_stable -d bordercloud/tft-virtuoso7-stable
Execute PHPUnit
phpunit --configuration phpunit.xml --coverage-text
Contact
If you have remarks, questions, or suggestions, please send them to karima.rafes@bordercloud.com
Release-Notes
-
V2.1.0 ** Add tools to detect SPARQL update queries ** Add the timeout parameter at the send of the query
-
V2.0.9 ** Fix : bugs in SPARQL client
-
V2.0.8 ** Fix : bugs when there are error messages of SPARQL services
-
V2.0.7 ** Fix : Insert the parameter User-agent in the header HTTP (for Wikidata)
-
V2.0.6 ** Fix : bug with the parser and the ASK query's results
-
V2.0.5 ** Compatibility : PHP 7.1 and psr-4 ** Rename the class Endpoint to SparqlClient and simplify the constructor. You can set the endpoints only by their setters. ** Rename several functions (PHP Lint) ** Update PHPDoc ** Add the function SparqlClient->getLastErreur() : can read the SPARQL syntax error directly, if the pattern of error exists (Add the pattern of Wikidata and Virtuoso) ** Move files and add tests + phpunit.xml. SparqlClient is coverage to 82% for the moment (coverage with Virtuoso and Wikidata). ** Enable Travis in GitHub
-
V1.2.1.0 Add fix for Wikidata and other
-
V1.1.0.0 version SPARQL.Pro lib PHP by Karima Rafes karima.rafes@bordercloud.com
license
SPARQL.Pro lib PHP (c)2019 by Karima Rafes - BorderCloud
SPARQL.Pro lib PHP is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
You should have received a copy of the license along with this work. If not, see http://creativecommons.org/licenses/by-sa/4.0/.
Compile DOC
php vendor/clean/phpdoc-md/bin/phpdoc-md
Git...
Modify also the version in composer.json
git pull
git push
git tag -a 2.0.8@dev -m "version dev"
git push --tags