8 * Copyright (c) 2009-2013 Nicholas J Humfrey. All rights reserved.
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions are met:
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright notice,
15 * this list of conditions and the following disclaimer in the documentation
16 * and/or other materials provided with the distribution.
17 * 3. The name of the author 'Nicholas J Humfrey" may be used to endorse or
18 * promote products derived from this software without specific prior
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 * POSSIBILITY OF SUCH DAMAGE.
34 * @copyright Copyright (c) 2009-2013 Nicholas J Humfrey
35 * @license http://www.opensource.org/licenses/bsd-license.php
39 * Class to parse JSON-LD to an EasyRdf_Graph
42 * @copyright Copyright (c) 2014 Markus Lanthaler
43 * @author Markus Lanthaler <mail@markus-lanthaler.com>
44 * @license http://www.opensource.org/licenses/bsd-license.php
46 class EasyRdf_Parser_JsonLd extends EasyRdf_Parser
49 * Parse a JSON-LD document into an EasyRdf_Graph
51 * Attention: Since JSON-LD supports datasets, a document may contain
52 * multiple graphs and not just one. This parser returns only the
53 * default graph. An alternative would be to merge all graphs.
55 * @param object EasyRdf_Graph $graph the graph to load the data into
56 * @param string $data the RDF document data
57 * @param string $format the format of the input data
58 * @param string $baseUri the base URI of the data being parsed
59 * @return integer The number of triples added to the graph
61 public function parse($graph, $data, $format, $baseUri)
63 parent::checkParseParams($graph, $data, $format, $baseUri);
65 if ($format != 'jsonld') {
66 throw new EasyRdf_Exception(
67 "EasyRdf_Parser_JsonLd does not support $format"
72 $quads = \ML\JsonLD\JsonLD::toRdf($data, array('base' => $baseUri));
73 } catch (\ML\JsonLD\Exception\JsonLdException $e) {
74 throw new EasyRdf_Parser_Exception($e->getMessage());
77 foreach ($quads as $quad) {
78 // Ignore named graphs
79 if (null !== $quad->getGraph()) {
83 $subject = (string) $quad->getSubject();
84 if ('_:' === substr($subject, 0, 2)) {
85 $subject = $this->remapBnode($subject);
88 $predicate = (string) $quad->getProperty();
90 if ($quad->getObject() instanceof \ML\IRI\IRI) {
93 'value' => (string) $quad->getObject()
96 if ('_:' === substr($object['value'], 0, 2)) {
99 'value' => $this->remapBnode($object['value'])
105 'value' => $quad->getObject()->getValue()
108 if ($quad->getObject() instanceof \ML\JsonLD\LanguageTaggedString) {
109 $object['lang'] = $quad->getObject()->getLanguage();
111 $object['datatype'] = $quad->getObject()->getType();
115 $this->addTriple($subject, $predicate, $object);
118 return $this->tripleCount;