danielebarchiesi@4: 'SPARQL endpoint', danielebarchiesi@4: 'page callback' => 'sparql_endpoint_sparql_endpoint', danielebarchiesi@4: 'access arguments' => array('access content'), danielebarchiesi@4: ); danielebarchiesi@4: $items['sparql_endpoint_index'] = array( danielebarchiesi@4: 'title' => 'Build RDF index', danielebarchiesi@4: 'page callback' => 'sparql_endpoint_index_rdf', danielebarchiesi@4: 'access arguments' => array('administer rdf'), danielebarchiesi@4: ); danielebarchiesi@4: return $items; danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function sparql_endpoint_index_rdf() { danielebarchiesi@4: // Instantiate the ARC2 local store. danielebarchiesi@4: $store = sparql_get_store('site_endpoint'); danielebarchiesi@4: danielebarchiesi@4: // Emtpy the local store. danielebarchiesi@4: // FIXME optimize by doing this only when creating/saving a node. danielebarchiesi@4: $store->reset(); danielebarchiesi@4: danielebarchiesi@4: // Index all the nodes which are published. danielebarchiesi@4: $query = db_select('node', 'n')->extend('PagerDefault')->extend('TableSort'); danielebarchiesi@4: $query->condition('n.status', 1); danielebarchiesi@4: $ids = $query danielebarchiesi@4: ->fields('n',array('nid')) danielebarchiesi@4: ->limit(500) danielebarchiesi@4: ->execute() danielebarchiesi@4: ->fetchCol(); danielebarchiesi@4: danielebarchiesi@4: foreach ($ids as $id) { danielebarchiesi@4: $rdf = rdfx_get_rdf_model('node', $id); danielebarchiesi@4: $store->insert($rdf->index, $rdf->uri); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: // Index all the users. danielebarchiesi@4: $query = db_select('users', 'u')->extend('PagerDefault')->extend('TableSort'); danielebarchiesi@4: $query->condition('u.uid', 0, '<>'); danielebarchiesi@4: $ids = $query danielebarchiesi@4: ->fields('u', array('uid')) danielebarchiesi@4: ->limit(500) danielebarchiesi@4: ->execute() danielebarchiesi@4: ->fetchCol(); danielebarchiesi@4: danielebarchiesi@4: foreach ($ids as $id) { danielebarchiesi@4: $rdf = rdfx_get_rdf_model('user', $id); danielebarchiesi@4: $store->insert($rdf->index, $rdf->uri); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: // Index all the terms. danielebarchiesi@4: $query = db_select('taxonomy_term_data', 't')->extend('PagerDefault')->extend('TableSort'); danielebarchiesi@4: $ids = $query danielebarchiesi@4: ->fields('t', array('tid')) danielebarchiesi@4: ->limit(500) danielebarchiesi@4: ->execute() danielebarchiesi@4: ->fetchCol(); danielebarchiesi@4: danielebarchiesi@4: foreach ($ids as $id) { danielebarchiesi@4: $rdf = rdfx_get_rdf_model('taxonomy_term', $id); danielebarchiesi@4: $store->insert($rdf->index, $rdf->uri); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: return t('The RDF index of the site has been rebuilt. Browse to the SPARQL endpoint to query it.', array('@endpoint' => url('sparql'))); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: function sparql_endpoint_sparql_endpoint() { danielebarchiesi@4: // Instantiate the ARC2 SPARQL endpoint. danielebarchiesi@4: $ep = sparql_get_store('site_endpoint', SPARQL_ENDPOINT); danielebarchiesi@4: $ep->go(); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Implements hook_node_insert(). danielebarchiesi@4: */ danielebarchiesi@4: function sparql_endpoint_node_insert($node) { danielebarchiesi@4: // Instantiate the ARC2 local store. danielebarchiesi@4: $store = sparql_get_store('site_endpoint'); danielebarchiesi@4: danielebarchiesi@4: // Attach RDF mappings and build RDF model for the node. danielebarchiesi@4: $node = node_load($node->nid); danielebarchiesi@4: $rdf = rdfx_get_rdf_model('node', $node); danielebarchiesi@4: danielebarchiesi@4: // Add node to the store. danielebarchiesi@4: $store->insert($rdf->index, $rdf->uri); danielebarchiesi@4: } danielebarchiesi@4: danielebarchiesi@4: /** danielebarchiesi@4: * Implements hook_node_update(). danielebarchiesi@4: */ danielebarchiesi@4: function sparql_endpoint_node_update($node) { danielebarchiesi@4: // Instantiate the ARC2 local store. danielebarchiesi@4: $store = sparql_get_store('site_endpoint'); danielebarchiesi@4: danielebarchiesi@4: // Build RDF model for the node. danielebarchiesi@4: $rdf = rdfx_get_rdf_model('node', $node); danielebarchiesi@4: danielebarchiesi@4: // Cleans out the graph and reindex the node. danielebarchiesi@4: $store->query('DELETE FROM <' . $rdf->uri . '>'); danielebarchiesi@4: $store->insert($rdf->index, $rdf->uri); danielebarchiesi@4: }