/** 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; } }