diff -r ac3dc090e987 -r f2a40bbc27f6 server/src/app/Libraries/Mappers/CocoonAbstractRdfMapper.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/src/app/Libraries/Mappers/CocoonAbstractRdfMapper.php Tue Nov 17 13:11:55 2015 +0100 @@ -0,0 +1,143 @@ +inputGraph = $inputGraph; + $this->uri = $inputGraph->getUri(); + $this->outputGraphes = []; + } + + abstract protected function mapResource($res, $outputGraph); + abstract protected function getResourceBaseId($res=null); + + public function getOutputGraphes() { + return $this->outputGraphes; + } + + /** + * Map a Cocoon Rdf Graph to a CP graph + * @return the new mapped graph + */ + public function mapGraph() { + + $outputGraph = $this->buildOutputGraph(); + + $resources = $this->inputGraph->allOfType('crdo:Resource'); + foreach ($resources as $res) { + $this->mapResource($res, $outputGraph); + } + } + + /** + * Build the main outputgraph + * @return the new empty graph + */ + protected function buildOutputGraph() { + + //$soundRes = $this->inputGraph->resource($this->uri)->get('http://purl.org/dc/terms/requires'); + $id = CocoonUtils::getIdFromUri($this->getResourceBaseId()); + + $outputGraph = new Graph(CocoonUtils::getCorpusUriFromId($id)); + $this->outputGraphes[$this->getResourceBaseId()] = $outputGraph; + + return $outputGraph; + } + + + protected function propertyOlacRoleMap($targetRes, $prop, $value) { + $targetRes->add($prop, $value); + $targetRes->add('http://purl.org/dc/elements/1.1/contributor', $value); + } + + protected function propertyIdentityMap($targetRes, $prop, $value) { + $targetRes->add($prop, $value); + } + + protected function propertyTrimMap($providedCHOResource, $prop, $value) { + $providedCHOResource->add($prop, trim($value)); + } + + protected function addSpatialProperties($destRes, $res, $outputGraph) { + $spatials = $res->all($this->inputGraph->resource('http://purl.org/dc/terms/spatial')); + $lats = $res->all($this->inputGraph->resource('http://www.w3.org/2003/01/geo/wgs84_pos#lat')); + $longs = $res->all($this->inputGraph->resource('http://www.w3.org/2003/01/geo/wgs84_pos#long')); + $alts = $res->all($this->inputGraph->resource('http://www.w3.org/2003/01/geo/wgs84_pos#alt')); + + if( count($spatials) > 0 || count($lats) > 0 || count($longs) > 0 || count($alts)) { + $placeNode = $outputGraph->newBNode(['edm:Place']); + foreach($lats as $latitude) { + $placeNode->addLiteral('http://www.w3.org/2003/01/geo/wgs84_pos#lat', $latitude); + } + foreach($longs as $longitude) { + $placeNode->addLiteral('http://www.w3.org/2003/01/geo/wgs84_pos#long', $longitude); + } + foreach($spatials as $s) { + if($s instanceof Literal) { + $placeNode->addLiteral('skos:note', $s); + } + elseif ($s instanceof Resource) { + $placeNode->addResource('owl:sameAs', $s); + } + } + $destRes->add($outputGraph->resource('http://purl.org/dc/terms/spatial'), $placeNode); + } + } + + protected function applyPropertiesToRes($sourceRes, $targetRes, $properties) { + + foreach( $properties as list($prop, $mappingMethod)) { + if( is_null($mappingMethod) ) { + $mappingMethod = 'propertyIdentityMap'; + } + + foreach($sourceRes->all($this->inputGraph->resource($prop)) as $value) { + call_user_func(array($this, $mappingMethod), $targetRes, $prop, $value); + } + } + } + + protected function addDateProperties($targetRes, $res, $outputGraph) { + $this->applyPropertiesToRes($res, $targetRes, [ + ['http://purl.org/dc/terms/available', null], + ['http://purl.org/dc/terms/created', null], + ['http://purl.org/dc/terms/issued', null], + ['http://purl.org/dc/terms/modified', null], + ]); + } + + protected function mapCollections($res) { + $collections = $res->all('dc:isPartOf'); + foreach($collections as $coll) { + if($coll instanceof Resource) { + $collectionGraph = new Graph($coll->getUri()); + $this->outputGraphes[$coll->getUri()] = $collectionGraph; + $collectionGraph->resource($coll->getUri(), 'edm:Collection'); + } + } + } + + +}