diff options
Diffstat (limited to 'www/wiki/extensions/SemanticMediaWiki/src/SPARQLStore/RepositoryConnectors/FusekiRepositoryConnector.php')
-rw-r--r-- | www/wiki/extensions/SemanticMediaWiki/src/SPARQLStore/RepositoryConnectors/FusekiRepositoryConnector.php | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/www/wiki/extensions/SemanticMediaWiki/src/SPARQLStore/RepositoryConnectors/FusekiRepositoryConnector.php b/www/wiki/extensions/SemanticMediaWiki/src/SPARQLStore/RepositoryConnectors/FusekiRepositoryConnector.php new file mode 100644 index 00000000..1ffdc94b --- /dev/null +++ b/www/wiki/extensions/SemanticMediaWiki/src/SPARQLStore/RepositoryConnectors/FusekiRepositoryConnector.php @@ -0,0 +1,59 @@ +<?php + +namespace SMW\SPARQLStore\RepositoryConnectors; + +use SMW\SPARQLStore\Exception\BadHttpEndpointResponseException; +use SMW\SPARQLStore\QueryEngine\RepositoryResult; +use SMW\SPARQLStore\QueryEngine\XmlResponseParser; + +/** + * @see https://jena.apache.org/documentation/serving_data/index.html + * + * @license GNU GPL v2+ + * @since 2.0 + * + * @author mwjames + */ +class FusekiRepositoryConnector extends GenericRepositoryConnector { + + /** + * @see GenericRepositoryConnector::doQuery + */ + public function doQuery( $sparql ) { + + if ( $this->repositoryClient->getQueryEndpoint() === '' ) { + throw new BadHttpEndpointResponseException( BadHttpEndpointResponseException::ERROR_NOSERVICE, $sparql, 'not specified' ); + } + + $this->httpRequest->setOption( CURLOPT_URL, $this->repositoryClient->getQueryEndpoint() ); + + $this->httpRequest->setOption( CURLOPT_HTTPHEADER, [ + 'Accept: application/sparql-results+xml,application/xml;q=0.8', + 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' + ] ); + + $this->httpRequest->setOption( CURLOPT_POST, true ); + + $defaultGraph = $this->repositoryClient->getDefaultGraph(); + + $parameterString = "query=" . urlencode( $sparql ) . + ( ( $defaultGraph !== '' )? '&default-graph-uri=' . urlencode( $defaultGraph ) : '' ) . '&output=xml'; + + $this->httpRequest->setOption( CURLOPT_POSTFIELDS, $parameterString ); + + $httpResponse = $this->httpRequest->execute(); + + if ( $this->httpRequest->getLastErrorCode() == 0 ) { + $xmlResponseParser = new XmlResponseParser(); + return $xmlResponseParser->parse( $httpResponse ); + } + + $this->mapHttpRequestError( $this->repositoryClient->getQueryEndpoint(), $sparql ); + + $repositoryResult = new RepositoryResult(); + $repositoryResult->setErrorCode( RepositoryResult::ERROR_UNREACHABLE ); + + return $repositoryResult; + } + +} |