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

Last change on this file since 312 was 312, checked in by jkraaijeveld, 13 years ago
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.