Mercurial > hg > rr-repo
diff sites/all/modules/sparql/sparql_endpoint/sparql_endpoint.module @ 4:ce11bbd8f642
added modules
author | danieleb <danielebarchiesi@me.com> |
---|---|
date | Thu, 19 Sep 2013 10:38:44 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sites/all/modules/sparql/sparql_endpoint/sparql_endpoint.module Thu Sep 19 10:38:44 2013 +0100 @@ -0,0 +1,107 @@ +<?php + +/** + * Implements hook_menu(). + */ +function sparql_endpoint_menu() { + // @todo use access RDF data permission instead of access content. + $items['sparql'] = array( + 'title' => 'SPARQL endpoint', + 'page callback' => 'sparql_endpoint_sparql_endpoint', + 'access arguments' => array('access content'), + ); + $items['sparql_endpoint_index'] = array( + 'title' => 'Build RDF index', + 'page callback' => 'sparql_endpoint_index_rdf', + 'access arguments' => array('administer rdf'), + ); + return $items; +} + +function sparql_endpoint_index_rdf() { + // Instantiate the ARC2 local store. + $store = sparql_get_store('site_endpoint'); + + // Emtpy the local store. + // FIXME optimize by doing this only when creating/saving a node. + $store->reset(); + + // Index all the nodes which are published. + $query = db_select('node', 'n')->extend('PagerDefault')->extend('TableSort'); + $query->condition('n.status', 1); + $ids = $query + ->fields('n',array('nid')) + ->limit(500) + ->execute() + ->fetchCol(); + + foreach ($ids as $id) { + $rdf = rdfx_get_rdf_model('node', $id); + $store->insert($rdf->index, $rdf->uri); + } + + // Index all the users. + $query = db_select('users', 'u')->extend('PagerDefault')->extend('TableSort'); + $query->condition('u.uid', 0, '<>'); + $ids = $query + ->fields('u', array('uid')) + ->limit(500) + ->execute() + ->fetchCol(); + + foreach ($ids as $id) { + $rdf = rdfx_get_rdf_model('user', $id); + $store->insert($rdf->index, $rdf->uri); + } + + // Index all the terms. + $query = db_select('taxonomy_term_data', 't')->extend('PagerDefault')->extend('TableSort'); + $ids = $query + ->fields('t', array('tid')) + ->limit(500) + ->execute() + ->fetchCol(); + + foreach ($ids as $id) { + $rdf = rdfx_get_rdf_model('taxonomy_term', $id); + $store->insert($rdf->index, $rdf->uri); + } + + return t('The RDF index of the site has been rebuilt. Browse to the <a href="@endpoint">SPARQL endpoint</a> to query it.', array('@endpoint' => url('sparql'))); +} + +function sparql_endpoint_sparql_endpoint() { + // Instantiate the ARC2 SPARQL endpoint. + $ep = sparql_get_store('site_endpoint', SPARQL_ENDPOINT); + $ep->go(); +} + +/** + * Implements hook_node_insert(). + */ +function sparql_endpoint_node_insert($node) { + // Instantiate the ARC2 local store. + $store = sparql_get_store('site_endpoint'); + + // Attach RDF mappings and build RDF model for the node. + $node = node_load($node->nid); + $rdf = rdfx_get_rdf_model('node', $node); + + // Add node to the store. + $store->insert($rdf->index, $rdf->uri); +} + +/** + * Implements hook_node_update(). + */ +function sparql_endpoint_node_update($node) { + // Instantiate the ARC2 local store. + $store = sparql_get_store('site_endpoint'); + + // Build RDF model for the node. + $rdf = rdfx_get_rdf_model('node', $node); + + // Cleans out the graph and reindex the node. + $store->query('DELETE FROM <' . $rdf->uri . '>'); + $store->insert($rdf->index, $rdf->uri); +}