danielebarchiesi@4
|
1 <?php
|
danielebarchiesi@4
|
2
|
danielebarchiesi@4
|
3 /**
|
danielebarchiesi@4
|
4 * @file
|
danielebarchiesi@4
|
5 * Functions for importing and parsing RDF data.
|
danielebarchiesi@4
|
6 */
|
danielebarchiesi@4
|
7
|
danielebarchiesi@4
|
8 /**
|
danielebarchiesi@4
|
9 * Loads an RDF file from an HTTP URI or local file, parses it, and builds an
|
danielebarchiesi@4
|
10 * RDF schema representation (associative array) from it.
|
danielebarchiesi@4
|
11 *
|
danielebarchiesi@4
|
12 * @param $uri
|
danielebarchiesi@4
|
13 * The namespace URI for this graph.
|
danielebarchiesi@4
|
14 * @param $prefix
|
danielebarchiesi@4
|
15 * The prefix for this graph.
|
danielebarchiesi@4
|
16 * @param $filename (optional)
|
danielebarchiesi@4
|
17 * A local RDF file to parse.
|
danielebarchiesi@4
|
18 * @return array
|
danielebarchiesi@4
|
19 * @throws Exception On network or parse error
|
danielebarchiesi@4
|
20 */
|
danielebarchiesi@4
|
21 function rdfx_fetch_rdf($uri, $prefix, $filename = NULL) {
|
danielebarchiesi@4
|
22 if ($filename != NULL) {
|
danielebarchiesi@4
|
23 if (!is_file($filename)) {
|
danielebarchiesi@4
|
24 throw new Exception("File not found: '$filename'");
|
danielebarchiesi@4
|
25 return;
|
danielebarchiesi@4
|
26 }
|
danielebarchiesi@4
|
27 $content = file_get_contents($filename);
|
danielebarchiesi@4
|
28 return _rdfx_parse_rdf($uri, $content);
|
danielebarchiesi@4
|
29 }
|
danielebarchiesi@4
|
30
|
danielebarchiesi@4
|
31 $schema_url = $uri;
|
danielebarchiesi@4
|
32 $i = strpos($schema_url, '#');
|
danielebarchiesi@4
|
33 if ($i !== false) {
|
danielebarchiesi@4
|
34 $schema_url = substr($schema_url, 0, $i);
|
danielebarchiesi@4
|
35 }
|
danielebarchiesi@4
|
36 return _rdfx_parse_rdf($uri);
|
danielebarchiesi@4
|
37 }
|
danielebarchiesi@4
|
38
|
danielebarchiesi@4
|
39 function _rdfx_parse_rdf($base_uri) {
|
danielebarchiesi@4
|
40 $namespaces = array();
|
danielebarchiesi@4
|
41
|
danielebarchiesi@4
|
42 $parser = ARC2::getRDFParser();
|
danielebarchiesi@4
|
43 $parser->parse($base_uri);
|
danielebarchiesi@4
|
44 // If this is an N3 file, the namespaces array isn't populated. Iterate
|
danielebarchiesi@4
|
45 // through the attached parser object's prefixes and remove the colon from
|
danielebarchiesi@4
|
46 // the end of the prefix.
|
danielebarchiesi@4
|
47 // @todo File an issue with ARC2.
|
danielebarchiesi@4
|
48
|
danielebarchiesi@4
|
49 switch ($parser->format) {
|
danielebarchiesi@4
|
50 case 'turtle':
|
danielebarchiesi@4
|
51 foreach ($parser->parser->prefixes as $prefix => $uri) {
|
danielebarchiesi@4
|
52 $formatted_prefix = str_replace(':', '', $prefix);
|
danielebarchiesi@4
|
53 $namespaces[$formatted_prefix] = $uri;
|
danielebarchiesi@4
|
54 }
|
danielebarchiesi@4
|
55 break;
|
danielebarchiesi@4
|
56 default:
|
danielebarchiesi@4
|
57 foreach ($parser->parser->nsp as $uri => $prefix) {
|
danielebarchiesi@4
|
58 $namespaces[$prefix] = $uri;
|
danielebarchiesi@4
|
59 }
|
danielebarchiesi@4
|
60 break;
|
danielebarchiesi@4
|
61 }
|
danielebarchiesi@4
|
62 return array($parser->getTriples(), $namespaces);
|
danielebarchiesi@4
|
63 }
|