Mercurial > hg > rr-repo
annotate sites/all/modules/rdfx/rdfx.import.inc @ 4:ce11bbd8f642
added modules
author | danieleb <danielebarchiesi@me.com> |
---|---|
date | Thu, 19 Sep 2013 10:38:44 +0100 |
parents | |
children |
rev | line source |
---|---|
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 } |