Example #1
0
 /**
  * Method to serialise an EasyRdf\Graph to RDF/PHP
  *
  * http://n2.talis.com/wiki/RDF_PHP_Specification
  * docs/appendix-a-rdf-formats-php.md
  *
  * @param Graph  $graph  An EasyRdf\Graph object.
  * @param string $format The name of the format to convert to.
  * @param array  $options
  *
  * @return string The RDF in the new desired format.
  * @throws Exception
  */
 public function serialise(Graph $graph, $format, array $options = array())
 {
     parent::checkSerialiseParams($format);
     if ($format != 'php') {
         throw new Exception(__CLASS__ . " does not support: {$format}");
     }
     // Graph is already stored as RDF/PHP resource-centric array internally within the EasyRdf\Graph object
     return $graph->toRdfPhp();
 }
Example #2
0
 /**
  * Serialise an EasyRdf\Graph into a JSON-LD document.
  *
  * @param Graph  $graph  An EasyRdf\Graph object.
  * @param string $format The name of the format to convert to.
  * @param array  $options
  *
  * @return string The RDF in the new desired format.
  * @throws Exception
  */
 public function serialise(Graph $graph, $format, array $options = array())
 {
     parent::checkSerialiseParams($format);
     if ($format != 'jsonld') {
         throw new Exception(__CLASS__ . ' does not support: ' . $format);
     }
     $ld_graph = new LD\Graph();
     $nodes = array();
     // cache for id-to-node association
     foreach ($graph->toRdfPhp() as $resource => $properties) {
         if (array_key_exists($resource, $nodes)) {
             $node = $nodes[$resource];
         } else {
             $node = $ld_graph->createNode($resource);
             $nodes[$resource] = $node;
         }
         foreach ($properties as $property => $values) {
             foreach ($values as $value) {
                 if ($value['type'] == 'bnode' or $value['type'] == 'uri') {
                     if (array_key_exists($value['value'], $nodes)) {
                         $_value = $nodes[$value['value']];
                     } else {
                         $_value = $ld_graph->createNode($value['value']);
                         $nodes[$value['value']] = $_value;
                     }
                 } elseif ($value['type'] == 'literal') {
                     if (isset($value['lang'])) {
                         $_value = new LD\LanguageTaggedString($value['value'], $value['lang']);
                     } elseif (isset($value['datatype'])) {
                         $_value = new LD\TypedValue($value['value'], $value['datatype']);
                     } else {
                         $_value = $value['value'];
                     }
                 } else {
                     throw new Exception("Unable to serialise object to JSON-LD: " . $value['type']);
                 }
                 if ($property == "http://www.w3.org/1999/02/22-rdf-syntax-ns#type") {
                     $node->addType($_value);
                 } else {
                     $node->addPropertyValue($property, $_value);
                 }
             }
         }
     }
     // OPTIONS
     $use_native_types = !(isset($options['expand_native_types']) and $options['expand_native_types'] == true);
     $should_compact = (isset($options['compact']) and $options['compact'] == true);
     $should_frame = isset($options['frame']);
     // expanded form
     $data = $ld_graph->toJsonLd($use_native_types);
     if ($should_frame) {
         $data = LD\JsonLD::frame($data, $options['frame'], $options);
     }
     if ($should_compact) {
         // compact form
         $compact_context = isset($options['context']) ? $options['context'] : null;
         $compact_options = array('useNativeTypes' => $use_native_types, 'base' => $graph->getUri());
         $data = LD\JsonLD::compact($data, $compact_context, $compact_options);
     }
     return LD\JsonLD::toString($data);
 }
Example #3
0
 /**
  * Parses a given stream and returns an iterator containing Statement instances representing the
  * previously read data. The stream parses the data not as a whole but in chunks.
  *
  * @param  string            $inputStream   Filename of the stream to parse which contains RDF
  *                                          serialized data.
  * @param  string            $baseUri       The base URI of the parsed content. If this URI is null
  *                                          the inputStreams URL is taken as base URI.
  * @param  string            $serialization The serialization of the inputStream. If null is given
  *                                          the parser will either apply some standard serialization,
  *                                          or the only one it is supporting, or will try to guess
  *                                          the correct serialization, or will throw an Exception.
  *                                          Supported formats are a subset of the following:
  *                                          json, rdfxml, sparql-xml, rdfa, turtle, ntriples, n3
  * @return StatementIterator A StatementIterator containing all the Statements parsed by the parser to
  *                           far.
  * @throws \Exception        If the base URI $baseUri is no valid URI.
  */
 public function parseStreamToIterator($inputStream, $baseUri = null, $serialization = null)
 {
     $graph = new Graph();
     // let EasyRdf guess the format
     if ($serialization === null) {
         // use PHP's file:// stream, if its a local file
         if (false === strpos($inputStream, '://')) {
             $inputStream = 'file://' . $inputStream;
         }
         $serialization = Format::guessFormat(file_get_contents($inputStream));
     } else {
         $serialization = Format::getFormat($serialization);
     }
     // if format is still null, throw exception, because we dont know what format the given stream is
     if (null === $serialization) {
         throw new \Exception('Either given $format is unknown or i could not guess format.');
     }
     $graph->parseFile($inputStream, $serialization->getName());
     // transform parsed data to PHP array
     return $this->rdfPhpToStatementIterator($graph->toRdfPhp());
 }
Example #4
0
 /**
  * Serialise an EasyRdf\Graph into N-Triples
  *
  * @param Graph  $graph  An EasyRdf\Graph object.
  * @param string $format The name of the format to convert to.
  * @param array  $options
  *
  * @return string The RDF in the new desired format.
  * @throws Exception
  */
 public function serialise(Graph $graph, $format, array $options = array())
 {
     parent::checkSerialiseParams($format);
     if ($format == 'ntriples') {
         $nt = '';
         foreach ($graph->toRdfPhp() as $resource => $properties) {
             foreach ($properties as $property => $values) {
                 foreach ($values as $value) {
                     $nt .= $this->serialiseResource($resource) . " ";
                     $nt .= "<" . $this->escapeString($property) . "> ";
                     $nt .= $this->serialiseValue($value) . " .\n";
                 }
             }
         }
         return $nt;
     } else {
         throw new Exception(__CLASS__ . " does not support: {$format}");
     }
 }