annotate sites/all/modules/sparql/sparql.module @ 9:830c812b520f

added smtp module
author root <root@paio.local>
date Mon, 28 Oct 2013 15:34:27 +0000
parents ce11bbd8f642
children
rev   line source
danielebarchiesi@4 1 <?php
danielebarchiesi@4 2 /*
danielebarchiesi@4 3 * @file
danielebarchiesi@4 4 * API function for running queries on external SPARQL endpoints.
danielebarchiesi@4 5 */
danielebarchiesi@4 6
danielebarchiesi@4 7 define('SPARQL_ENDPOINT', 'endpoint');
danielebarchiesi@4 8
danielebarchiesi@4 9 /**
danielebarchiesi@4 10 * Implements hook_help().
danielebarchiesi@4 11 */
danielebarchiesi@4 12 function sparql_help($path, $arg = NULL) {
danielebarchiesi@4 13 switch ($path) {
danielebarchiesi@4 14 case 'admin/settings/sparql':
danielebarchiesi@4 15 return '<p>' . t('The sparql module provides an interface for other modules to perform sparql queries') . '</p>'; // TODO
danielebarchiesi@4 16 }
danielebarchiesi@4 17 }
danielebarchiesi@4 18
danielebarchiesi@4 19 /**
danielebarchiesi@4 20 * Executes a SPARQL query.
danielebarchiesi@4 21 *
danielebarchiesi@4 22 * @param $query
danielebarchiesi@4 23 * The SPARQL query to execute.
danielebarchiesi@4 24 * @param $endpoint
danielebarchiesi@4 25 * An endpoint object, as returned by SPARQL Registry.
danielebarchiesi@4 26 * @return
danielebarchiesi@4 27 * The SPARQL results.
danielebarchiesi@4 28 */
danielebarchiesi@4 29 function sparql_request($query, $endpoint) {
danielebarchiesi@4 30 $rows = _sparql_request($query, $endpoint);
danielebarchiesi@4 31 return $rows;
danielebarchiesi@4 32 }
danielebarchiesi@4 33
danielebarchiesi@4 34 function sparql_get_store($name, $type = 'store') {
danielebarchiesi@4 35 $db = $GLOBALS['databases']['default']['default'];
danielebarchiesi@4 36 $name = "sparql_store_$name";
danielebarchiesi@4 37
danielebarchiesi@4 38 $config = array(
danielebarchiesi@4 39 /* db */
danielebarchiesi@4 40 'db_host' => $db['host'],
danielebarchiesi@4 41 'db_name' => $db['database'],
danielebarchiesi@4 42 'db_user' => $db['username'],
danielebarchiesi@4 43 'db_pwd' => $db['password'],
danielebarchiesi@4 44 /* store */
danielebarchiesi@4 45 'store_name' => $name,
danielebarchiesi@4 46
danielebarchiesi@4 47 /* endpoint */
danielebarchiesi@4 48 'endpoint_features' => array(
danielebarchiesi@4 49 'select', 'construct', 'ask', 'describe',
danielebarchiesi@4 50 'load', 'insert', 'delete',
danielebarchiesi@4 51 'dump' /* dump is a special command for streaming SPOG export */
danielebarchiesi@4 52 ),
danielebarchiesi@4 53 'endpoint_timeout' => 60, /* not implemented in ARC2 preview */
danielebarchiesi@4 54 'endpoint_read_key' => '', /* optional */
danielebarchiesi@4 55 'endpoint_write_key' => 'somekey', /* optional */
danielebarchiesi@4 56 'endpoint_max_limit' => 500, /* optional */
danielebarchiesi@4 57 );
danielebarchiesi@4 58
danielebarchiesi@4 59 /* instantiation */
danielebarchiesi@4 60 if ($type == SPARQL_ENDPOINT) {
danielebarchiesi@4 61 $store = ARC2::getStoreEndpoint($config);
danielebarchiesi@4 62 }
danielebarchiesi@4 63 else {
danielebarchiesi@4 64 $store = ARC2::getStore($config);
danielebarchiesi@4 65 }
danielebarchiesi@4 66 if (!$store->isSetUp()) {
danielebarchiesi@4 67 $store->setUp();
danielebarchiesi@4 68 }
danielebarchiesi@4 69 return $store;
danielebarchiesi@4 70 }
danielebarchiesi@4 71
danielebarchiesi@4 72 /**
danielebarchiesi@4 73 * Runs a query against an endpoint.
danielebarchiesi@4 74 *
danielebarchiesi@4 75 * @param $query
danielebarchiesi@4 76 * The SPARQL query to execute.
danielebarchiesi@4 77 * @param $endpoint
danielebarchiesi@4 78 * The endpoint to try the query against.
danielebarchiesi@4 79 * @options
danielebarchiesi@4 80 * Options to use with the remote or local store, as passed to
danielebarchiesi@4 81 * sparql_request.
danielebarchiesi@4 82 */
danielebarchiesi@4 83 function _sparql_request($query, $endpoint) {
danielebarchiesi@4 84 // Initialize connection with the endpoint.
danielebarchiesi@4 85 $store = _sparql_init_remote_store($endpoint);
danielebarchiesi@4 86
danielebarchiesi@4 87 // Execute the query.
danielebarchiesi@4 88 $rs = $store->query($query);
danielebarchiesi@4 89 if ($errors = $store->getErrors()) {
danielebarchiesi@4 90 // Log errors.
danielebarchiesi@4 91 foreach ($errors as $error) {
danielebarchiesi@4 92 trigger_error($error, E_USER_ERROR);
danielebarchiesi@4 93 }
danielebarchiesi@4 94 return NULL;
danielebarchiesi@4 95 }
danielebarchiesi@4 96 else {
danielebarchiesi@4 97 // Success!
danielebarchiesi@4 98 return $rs;
danielebarchiesi@4 99 }
danielebarchiesi@4 100 }
danielebarchiesi@4 101
danielebarchiesi@4 102 /**
danielebarchiesi@4 103 * Sets up an ARC2 RDF local repository.
danielebarchiesi@4 104 *
danielebarchiesi@4 105 * @param $name
danielebarchiesi@4 106 * The name of the local repository.
danielebarchiesi@4 107 * @param $endpoint
danielebarchiesi@4 108 * Set to TRUE if this store should also be setup as a SPARQL endpoint.
danielebarchiesi@4 109 * @return
danielebarchiesi@4 110 * An ARC2 store object.
danielebarchiesi@4 111 */
danielebarchiesi@4 112 function _sparql_init_store($name, $endpoint = FALSE) {
danielebarchiesi@4 113 // @todo fix this. Error reporting is off because ARC2 throws strict warnings.
danielebarchiesi@4 114 error_reporting(0);
danielebarchiesi@4 115
danielebarchiesi@4 116 $db_spec = $GLOBALS['databases']['default']['default'];
danielebarchiesi@4 117
danielebarchiesi@4 118 $config = array(
danielebarchiesi@4 119 /* db */
danielebarchiesi@4 120 'db_name' => $db_spec['database'],
danielebarchiesi@4 121 'db_user' => $db_spec['username'],
danielebarchiesi@4 122 'db_pwd' => isset($db_spec['password']) ? $db_spec['password'] : '',
danielebarchiesi@4 123 /* store */
danielebarchiesi@4 124 'store_name' => $name,
danielebarchiesi@4 125
danielebarchiesi@4 126 /* endpoint */
danielebarchiesi@4 127 'endpoint_features' => array(
danielebarchiesi@4 128 'select', 'construct', 'ask', 'describe',
danielebarchiesi@4 129 //'load', 'insert', 'delete',
danielebarchiesi@4 130 'dump' /* dump is a special command for streaming SPOG export */
danielebarchiesi@4 131 ),
danielebarchiesi@4 132 'endpoint_timeout' => 60, /* not implemented in ARC2 preview */
danielebarchiesi@4 133 'endpoint_read_key' => '', /* optional */
danielebarchiesi@4 134 'endpoint_write_key' => '', /* optional */
danielebarchiesi@4 135 'endpoint_max_limit' => 500, /* optional */
danielebarchiesi@4 136 );
danielebarchiesi@4 137
danielebarchiesi@4 138 // If this site is exposing a SPARQL endpoint, instantiate the endpoint with
danielebarchiesi@4 139 // the endpoint class which can be used for HTTP-based data access.
danielebarchiesi@4 140 if ($endpoint) {
danielebarchiesi@4 141 $store = ARC2::getStoreEndpoint($config);
danielebarchiesi@4 142 }
danielebarchiesi@4 143 // Otherwise, instantiate a locally accessible store.
danielebarchiesi@4 144 else {
danielebarchiesi@4 145 $store = ARC2::getStore($config);
danielebarchiesi@4 146 }
danielebarchiesi@4 147 if (!$store->isSetUp()) {
danielebarchiesi@4 148 $store->setUp();
danielebarchiesi@4 149 }
danielebarchiesi@4 150
danielebarchiesi@4 151 return $store;
danielebarchiesi@4 152 }
danielebarchiesi@4 153
danielebarchiesi@4 154 /**
danielebarchiesi@4 155 * Sets up an ARC2 RDF remote store.
danielebarchiesi@4 156 *
danielebarchiesi@4 157 * @param $endpoint
danielebarchiesi@4 158 * The remote SPARQL endpoint.
danielebarchiesi@4 159 * @return
danielebarchiesi@4 160 * An ARC2 store object.
danielebarchiesi@4 161 */
danielebarchiesi@4 162 function _sparql_init_remote_store($endpoint) {
danielebarchiesi@4 163 $endpoint_url = $endpoint->uri;
danielebarchiesi@4 164
danielebarchiesi@4 165 // If there are query parameters that need to be added before ARC2 processing,
danielebarchiesi@4 166 // add them here. Filter the array to remove empty values.
danielebarchiesi@4 167 if (isset($endpoint->options['query_parameters'])) {
danielebarchiesi@4 168 $endpoint_url = url($endpoint_url, array('query' => array_filter($endpoint->options['query_parameters'])));
danielebarchiesi@4 169 }
danielebarchiesi@4 170
danielebarchiesi@4 171 $config = array(
danielebarchiesi@4 172 /* remote endpoint */
danielebarchiesi@4 173 'remote_store_endpoint' => $endpoint_url,
danielebarchiesi@4 174 );
danielebarchiesi@4 175
danielebarchiesi@4 176 /* instantiation */
danielebarchiesi@4 177 $store = ARC2::getRemoteStore($config);
danielebarchiesi@4 178
danielebarchiesi@4 179 return $store;
danielebarchiesi@4 180 }