source: Dev/branches/rest-dojo-ui/server/rdfapi/syntax/TriXSerializer.php @ 274

Last change on this file since 274 was 256, checked in by hendrikvanantwerpen, 13 years ago

Reworked project structure based on REST interaction and Dojo library. As
soon as this is stable, the old jQueryUI branch can be removed (it's
kept for reference).

File size: 3.7 KB
Line 
1<?php
2// ----------------------------------------------------------------------------------
3// Class: TriXSerializer
4// ----------------------------------------------------------------------------------
5
6/**
7* Temporary implementation of a TriX-Serializer
8*
9* @version  $Id$
10* @author Daniel Westphal (http://www.d-westphal.de)
11*
12* @package      dataset
13* @access       public
14**/
15class TriXSerializer 
16{
17       
18        /**
19        * Reference to the graphSet
20        *
21        * @var          object GraphSet
22        * @access       private
23        */
24        var $graphSet;
25       
26
27        /**
28        * Constructor
29        * Needs a reference to a graphSet
30        *
31        * @param    GraphSet
32        * @access       public
33        */             
34        function TriXSerializer(&$graphSet)
35        {
36                $this->graphSet=&$graphSet;
37        }
38
39        /**
40        * Serialize the dataset to a TriX string
41        *
42        * @return   string
43        * @access       public
44        */
45        function & serializeToString()
46        {
47                return $this->_serialize();
48        }
49       
50        /**
51        * Serialize the dataset to a TriX string and save in file
52        *
53        * @param   string
54        * @access       public
55        */
56        function serializeToFile($fileName)
57        {
58                $serializedString=&$this->_serialize();
59                $handle = fopen($fileName, 'w');
60                fwrite($handle, $serializedString);
61                fclose($handle);
62        }
63       
64       
65        /**
66        * Serialize the dataset to a TriX string
67        *
68        * @return   string
69        * @access       private
70        */
71        function & _serialize()
72        {
73                //Trix header
74                $serializedString=
75                        '<?xml version="1.0" encoding="utf-8"?>'.
76                        '<TriX xmlns="http://www.w3.org/2004/03/trix/trix-1/">';
77               
78                //serialize defaultGraph if it is not empty
79                $defaultGraph=& $this->graphSet->getDefaultGraph();
80                if ($defaultGraph->isEmpty()===false)
81                {
82                        $serializedString.='<graph>';
83                        for($iterator = $this->graphSet->findInDefaultGraph(null,null,null); $iterator->valid(); $iterator->next())
84                        {
85                                $serializedString.='<triple>';
86                               
87                                $statement=$iterator->current();
88                               
89                                $serializedString.=$this->_node2string($statement->getSubject());
90                                $serializedString.=$this->_node2string($statement->getPredicate());
91                                $serializedString.=$this->_node2string($statement->getObject());
92                               
93                                $serializedString.='</triple>';
94                        };
95                        $serializedString.='</graph>';
96                }               
97                       
98                //serialize namedGraphs
99                foreach ($this->graphSet->listGraphNames() as $graphName)
100                {
101                        $serializedString.='<graph>';
102                        $serializedString.='<uri>'.$graphName.'</uri>';
103                        for($iterator = $this->graphSet->findInNamedGraphs(new Resource($graphName),null,null,null); $iterator->valid(); $iterator->next())
104                        {
105                                $serializedString.='<triple>';
106                               
107                                $statement=$iterator->current();
108                               
109                                $serializedString.=$this->_node2string($statement->getSubject());
110                                $serializedString.=$this->_node2string($statement->getPredicate());
111                                $serializedString.=$this->_node2string($statement->getObject());
112                               
113                                $serializedString.='</triple>';
114                        };
115                        $serializedString.='</graph>';
116                };             
117                //TriX footer   
118                $serializedString.='</TriX>';   
119                return $serializedString;
120        }
121       
122        /**
123        * Serialize node to a TriX string
124        *
125        * @param Node
126        * @return   string
127        * @access       private
128        */
129        function _node2string($node)
130        {
131                switch ($node)
132                {
133                        case (is_a($node,'BlankNode')):
134                                return ('<id>'.$node->getLabel().'</id>');
135                       
136                        case (is_a($node,'Resource')):
137                                return ('<uri>'.$node->getLabel().'</uri>');
138                       
139                        case (is_a($node,'Literal')):
140                       
141                                if ($node->dtype!=null)
142                                        return ('<typedLiteral datatype="'.htmlentities($node->dtype).'">'.$node->getLabel().'</typedLiteral>');
143
144                                if ($node->lang!=null)
145                                        return ('<plainLiteral xml:lang="'.htmlentities($node->lang).'">'.$node->getLabel().'</plainLiteral>');
146                                       
147                                return ('<plainLiteral>'.htmlentities($node->getLabel()).'</plainLiteral>');
148                }
149        }
150}
151?>
Note: See TracBrowser for help on using the repository browser.