/** Serialize the converted UCB Memorial Data content into different serialization formats
 
       @return returns the serialized content
     
       @author Frederick Giasson, Structured Dynamics LLC.
   */
 public function pipeline_serialize()
 {
     $rdf_part = "";
     switch ($this->conneg->getMime()) {
         case "application/x-bibtex":
             $bibtex = "";
             $xml = new ProcessorXML();
             $xml->loadXML($this->pipeline_getResultset());
             $subjects = $xml->getSubjects();
             $nbConvertedItems = 0;
             foreach ($subjects as $subject) {
                 $subjectURI = $xml->getURI($subject);
                 $subjectType = $xml->getType($subject);
                 // Check if the type of this subject is mappable to BibTeX
                 $subjectType = $this->get_uri_label($subjectType);
                 if (($bibType = array_search($subjectType, $this->bibTypes)) !== FALSE) {
                     $bibtex .= "@" . $bibType . "{" . $subjectURI . " \n";
                 } else {
                     // If the type is unknow as a bibtex type, then we continue and doesnt convert that subject.
                     continue;
                 }
                 // Check if the properties of this subject are mappable to BibTeX
                 $predicates = $xml->getPredicates($subject);
                 foreach ($predicates as $predicate) {
                     $objects = $xml->getObjects($predicate);
                     $predicateType = $this->get_uri_label($xml->getType($predicate));
                     $bibPropertyType;
                     if (($bibPropertyType = array_search($predicateType, $this->bibProperties)) === FALSE) {
                         // If the predicate is unmappable, we skip it
                         continue;
                     }
                     $nbConvertedItems++;
                     foreach ($objects as $object) {
                         $objectType = $xml->getType($object);
                         if ($objectType == "rdfs:Literal") {
                             $objectValue = $xml->getContent($object);
                             $bibtex .= " {$bibPropertyType} = \"{$objectValue}\",\n";
                         } else {
                             $objectLabel = $xml->getLabel($object);
                             if ($objectLabel == "") {
                                 $objectURI = $xml->getURI($object);
                                 $bibtex .= " {$bibPropertyType} = \"{$objectURI}\",\n";
                             } else {
                                 $bibtex .= " {$bibPropertyType} = \"{$objectLabel}\",\n";
                             }
                         }
                     }
                 }
                 $bibtex .= "}\n";
             }
             if ($nbConvertedItems == 0) {
                 $this->conneg->setStatus(400);
                 $this->conneg->setStatusMsg("Bad Request");
                 $this->conneg->setStatusMsgExt("No BibTex data converted");
                 return;
             }
             return $bibtex;
             break;
         case "application/rdf+n3":
             $xml = new ProcessorXML();
             $xml->loadXML($this->pipeline_getResultset());
             $subjects = $xml->getSubjects();
             foreach ($subjects as $subject) {
                 $subjectURI = $xml->getURI($subject);
                 $subjectType = $xml->getType($subject);
                 $rdf_part .= "\n    <{$subjectURI}> a {$subjectType} ;\n";
                 $predicates = $xml->getPredicates($subject);
                 foreach ($predicates as $predicate) {
                     $objects = $xml->getObjects($predicate);
                     foreach ($objects as $object) {
                         $objectType = $xml->getType($object);
                         $predicateType = $xml->getType($predicate);
                         if ($objectType == "rdfs:Literal") {
                             $objectValue = $xml->getContent($object);
                             $rdf_part .= "        {$predicateType} \"\"\"" . str_replace(array("\\"), "\\\\", $objectValue) . "\"\"\" ;\n";
                         } else {
                             $objectURI = $xml->getURI($object);
                             $rdf_part .= "        {$predicateType} <{$objectURI}> ;\n";
                         }
                     }
                 }
                 if (strlen($rdf_part) > 0) {
                     $rdf_part = substr($rdf_part, 0, strlen($rdf_part) - 2) . ".\n";
                 }
             }
             return $rdf_part;
             break;
         case "application/rdf+xml":
             $xml = new ProcessorXML();
             $xml->loadXML($this->pipeline_getResultset());
             $subjects = $xml->getSubjects();
             foreach ($subjects as $subject) {
                 $subjectURI = $xml->getURI($subject);
                 $subjectType = $xml->getType($subject);
                 $rdf_part .= "\n    <{$subjectType} rdf:about=\"" . $this->xmlEncode($subjectURI) . "\">\n";
                 $predicates = $xml->getPredicates($subject);
                 foreach ($predicates as $predicate) {
                     $objects = $xml->getObjects($predicate);
                     foreach ($objects as $object) {
                         $objectType = $xml->getType($object);
                         $predicateType = $xml->getType($predicate);
                         if ($objectType == "rdfs:Literal") {
                             $objectValue = $xml->getContent($object);
                             $rdf_part .= "        <{$predicateType}>" . $this->xmlEncode($objectValue) . "</{$predicateType}>\n";
                         } else {
                             $objectURI = $xml->getURI($object);
                             $rdf_part .= "        <{$predicateType} rdf:resource=\"" . $this->xmlEncode($objectURI) . "\" />\n";
                         }
                     }
                 }
                 $rdf_part .= "    </{$subjectType}>\n";
             }
             return $rdf_part;
             break;
     }
 }