Minor dependency updates
[yaffs-website] / vendor / easyrdf / easyrdf / lib / EasyRdf / Parser / RdfPhp.php
1 <?php
2
3 /**
4  * EasyRdf
5  *
6  * LICENSE
7  *
8  * Copyright (c) 2009-2013 Nicholas J Humfrey.  All rights reserved.
9  *
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
19  *    written permission.
20  *
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.
32  *
33  * @package    EasyRdf
34  * @copyright  Copyright (c) 2009-2013 Nicholas J Humfrey
35  * @license    http://www.opensource.org/licenses/bsd-license.php
36  */
37
38 /**
39  * Class to parse RDF with no external dependancies.
40  *
41  * http://n2.talis.com/wiki/RDF_PHP_Specification
42  * docs/appendix-a-rdf-formats-php.md
43  *
44  * @package    EasyRdf
45  * @copyright  Copyright (c) 2009-2013 Nicholas J Humfrey
46  * @license    http://www.opensource.org/licenses/bsd-license.php
47  */
48 class EasyRdf_Parser_RdfPhp extends EasyRdf_Parser
49 {
50     /**
51      * Constructor
52      *
53      * @return object EasyRdf_Parser_RdfPhp
54      */
55     public function __construct()
56     {
57     }
58
59     /**
60       * Parse RDF/PHP into an EasyRdf_Graph
61       *
62       * @param object EasyRdf_Graph $graph   the graph to load the data into
63       * @param string               $data    the RDF document data
64       * @param string               $format  the format of the input data
65       * @param string               $baseUri the base URI of the data being parsed
66       * @return integer             The number of triples added to the graph
67       */
68     public function parse($graph, $data, $format, $baseUri)
69     {
70         $this->checkParseParams($graph, $data, $format, $baseUri);
71
72         if ($format != 'php') {
73             throw new EasyRdf_Exception(
74                 "EasyRdf_Parser_RdfPhp does not support: $format"
75             );
76         }
77
78         foreach ($data as $subject => $properties) {
79             if (substr($subject, 0, 2) === '_:') {
80                 $subject = $this->remapBnode($subject);
81             } elseif (preg_match('/^\w+$/', $subject)) {
82                 # Cope with invalid RDF/JSON serialisations that
83                 # put the node name in, without the _: prefix
84                 # (such as net.fortytwo.sesametools.rdfjson)
85                 $subject = $this->remapBnode($subject);
86             }
87
88             foreach ($properties as $property => $objects) {
89                 foreach ($objects as $object) {
90                     if ($object['type'] === 'bnode') {
91                         $object['value'] = $this->remapBnode($object['value']);
92                     }
93                     $this->addTriple($subject, $property, $object);
94                 }
95             }
96         }
97
98         return $this->tripleCount;
99     }
100 }