* @license http://www.gnu.org/licenses/lgpl.html LGPL * * @package sparql */ class SparqlClient extends Object { var $server; var $output; /** * Constructor of SparlClient. * * @param String $server server address. */ function SparqlClient($server){ $this->server = $server; $this->output = "array"; } /** * Sets the output format for a SELECT or ASK query. Possible formats are "xml" for * Sparql Query Results XML Format (http://www.w3.org/TR/rdf-sparql-XMLres/) or array * for the format described in our SparqlEngine. * * @param String $format the format. */ function setOutputFormat($format){ if(strtolower($format)=="xml") $this->output = "xml"; if(strtolower($format)=="array") $this->output = "array"; } /** * Main function of SparqlClient. * * @param ClientQuery $query the ClientQuery object. * @return mixed returns an array that contains the variables an their bindings or a MemModel * */ function query($query){ if(!is_a($query,"ClientQuery")) die;//ErrorHandling $url = $this->_buildurl($query); $result = $this->_http_get($url); return $this->returnResult($result); } /** * Helper function that builds the url. * * @param ClientQuery $query the ClientQuery Object. */ function _buildurl($query){ $url = ""; $url = $this->server."?query=".urlencode($query->query); foreach($query->default as $defaultg){ $url = $url."&default-graph-uri=".$defaultg; } foreach($query->named as $namedg){ $url = $url."&named-graph-uri=".$namedg; } return $url; } /** * Returns the query result. * * @param String $result the result. * @return mixed */ function returnResult($result){ if(strpos($result,"generateModel(substr($result,strpos($result,"output == "xml"){ $pos = strpos($result,"output == "array"){ // $pos = strpos($buffer,"parseResult($result); } return $result; } function parseResult($buffer){ include_once(RDFAPI_INCLUDE_DIR.PACKAGE_SYNTAX_SPARQLRES); $parser = new SparqlResultParser(); return $parser->parse($buffer); } /** * Executes the GET Request. * * @param String $url the url. * @return String result. */ function _http_get($url) { $url = parse_url($url); $port = isset($url['port']) ? $url['port'] : 80; $fp = fsockopen($url['host'], $port); $replace = $url['path']; fputs($fp, "GET ".$replace."?".$url['query']." HTTP/1.0\r\n"); fputs($fp, "Host: ". $url['host']."\r\n"); fputs($fp, "Accept: application/sparql-results+xml, application/rdf+xml\r\n"); fputs($fp, "Connection: close\r\n\r\n"); $buffer = ""; while ($tmp = fread($fp, 1024)) { $buffer .= $tmp; } return preg_replace("/^.*?(\r\n\r\n|\n\n)/s", "", $buffer); } } ?>