danielebarchiesi@4: ' . t('The sparql module provides an interface for other modules to perform sparql queries') . '

'; // TODO danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Executes a SPARQL query. danielebarchiesi@4: * danielebarchiesi@4: * @param $query danielebarchiesi@4: * The SPARQL query to execute. danielebarchiesi@4: * @param $endpoint danielebarchiesi@4: * An endpoint object, as returned by SPARQL Registry. danielebarchiesi@4: * @return danielebarchiesi@4: * The SPARQL results. danielebarchiesi@4: */ danielebarchiesi@4: function sparql_request($query, $endpoint) { danielebarchiesi@4: $rows = _sparql_request($query, $endpoint); danielebarchiesi@4: return $rows; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function sparql_get_store($name, $type = 'store') { danielebarchiesi@4: $db = $GLOBALS['databases']['default']['default']; danielebarchiesi@4: $name = "sparql_store_$name"; danielebarchiesi@4: danielebarchiesi@4: $config = array( danielebarchiesi@4: /* db */ danielebarchiesi@4: 'db_host' => $db['host'], danielebarchiesi@4: 'db_name' => $db['database'], danielebarchiesi@4: 'db_user' => $db['username'], danielebarchiesi@4: 'db_pwd' => $db['password'], danielebarchiesi@4: /* store */ danielebarchiesi@4: 'store_name' => $name, danielebarchiesi@4: danielebarchiesi@4: /* endpoint */ danielebarchiesi@4: 'endpoint_features' => array( danielebarchiesi@4: 'select', 'construct', 'ask', 'describe', danielebarchiesi@4: 'load', 'insert', 'delete', danielebarchiesi@4: 'dump' /* dump is a special command for streaming SPOG export */ danielebarchiesi@4: ), danielebarchiesi@4: 'endpoint_timeout' => 60, /* not implemented in ARC2 preview */ danielebarchiesi@4: 'endpoint_read_key' => '', /* optional */ danielebarchiesi@4: 'endpoint_write_key' => 'somekey', /* optional */ danielebarchiesi@4: 'endpoint_max_limit' => 500, /* optional */ danielebarchiesi@4: ); danielebarchiesi@4: danielebarchiesi@4: /* instantiation */ danielebarchiesi@4: if ($type == SPARQL_ENDPOINT) { danielebarchiesi@4: $store = ARC2::getStoreEndpoint($config); danielebarchiesi@4: } danielebarchiesi@4: else { danielebarchiesi@4: $store = ARC2::getStore($config); danielebarchiesi@4: } danielebarchiesi@4: if (!$store->isSetUp()) { danielebarchiesi@4: $store->setUp(); danielebarchiesi@4: } danielebarchiesi@4: return $store; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Runs a query against an endpoint. danielebarchiesi@4: * danielebarchiesi@4: * @param $query danielebarchiesi@4: * The SPARQL query to execute. danielebarchiesi@4: * @param $endpoint danielebarchiesi@4: * The endpoint to try the query against. danielebarchiesi@4: * @options danielebarchiesi@4: * Options to use with the remote or local store, as passed to danielebarchiesi@4: * sparql_request. danielebarchiesi@4: */ danielebarchiesi@4: function _sparql_request($query, $endpoint) { danielebarchiesi@4: // Initialize connection with the endpoint. danielebarchiesi@4: $store = _sparql_init_remote_store($endpoint); danielebarchiesi@4: danielebarchiesi@4: // Execute the query. danielebarchiesi@4: $rs = $store->query($query); danielebarchiesi@4: if ($errors = $store->getErrors()) { danielebarchiesi@4: // Log errors. danielebarchiesi@4: foreach ($errors as $error) { danielebarchiesi@4: trigger_error($error, E_USER_ERROR); danielebarchiesi@4: } danielebarchiesi@4: return NULL; danielebarchiesi@4: } danielebarchiesi@4: else { danielebarchiesi@4: // Success! danielebarchiesi@4: return $rs; danielebarchiesi@4: } danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Sets up an ARC2 RDF local repository. danielebarchiesi@4: * danielebarchiesi@4: * @param $name danielebarchiesi@4: * The name of the local repository. danielebarchiesi@4: * @param $endpoint danielebarchiesi@4: * Set to TRUE if this store should also be setup as a SPARQL endpoint. danielebarchiesi@4: * @return danielebarchiesi@4: * An ARC2 store object. danielebarchiesi@4: */ danielebarchiesi@4: function _sparql_init_store($name, $endpoint = FALSE) { danielebarchiesi@4: // @todo fix this. Error reporting is off because ARC2 throws strict warnings. danielebarchiesi@4: error_reporting(0); danielebarchiesi@4: danielebarchiesi@4: $db_spec = $GLOBALS['databases']['default']['default']; danielebarchiesi@4: danielebarchiesi@4: $config = array( danielebarchiesi@4: /* db */ danielebarchiesi@4: 'db_name' => $db_spec['database'], danielebarchiesi@4: 'db_user' => $db_spec['username'], danielebarchiesi@4: 'db_pwd' => isset($db_spec['password']) ? $db_spec['password'] : '', danielebarchiesi@4: /* store */ danielebarchiesi@4: 'store_name' => $name, danielebarchiesi@4: danielebarchiesi@4: /* endpoint */ danielebarchiesi@4: 'endpoint_features' => array( danielebarchiesi@4: 'select', 'construct', 'ask', 'describe', danielebarchiesi@4: //'load', 'insert', 'delete', danielebarchiesi@4: 'dump' /* dump is a special command for streaming SPOG export */ danielebarchiesi@4: ), danielebarchiesi@4: 'endpoint_timeout' => 60, /* not implemented in ARC2 preview */ danielebarchiesi@4: 'endpoint_read_key' => '', /* optional */ danielebarchiesi@4: 'endpoint_write_key' => '', /* optional */ danielebarchiesi@4: 'endpoint_max_limit' => 500, /* optional */ danielebarchiesi@4: ); danielebarchiesi@4: danielebarchiesi@4: // If this site is exposing a SPARQL endpoint, instantiate the endpoint with danielebarchiesi@4: // the endpoint class which can be used for HTTP-based data access. danielebarchiesi@4: if ($endpoint) { danielebarchiesi@4: $store = ARC2::getStoreEndpoint($config); danielebarchiesi@4: } danielebarchiesi@4: // Otherwise, instantiate a locally accessible store. danielebarchiesi@4: else { danielebarchiesi@4: $store = ARC2::getStore($config); danielebarchiesi@4: } danielebarchiesi@4: if (!$store->isSetUp()) { danielebarchiesi@4: $store->setUp(); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: return $store; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Sets up an ARC2 RDF remote store. danielebarchiesi@4: * danielebarchiesi@4: * @param $endpoint danielebarchiesi@4: * The remote SPARQL endpoint. danielebarchiesi@4: * @return danielebarchiesi@4: * An ARC2 store object. danielebarchiesi@4: */ danielebarchiesi@4: function _sparql_init_remote_store($endpoint) { danielebarchiesi@4: $endpoint_url = $endpoint->uri; danielebarchiesi@4: danielebarchiesi@4: // If there are query parameters that need to be added before ARC2 processing, danielebarchiesi@4: // add them here. Filter the array to remove empty values. danielebarchiesi@4: if (isset($endpoint->options['query_parameters'])) { danielebarchiesi@4: $endpoint_url = url($endpoint_url, array('query' => array_filter($endpoint->options['query_parameters']))); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: $config = array( danielebarchiesi@4: /* remote endpoint */ danielebarchiesi@4: 'remote_store_endpoint' => $endpoint_url, danielebarchiesi@4: ); danielebarchiesi@4: danielebarchiesi@4: /* instantiation */ danielebarchiesi@4: $store = ARC2::getRemoteStore($config); danielebarchiesi@4: danielebarchiesi@4: return $store; danielebarchiesi@4: }