danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2
|
danielebarchiesi@4
|
3 /**
|
danielebarchiesi@4
|
4 * Implements hook_menu().
|
danielebarchiesi@4
|
5 */
|
danielebarchiesi@4
|
6 function sparql_endpoint_menu() {
|
danielebarchiesi@4
|
7 // @todo use access RDF data permission instead of access content.
|
danielebarchiesi@4
|
8 $items['sparql'] = array(
|
danielebarchiesi@4
|
9 'title' => 'SPARQL endpoint',
|
danielebarchiesi@4
|
10 'page callback' => 'sparql_endpoint_sparql_endpoint',
|
danielebarchiesi@4
|
11 'access arguments' => array('access content'),
|
danielebarchiesi@4
|
12 );
|
danielebarchiesi@4
|
13 $items['sparql_endpoint_index'] = array(
|
danielebarchiesi@4
|
14 'title' => 'Build RDF index',
|
danielebarchiesi@4
|
15 'page callback' => 'sparql_endpoint_index_rdf',
|
danielebarchiesi@4
|
16 'access arguments' => array('administer rdf'),
|
danielebarchiesi@4
|
17 );
|
danielebarchiesi@4
|
18 return $items;
|
danielebarchiesi@4
|
19 }
|
danielebarchiesi@4
|
20
|
danielebarchiesi@4
|
21 function sparql_endpoint_index_rdf() {
|
danielebarchiesi@4
|
22 // Instantiate the ARC2 local store.
|
danielebarchiesi@4
|
23 $store = sparql_get_store('site_endpoint');
|
danielebarchiesi@4
|
24
|
danielebarchiesi@4
|
25 // Emtpy the local store.
|
danielebarchiesi@4
|
26 // FIXME optimize by doing this only when creating/saving a node.
|
danielebarchiesi@4
|
27 $store->reset();
|
danielebarchiesi@4
|
28
|
danielebarchiesi@4
|
29 // Index all the nodes which are published.
|
danielebarchiesi@4
|
30 $query = db_select('node', 'n')->extend('PagerDefault')->extend('TableSort');
|
danielebarchiesi@4
|
31 $query->condition('n.status', 1);
|
danielebarchiesi@4
|
32 $ids = $query
|
danielebarchiesi@4
|
33 ->fields('n',array('nid'))
|
danielebarchiesi@4
|
34 ->limit(500)
|
danielebarchiesi@4
|
35 ->execute()
|
danielebarchiesi@4
|
36 ->fetchCol();
|
danielebarchiesi@4
|
37
|
danielebarchiesi@4
|
38 foreach ($ids as $id) {
|
danielebarchiesi@4
|
39 $rdf = rdfx_get_rdf_model('node', $id);
|
danielebarchiesi@4
|
40 $store->insert($rdf->index, $rdf->uri);
|
danielebarchiesi@4
|
41 }
|
danielebarchiesi@4
|
42
|
danielebarchiesi@4
|
43 // Index all the users.
|
danielebarchiesi@4
|
44 $query = db_select('users', 'u')->extend('PagerDefault')->extend('TableSort');
|
danielebarchiesi@4
|
45 $query->condition('u.uid', 0, '<>');
|
danielebarchiesi@4
|
46 $ids = $query
|
danielebarchiesi@4
|
47 ->fields('u', array('uid'))
|
danielebarchiesi@4
|
48 ->limit(500)
|
danielebarchiesi@4
|
49 ->execute()
|
danielebarchiesi@4
|
50 ->fetchCol();
|
danielebarchiesi@4
|
51
|
danielebarchiesi@4
|
52 foreach ($ids as $id) {
|
danielebarchiesi@4
|
53 $rdf = rdfx_get_rdf_model('user', $id);
|
danielebarchiesi@4
|
54 $store->insert($rdf->index, $rdf->uri);
|
danielebarchiesi@4
|
55 }
|
danielebarchiesi@4
|
56
|
danielebarchiesi@4
|
57 // Index all the terms.
|
danielebarchiesi@4
|
58 $query = db_select('taxonomy_term_data', 't')->extend('PagerDefault')->extend('TableSort');
|
danielebarchiesi@4
|
59 $ids = $query
|
danielebarchiesi@4
|
60 ->fields('t', array('tid'))
|
danielebarchiesi@4
|
61 ->limit(500)
|
danielebarchiesi@4
|
62 ->execute()
|
danielebarchiesi@4
|
63 ->fetchCol();
|
danielebarchiesi@4
|
64
|
danielebarchiesi@4
|
65 foreach ($ids as $id) {
|
danielebarchiesi@4
|
66 $rdf = rdfx_get_rdf_model('taxonomy_term', $id);
|
danielebarchiesi@4
|
67 $store->insert($rdf->index, $rdf->uri);
|
danielebarchiesi@4
|
68 }
|
danielebarchiesi@4
|
69
|
danielebarchiesi@4
|
70 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')));
|
danielebarchiesi@4
|
71 }
|
danielebarchiesi@4
|
72
|
danielebarchiesi@4
|
73 function sparql_endpoint_sparql_endpoint() {
|
danielebarchiesi@4
|
74 // Instantiate the ARC2 SPARQL endpoint.
|
danielebarchiesi@4
|
75 $ep = sparql_get_store('site_endpoint', SPARQL_ENDPOINT);
|
danielebarchiesi@4
|
76 $ep->go();
|
danielebarchiesi@4
|
77 }
|
danielebarchiesi@4
|
78
|
danielebarchiesi@4
|
79 /**
|
danielebarchiesi@4
|
80 * Implements hook_node_insert().
|
danielebarchiesi@4
|
81 */
|
danielebarchiesi@4
|
82 function sparql_endpoint_node_insert($node) {
|
danielebarchiesi@4
|
83 // Instantiate the ARC2 local store.
|
danielebarchiesi@4
|
84 $store = sparql_get_store('site_endpoint');
|
danielebarchiesi@4
|
85
|
danielebarchiesi@4
|
86 // Attach RDF mappings and build RDF model for the node.
|
danielebarchiesi@4
|
87 $node = node_load($node->nid);
|
danielebarchiesi@4
|
88 $rdf = rdfx_get_rdf_model('node', $node);
|
danielebarchiesi@4
|
89
|
danielebarchiesi@4
|
90 // Add node to the store.
|
danielebarchiesi@4
|
91 $store->insert($rdf->index, $rdf->uri);
|
danielebarchiesi@4
|
92 }
|
danielebarchiesi@4
|
93
|
danielebarchiesi@4
|
94 /**
|
danielebarchiesi@4
|
95 * Implements hook_node_update().
|
danielebarchiesi@4
|
96 */
|
danielebarchiesi@4
|
97 function sparql_endpoint_node_update($node) {
|
danielebarchiesi@4
|
98 // Instantiate the ARC2 local store.
|
danielebarchiesi@4
|
99 $store = sparql_get_store('site_endpoint');
|
danielebarchiesi@4
|
100
|
danielebarchiesi@4
|
101 // Build RDF model for the node.
|
danielebarchiesi@4
|
102 $rdf = rdfx_get_rdf_model('node', $node);
|
danielebarchiesi@4
|
103
|
danielebarchiesi@4
|
104 // Cleans out the graph and reindex the node.
|
danielebarchiesi@4
|
105 $store->query('DELETE FROM <' . $rdf->uri . '>');
|
danielebarchiesi@4
|
106 $store->insert($rdf->index, $rdf->uri);
|
danielebarchiesi@4
|
107 }
|