add blank node save and geoinfo to back model
authorymh <ymh.work@gmail.com>
Thu, 22 Sep 2016 12:38:24 +0200
changeset 277 bd4bc1db4f40
parent 276 ef32bf573d9c
child 279 5d2621f71f39
add blank node save and geoinfo to back model
server/bo_client/app/models/document.js
server/src/app/Http/Controllers/Api/DocumentController.php
server/src/app/Libraries/RdfModel/RdfModelDelta.php
server/src/app/Libraries/RdfModel/RdfModelResource.php
server/src/app/Libraries/Sparql/SparqlClient.php
server/src/app/Models/Document.php
server/src/app/Models/GeoResource.php
server/src/app/Repositories/RdfDocumentRepository.php
server/src/tests/Models/DocumentTest.php
server/src/tests/Models/GeoResourceTest.php
server/src/tests/Models/files/DocumentTest/test_doc.ttl
server/src/tests/Models/files/DocumentTest/test_no_geoinfo.ttl
server/src/tests/Models/files/GeoResourceTest/loc1.ttl
server/src/tests/Models/files/GeoResourceTest/loc2.ttl
server/src/tests/Models/files/GeoResourceTest/loc3.ttl
server/src/tests/Repositories/DocumentRepositoryIntegrationTest.php
server/src/tests/Repositories/DocumentRepositoryTest.php
server/src/tests/Repositories/files/DocumentRepositoryIntegrationTest/repo_creation.ttl
server/src/tests/Repositories/files/DocumentRepositoryIntegrationTest/test_doc.ttl
server/src/tests/Repositories/files/DocumentRepositoryIntegrationTest/test_doc_no_geo.ttl
--- a/server/bo_client/app/models/document.js	Thu Sep 08 19:15:46 2016 +0200
+++ b/server/bo_client/app/models/document.js	Thu Sep 22 12:38:24 2016 +0200
@@ -17,10 +17,12 @@
 
     subjects: DS.attr({defaultValue: function() { return []; }}),
 
+    reflocs: DS.attr({defaultValue: function() { return []; }}),
+
     mediaArray: DS.attr({defaultValue: function() { return []; }}),
 
     encodedId: Ember.computed('id', function() {
-      return encodeURIComponent(this.get('id'));
+        return encodeURIComponent(this.get('id'));
     }),
 
     mediaList: Ember.computed('mediaArray', function() {
--- a/server/src/app/Http/Controllers/Api/DocumentController.php	Thu Sep 08 19:15:46 2016 +0200
+++ b/server/src/app/Http/Controllers/Api/DocumentController.php	Thu Sep 22 12:38:24 2016 +0200
@@ -127,6 +127,8 @@
         //for now, update contributors and subjects only
         $doc->setContributors($document['contributors']);
         $doc->setSubjects($document['subjects']);
+        $doc->addGeoInfo()->setRefLocs($document['reflocs']);
+        $doc->getGeoInfo()->commit();
 
         $doc->setModified();
 
--- a/server/src/app/Libraries/RdfModel/RdfModelDelta.php	Thu Sep 08 19:15:46 2016 +0200
+++ b/server/src/app/Libraries/RdfModel/RdfModelDelta.php	Thu Sep 22 12:38:24 2016 +0200
@@ -9,12 +9,15 @@
 class RdfModelDelta {
 
     public function __construct($uri) {
+        $this->uri = $uri;
         $this->deletedGraph = new Graph($uri);
         $this->addedGraph = new Graph($uri);
+        $this->deleteWhere = [];
     }
 
     private $deletedGraph;
     private $addedGraph;
+    private $deleteWhere;
 
     public function getDeletedGraph() {
         return $this->deletedGraph;
@@ -24,4 +27,17 @@
         return $this->addedGraph;
     }
 
+    public function getDeleteWhere() {
+        return $this->deleteWhere;
+    }
+
+    public function addDeleteWhere(string $value) {
+        array_push($this->deleteWhere, $value);
+        return $this;
+    }
+
+    public function getUri() {
+        return $this->uri;
+    }
+
 }
--- a/server/src/app/Libraries/RdfModel/RdfModelResource.php	Thu Sep 08 19:15:46 2016 +0200
+++ b/server/src/app/Libraries/RdfModel/RdfModelResource.php	Thu Sep 22 12:38:24 2016 +0200
@@ -18,16 +18,27 @@
     protected $currentDelta = null;
     protected $uri = null;
 
+    protected function additionalDeltaLists() {
+        return [];
+    }
+
     public function isDirty() {
-        return !is_null($this->deltaList) && count($this->deltaList)>0;
+        return $this->deltaCount()>0;
     }
 
     public function deltaCount() {
-        return is_null($this->deltaList)?0:count($this->deltaList);
+        $deltaList = $this->getDeltaList();
+        return is_null($deltaList)?0:count($deltaList);
     }
 
     public function getDeltaList() {
-        return $this->deltaList;
+        $deltaList = is_null($this->deltaList)?[]:$this->deltaList;
+        $additionalDeltaLists = $this->additionalDeltaLists();
+        if(!empty($additionalDeltaLists)) {
+            array_unshift($additionalDeltaLists, $deltaList);
+            $deltaList = call_user_func_array('array_merge', $additionalDeltaLists);
+        }
+        return $deltaList;
     }
 
     public function getUri() {
@@ -35,7 +46,7 @@
     }
 
     public function getCurrentDelta() {
-        return $this->getCurrentDelta;
+        return $this->currentDelta;
     }
 
     public function startDelta() {
--- a/server/src/app/Libraries/Sparql/SparqlClient.php	Thu Sep 08 19:15:46 2016 +0200
+++ b/server/src/app/Libraries/Sparql/SparqlClient.php	Thu Sep 22 12:38:24 2016 +0200
@@ -130,15 +130,19 @@
 
     public function deleteWhere($whereClauses, string $graphUri = null) {
 
-        if(is_array($whereClause)) {
-            $whereClause = implode(" .", $whereClause);
+        if(empty($whereClauses)) {
+            return;
         }
+        if(is_array($whereClauses)) {
+            $whereClauses = implode(" .", $whereClauses);
+        }
+
+        $query = "DELETE { ?s ?p ?o } WHERE { $whereClauses }";
 
         if($graphUri) {
-            $whereClause = "GRAPH <$graphUri> { $whereClause }";
+            $query = "WITH <$graphUri> $query";
         }
 
-        $query = "DELETE WHERE { $whereClause }";
 
         // doc : http://rdf4j.org/doc/4/articles/REST-API/transaction-operations.docbook?view
         // cf. bug : https://openrdf.atlassian.net/browse/SES-2295
--- a/server/src/app/Models/Document.php	Thu Sep 08 19:15:46 2016 +0200
+++ b/server/src/app/Models/Document.php	Thu Sep 22 12:38:24 2016 +0200
@@ -41,6 +41,13 @@
         $this->geoInfo = false;
     }
 
+    protected function additionalDeltaLists() {
+
+        $geoInfo = $this->getGeoInfo();
+        $geoInfoDeltas = is_null($geoInfo)?[]:$geoInfo->getDeltaList();
+        return empty($geoInfoDeltas)?[]:[$geoInfoDeltas,];
+    }
+
 
     private function parseWebResources() {
 
@@ -208,19 +215,42 @@
     }
 
     /**
-     *
+     * get the GeoInfoObject
+     * Ths returned object should be limited for read only activities.
+     * If it needs to be edited use the addGeoInfo method.
      */
     public function getGeoInfo() {
         if($this->geoInfo === false) {
             $places = $this->getProvidedCHO()->all('<http://purl.org/dc/terms/spatial>');
             $this->geoInfo = null;
             if($places) {
-                $this->geoInfo = new GeoResource($places[0]->getUri(), $this->graph);
+                $this->geoInfo = new GeoResource($places[0]->getUri(), $this->graph, $this->getProvidedCHO());
             }
         }
         return $this->geoInfo;
     }
 
+    public function addGeoInfo() {
+        $geoInfo = $this->getGeoInfo();
+        if(!is_null($geoInfo)) {
+            // if there already is a geo info, just return it.
+            $geoInfo->setReadOnly(false);
+            $geoInfo->setNeedDelete(true);
+            return $geoInfo;
+         }
+
+        $this->geoInfo = false;
+
+        $geoinfoNode = $this->getGraph()->newBNode("http://www.europeana.eu/schemas/edm/Place");
+        $this->getProvidedCHO()->addResource("http://purl.org/dc/terms/spatial", $geoinfoNode);
+
+        $this->geoInfo = new GeoResource($geoinfoNode->getUri(), $this->graph, $this->getProvidedCHO());
+        $this->geoInfo->setReadOnly(false);
+        $this->geoInfo->setNeedDelete(false);
+
+        return $this->geoInfo;
+    }
+
     /**
      * change subjecs list
      */
--- a/server/src/app/Models/GeoResource.php	Thu Sep 08 19:15:46 2016 +0200
+++ b/server/src/app/Models/GeoResource.php	Thu Sep 22 12:38:24 2016 +0200
@@ -1,6 +1,7 @@
 <?php
 namespace CorpusParole\Models;
 
+use CorpusParole\Libraries\CorpusParoleException;
 use CorpusParole\Libraries\RdfModel\RdfModelResource;
 use CorpusParole\Libraries\Utils;
 use JsonSerializable;
@@ -10,16 +11,36 @@
  */
 class GeoResource extends RdfModelResource implements JsonSerializable {
 
-    public function __construct($uri, $graph) {
+    public function __construct($uri, $graph, $providedCHO) {
         parent::__construct($uri, $graph);
+        $this->providedCHO = $providedCHO;
+        $this->readOnly = true;
+        $this->changePending = false;
+        $this->needDelete = false;
     }
 
+    private $providedCHO = null;
+    private $readOnly = true;
+    private $changePending = false;
+    private $needDelete = false;
+
     private $refLocs = null;
     private $notes = null;
+    private $latitude = false;
+    private $longitude = false;
+
+    public function getDeltaList() {
+        if($this->changePending) {
+            throw new CorpusParoleException('GetDeltaList called when changes are pending');
+        }
+        return parent::getDeltaList();
+    }
 
     public function clearMemoizationCache() {
         $this->refLocs = null;
         $this->notes = null;
+        $this->latitude = false;
+        $this->longitude = false;
     }
 
     public function getRefLocs() {
@@ -30,6 +51,21 @@
         return $this->refLocs;
     }
 
+    public function setRefLocs($refLocs) {
+        if(!$this->changePending) {
+            throw new CorpusParoleException('Can call setRefLocs only when changes are pending');
+        }
+
+        $this->delete("<http://www.w3.org/2002/07/owl#sameAs>");
+
+        foreach($refLocs as $refLocUri) {
+            $this->addResource("http://www.w3.org/2002/07/owl#sameAs", $refLocUri);
+        }
+
+        $this->clearMemoizationCache();
+
+    }
+
     public function getNotes() {
         if(is_null($this->notes)) {
             $this->notes = $this->all('<http://www.w3.org/2004/02/skos/core#note>');
@@ -37,6 +73,40 @@
         return $this->notes;
     }
 
+    public function getLatitude() {
+        if($this->latitude === false) {
+            try {
+                $this->latitude = $this->getLiteral('<http://www.w3.org/2003/01/geo/wgs84_pos#lat>');
+            } catch(\Exception $e) {
+                $this->latitude = null;
+            }
+        }
+        return $this->latitude;
+    }
+
+    public function getLatitudeValue() {
+        $lat = $this->getLatitude();
+        return is_null($lat)?null:$lat->getValue();
+    }
+
+    public function getLongitude() {
+        if($this->longitude === false) {
+            try {
+                $this->longitude = $this->getLiteral('<http://www.w3.org/2003/01/geo/wgs84_pos#long>');
+            } catch(\Exception $e) {
+                $this->longitude = null;
+            }
+        }
+        return $this->longitude;
+    }
+
+    public function getLongitudeValue() {
+        $long = $this->getLongitude();
+        return is_null($long)?null:$long->getValue();
+    }
+
+
+
     public function jsonSerialize() {
         $notes = array_map(
             function($note) { return Utils::processLiteralResourceOrString($note); },
@@ -44,8 +114,65 @@
         );
         return [
             'ref-locs' => $this->getRefLocs(),
-            'notes' => $notes
+            'notes' => $notes,
+            'latitude' => $this->getLatitudeValue(),
+            'longitude' => $this->getLongitudeValue(),
         ];
     }
 
+    public function setReadOnly($ro) {
+        if($this->readOnly and !$ro) {
+            $this->changePending = true;
+        }
+        $this->readOnly = $ro;
+    }
+
+    public function setNeedDelete($nd) {
+        $this->needDelete = $nd;
+    }
+
+    public function rollback() {
+        $this->changePending = false;
+    }
+
+    public function commit() {
+
+        // Do nothing if there is no change pending
+        if(!$this->changePending) {
+            return;
+        }
+
+        $delta = $this->startDelta();
+
+        //delete the previous blank node
+        if($this->needDelete) {
+            $delta->addDeleteWhere(
+                "?s ?p ?o. ".
+                "{ ".
+                "    ?_ <http://purl.org/dc/terms/spatial> ?s. ".
+                "} ".
+                "UNION { ".
+                "    ?s <http://purl.org/dc/terms/spatial> ?o ".
+                "}"
+            );
+        }
+
+        // add the node
+        $geoinfoNodeAdded = $delta->getAddedGraph()->newBNode("http://www.europeana.eu/schemas/edm/Place");
+        $delta->getAddedGraph()->add($this->providedCHO, "http://purl.org/dc/terms/spatial", $geoinfoNodeAdded);
+
+        foreach($this->propertyUris() as $prop) {
+            if($prop == "http://www.w3.org/1999/02/22-rdf-syntax-ns#type") {
+                continue;
+            }
+            foreach($this->all("<$prop>") as $propVal) {
+                $delta->getAddedGraph()->add($geoinfoNodeAdded, $prop, $propVal);
+            }
+        }
+
+        $this->changePending = false;
+
+    }
+
+
 }
\ No newline at end of file
--- a/server/src/app/Repositories/RdfDocumentRepository.php	Thu Sep 08 19:15:46 2016 +0200
+++ b/server/src/app/Repositories/RdfDocumentRepository.php	Thu Sep 22 12:38:24 2016 +0200
@@ -213,6 +213,7 @@
 
         try {
             foreach($doc->getDeltaList() as $delta) {
+                $this->sparqlClient->deleteWhere($delta->getDeleteWhere(), $delta->getUri());
                 $this->sparqlClient->delete($delta->getDeletedGraph());
                 $this->sparqlClient->add($delta->getAddedGraph());
             }
--- a/server/src/tests/Models/DocumentTest.php	Thu Sep 08 19:15:46 2016 +0200
+++ b/server/src/tests/Models/DocumentTest.php	Thu Sep 22 12:38:24 2016 +0200
@@ -3,122 +3,53 @@
 use CorpusParole\Models\Document;
 use CorpusParole\Libraries\CocoonUtils;
 
+use EasyRdf\RdfNamespace;
+
 /**
  *
  */
 class DocumentTest extends TestCase {
 
-    const TEST_DOC = <<<EOT
-    @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-    @prefix sesame: <http://www.openrdf.org/schema/sesame#> .
-    @prefix owl: <http://www.w3.org/2002/07/owl#> .
-    @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
-    @prefix fn: <http://www.w3.org/2005/xpath-functions#> .
-
-    <%1\$scrdo-CFPP2000_35_SOUND> a <http://www.openarchives.org/ore/terms/Aggregation> ;
-        <http://www.europeana.eu/schemas/edm/aggregatedCHO> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_35_SOUND> ;
-        <http://www.europeana.eu/schemas/edm/dataProvider> "Langage et langues : description, théorisation, transmission" ;
-        <http://www.europeana.eu/schemas/edm/hasView> <http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xml> , <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.mp3> , <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.wav> ;
-        <http://www.europeana.eu/schemas/edm/isShownAt> <http://corpusdelaparole.huma-num.fr/corpus-app#/detail/crdo-CFPP2000_35_SOUND> ;
-        <http://www.europeana.eu/schemas/edm/isShownBy> <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> ;
-        <http://www.europeana.eu/schemas/edm/provider> "Corpus de la Parole"@fr ;
-        <http://www.europeana.eu/schemas/edm/rights> <http://creativecommons.org/licenses/by-nc-sa/4.0/> .
+    const TEST_INPUT_DOCS = [
+        'TEST' => __DIR__.'/files/DocumentTest/test_doc.ttl',
+        'TEST_NO_GEOINFO' => __DIR__.'/files/DocumentTest/test_no_geoinfo.ttl',
+    ];
 
-    <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_35_SOUND> a <http://www.europeana.eu/schemas/edm/ProvidedCHO> ;
-        <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-        <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/extent> "PT48M26S" ;
-        <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
-        <http://purl.org/dc/elements/1.1/contributor> <http://viaf.org/viaf/93752300> , "Tanguy, Noalig" , "Chevrier, Michel" , "Kiliç, Ozgur" , "Salvegas, Etienne" , "du-Breuil-de-Pont-en-Auge, Augustin" , "du-Breuil-de-Pont-en-Auge, Benoît" ;
-        <http://purl.org/dc/elements/1.1/description> "Enregistrement issu du Corpus de Français Parlé Parisien des années 2000 (CFPP2000)"@fr , "Quartier(s) concerné(s) : Paris 3e, et 20e (pour l'âge adulte); Anonymisation : Noalig TANGUY;"@fr ;
-        <http://purl.org/dc/elements/1.1/identifier> "ark:/87895/1.17-375004" , "%2\$scrdo-CFPP2000_35_SOUNDid" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35" , "Cote producteur: [03-01] Ozgur_Kilic_H_32_alii_3e"@fr , "ark:/87895/1.17-372593" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35_SOUND" ;
-        <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/fra> ;
-        <http://purl.org/dc/elements/1.1/publisher> <http://viaf.org/viaf/142432638>;
-        <http://purl.org/dc/elements/1.1/subject> <http://ark.bnf.fr/ark:/12148/cb13318415c> , "anthropological_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "lexicography"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "phonetics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://lexvo.org/id/iso639-3/fra> , <http://ark.bnf.fr/ark:/12148/cb133188907> , <http://ark.bnf.fr/ark:/12148/cb11932762f> , "general_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb133183660> , "text_and_corpus_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "Français"@fr , <http://ark.bnf.fr/ark:/12148/cb122368540> , "phonology"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "semantics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "sociolinguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "syntax"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "typology"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb119418302> , <http://ark.bnf.fr/ark:/12148/cb135540729> , "discourse_analysis"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "historical_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "language_documentation"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb133192210> , <http://ark.bnf.fr/ark:/12148/cb119377452> , <http://ark.bnf.fr/ark:/12148/cb13320451h> , <http://ark.bnf.fr/ark:/12148/cb13318422n> , <http://ark.bnf.fr/ark:/12148/cb11975823c> , "mathematical_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> ;
-        <http://purl.org/dc/elements/1.1/title> "Entretien de Ozgur Kiliç 2"@fr ;
-        <http://purl.org/dc/elements/1.1/type> <http://ark.bnf.fr/ark:/12148/cb11932135w> , <http://ark.bnf.fr/ark:/12148/cb12481481z> , <http://purl.org/dc/dcmitype/Sound> , "primary_text"^^<http://www.language-archives.org/OLAC/1.1/linguistic-type> , <http://purl.org/dc/dcmitype/Text> , "narrative"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> , "report"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> , "unintelligible_speech"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> ;
-        <http://purl.org/dc/terms/available> "2013-10-12"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/spatial> [
-            a <http://www.europeana.eu/schemas/edm/Place> ;
-            owl:sameAs <http://sws.geonames.org/6618626/> ;
-            <http://www.w3.org/2004/02/skos/core#note> "FR"^^<http://purl.org/dc/terms/ISO3166> , "France, Île-de-France, Paris, Université Sorbonne Nouvelle Paris 3, site Censier"@fr , "Domicile de Ozgur Kiliç"@fr , "France, Île-de-France, Paris 20"@fr
-        ];
-        <http://www.europeana.eu/schemas/edm/isGatheredInto> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE> , <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_CFPP2000> ;
-        <http://www.language-archives.org/OLAC/1.1/depositor> <http://viaf.org/viaf/93752300> ;
-        <http://www.language-archives.org/OLAC/1.1/interviewer> <http://viaf.org/viaf/93752300> ;
-        <http://www.language-archives.org/OLAC/1.1/transcriber> "Tanguy, Noalig" ;
-        <http://purl.org/dc/elements/1.1/coverage> "Quartier concerné : 3e"@fr ;
-        <http://www.language-archives.org/OLAC/1.1/responder> "Chevrier, Michel" , "Kiliç, Ozgur" , "Salvegas, Etienne" , "du-Breuil-de-Pont-en-Auge, Augustin" , "du-Breuil-de-Pont-en-Auge, Benoît" ;
-        <http://purl.org/dc/elements/1.1/relation> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_31_SOUND> .
-
-
-    <http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xml> a <http://www.europeana.eu/schemas/edm/WebResource> ;
-        <http://purl.org/dc/elements/1.1/format> "application/xml"^^<http://purl.org/dc/terms/IMT> ;
-        <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-        <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/issued> "2013-11-04T22:20:07+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
-        <http://purl.org/dc/terms/conformsTo> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-dtd_transcriber> .
-
-    <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
-        <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
-        <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-        <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/extent> "PT48M26S" ;
-        <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> .
-
-    <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.mp3> a <http://www.europeana.eu/schemas/edm/WebResource> ;
-        <http://purl.org/dc/elements/1.1/format> "audio/mpeg"^^<http://purl.org/dc/terms/IMT> ;
-        <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-        <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/extent> "PT48M26S" ;
-        <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
-        <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> .
-
-    <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
-        <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
-        <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-        <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/extent> "PT48M26S" ;
-        <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
-        <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> .
-EOT;
-
+    private $inputGraphes = [];
 
     public function setUp() {
+        parent::setup();
 
-        parent::setup();
-        $this->graph = new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", sprintf(DocumentTest::TEST_DOC, config('corpusparole.corpus_doc_id_base_uri'), config('corpusparole.corpus_id_scheme')));
+        foreach(self::TEST_INPUT_DOCS as $key => $inputDoc) {
+            $this->inputGraphes[$key] =  new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", sprintf(file_get_contents($inputDoc), config('corpusparole.corpus_doc_id_base_uri'), config('corpusparole.corpus_id_scheme')));
+        }
+
 
     }
 
     public function testConstructor() {
-        $this->assertNotNull($this->graph, 'Graph shoud not be null');
+        $this->assertNotNull($this->inputGraphes['TEST'], 'Graph shoud not be null');
 
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
 
         $this->assertEquals(config('corpusparole.corpus_id_scheme').'crdo-CFPP2000_35_SOUNDid',$doc->getId(),'Must have the correct id');
     }
 
     public function testTitle() {
-        $this->assertNotNull($this->graph, 'Graph shoud not be null');
+        $this->assertNotNull($this->inputGraphes['TEST'], 'Graph shoud not be null');
 
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
 
         $this->assertEquals("Entretien de Ozgur Kiliç 2",$doc->getTitle(),'Must have correct title');
         $this->assertInstanceOf(EasyRdf\Literal::class, $doc->getTitle(), "Title must be a literal");
         $this->assertEquals('fr', $doc->getTitle()->getLang(), "Language title must be fr");
     }
 
+
     public function testModified() {
-        $this->assertNotNull($this->graph, 'Graph shoud not be null');
+        $this->assertNotNull($this->inputGraphes['TEST'], 'Graph shoud not be null');
 
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
         $this->assertInstanceOf(EasyRdf\Literal::class, $doc->getModified(), "Modified must be a literal");
         $this->assertEquals("http://purl.org/dc/terms/W3CDTF", $doc->getModified()->getDatatypeURI(), "type must be http://purl.org/dc/terms/W3CDTF");
         $this->assertEquals("2013-10-12T14:35:57+02:00", $doc->getModified(), "modified must be 2013-10-12T14:35:57+02:00");
@@ -127,7 +58,7 @@
 
     public function testSetModified() {
         $currentTime = gmdate(DateTime::ATOM);
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
         $doc->setModified($currentTime);
         $this->assertInstanceOf(EasyRdf\Literal::class, $doc->getModified(), "Modified must be a literal");
         $this->assertEquals("http://purl.org/dc/terms/W3CDTF", $doc->getModified()->getDatatypeURI(), "type must be http://purl.org/dc/terms/W3CDTF");
@@ -135,7 +66,7 @@
     }
 
     public function testSetModifiedNull() {
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
         $doc->setModified();
         $this->assertInstanceOf(EasyRdf\Literal::class, $doc->getModified(), "Modified must be a literal");
         $this->assertEquals("http://purl.org/dc/terms/W3CDTF", $doc->getModified()->getDatatypeURI(), "type must be http://purl.org/dc/terms/W3CDTF");
@@ -146,7 +77,7 @@
 
     public function testPublisher() {
 
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
 
         $this->assertCount(1, $doc->getPublishers(), 'Publisher is an array of size 1');
         $this->assertInstanceOf('EasyRdf\Resource', $doc->getPublishers()[0], 'publisher is a resource');
@@ -154,7 +85,7 @@
     }
 
     public function testMediaArray() {
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
 
         $this->assertCount(3, $doc->getMediaArray(), "Media array must be of size 3");
         //print_r($doc->getMediaArray());
@@ -191,7 +122,7 @@
     }
 
     public function testGetTypes() {
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
 
         $this->assertCount(8, $doc->getTypes(), "types array must be of size 5");
 
@@ -207,7 +138,7 @@
     }
 
     public function testGetOtherTypes() {
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
 
         $this->assertCount(5, $doc->getOtherTypes(), "types array must be of size 5");
 
@@ -223,7 +154,7 @@
     }
 
     public function testGetDiscourseTypes() {
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
 
         $this->assertCount(3, $doc->getDiscourseTypes(), "types array must be of size 3");
 
@@ -234,7 +165,7 @@
     }
 
     public function testCloneDocument() {
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
 
         $doc2 = clone $doc;
 
@@ -245,8 +176,8 @@
     }
 
     public function testIsIsomorphic() {
-        $doc1 = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
-        $doc2 = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", sprintf(DocumentTest::TEST_DOC, config('corpusparole.corpus_doc_id_base_uri'), config('corpusparole.corpus_id_scheme'))));
+        $doc1 = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
+        $doc2 = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", sprintf(file_get_contents(DocumentTest::TEST_INPUT_DOCS['TEST']) , config('corpusparole.corpus_doc_id_base_uri'), config('corpusparole.corpus_id_scheme'))));
 
         $this->assertTrue($doc1->isIsomorphic($doc2),"document must be isomorphic");
 
@@ -259,7 +190,7 @@
 
         $newDiscourseTypes = ['oratory','dialogue','narrative', 'formulaic', 'ludic'];
 
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
         $this->assertCount(3, $doc->getDiscourseTypes(), "types array must be of size 3");
 
         $doc->updateDiscourseTypes($newDiscourseTypes);
@@ -277,7 +208,7 @@
 
         $newDiscourseTypes = ['oratory','dialogue','narrative', 'formulaic', 'ludic'];
 
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
 
         $doc->updateDiscourseTypes($newDiscourseTypes);
 
@@ -305,7 +236,7 @@
     }
 
     public function testUpdateTitle() {
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
 
         $oldTitle = $doc->getTitle();
 
@@ -333,16 +264,16 @@
 
         $newDiscourseTypes = ['oratory','dialogue','narrative'];
 
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
         $doc->updateDiscourseTypes($newDiscourseTypes);
 
-        $doc2 = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", sprintf(DocumentTest::TEST_DOC, config('corpusparole.corpus_doc_id_base_uri'), config('corpusparole.corpus_id_scheme'))));
+        $doc2 = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", sprintf(file_get_contents(DocumentTest::TEST_INPUT_DOCS['TEST']), config('corpusparole.corpus_doc_id_base_uri'), config('corpusparole.corpus_id_scheme'))));
 
         $this->assertFalse($doc->isIsomorphic($doc2),"document must not be isomorphic after adding discourse type");
     }
 
     public function testGetContributors() {
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
 
         $contributors = $doc->getContributors();
 
@@ -358,7 +289,7 @@
     }
 
     public function testSetContributors() {
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
 
         $contributors = $doc->getContributors();
 
@@ -435,7 +366,7 @@
     }
 
     public function testGetSubjects() {
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
 
         $subjects = $doc->getSubjects();
 
@@ -453,7 +384,7 @@
     }
 
     public function testSetSubjects() {
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
 
         $newSubjects = [
             "http://ark.bnf.fr/ark:/12148/cb13318415c",
@@ -491,7 +422,7 @@
 
     //TODO: test null transcript + null media array
     public function testJsonSerialize() {
-        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
 
         $json = $doc->jsonSerialize();
 
@@ -506,5 +437,68 @@
 
     }
 
+    public function testAddGeoInfo() {
+
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST_NO_GEOINFO']);
+        //$doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
+
+        $res = $doc->addGeoInfo();
+        $res->commit();
+
+        $this->assertNotNull($res, "A new georesource object must have been created");
+
+        $this->assertInstanceOf('CorpusParole\Models\GeoResource', $res, "the object created must be a geo resource");
+
+        $allSpatials = $doc->getProvidedCHO()->allResources("<http://purl.org/dc/terms/spatial>");
+
+        $this->assertCount(1, $allSpatials, "Must have only one spatial node");
+
+        $spatial = $allSpatials[0];
+
+        $this->assertTrue($spatial->isBNode(), "Spatial node must be a blank node");
+        $this->assertEquals($spatial->typeAsResource(), "http://www.europeana.eu/schemas/edm/Place", "type must be a http://www.europeana.eu/schemas/edm/Place");
+
+        $this->assertTrue($doc->isDirty(), "Document must be dirty");
+        $this->assertEquals(1, $doc->deltaCount(), "Must have only one delta.");
+
+        $this->assertNotNull($res->getCurrentDelta(), "CurrentDelta is not null");
+        $this->assertTrue($res->getCurrentDelta()->getDeletedGraph()->isEmpty(), "deleted graph must be empty");
+        $this->assertEmpty($res->getCurrentDelta()->getDeleteWhere(), "Delete where must be empty");
+        $this->assertNotNull($res->getCurrentDelta()->getAddedGraph(), "Added graph is not null");
+        $this->assertEquals(2, $res->getCurrentDelta()->getAddedGraph()->countTriples(), "Added graph must have 2 triples");
+
+    }
+
+
+    public function testAddGeoInfoNotEmpty() {
+
+        $doc = new Document(config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND", $this->inputGraphes['TEST']);
+
+        $res = $doc->addGeoInfo();
+        $res->commit();
+
+        $this->assertNotNull($res, "A new georesource object must have been created");
+
+        $this->assertInstanceOf('CorpusParole\Models\GeoResource', $res, "the object created must be a geo resource");
+
+        $allSpatials = $doc->getProvidedCHO()->allResources("<http://purl.org/dc/terms/spatial>");
+
+        $this->assertCount(1, $allSpatials, "Must have only one spatial node");
+
+        $spatial = $allSpatials[0];
+
+        $this->assertTrue($spatial->isBNode(), "Spatial node must be a blank node");
+        $this->assertEquals($spatial->typeAsResource(), "http://www.europeana.eu/schemas/edm/Place", "type must be a http://www.europeana.eu/schemas/edm/Place");
+
+        $this->assertTrue($doc->isDirty(), "Document must not be dirty");
+        $this->assertEquals(1, $doc->deltaCount(), "Must have only one delta.");
+
+        $this->assertNotNull($res->getCurrentDelta(), "CurrentDelta is not null");
+        $this->assertTrue($res->getCurrentDelta()->getDeletedGraph()->isEmpty(), "deleted graph must be empty");
+        $this->assertCount(1, $res->getCurrentDelta()->getDeleteWhere(), "Delete where must have one element");
+        $this->assertNotNull($res->getCurrentDelta()->getAddedGraph(), "Added graph is not null");
+        $this->assertEquals(9, $res->getCurrentDelta()->getAddedGraph()->countTriples(), "Added graph must have 7 triples");
+    }
+
 
 }
--- a/server/src/tests/Models/GeoResourceTest.php	Thu Sep 08 19:15:46 2016 +0200
+++ b/server/src/tests/Models/GeoResourceTest.php	Thu Sep 22 12:38:24 2016 +0200
@@ -1,6 +1,7 @@
 <?php
 
 use CorpusParole\Models\GeoResource;
+use CorpusParole\Models\Document;
 use CorpusParole\Libraries\CocoonUtils;
 
 /**
@@ -9,140 +10,9 @@
 class GeoResourceTest extends TestCase {
 
     const TEST_DOCS = [
-        "LOC1" => <<<EOT
-    @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-    @prefix sesame: <http://www.openrdf.org/schema/sesame#> .
-    @prefix owl: <http://www.w3.org/2002/07/owl#> .
-    @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
-    @prefix fn: <http://www.w3.org/2005/xpath-functions#> .
-
-    <%1\$scrdo-CFPP2000_35_SOUND> a <http://www.openarchives.org/ore/terms/Aggregation> ;
-        <http://www.europeana.eu/schemas/edm/aggregatedCHO> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_35_SOUND> ;
-        <http://www.europeana.eu/schemas/edm/dataProvider> "Langage et langues : description, théorisation, transmission" ;
-        <http://www.europeana.eu/schemas/edm/hasView> <http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xml> , <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.mp3> , <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.wav> ;
-        <http://www.europeana.eu/schemas/edm/isShownAt> <http://corpusdelaparole.huma-num.fr/corpus-app#/detail/crdo-CFPP2000_35_SOUND> ;
-        <http://www.europeana.eu/schemas/edm/isShownBy> <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> ;
-        <http://www.europeana.eu/schemas/edm/provider> "Corpus de la Parole"@fr ;
-        <http://www.europeana.eu/schemas/edm/rights> <http://creativecommons.org/licenses/by-nc-sa/4.0/> .
-
-    <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_35_SOUND> a <http://www.europeana.eu/schemas/edm/ProvidedCHO> ;
-        <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-        <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/extent> "PT48M26S" ;
-        <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
-        <http://purl.org/dc/elements/1.1/contributor> <http://viaf.org/viaf/93752300> , "Tanguy, Noalig" , "Chevrier, Michel" , "Kiliç, Ozgur" , "Salvegas, Etienne" , "du-Breuil-de-Pont-en-Auge, Augustin" , "du-Breuil-de-Pont-en-Auge, Benoît" ;
-        <http://purl.org/dc/elements/1.1/description> "Enregistrement issu du Corpus de Français Parlé Parisien des années 2000 (CFPP2000)"@fr , "Quartier(s) concerné(s) : Paris 3e, et 20e (pour l'âge adulte); Anonymisation : Noalig TANGUY;"@fr ;
-        <http://purl.org/dc/elements/1.1/identifier> "ark:/87895/1.17-375004" , "%2\$scrdo-CFPP2000_35_SOUNDid" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35" , "Cote producteur: [03-01] Ozgur_Kilic_H_32_alii_3e"@fr , "ark:/87895/1.17-372593" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35_SOUND" ;
-        <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/fra> ;
-        <http://purl.org/dc/elements/1.1/publisher> <http://viaf.org/viaf/142432638>;
-        <http://purl.org/dc/elements/1.1/subject> <http://ark.bnf.fr/ark:/12148/cb13318415c> , "anthropological_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "lexicography"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "phonetics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://lexvo.org/id/iso639-3/fra> , <http://ark.bnf.fr/ark:/12148/cb133188907> , <http://ark.bnf.fr/ark:/12148/cb11932762f> , "general_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb133183660> , "text_and_corpus_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "Français"@fr , <http://ark.bnf.fr/ark:/12148/cb122368540> , "phonology"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "semantics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "sociolinguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "syntax"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "typology"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb119418302> , <http://ark.bnf.fr/ark:/12148/cb135540729> , "discourse_analysis"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "historical_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "language_documentation"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb133192210> , <http://ark.bnf.fr/ark:/12148/cb119377452> , <http://ark.bnf.fr/ark:/12148/cb13320451h> , <http://ark.bnf.fr/ark:/12148/cb13318422n> , <http://ark.bnf.fr/ark:/12148/cb11975823c> , "mathematical_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> ;
-        <http://purl.org/dc/elements/1.1/title> "Entretien de Ozgur Kiliç 2"@fr ;
-        <http://purl.org/dc/elements/1.1/type> <http://ark.bnf.fr/ark:/12148/cb11932135w> , <http://ark.bnf.fr/ark:/12148/cb12481481z> , <http://purl.org/dc/dcmitype/Sound> , "primary_text"^^<http://www.language-archives.org/OLAC/1.1/linguistic-type> , <http://purl.org/dc/dcmitype/Text> , "narrative"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> , "report"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> , "unintelligible_speech"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> ;
-        <http://purl.org/dc/terms/available> "2013-10-12"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/spatial> [
-            a <http://www.europeana.eu/schemas/edm/Place> ;
-            owl:sameAs <http://sws.geonames.org/6618626/> ;
-            <http://www.w3.org/2004/02/skos/core#note> "FR"^^<http://purl.org/dc/terms/ISO3166> , "France, Île-de-France, Paris, Université Sorbonne Nouvelle Paris 3, site Censier"@fr , "Domicile de Ozgur Kiliç"@fr , "France, Île-de-France, Paris 20"@fr
-        ];
-        <http://www.europeana.eu/schemas/edm/isGatheredInto> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE> , <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_CFPP2000> ;
-        <http://www.language-archives.org/OLAC/1.1/depositor> <http://viaf.org/viaf/93752300> ;
-        <http://www.language-archives.org/OLAC/1.1/interviewer> <http://viaf.org/viaf/93752300> ;
-        <http://www.language-archives.org/OLAC/1.1/transcriber> "Tanguy, Noalig" ;
-        <http://purl.org/dc/elements/1.1/coverage> "Quartier concerné : 3e"@fr ;
-        <http://www.language-archives.org/OLAC/1.1/responder> "Chevrier, Michel" , "Kiliç, Ozgur" , "Salvegas, Etienne" , "du-Breuil-de-Pont-en-Auge, Augustin" , "du-Breuil-de-Pont-en-Auge, Benoît" ;
-        <http://purl.org/dc/elements/1.1/relation> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_31_SOUND> .
-
-
-    <http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xml> a <http://www.europeana.eu/schemas/edm/WebResource> ;
-        <http://purl.org/dc/elements/1.1/format> "application/xml"^^<http://purl.org/dc/terms/IMT> ;
-        <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-        <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/issued> "2013-11-04T22:20:07+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
-        <http://purl.org/dc/terms/conformsTo> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-dtd_transcriber> .
-
-    <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
-        <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
-        <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-        <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/extent> "PT48M26S" ;
-        <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> .
-
-    <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.mp3> a <http://www.europeana.eu/schemas/edm/WebResource> ;
-        <http://purl.org/dc/elements/1.1/format> "audio/mpeg"^^<http://purl.org/dc/terms/IMT> ;
-        <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-        <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/extent> "PT48M26S" ;
-        <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
-        <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> .
-
-    <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
-        <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
-        <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-        <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/extent> "PT48M26S" ;
-        <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
-        <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> .
-EOT
-        ,
-        "LOC2" => <<<EOT
-    @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-    @prefix sesame: <http://www.openrdf.org/schema/sesame#> .
-    @prefix owl: <http://www.w3.org/2002/07/owl#> .
-    @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
-    @prefix fn: <http://www.w3.org/2005/xpath-functions#> .
-
-    <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_35_SOUND> a <http://www.europeana.eu/schemas/edm/ProvidedCHO> ;
-        <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-        <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/extent> "PT48M26S" ;
-        <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
-        <http://purl.org/dc/elements/1.1/description> "Enregistrement issu du Corpus de Français Parlé Parisien des années 2000 (CFPP2000)"@fr , "Quartier(s) concerné(s) : Paris 3e, et 20e (pour l'âge adulte); Anonymisation : Noalig TANGUY;"@fr ;
-        <http://purl.org/dc/elements/1.1/identifier> "ark:/87895/1.17-375004" , "%2\$scrdo-CFPP2000_35_SOUNDid" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35" , "Cote producteur: [03-01] Ozgur_Kilic_H_32_alii_3e"@fr , "ark:/87895/1.17-372593" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35_SOUND" ;
-        <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/fra> ;
-        <http://purl.org/dc/elements/1.1/publisher> <http://viaf.org/viaf/142432638>;
-        <http://purl.org/dc/elements/1.1/title> "Entretien de Ozgur Kiliç 2"@fr ;
-        <http://purl.org/dc/terms/available> "2013-10-12"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/spatial> [
-            a <http://www.europeana.eu/schemas/edm/Place> ;
-            <http://www.w3.org/2004/02/skos/core#note> "FR"^^<http://purl.org/dc/terms/ISO3166> , "France, Île-de-France, Paris, Université Sorbonne Nouvelle Paris 3, site Censier"@fr , "Domicile de Ozgur Kiliç"@fr , "France, Île-de-France, Paris 20"@fr
-        ] .
-EOT
-        ,
-        "LOC3" => <<<EOT
-    @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-    @prefix sesame: <http://www.openrdf.org/schema/sesame#> .
-    @prefix owl: <http://www.w3.org/2002/07/owl#> .
-    @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
-    @prefix fn: <http://www.w3.org/2005/xpath-functions#> .
-
-    <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_35_SOUND> a <http://www.europeana.eu/schemas/edm/ProvidedCHO> ;
-        <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-        <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/extent> "PT48M26S" ;
-        <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
-        <http://purl.org/dc/elements/1.1/description> "Enregistrement issu du Corpus de Français Parlé Parisien des années 2000 (CFPP2000)"@fr , "Quartier(s) concerné(s) : Paris 3e, et 20e (pour l'âge adulte); Anonymisation : Noalig TANGUY;"@fr ;
-        <http://purl.org/dc/elements/1.1/identifier> "ark:/87895/1.17-375004" , "%2\$scrdo-CFPP2000_35_SOUNDid" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35" , "Cote producteur: [03-01] Ozgur_Kilic_H_32_alii_3e"@fr , "ark:/87895/1.17-372593" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35_SOUND" ;
-        <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/fra> ;
-        <http://purl.org/dc/elements/1.1/publisher> <http://viaf.org/viaf/142432638>;
-        <http://purl.org/dc/elements/1.1/title> "Entretien de Ozgur Kiliç 2"@fr ;
-        <http://purl.org/dc/terms/available> "2013-10-12"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/spatial> [
-            a <http://www.europeana.eu/schemas/edm/Place> ;
-            owl:sameAs <http://sws.geonames.org/6618626/> ;
-            owl:sameAs <http://fr.dbpedia.org/resource/Gramazie> ;
-            <http://www.w3.org/2004/02/skos/core#note> "FR"^^<http://purl.org/dc/terms/ISO3166> , "France, Île-de-France, Paris, Université Sorbonne Nouvelle Paris 3, site Censier"@fr , "Domicile de Ozgur Kiliç"@fr , "France, Île-de-France, Paris 20"@fr
-        ] .
-EOT
+        "LOC1" =>  __DIR__.'/files/GeoResourceTest/loc1.ttl',
+        "LOC2" =>  __DIR__.'/files/GeoResourceTest/loc2.ttl',
+        "LOC3" =>  __DIR__.'/files/GeoResourceTest/loc3.ttl',
     ];
 
     public function setUp() {
@@ -152,18 +22,27 @@
         $this->graphUrl = sprintf("%1\$scrdo-CFPP2000_35_SOUND", config('corpusparole.corpus_doc_id_base_uri'));
         foreach(self::TEST_DOCS as $k => $ttl) {
 
-            $this->graphs[$k] = new EasyRdf\Graph($this->graphUrl, sprintf($ttl, config('corpusparole.corpus_doc_id_base_uri'), config('corpusparole.corpus_id_scheme')));
+            $this->graphs[$k] = new EasyRdf\Graph($this->graphUrl, sprintf(file_get_contents($ttl), config('corpusparole.corpus_doc_id_base_uri'), config('corpusparole.corpus_id_scheme')));
         }
     }
 
     public function getGeoResource($key) {
 
         $graph = $this->graphs[$key];
+        $providedCHO = $graph->get("<".config('corpusparole.corpus_doc_id_base_uri')."crdo-CFPP2000_35_SOUND>", "<http://www.europeana.eu/schemas/edm/aggregatedCHO>");
         $places = $graph->allOfType("<http://www.europeana.eu/schemas/edm/Place>");
         assert(count($places)>0);
         $place = $places[0];
 
-        return new GeoResource($place->getUri(), $graph);
+        return new GeoResource($place->getUri(), $graph, $providedCHO);
+
+    }
+
+    public function getGeoResourceEdit($key) {
+        $graph = $this->graphs[$key];
+        $doc = new Document($this->graphUrl, $graph);
+
+        return $doc->addGeoInfo();
 
     }
 
@@ -218,13 +97,32 @@
 
     }
 
+    public function testLatitude() {
+
+        $geoInfo = $this->getGeoResource("LOC1");
+
+        $this->assertEquals(48.73194, $geoInfo->getLatitude()->getValue(),'Must have correct latitude');
+        $this->assertInstanceOf(EasyRdf\Literal::class, $geoInfo->getLatitude(), "Latitude must be a literal");
+        $this->assertEquals('http://www.w3.org/2001/XMLSchema#float', $geoInfo->getLatitude()->getDatatypeUri(), "Datatype title must be 'http://www.w3.org/2001/XMLSchema#float'");
+    }
+
+    public function testLongitude() {
+
+        $geoInfo = $this->getGeoResource("LOC1");
+
+        $this->assertEquals(7.70833, $geoInfo->getLongitude()->getValue(),'Must have correct longitude');
+        $this->assertInstanceOf(EasyRdf\Literal::class, $geoInfo->getLongitude(), "Longitude must be a literal");
+        $this->assertEquals('http://www.w3.org/2001/XMLSchema#float', $geoInfo->getLongitude()->getDatatypeUri(), "Datatype title must be 'http://www.w3.org/2001/XMLSchema#float'");
+    }
+
+
 
     public function testJsonSerialize() {
         $geoResource = $this->getGeoResource("LOC1");
 
         $json = $geoResource->jsonSerialize();
 
-        $this->assertEquals(["ref-locs", "notes"], array_keys($json));
+        $this->assertEquals(["ref-locs", "notes", "latitude", "longitude"], array_keys($json));
         $this->assertEquals(["http://sws.geonames.org/6618626/"], $json['ref-locs']);
 
         $notes = $json['notes'];
@@ -248,10 +146,50 @@
 
         $json = $geoResource->jsonSerialize();
 
-        $this->assertEquals(["ref-locs", "notes"], array_keys($json));
+        $this->assertEquals(["ref-locs", "notes", "latitude", "longitude"], array_keys($json));
         $this->assertEquals(["http://sws.geonames.org/6618626/", "http://fr.dbpedia.org/resource/Gramazie"], $json['ref-locs']);
 
     }
 
+    public function testSetRefLocs() {
+
+        $geoResource = $this->getGeoResourceEdit("LOC1");
+
+
+
+        $oldRefLocs = $geoResource->getRefLocs();
+        sort($oldRefLocs);
+
+        $newRefLocs = [ 'http://sws.geonames.org/2643743/' ];
+
+        $geoResource->setRefLocs($newRefLocs);
+
+        $refLoc = $geoResource->getRefLocs();
+
+        $this->assertEquals(['http://sws.geonames.org/2643743/'], $refLoc);
+
+        $geoResource->commit();
+
+        $deltaList = $geoResource->getDeltaList();
+
+        $this->assertNotNull($deltaList);
+        $this->assertCount(1, $deltaList, "Must have one delta");
+
+
+        $delta = $deltaList[0];
+
+        $this->assertTrue($delta->getDeletedGraph()->isEmpty(), "deleted graph must be empty");
+        $this->assertCount(1, $delta->getDeleteWhere(), "Delete where must have one element");
+        $this->assertNotNull($delta->getAddedGraph(), "Added graph is not null");
+        $this->assertEquals(9, $delta->getAddedGraph()->countTriples(), "Added graph must have 7 triples");
+        $places = $delta->getAddedGraph()->allOfType("http://www.europeana.eu/schemas/edm/Place");
+        $this->assertCount(1, $places);
+        $place = $places[0];
+        $sames = $places[0]->all('<http://www.w3.org/2002/07/owl#sameAs>');
+        $this->assertCount(1, $sames);
+        $this->assertEquals('http://sws.geonames.org/2643743/', $sames[0]->getUri());
+
+    }
+
 
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/tests/Models/files/DocumentTest/test_doc.ttl	Thu Sep 22 12:38:24 2016 +0200
@@ -0,0 +1,80 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix sesame: <http://www.openrdf.org/schema/sesame#> .
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+@prefix fn: <http://www.w3.org/2005/xpath-functions#> .
+
+<%1$scrdo-CFPP2000_35_SOUND> a <http://www.openarchives.org/ore/terms/Aggregation> ;
+    <http://www.europeana.eu/schemas/edm/aggregatedCHO> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_35_SOUND> ;
+    <http://www.europeana.eu/schemas/edm/dataProvider> "Langage et langues : description, théorisation, transmission" ;
+    <http://www.europeana.eu/schemas/edm/hasView> <http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xml> , <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.mp3> , <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.wav> ;
+    <http://www.europeana.eu/schemas/edm/isShownAt> <http://corpusdelaparole.huma-num.fr/corpus-app#/detail/crdo-CFPP2000_35_SOUND> ;
+    <http://www.europeana.eu/schemas/edm/isShownBy> <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> ;
+    <http://www.europeana.eu/schemas/edm/provider> "Corpus de la Parole"@fr ;
+    <http://www.europeana.eu/schemas/edm/rights> <http://creativecommons.org/licenses/by-nc-sa/4.0/> .
+
+<http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_35_SOUND> a <http://www.europeana.eu/schemas/edm/ProvidedCHO> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/extent> "PT48M26S" ;
+    <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
+    <http://purl.org/dc/elements/1.1/contributor> <http://viaf.org/viaf/93752300> , "Tanguy, Noalig" , "Chevrier, Michel" , "Kiliç, Ozgur" , "Salvegas, Etienne" , "du-Breuil-de-Pont-en-Auge, Augustin" , "du-Breuil-de-Pont-en-Auge, Benoît" ;
+    <http://purl.org/dc/elements/1.1/description> "Enregistrement issu du Corpus de Français Parlé Parisien des années 2000 (CFPP2000)"@fr , "Quartier(s) concerné(s) : Paris 3e, et 20e (pour l'âge adulte); Anonymisation : Noalig TANGUY;"@fr ;
+    <http://purl.org/dc/elements/1.1/identifier> "ark:/87895/1.17-375004" , "%2$scrdo-CFPP2000_35_SOUNDid" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35" , "Cote producteur: [03-01] Ozgur_Kilic_H_32_alii_3e"@fr , "ark:/87895/1.17-372593" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35_SOUND" ;
+    <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/fra> ;
+    <http://purl.org/dc/elements/1.1/publisher> <http://viaf.org/viaf/142432638>;
+    <http://purl.org/dc/elements/1.1/subject> <http://ark.bnf.fr/ark:/12148/cb13318415c> , "anthropological_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "lexicography"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "phonetics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://lexvo.org/id/iso639-3/fra> , <http://ark.bnf.fr/ark:/12148/cb133188907> , <http://ark.bnf.fr/ark:/12148/cb11932762f> , "general_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb133183660> , "text_and_corpus_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "Français"@fr , <http://ark.bnf.fr/ark:/12148/cb122368540> , "phonology"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "semantics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "sociolinguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "syntax"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "typology"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb119418302> , <http://ark.bnf.fr/ark:/12148/cb135540729> , "discourse_analysis"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "historical_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "language_documentation"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb133192210> , <http://ark.bnf.fr/ark:/12148/cb119377452> , <http://ark.bnf.fr/ark:/12148/cb13320451h> , <http://ark.bnf.fr/ark:/12148/cb13318422n> , <http://ark.bnf.fr/ark:/12148/cb11975823c> , "mathematical_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> ;
+    <http://purl.org/dc/elements/1.1/title> "Entretien de Ozgur Kiliç 2"@fr ;
+    <http://purl.org/dc/elements/1.1/type> <http://ark.bnf.fr/ark:/12148/cb11932135w> , <http://ark.bnf.fr/ark:/12148/cb12481481z> , <http://purl.org/dc/dcmitype/Sound> , "primary_text"^^<http://www.language-archives.org/OLAC/1.1/linguistic-type> , <http://purl.org/dc/dcmitype/Text> , "narrative"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> , "report"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> , "unintelligible_speech"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> ;
+    <http://purl.org/dc/terms/available> "2013-10-12"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/spatial> [
+        a <http://www.europeana.eu/schemas/edm/Place> ;
+        owl:sameAs <http://sws.geonames.org/6618626/> ;
+        <http://www.w3.org/2003/01/geo/wgs84_pos#lat> "48.73194"^^xsd:float;
+        <http://www.w3.org/2003/01/geo/wgs84_pos#long> "7.70833"^^xsd:float;
+        <http://www.w3.org/2004/02/skos/core#note> "FR"^^<http://purl.org/dc/terms/ISO3166> , "France, Île-de-France, Paris, Université Sorbonne Nouvelle Paris 3, site Censier"@fr , "Domicile de Ozgur Kiliç"@fr , "France, Île-de-France, Paris 20"@fr
+    ];
+    <http://www.europeana.eu/schemas/edm/isGatheredInto> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE> , <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_CFPP2000> ;
+    <http://www.language-archives.org/OLAC/1.1/depositor> <http://viaf.org/viaf/93752300> ;
+    <http://www.language-archives.org/OLAC/1.1/interviewer> <http://viaf.org/viaf/93752300> ;
+    <http://www.language-archives.org/OLAC/1.1/transcriber> "Tanguy, Noalig" ;
+    <http://purl.org/dc/elements/1.1/coverage> "Quartier concerné : 3e"@fr ;
+    <http://www.language-archives.org/OLAC/1.1/responder> "Chevrier, Michel" , "Kiliç, Ozgur" , "Salvegas, Etienne" , "du-Breuil-de-Pont-en-Auge, Augustin" , "du-Breuil-de-Pont-en-Auge, Benoît" ;
+    <http://purl.org/dc/elements/1.1/relation> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_31_SOUND> .
+
+
+<http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xml> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "application/xml"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/issued> "2013-11-04T22:20:07+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
+    <http://purl.org/dc/terms/conformsTo> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-dtd_transcriber> .
+
+<http://cocoon.huma-num.fr/data/archi/masters/372593.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/extent> "PT48M26S" ;
+    <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> .
+
+<http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.mp3> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "audio/mpeg"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/extent> "PT48M26S" ;
+    <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
+    <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> .
+
+<http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/extent> "PT48M26S" ;
+    <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
+    <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> .
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/tests/Models/files/DocumentTest/test_no_geoinfo.ttl	Thu Sep 22 12:38:24 2016 +0200
@@ -0,0 +1,73 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix sesame: <http://www.openrdf.org/schema/sesame#> .
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+@prefix fn: <http://www.w3.org/2005/xpath-functions#> .
+
+<%1$scrdo-CFPP2000_35_SOUND> a <http://www.openarchives.org/ore/terms/Aggregation> ;
+    <http://www.europeana.eu/schemas/edm/aggregatedCHO> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_35_SOUND> ;
+    <http://www.europeana.eu/schemas/edm/dataProvider> "Langage et langues : description, théorisation, transmission" ;
+    <http://www.europeana.eu/schemas/edm/hasView> <http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xml> , <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.mp3> , <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.wav> ;
+    <http://www.europeana.eu/schemas/edm/isShownAt> <http://corpusdelaparole.huma-num.fr/corpus-app#/detail/crdo-CFPP2000_35_SOUND> ;
+    <http://www.europeana.eu/schemas/edm/isShownBy> <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> ;
+    <http://www.europeana.eu/schemas/edm/provider> "Corpus de la Parole"@fr ;
+    <http://www.europeana.eu/schemas/edm/rights> <http://creativecommons.org/licenses/by-nc-sa/4.0/> .
+
+<http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_35_SOUND> a <http://www.europeana.eu/schemas/edm/ProvidedCHO> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/extent> "PT48M26S" ;
+    <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
+    <http://purl.org/dc/elements/1.1/contributor> <http://viaf.org/viaf/93752300> , "Tanguy, Noalig" , "Chevrier, Michel" , "Kiliç, Ozgur" , "Salvegas, Etienne" , "du-Breuil-de-Pont-en-Auge, Augustin" , "du-Breuil-de-Pont-en-Auge, Benoît" ;
+    <http://purl.org/dc/elements/1.1/description> "Enregistrement issu du Corpus de Français Parlé Parisien des années 2000 (CFPP2000)"@fr , "Quartier(s) concerné(s) : Paris 3e, et 20e (pour l'âge adulte); Anonymisation : Noalig TANGUY;"@fr ;
+    <http://purl.org/dc/elements/1.1/identifier> "ark:/87895/1.17-375004" , "%2$scrdo-CFPP2000_35_SOUNDid" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35" , "Cote producteur: [03-01] Ozgur_Kilic_H_32_alii_3e"@fr , "ark:/87895/1.17-372593" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35_SOUND" ;
+    <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/fra> ;
+    <http://purl.org/dc/elements/1.1/publisher> <http://viaf.org/viaf/142432638>;
+    <http://purl.org/dc/elements/1.1/subject> <http://ark.bnf.fr/ark:/12148/cb13318415c> , "anthropological_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "lexicography"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "phonetics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://lexvo.org/id/iso639-3/fra> , <http://ark.bnf.fr/ark:/12148/cb133188907> , <http://ark.bnf.fr/ark:/12148/cb11932762f> , "general_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb133183660> , "text_and_corpus_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "Français"@fr , <http://ark.bnf.fr/ark:/12148/cb122368540> , "phonology"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "semantics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "sociolinguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "syntax"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "typology"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb119418302> , <http://ark.bnf.fr/ark:/12148/cb135540729> , "discourse_analysis"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "historical_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "language_documentation"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb133192210> , <http://ark.bnf.fr/ark:/12148/cb119377452> , <http://ark.bnf.fr/ark:/12148/cb13320451h> , <http://ark.bnf.fr/ark:/12148/cb13318422n> , <http://ark.bnf.fr/ark:/12148/cb11975823c> , "mathematical_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> ;
+    <http://purl.org/dc/elements/1.1/title> "Entretien de Ozgur Kiliç 2"@fr ;
+    <http://purl.org/dc/elements/1.1/type> <http://ark.bnf.fr/ark:/12148/cb11932135w> , <http://ark.bnf.fr/ark:/12148/cb12481481z> , <http://purl.org/dc/dcmitype/Sound> , "primary_text"^^<http://www.language-archives.org/OLAC/1.1/linguistic-type> , <http://purl.org/dc/dcmitype/Text> , "narrative"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> , "report"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> , "unintelligible_speech"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> ;
+    <http://purl.org/dc/terms/available> "2013-10-12"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://www.europeana.eu/schemas/edm/isGatheredInto> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE> , <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_CFPP2000> ;
+    <http://www.language-archives.org/OLAC/1.1/depositor> <http://viaf.org/viaf/93752300> ;
+    <http://www.language-archives.org/OLAC/1.1/interviewer> <http://viaf.org/viaf/93752300> ;
+    <http://www.language-archives.org/OLAC/1.1/transcriber> "Tanguy, Noalig" ;
+    <http://purl.org/dc/elements/1.1/coverage> "Quartier concerné : 3e"@fr ;
+    <http://www.language-archives.org/OLAC/1.1/responder> "Chevrier, Michel" , "Kiliç, Ozgur" , "Salvegas, Etienne" , "du-Breuil-de-Pont-en-Auge, Augustin" , "du-Breuil-de-Pont-en-Auge, Benoît" ;
+    <http://purl.org/dc/elements/1.1/relation> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_31_SOUND> .
+
+
+<http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xml> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "application/xml"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/issued> "2013-11-04T22:20:07+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
+    <http://purl.org/dc/terms/conformsTo> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-dtd_transcriber> .
+
+<http://cocoon.huma-num.fr/data/archi/masters/372593.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/extent> "PT48M26S" ;
+    <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> .
+
+<http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.mp3> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "audio/mpeg"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/extent> "PT48M26S" ;
+    <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
+    <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> .
+
+<http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/extent> "PT48M26S" ;
+    <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
+    <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> .
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/tests/Models/files/GeoResourceTest/loc1.ttl	Thu Sep 22 12:38:24 2016 +0200
@@ -0,0 +1,80 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix sesame: <http://www.openrdf.org/schema/sesame#> .
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+@prefix fn: <http://www.w3.org/2005/xpath-functions#> .
+
+<%1$scrdo-CFPP2000_35_SOUND> a <http://www.openarchives.org/ore/terms/Aggregation> ;
+    <http://www.europeana.eu/schemas/edm/aggregatedCHO> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_35_SOUND> ;
+    <http://www.europeana.eu/schemas/edm/dataProvider> "Langage et langues : description, théorisation, transmission" ;
+    <http://www.europeana.eu/schemas/edm/hasView> <http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xml> , <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.mp3> , <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.wav> ;
+    <http://www.europeana.eu/schemas/edm/isShownAt> <http://corpusdelaparole.huma-num.fr/corpus-app#/detail/crdo-CFPP2000_35_SOUND> ;
+    <http://www.europeana.eu/schemas/edm/isShownBy> <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> ;
+    <http://www.europeana.eu/schemas/edm/provider> "Corpus de la Parole"@fr ;
+    <http://www.europeana.eu/schemas/edm/rights> <http://creativecommons.org/licenses/by-nc-sa/4.0/> .
+
+<http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_35_SOUND> a <http://www.europeana.eu/schemas/edm/ProvidedCHO> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/extent> "PT48M26S" ;
+    <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
+    <http://purl.org/dc/elements/1.1/contributor> <http://viaf.org/viaf/93752300> , "Tanguy, Noalig" , "Chevrier, Michel" , "Kiliç, Ozgur" , "Salvegas, Etienne" , "du-Breuil-de-Pont-en-Auge, Augustin" , "du-Breuil-de-Pont-en-Auge, Benoît" ;
+    <http://purl.org/dc/elements/1.1/description> "Enregistrement issu du Corpus de Français Parlé Parisien des années 2000 (CFPP2000)"@fr , "Quartier(s) concerné(s) : Paris 3e, et 20e (pour l'âge adulte); Anonymisation : Noalig TANGUY;"@fr ;
+    <http://purl.org/dc/elements/1.1/identifier> "ark:/87895/1.17-375004" , "%2\$scrdo-CFPP2000_35_SOUNDid" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35" , "Cote producteur: [03-01] Ozgur_Kilic_H_32_alii_3e"@fr , "ark:/87895/1.17-372593" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35_SOUND" ;
+    <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/fra> ;
+    <http://purl.org/dc/elements/1.1/publisher> <http://viaf.org/viaf/142432638>;
+    <http://purl.org/dc/elements/1.1/subject> <http://ark.bnf.fr/ark:/12148/cb13318415c> , "anthropological_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "lexicography"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "phonetics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://lexvo.org/id/iso639-3/fra> , <http://ark.bnf.fr/ark:/12148/cb133188907> , <http://ark.bnf.fr/ark:/12148/cb11932762f> , "general_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb133183660> , "text_and_corpus_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "Français"@fr , <http://ark.bnf.fr/ark:/12148/cb122368540> , "phonology"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "semantics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "sociolinguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "syntax"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "typology"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb119418302> , <http://ark.bnf.fr/ark:/12148/cb135540729> , "discourse_analysis"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "historical_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "language_documentation"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb133192210> , <http://ark.bnf.fr/ark:/12148/cb119377452> , <http://ark.bnf.fr/ark:/12148/cb13320451h> , <http://ark.bnf.fr/ark:/12148/cb13318422n> , <http://ark.bnf.fr/ark:/12148/cb11975823c> , "mathematical_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> ;
+    <http://purl.org/dc/elements/1.1/title> "Entretien de Ozgur Kiliç 2"@fr ;
+    <http://purl.org/dc/elements/1.1/type> <http://ark.bnf.fr/ark:/12148/cb11932135w> , <http://ark.bnf.fr/ark:/12148/cb12481481z> , <http://purl.org/dc/dcmitype/Sound> , "primary_text"^^<http://www.language-archives.org/OLAC/1.1/linguistic-type> , <http://purl.org/dc/dcmitype/Text> , "narrative"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> , "report"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> , "unintelligible_speech"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> ;
+    <http://purl.org/dc/terms/available> "2013-10-12"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/spatial> [
+        a <http://www.europeana.eu/schemas/edm/Place> ;
+        owl:sameAs <http://sws.geonames.org/6618626/> ;
+        <http://www.w3.org/2003/01/geo/wgs84_pos#lat> "48.73194"^^xsd:float;
+        <http://www.w3.org/2003/01/geo/wgs84_pos#long> "7.70833"^^xsd:float;
+        <http://www.w3.org/2004/02/skos/core#note> "FR"^^<http://purl.org/dc/terms/ISO3166> , "France, Île-de-France, Paris, Université Sorbonne Nouvelle Paris 3, site Censier"@fr , "Domicile de Ozgur Kiliç"@fr , "France, Île-de-France, Paris 20"@fr
+    ];
+    <http://www.europeana.eu/schemas/edm/isGatheredInto> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE> , <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_CFPP2000> ;
+    <http://www.language-archives.org/OLAC/1.1/depositor> <http://viaf.org/viaf/93752300> ;
+    <http://www.language-archives.org/OLAC/1.1/interviewer> <http://viaf.org/viaf/93752300> ;
+    <http://www.language-archives.org/OLAC/1.1/transcriber> "Tanguy, Noalig" ;
+    <http://purl.org/dc/elements/1.1/coverage> "Quartier concerné : 3e"@fr ;
+    <http://www.language-archives.org/OLAC/1.1/responder> "Chevrier, Michel" , "Kiliç, Ozgur" , "Salvegas, Etienne" , "du-Breuil-de-Pont-en-Auge, Augustin" , "du-Breuil-de-Pont-en-Auge, Benoît" ;
+    <http://purl.org/dc/elements/1.1/relation> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_31_SOUND> .
+
+
+<http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xml> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "application/xml"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/issued> "2013-11-04T22:20:07+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
+    <http://purl.org/dc/terms/conformsTo> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-dtd_transcriber> .
+
+<http://cocoon.huma-num.fr/data/archi/masters/372593.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/extent> "PT48M26S" ;
+    <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> .
+
+<http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.mp3> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "audio/mpeg"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/extent> "PT48M26S" ;
+    <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
+    <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> .
+
+<http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/extent> "PT48M26S" ;
+    <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
+    <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> .
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/tests/Models/files/GeoResourceTest/loc2.ttl	Thu Sep 22 12:38:24 2016 +0200
@@ -0,0 +1,23 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix sesame: <http://www.openrdf.org/schema/sesame#> .
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+@prefix fn: <http://www.w3.org/2005/xpath-functions#> .
+
+<%1$scrdo-CFPP2000_35_SOUND> a <http://www.europeana.eu/schemas/edm/ProvidedCHO> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/extent> "PT48M26S" ;
+    <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
+    <http://purl.org/dc/elements/1.1/description> "Enregistrement issu du Corpus de Français Parlé Parisien des années 2000 (CFPP2000)"@fr , "Quartier(s) concerné(s) : Paris 3e, et 20e (pour l'âge adulte); Anonymisation : Noalig TANGUY;"@fr ;
+    <http://purl.org/dc/elements/1.1/identifier> "ark:/87895/1.17-375004" , "%2\$scrdo-CFPP2000_35_SOUNDid" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35" , "Cote producteur: [03-01] Ozgur_Kilic_H_32_alii_3e"@fr , "ark:/87895/1.17-372593" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35_SOUND" ;
+    <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/fra> ;
+    <http://purl.org/dc/elements/1.1/publisher> <http://viaf.org/viaf/142432638>;
+    <http://purl.org/dc/elements/1.1/title> "Entretien de Ozgur Kiliç 2"@fr ;
+    <http://purl.org/dc/terms/available> "2013-10-12"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/spatial> [
+        a <http://www.europeana.eu/schemas/edm/Place> ;
+        <http://www.w3.org/2004/02/skos/core#note> "FR"^^<http://purl.org/dc/terms/ISO3166> , "France, Île-de-France, Paris, Université Sorbonne Nouvelle Paris 3, site Censier"@fr , "Domicile de Ozgur Kiliç"@fr , "France, Île-de-France, Paris 20"@fr
+    ] .
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/tests/Models/files/GeoResourceTest/loc3.ttl	Thu Sep 22 12:38:24 2016 +0200
@@ -0,0 +1,27 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix sesame: <http://www.openrdf.org/schema/sesame#> .
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+@prefix fn: <http://www.w3.org/2005/xpath-functions#> .
+
+<%1$scrdo-CFPP2000_35_SOUND> a <http://www.europeana.eu/schemas/edm/ProvidedCHO> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/created> "2010-11-17"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/extent> "PT48M26S" ;
+    <http://purl.org/dc/terms/issued> "2013-10-12T14:35:57+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
+    <http://purl.org/dc/elements/1.1/description> "Enregistrement issu du Corpus de Français Parlé Parisien des années 2000 (CFPP2000)"@fr , "Quartier(s) concerné(s) : Paris 3e, et 20e (pour l'âge adulte); Anonymisation : Noalig TANGUY;"@fr ;
+    <http://purl.org/dc/elements/1.1/identifier> "ark:/87895/1.17-375004" , "%2\$scrdo-CFPP2000_35_SOUNDid" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35" , "Cote producteur: [03-01] Ozgur_Kilic_H_32_alii_3e"@fr , "ark:/87895/1.17-372593" , "oai:crdo.vjf.cnrs.fr:crdo-CFPP2000_35_SOUND" ;
+    <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/fra> ;
+    <http://purl.org/dc/elements/1.1/publisher> <http://viaf.org/viaf/142432638>;
+    <http://purl.org/dc/elements/1.1/title> "Entretien de Ozgur Kiliç 2"@fr ;
+    <http://purl.org/dc/terms/available> "2013-10-12"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/spatial> [
+        a <http://www.europeana.eu/schemas/edm/Place> ;
+        owl:sameAs <http://sws.geonames.org/6618626/> ;
+        owl:sameAs <http://fr.dbpedia.org/resource/Gramazie> ;
+        <http://www.w3.org/2003/01/geo/wgs84_pos#lat> "48.73194"^^xsd:float;
+        <http://www.w3.org/2003/01/geo/wgs84_pos#long> "7.70833"^^xsd:float;
+        <http://www.w3.org/2004/02/skos/core#note> "FR"^^<http://purl.org/dc/terms/ISO3166> , "France, Île-de-France, Paris, Université Sorbonne Nouvelle Paris 3, site Censier"@fr , "Domicile de Ozgur Kiliç"@fr , "France, Île-de-France, Paris 20"@fr
+    ] .
--- a/server/src/tests/Repositories/DocumentRepositoryIntegrationTest.php	Thu Sep 08 19:15:46 2016 +0200
+++ b/server/src/tests/Repositories/DocumentRepositoryIntegrationTest.php	Thu Sep 22 12:38:24 2016 +0200
@@ -15,87 +15,10 @@
 
 class DocumentRepositoryIntegrationTest extends TestCase {
 
-    const REPO_CREATION_TTL = <<<EOT
-    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
-    @prefix rep: <http://www.openrdf.org/config/repository#>.
-    @prefix sr: <http://www.openrdf.org/config/repository/sail#>.
-    @prefix sail: <http://www.openrdf.org/config/sail#>.
-    @prefix ms: <http://www.openrdf.org/config/sail/memory#>.
-
-    [] a rep:Repository ;
-        rep:repositoryID "%1\$s" ;
-        rdfs:label "%1\$s test repository" ;
-        rep:repositoryImpl [
-            rep:repositoryType "openrdf:SailRepository" ;
-            sr:sailImpl [
-                sail:sailType "openrdf:MemoryStore" ;
-                ms:persist false ;
-                ms:syncDelay 0
-            ]
-        ].
-EOT;
-
-    const TEST_DOC = <<<EOT
-    @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
-    @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
-    @prefix sesame: <http://www.openrdf.org/schema/sesame#> .
-    @prefix owl: <http://www.w3.org/2002/07/owl#> .
-    @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
-    @prefix fn: <http://www.w3.org/2005/xpath-functions#> .
-
-    _:genid-2267740936ad4d04a567e6787732f0dd-genid1 a <http://www.europeana.eu/schemas/edm/Place> ;
-        owl:sameAs <http://sws.geonames.org/3038033/> ;
-        <http://www.w3.org/2004/02/skos/core#note> "northlimit=47.431892250000033; southlimit=49.053971250000046;westlimit=6.846186050000028; eastlimit=8.232571550000074;"^^<http://purl.org/dc/terms/Box> , "FR"^^<http://purl.org/dc/terms/ISO3166> , "France, Alsace"@fr .
-
-    <%1\$scrdo-ALA_738> a <http://www.openarchives.org/ore/terms/Aggregation> ;
-        <http://www.europeana.eu/schemas/edm/aggregatedCHO> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_738> ;
-        <http://www.europeana.eu/schemas/edm/dataProvider> "Atlas linguistiques, cultures et parlers régionaux de France" ;
-        <http://www.europeana.eu/schemas/edm/hasView> <http://cocoon.huma-num.fr/data/ala/ALA_738.mp3> , <http://cocoon.huma-num.fr/data/ala/ALA_738_22km.wav> ;
-        <http://www.europeana.eu/schemas/edm/isShownAt> <http://corpusdelaparole.huma-num.fr/corpus-app#/detail/crdo-ALA_738> ;
-        <http://www.europeana.eu/schemas/edm/isShownBy> <http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> ;
-        <http://www.europeana.eu/schemas/edm/provider> "Corpus de la Parole"@fr ;
-        <http://www.europeana.eu/schemas/edm/rights> <http://creativecommons.org/licenses/by-nc-nd/4.0/> .
+    const REPO_CREATION_TTL = __DIR__.'/files/DocumentRepositoryIntegrationTest/repo_creation.ttl';
 
-    <http://cocoon.huma-num.fr/data/ala/ALA_738.mp3> a <http://www.europeana.eu/schemas/edm/WebResource> ;
-        <http://purl.org/dc/elements/1.1/format> "audio/mpeg"^^<http://purl.org/dc/terms/IMT> ;
-        <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
-        <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
-        <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> .
-
-    <http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
-        <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
-        <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
-        <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
-        <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> .
-
-    <http://cocoon.huma-num.fr/data/ala/ALA_738_22km.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
-        <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
-        <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
-        <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
-        <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> .
-
-    <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_738> a <http://www.europeana.eu/schemas/edm/ProvidedCHO> ;
-        <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
-        <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
-        <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/elements/1.1/contributor> <http://viaf.org/viaf/61542329> , <http://viaf.org/viaf/9122216> ;
-        <http://purl.org/dc/elements/1.1/description> "Extrait des enquêtes dialectologiques en vue de constituer un atlas linguistique de l'Alsace."@fr ;
-        <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/gsw> ;
-        <http://purl.org/dc/elements/1.1/publisher> "Atlas linguistiques, cultures et parlers régionaux de France" ;
-        <http://purl.org/dc/elements/1.1/rights> "Copyright (c) Département de dialectologie alsacienne et mosellane de l'Université de Strasbourg" ;
-        <http://purl.org/dc/elements/1.1/subject> <http://lexvo.org/id/iso639-3/gsw> , <http://ark.bnf.fr/ark:/12148/cb11931472p> , <http://ark.bnf.fr/ark:/12148/cb11931564b> , <http://ark.bnf.fr/ark:/12148/cb11932194d> , <http://ark.bnf.fr/ark:/12148/cb11933029x> , <http://ark.bnf.fr/ark:/12148/cb11933281k> , <http://ark.bnf.fr/ark:/12148/cb11934740m> , <http://ark.bnf.fr/ark:/12148/cb11935375d> , <http://ark.bnf.fr/ark:/12148/cb11935986q> , <http://ark.bnf.fr/ark:/12148/cb11936549n> , <http://ark.bnf.fr/ark:/12148/cb11937931x> , <http://ark.bnf.fr/ark:/12148/cb119392962> , <http://ark.bnf.fr/ark:/12148/cb119458243> , <http://ark.bnf.fr/ark:/12148/cb11946662b> , <http://ark.bnf.fr/ark:/12148/cb11947332t> , <http://ark.bnf.fr/ark:/12148/cb119481497> , <http://ark.bnf.fr/ark:/12148/cb119591726> , <http://ark.bnf.fr/ark:/12148/cb119756721> , <http://ark.bnf.fr/ark:/12148/cb119757609> , <http://ark.bnf.fr/ark:/12148/cb11975806s> , <http://ark.bnf.fr/ark:/12148/cb119759527> , <http://ark.bnf.fr/ark:/12148/cb12032030g> , <http://ark.bnf.fr/ark:/12148/cb12042429k> , <http://ark.bnf.fr/ark:/12148/cb12099148r> , <http://ark.bnf.fr/ark:/12148/cb12148936v> , <http://ark.bnf.fr/ark:/12148/cb12289036m> , <http://ark.bnf.fr/ark:/12148/cb13318335q> , <http://ark.bnf.fr/ark:/12148/cb133183540> , <http://ark.bnf.fr/ark:/12148/cb13318415c> , <http://ark.bnf.fr/ark:/12148/cb13318491g> , "anthropological_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "lexicography"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "phonetics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> ;
-        <http://purl.org/dc/elements/1.1/title> "Atlas Linguistique et ethnographique de l'Alsace - Enquetes sur la conscience linguistique - ALA_738"@fr ;
-        <http://purl.org/dc/elements/1.1/type> <http://ark.bnf.fr/ark:/12148/cb11932135w> , <http://ark.bnf.fr/ark:/12148/cb12481481z> , <http://purl.org/dc/dcmitype/Sound> , "dialogue"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> , "primary_text"^^<http://www.language-archives.org/OLAC/1.1/linguistic-type> ;
-        <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-        <http://purl.org/dc/terms/available> "2004-07-03"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/isPartOf> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_ALA_CL> , <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE> ;
-        <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-nd/2.5/> ;
-        <http://purl.org/dc/terms/spatial> _:genid-2267740936ad4d04a567e6787732f0dd-genid1 ;
-        <http://www.language-archives.org/OLAC/1.1/depositor> <http://viaf.org/viaf/9122216> ;
-        <http://www.language-archives.org/OLAC/1.1/interviewer> <http://viaf.org/viaf/61542329> , <http://viaf.org/viaf/9122216> .
-EOT;
+    const TEST_DOC = __DIR__.'/files/DocumentRepositoryIntegrationTest/test_doc.ttl';
+    const TEST_DOC_NO_GEO = __DIR__.'/files/DocumentRepositoryIntegrationTest/test_doc_no_geo.ttl';
 
     function __construct(string $name = null) {
         parent::__construct($name);
@@ -103,7 +26,7 @@
 
     public function setUp() {
         parent::setUp();
-        $this->graph = new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-ALA_738", sprintf(DocumentRepositoryIntegrationTest::TEST_DOC, config('corpusparole.corpus_doc_id_base_uri')));
+        $this->graph = new EasyRdf\Graph(config('corpusparole.corpus_doc_id_base_uri')."crdo-ALA_738", sprintf(file_get_contents(DocumentRepositoryIntegrationTest::TEST_DOC), config('corpusparole.corpus_doc_id_base_uri')));
 
         $this->httpClient = new Client(['base_uri' => config('corpusparole.sesame_base_url')]);
         $this->sesameRepository = config('corpusparole.sesame_repository');
@@ -111,7 +34,7 @@
 
         $this->documentRepository = $this->app->make('CorpusParole\Repositories\DocumentRepository');
         $uniqueid = uniqid('corpusparole', true);
-        $repoCreateStmt = sprintf(DocumentRepositoryIntegrationTest::REPO_CREATION_TTL, $this->sesameRepository);
+        $repoCreateStmt = sprintf(file_get_contents(DocumentRepositoryIntegrationTest::REPO_CREATION_TTL), $this->sesameRepository);
         $this->httpClient->delete("repositories/$this->sesameRepository", ['http_errors' => false]);
         $this->httpClient->post('repositories/SYSTEM/statements', [
             'headers' => ['Content-type' => 'application/x-turtle;charset=UTF-8'],
@@ -120,20 +43,26 @@
         ]);
         $this->httpClient->put("repositories/$this->sesameRepository/statements", [
             'headers' => ['Content-type' => 'text/turtle;charset=UTF-8'],
-            'body' => sprintf(DocumentRepositoryIntegrationTest::TEST_DOC, config('corpusparole.corpus_doc_id_base_uri')),
+            'body' => sprintf(file_get_contents(DocumentRepositoryIntegrationTest::TEST_DOC), config('corpusparole.corpus_doc_id_base_uri')),
             'query' => ['context' => "<".config('corpusparole.corpus_doc_id_base_uri')."crdo-ALA_738>"],
         ]);
+        $this->httpClient->put("repositories/$this->sesameRepository/statements", [
+            'headers' => ['Content-type' => 'text/turtle;charset=UTF-8'],
+            'body' => sprintf(file_get_contents(DocumentRepositoryIntegrationTest::TEST_DOC_NO_GEO), config('corpusparole.corpus_doc_id_base_uri')),
+            'query' => ['context' => "<".config('corpusparole.corpus_doc_id_base_uri')."crdo-ALA_739>"],
+        ]);
+
     }
 
     public function tearDown() {
-        //$this->httpClient->delete("repositories/$this->sesameRepository");
+        $this->httpClient->delete("repositories/$this->sesameRepository");
         parent::tearDown();
     }
 
     public function testAll() {
         $expectedId = $this->corpusDocIdBaseUri.'crdo-ALA_738';
         $docList = $this->documentRepository->all();
-        $this->assertCount(1, $docList, "Should have one element");
+        $this->assertCount(2, $docList, "Should have one element");
 
         $resDoc = $docList[0];
 
@@ -147,7 +76,7 @@
     public function testGet() {
 
         $expectedId = $this->corpusDocIdBaseUri.'crdo-ALA_738';
-        $returnedGraph = new EasyRdf\Graph($expectedId, sprintf(DocumentRepositoryIntegrationTest::TEST_DOC,config('corpusparole.corpus_doc_id_base_uri')));
+        $returnedGraph = new EasyRdf\Graph($expectedId, sprintf(file_get_contents(DocumentRepositoryIntegrationTest::TEST_DOC),config('corpusparole.corpus_doc_id_base_uri')));
 
         $res = $this->documentRepository->get('crdo-ALA_738');
 
@@ -161,7 +90,7 @@
     public function testGetShort() {
 
         $expectedId = $this->corpusDocIdBaseUri.'crdo-ALA_738';
-        $returnedGraph = new EasyRdf\Graph($expectedId, sprintf(DocumentRepositoryIntegrationTest::TEST_DOC,config('corpusparole.corpus_doc_id_base_uri')));
+        $returnedGraph = new EasyRdf\Graph($expectedId, sprintf(file_get_contents(DocumentRepositoryIntegrationTest::TEST_DOC),config('corpusparole.corpus_doc_id_base_uri')));
 
         $res = $this->documentRepository->get('crdo-ALA_738', true);
 
@@ -172,6 +101,111 @@
         $this->assertTrue(EasyRdf\Isomorphic::isomorphic($res->getGraph(),$returnedGraph));
     }
 
+    public function testNoGeo() {
+        $expectedId = $this->corpusDocIdBaseUri.'crdo-ALA_739';
+        $returnedGraph = new EasyRdf\Graph($expectedId, sprintf(file_get_contents(DocumentRepositoryIntegrationTest::TEST_DOC_NO_GEO),config('corpusparole.corpus_doc_id_base_uri')));
+
+        $res = $this->documentRepository->get('crdo-ALA_739');
+
+        $this->assertNull($res->getGeoInfo(), "Must have no geo info");
+
+    }
+
+    /**
+     * @expectedException        CorpusParole\Libraries\CorpusParoleException
+     * @expectedExceptionMessage GetDeltaList called when changes are pending
+     */
+    public function testAddGeoNoCommit() {
+
+        $doc = $this->documentRepository->get('crdo-ALA_739');
+
+        $geoInfo = $doc->addGeoInfo();
+
+        $res = $this->documentRepository->save($doc);
+    }
+
+
+    public function testAddGeo() {
+
+        $doc = $this->documentRepository->get('crdo-ALA_739');
+
+        $geoInfo = $doc->addGeoInfo();
+        $geoInfo->commit();
+
+        $res = $this->documentRepository->save($doc);
+
+        $res = $this->documentRepository->get('crdo-ALA_739');
+
+        $geoInfo = $res->getGeoInfo();
+
+        $this->assertNotNull($geoInfo, "Must have Geo info");
+
+        $notes = $geoInfo->getNotes();
+
+        $this->assertTrue(is_array($notes));
+        $this->assertCount(0, $notes);
+
+        $refLocs = $geoInfo->getRefLocs();
+
+        $this->assertTrue(is_array($refLocs));
+        $this->assertCount(0,$refLocs);
+
+    }
+
+    public function testAddGeoExisting() {
+
+        $doc = $this->documentRepository->get('crdo-ALA_738');
+
+        $geoInfo = $doc->addGeoInfo();
+        $geoInfo->commit();
+
+        $res = $this->documentRepository->save($doc);
+
+        $res = $this->documentRepository->get('crdo-ALA_738');
+
+        $geoInfo = $res->getGeoInfo();
+
+        $this->assertNotNull($geoInfo, "Must have Geo info");
+
+        $notes = $geoInfo->getNotes();
+
+        $this->assertTrue(is_array($notes));
+        $this->assertCount(3, $notes);
+
+        $refLocs = $geoInfo->getRefLocs();
+
+        $this->assertTrue(is_array($refLocs));
+        $this->assertCount(1,$refLocs);
+
+    }
+
+    public function testGeoSetRefLoc() {
+
+        $doc = $this->documentRepository->get('crdo-ALA_738');
+        $geoInfo = $doc->addGeoInfo();
+
+        $newRefLocs = [ 'http://sws.geonames.org/2643743/' ];
+
+        $geoInfo->setRefLocs($newRefLocs);
+
+        $geoInfo->commit();
+
+        $res = $this->documentRepository->save($doc);
+
+        $res = $this->documentRepository->get('crdo-ALA_738');
+
+        $geoInfo = $res->getGeoInfo();
+
+        $refLocs = $geoInfo->getRefLocs();
+
+        $this->assertTrue(is_array($refLocs));
+        $this->assertCount(1,$refLocs);
+
+        $this->assertEquals(['http://sws.geonames.org/2643743/'], $refLocs);
+
+    }
+
+
 
     public function testSave() {
 
@@ -204,7 +238,7 @@
         $res = $this->documentRepository->getCount();
 
         $this->assertNotNull($res, "Res should not be null");
-        $this->assertSame(1, $res, "should heve only one document");
+        $this->assertSame(2, $res, "should have 2 documents");
     }
 
 
--- a/server/src/tests/Repositories/DocumentRepositoryTest.php	Thu Sep 08 19:15:46 2016 +0200
+++ b/server/src/tests/Repositories/DocumentRepositoryTest.php	Thu Sep 22 12:38:24 2016 +0200
@@ -156,6 +156,7 @@
 
         $sparqlClientMock = m::mock('CorpusParole\Libraries\Sparql\SparqlClient', function($mock) {
             $mock->shouldReceive('startTransaction')->andReturn(true)
+                ->shouldReceive('deleteWhere')
                 ->shouldReceive('delete')->shouldReceive('add')
                 ->shouldReceive('commit')->andReturn(true);
         });
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/tests/Repositories/files/DocumentRepositoryIntegrationTest/repo_creation.ttl	Thu Sep 22 12:38:24 2016 +0200
@@ -0,0 +1,17 @@
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.
+@prefix rep: <http://www.openrdf.org/config/repository#>.
+@prefix sr: <http://www.openrdf.org/config/repository/sail#>.
+@prefix sail: <http://www.openrdf.org/config/sail#>.
+@prefix ms: <http://www.openrdf.org/config/sail/memory#>.
+
+[] a rep:Repository ;
+    rep:repositoryID "%1$s" ;
+    rdfs:label "%1$s test repository" ;
+    rep:repositoryImpl [
+        rep:repositoryType "openrdf:SailRepository" ;
+        sr:sailImpl [
+            sail:sailType "openrdf:MemoryStore" ;
+            ms:persist false ;
+            ms:syncDelay 0
+        ]
+    ].
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/tests/Repositories/files/DocumentRepositoryIntegrationTest/test_doc.ttl	Thu Sep 22 12:38:24 2016 +0200
@@ -0,0 +1,61 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix sesame: <http://www.openrdf.org/schema/sesame#> .
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+@prefix fn: <http://www.w3.org/2005/xpath-functions#> .
+
+_:genid-2267740936ad4d04a567e6787732f0dd-genid1 a <http://www.europeana.eu/schemas/edm/Place> ;
+    owl:sameAs <http://sws.geonames.org/3038033/> ;
+    <http://www.w3.org/2004/02/skos/core#note> "northlimit=47.431892250000033; southlimit=49.053971250000046;westlimit=6.846186050000028; eastlimit=8.232571550000074;"^^<http://purl.org/dc/terms/Box> , "FR"^^<http://purl.org/dc/terms/ISO3166> , "France, Alsace"@fr ;
+    <http://www.w3.org/2003/01/geo/wgs84_pos#lat> "48.73194"^^xsd:float ;
+    <http://www.w3.org/2003/01/geo/wgs84_pos#long> "7.70833"^^xsd:float .
+
+<%1$scrdo-ALA_738> a <http://www.openarchives.org/ore/terms/Aggregation> ;
+    <http://www.europeana.eu/schemas/edm/aggregatedCHO> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_738> ;
+    <http://www.europeana.eu/schemas/edm/dataProvider> "Atlas linguistiques, cultures et parlers régionaux de France" ;
+    <http://www.europeana.eu/schemas/edm/hasView> <http://cocoon.huma-num.fr/data/ala/ALA_738.mp3> , <http://cocoon.huma-num.fr/data/ala/ALA_738_22km.wav> ;
+    <http://www.europeana.eu/schemas/edm/isShownAt> <http://corpusdelaparole.huma-num.fr/corpus-app#/detail/crdo-ALA_738> ;
+    <http://www.europeana.eu/schemas/edm/isShownBy> <http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> ;
+    <http://www.europeana.eu/schemas/edm/provider> "Corpus de la Parole"@fr ;
+    <http://www.europeana.eu/schemas/edm/rights> <http://creativecommons.org/licenses/by-nc-nd/4.0/> .
+
+<http://cocoon.huma-num.fr/data/ala/ALA_738.mp3> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "audio/mpeg"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
+    <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
+    <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> .
+
+<http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
+    <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
+    <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> .
+
+<http://cocoon.huma-num.fr/data/ala/ALA_738_22km.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
+    <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
+    <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> .
+
+<http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_738> a <http://www.europeana.eu/schemas/edm/ProvidedCHO> ;
+    <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
+    <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
+    <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/elements/1.1/contributor> <http://viaf.org/viaf/61542329> , <http://viaf.org/viaf/9122216> ;
+    <http://purl.org/dc/elements/1.1/description> "Extrait des enquêtes dialectologiques en vue de constituer un atlas linguistique de l'Alsace."@fr ;
+    <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/gsw> ;
+    <http://purl.org/dc/elements/1.1/publisher> "Atlas linguistiques, cultures et parlers régionaux de France" ;
+    <http://purl.org/dc/elements/1.1/rights> "Copyright (c) Département de dialectologie alsacienne et mosellane de l'Université de Strasbourg" ;
+    <http://purl.org/dc/elements/1.1/subject> <http://lexvo.org/id/iso639-3/gsw> , <http://ark.bnf.fr/ark:/12148/cb11931472p> , <http://ark.bnf.fr/ark:/12148/cb11931564b> , <http://ark.bnf.fr/ark:/12148/cb11932194d> , <http://ark.bnf.fr/ark:/12148/cb11933029x> , <http://ark.bnf.fr/ark:/12148/cb11933281k> , <http://ark.bnf.fr/ark:/12148/cb11934740m> , <http://ark.bnf.fr/ark:/12148/cb11935375d> , <http://ark.bnf.fr/ark:/12148/cb11935986q> , <http://ark.bnf.fr/ark:/12148/cb11936549n> , <http://ark.bnf.fr/ark:/12148/cb11937931x> , <http://ark.bnf.fr/ark:/12148/cb119392962> , <http://ark.bnf.fr/ark:/12148/cb119458243> , <http://ark.bnf.fr/ark:/12148/cb11946662b> , <http://ark.bnf.fr/ark:/12148/cb11947332t> , <http://ark.bnf.fr/ark:/12148/cb119481497> , <http://ark.bnf.fr/ark:/12148/cb119591726> , <http://ark.bnf.fr/ark:/12148/cb119756721> , <http://ark.bnf.fr/ark:/12148/cb119757609> , <http://ark.bnf.fr/ark:/12148/cb11975806s> , <http://ark.bnf.fr/ark:/12148/cb119759527> , <http://ark.bnf.fr/ark:/12148/cb12032030g> , <http://ark.bnf.fr/ark:/12148/cb12042429k> , <http://ark.bnf.fr/ark:/12148/cb12099148r> , <http://ark.bnf.fr/ark:/12148/cb12148936v> , <http://ark.bnf.fr/ark:/12148/cb12289036m> , <http://ark.bnf.fr/ark:/12148/cb13318335q> , <http://ark.bnf.fr/ark:/12148/cb133183540> , <http://ark.bnf.fr/ark:/12148/cb13318415c> , <http://ark.bnf.fr/ark:/12148/cb13318491g> , "anthropological_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "lexicography"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "phonetics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> ;
+    <http://purl.org/dc/elements/1.1/title> "Atlas Linguistique et ethnographique de l'Alsace - Enquetes sur la conscience linguistique - ALA_738"@fr ;
+    <http://purl.org/dc/elements/1.1/type> <http://ark.bnf.fr/ark:/12148/cb11932135w> , <http://ark.bnf.fr/ark:/12148/cb12481481z> , <http://purl.org/dc/dcmitype/Sound> , "dialogue"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> , "primary_text"^^<http://www.language-archives.org/OLAC/1.1/linguistic-type> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/available> "2004-07-03"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/isPartOf> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_ALA_CL> , <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-nd/2.5/> ;
+    <http://purl.org/dc/terms/spatial> _:genid-2267740936ad4d04a567e6787732f0dd-genid1 ;
+    <http://www.language-archives.org/OLAC/1.1/depositor> <http://viaf.org/viaf/9122216> ;
+    <http://www.language-archives.org/OLAC/1.1/interviewer> <http://viaf.org/viaf/61542329> , <http://viaf.org/viaf/9122216> .
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/tests/Repositories/files/DocumentRepositoryIntegrationTest/test_doc_no_geo.ttl	Thu Sep 22 12:38:24 2016 +0200
@@ -0,0 +1,54 @@
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix sesame: <http://www.openrdf.org/schema/sesame#> .
+@prefix owl: <http://www.w3.org/2002/07/owl#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+@prefix fn: <http://www.w3.org/2005/xpath-functions#> .
+
+<%1$scrdo-ALA_739> a <http://www.openarchives.org/ore/terms/Aggregation> ;
+    <http://www.europeana.eu/schemas/edm/aggregatedCHO> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_739> ;
+    <http://www.europeana.eu/schemas/edm/dataProvider> "Atlas linguistiques, cultures et parlers régionaux de France" ;
+    <http://www.europeana.eu/schemas/edm/hasView> <http://cocoon.huma-num.fr/data/ala/ALA_738.mp3> , <http://cocoon.huma-num.fr/data/ala/ALA_738_22km.wav> ;
+    <http://www.europeana.eu/schemas/edm/isShownAt> <http://corpusdelaparole.huma-num.fr/corpus-app#/detail/crdo-ALA_739> ;
+    <http://www.europeana.eu/schemas/edm/isShownBy> <http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> ;
+    <http://www.europeana.eu/schemas/edm/provider> "Corpus de la Parole"@fr ;
+    <http://www.europeana.eu/schemas/edm/rights> <http://creativecommons.org/licenses/by-nc-nd/4.0/> .
+
+<http://cocoon.huma-num.fr/data/ala/ALA_738.mp3> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "audio/mpeg"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
+    <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
+    <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> .
+
+<http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
+    <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
+    <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> .
+
+<http://cocoon.huma-num.fr/data/ala/ALA_738_22km.wav> a <http://www.europeana.eu/schemas/edm/WebResource> ;
+    <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
+    <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
+    <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
+    <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/ala/masters/ALA_738.wav> .
+
+<http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_739> a <http://www.europeana.eu/schemas/edm/ProvidedCHO> ;
+    <http://purl.org/dc/terms/created> "1996"^^<http://purl.org/dc/terms/Period> ;
+    <http://purl.org/dc/terms/extent> "PT01H11M29S" ;
+    <http://purl.org/dc/terms/issued> "2014-11-10T14:27:08+01:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/elements/1.1/contributor> <http://viaf.org/viaf/61542329> , <http://viaf.org/viaf/9122216> ;
+    <http://purl.org/dc/elements/1.1/description> "Extrait des enquêtes dialectologiques en vue de constituer un atlas linguistique de l'Alsace."@fr ;
+    <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/gsw> ;
+    <http://purl.org/dc/elements/1.1/publisher> "Atlas linguistiques, cultures et parlers régionaux de France" ;
+    <http://purl.org/dc/elements/1.1/rights> "Copyright (c) Département de dialectologie alsacienne et mosellane de l'Université de Strasbourg" ;
+    <http://purl.org/dc/elements/1.1/subject> <http://lexvo.org/id/iso639-3/gsw> , <http://ark.bnf.fr/ark:/12148/cb11931472p> , <http://ark.bnf.fr/ark:/12148/cb11931564b> , <http://ark.bnf.fr/ark:/12148/cb11932194d> , <http://ark.bnf.fr/ark:/12148/cb11933029x> , <http://ark.bnf.fr/ark:/12148/cb11933281k> , <http://ark.bnf.fr/ark:/12148/cb11934740m> , <http://ark.bnf.fr/ark:/12148/cb11935375d> , <http://ark.bnf.fr/ark:/12148/cb11935986q> , <http://ark.bnf.fr/ark:/12148/cb11936549n> , <http://ark.bnf.fr/ark:/12148/cb11937931x> , <http://ark.bnf.fr/ark:/12148/cb119392962> , <http://ark.bnf.fr/ark:/12148/cb119458243> , <http://ark.bnf.fr/ark:/12148/cb11946662b> , <http://ark.bnf.fr/ark:/12148/cb11947332t> , <http://ark.bnf.fr/ark:/12148/cb119481497> , <http://ark.bnf.fr/ark:/12148/cb119591726> , <http://ark.bnf.fr/ark:/12148/cb119756721> , <http://ark.bnf.fr/ark:/12148/cb119757609> , <http://ark.bnf.fr/ark:/12148/cb11975806s> , <http://ark.bnf.fr/ark:/12148/cb119759527> , <http://ark.bnf.fr/ark:/12148/cb12032030g> , <http://ark.bnf.fr/ark:/12148/cb12042429k> , <http://ark.bnf.fr/ark:/12148/cb12099148r> , <http://ark.bnf.fr/ark:/12148/cb12148936v> , <http://ark.bnf.fr/ark:/12148/cb12289036m> , <http://ark.bnf.fr/ark:/12148/cb13318335q> , <http://ark.bnf.fr/ark:/12148/cb133183540> , <http://ark.bnf.fr/ark:/12148/cb13318415c> , <http://ark.bnf.fr/ark:/12148/cb13318491g> , "anthropological_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "lexicography"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "phonetics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> ;
+    <http://purl.org/dc/elements/1.1/title> "Atlas Linguistique et ethnographique de l'Alsace - Enquetes sur la conscience linguistique - ALA_738"@fr ;
+    <http://purl.org/dc/elements/1.1/type> <http://ark.bnf.fr/ark:/12148/cb11932135w> , <http://ark.bnf.fr/ark:/12148/cb12481481z> , <http://purl.org/dc/dcmitype/Sound> , "dialogue"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> , "primary_text"^^<http://www.language-archives.org/OLAC/1.1/linguistic-type> ;
+    <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    <http://purl.org/dc/terms/available> "2004-07-03"^^<http://purl.org/dc/terms/W3CDTF> ;
+    <http://purl.org/dc/terms/isPartOf> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_ALA_CL> , <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE> ;
+    <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-nd/2.5/> ;
+    <http://www.language-archives.org/OLAC/1.1/depositor> <http://viaf.org/viaf/9122216> ;
+    <http://www.language-archives.org/OLAC/1.1/interviewer> <http://via]f.org/viaf/61542329> , <http://viaf.org/viaf/9122216> .