/** * 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(); }
/** * 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); }
/** * 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()); }
/** * 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}"); } }