Mercurial > hg > rr-repo
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sites/all/modules/rdfx/rdfx.import.inc Thu Sep 19 10:38:44 2013 +0100 @@ -0,0 +1,63 @@ +<?php + +/** + * @file + * Functions for importing and parsing RDF data. + */ + +/** + * Loads an RDF file from an HTTP URI or local file, parses it, and builds an + * RDF schema representation (associative array) from it. + * + * @param $uri + * The namespace URI for this graph. + * @param $prefix + * The prefix for this graph. + * @param $filename (optional) + * A local RDF file to parse. + * @return array + * @throws Exception On network or parse error + */ +function rdfx_fetch_rdf($uri, $prefix, $filename = NULL) { + if ($filename != NULL) { + if (!is_file($filename)) { + throw new Exception("File not found: '$filename'"); + return; + } + $content = file_get_contents($filename); + return _rdfx_parse_rdf($uri, $content); + } + + $schema_url = $uri; + $i = strpos($schema_url, '#'); + if ($i !== false) { + $schema_url = substr($schema_url, 0, $i); + } + return _rdfx_parse_rdf($uri); +} + +function _rdfx_parse_rdf($base_uri) { + $namespaces = array(); + + $parser = ARC2::getRDFParser(); + $parser->parse($base_uri); + // If this is an N3 file, the namespaces array isn't populated. Iterate + // through the attached parser object's prefixes and remove the colon from + // the end of the prefix. + // @todo File an issue with ARC2. + + switch ($parser->format) { + case 'turtle': + foreach ($parser->parser->prefixes as $prefix => $uri) { + $formatted_prefix = str_replace(':', '', $prefix); + $namespaces[$formatted_prefix] = $uri; + } + break; + default: + foreach ($parser->parser->nsp as $uri => $prefix) { + $namespaces[$prefix] = $uri; + } + break; + } + return array($parser->getTriples(), $namespaces); +}