Bo conception step. back to ember page
authorymh <ymh.work@gmail.com>
Fri, 27 Nov 2015 17:59:36 +0100
changeset 19 eadaf0b8f02e
parent 18 f2a40bbc27f6
child 20 a9b98b16b053
Bo conception step. back to ember page
dev/Vagrantfile
dev/provisioning/playbook.yml
server/src/app/Console/Commands/ImportCocoonRDF.php
server/src/app/Http/routes.php
server/src/app/Libraries/CocoonUtils.php
server/src/app/Libraries/Mappers/CocoonAbstractRdfMapper.php
server/src/app/Libraries/Mappers/CocoonTextRdfMapper.php
server/src/app/Libraries/Mergers/CocoonAbstractRdfMerger.php
server/src/app/Libraries/Utils.php
server/src/app/Models/Document.php
server/src/app/Providers/AppServiceProvider.php
server/src/app/Repositories/RdfDocumentRepository.php
server/src/config/constants.php
server/src/config/corpusparole.php
server/src/resources/views/bo/docList.blade.php
server/src/tests/Controllers/DocumentListControllerTest.php
server/src/tests/Models/DocumentTest.php
server/src/tests/Repositories/DocumentRepositoryIntegrationTest.php
server/src/tests/Repositories/DocumentRepositoryTest.php
server/src/tests/libraries/Mappers/CocoonTextRdfMapperTest.php
server/src/tests/libraries/UtilsTest.php
--- a/dev/Vagrantfile	Tue Nov 17 13:11:55 2015 +0100
+++ b/dev/Vagrantfile	Fri Nov 27 17:59:36 2015 +0100
@@ -105,6 +105,9 @@
 
   config.vm.provision "ansible" do |ansible|
     ansible.playbook = "provisioning/playbook.yml"
+    ansible.extra_vars = {
+        site_name: "corpus-parole.local"
+    }
     ansible.sudo = true
   end
 
--- a/dev/provisioning/playbook.yml	Tue Nov 17 13:11:55 2015 +0100
+++ b/dev/provisioning/playbook.yml	Fri Nov 27 17:59:36 2015 +0100
@@ -8,8 +8,6 @@
     db_user: corpus
     db_password: md5bf687edf8c06f3f1aa3759c82c1217a0
 
-    site_name: corpus-parole.local
-
   tasks:
 #   - name: install language pack
 #     command: localedef -v -c -i en_US -f UTF-8 en_US.UTF-8
@@ -30,10 +28,10 @@
     - name: ensure correct locale LANG
       lineinfile: dest=/etc/sysconfig/i18n regexp=^LANG= line=LANG="en_US.UTF-8"
 
-    - name: set .bashrc
-      copy: src=files/.bashrc dest=/home/vagrant/.bashrc force=yes
-    - name: set .profile
-      copy: src=files/.profile dest=/home/vagrant/.profile force=yes
+    # - name: set .bashrc
+    #   copy: src=files/.bashrc dest=/home/vagrant/.bashrc force=yes
+    # - name: set .profile
+    #   copy: src=files/.profile dest=/home/vagrant/.profile force=yes
 
     - name: check yum base last update
       stat: path=/var/cache/yum/x86_64/6/base/cachecookie
@@ -192,7 +190,7 @@
       args:
         creates: /etc/nginx/ssl/{{ site_name }}.key
     - name: generate ssl csr
-      command: openssl req -new -key /etc/nginx/ssl/{{ site_name }}.key -out /etc/nginx/ssl/{{ site_name }}.csr -subj "/CN={{ site_name }}/O=Vagrant/C=UK"
+      command: openssl req -new -key /etc/nginx/ssl/{{ site_name }}.key -out /etc/nginx/ssl/{{ site_name }}.csr -subj "/CN={{ site_name }}/O=MCC/C=FR"
       args:
         creates: /etc/nginx/ssl/{{ site_name }}.csr
     - name: generate ssl certificate
@@ -237,20 +235,19 @@
       register: sesame_jar
 
     - name: download sesame
-#http://sourceforge.net/projects/sesame/files/Sesame%204/4.0.0/openrdf-sesame-4.0.0-sdk.tar.gz/download
-      get_url: url=http://sourceforge.net/projects/sesame/files/Sesame%202/2.8.6/openrdf-sesame-2.8.6-sdk.tar.gz/download dest=/tmp/openrdf-sesame-2.8.6-sdk.tar.gz
+      get_url: url=http://sourceforge.net/projects/sesame/files/Sesame%204/4.0.0/openrdf-sesame-4.0.0-sdk.tar.gz/download dest=/tmp/openrdf-sesame-4.0.0-sdk.tar.gz
       when: sesame_jar.stat.exists == False
 
     - name: create sesame untar dest
-      file: path=/tmp/openrdf-sesame-2.8.6-sdk state=directory
+      file: path=/tmp/openrdf-sesame-4.0.0-sdk state=directory
       when: sesame_jar.stat.exists == False
 
     - name: unarchive sesame
-      unarchive: src=/tmp/openrdf-sesame-2.8.6-sdk.tar.gz dest=/tmp/openrdf-sesame-2.8.6-sdk copy=false
+      unarchive: src=/tmp/openrdf-sesame-4.0.0-sdk.tar.gz dest=/tmp/openrdf-sesame-4.0.0-sdk copy=false
       when: sesame_jar.stat.exists == False
 
     - name: deploy sesame jar
-      shell: cp /tmp/openrdf-sesame-2.8.6-sdk/openrdf-sesame-2.8.6/war/*.war /var/lib/tomcat/webapps/
+      shell: cp /tmp/openrdf-sesame-4.0.0-sdk/openrdf-sesame-4.0.0/war/*.war /var/lib/tomcat/webapps/
       when: sesame_jar.stat.exists == False
 
     - name: create sesame data folder
@@ -269,10 +266,10 @@
       when: sesame_jar.stat.exists == False
 
     - name : delete sesame archive
-      file: path=/tmp/openrdf-sesame-2.8.6-sdk.tar.gz state=absent
+      file: path=/tmp/openrdf-sesame-4.0.0-sdk.tar.gz state=absent
 
     - name : delete sesame untar
-      file: path=/tmp/openrdf-sesame-2.8.6-sdk state=absent
+      file: path=/tmp/openrdf-sesame-4.0.0-sdk state=absent
 
 
 #set postgresql local access to trust
--- a/server/src/app/Console/Commands/ImportCocoonRDF.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/app/Console/Commands/ImportCocoonRDF.php	Fri Nov 27 17:59:36 2015 +0100
@@ -14,6 +14,13 @@
 
     const INSERT_TIMEOUT_RETRY = 5;
 
+    const MAPPER_CLASS_MAP = [
+        "http://purl.org/dc/dcmitype/Sound" => '\CorpusParole\Libraries\Mappers\CocoonSoundRdfMapper',
+        "http://purl.org/dc/dcmitype/MovingImage" => '\CorpusParole\Libraries\Mappers\CocoonSoundRdfMapper',
+        "http://purl.org/dc/dcmitype/Text" => '\CorpusParole\Libraries\Mappers\CocoonTextRdfMapper',
+        "http://purl.org/dc/dcmitype/Collection" => '\CorpusParole\Libraries\Mappers\CocoonCollectionRdfMapper'
+    ];
+
     /**
      * The console command description.
      *
@@ -26,7 +33,7 @@
     *
     * @var string
     */
-    protected $signature = 'corpus-parole:importRDF {--skip=0 : Number of record to skip}';
+    protected $signature = 'corpus-parole:importRDF {--skip=0 : Number of record to skip} {--raw : Register raw}';
 
     /**
      * Create a new command instance.
@@ -36,6 +43,31 @@
     }
 
     /**
+     * Get the list of dcmi types for the graph
+     */
+    private function getDocTypes($doc, $docUri) {
+
+        $res = $doc->resource($docUri);
+        $docTypes = [];
+        //foreach ($res->all("http://purl.org/dc/elements/1.1/type") as $resType) {
+        foreach ($res->all("dc11:type","resource") as $resType) {
+            $type = $resType->getUri();
+            if(0 === strpos($type, 'http://purl.org/dc/dcmitype/')) {
+                $docTypes[] = $type;
+            }
+        }
+
+        // if the doc type list is empty, check that we have a collection
+        if(empty($docTypes)) {
+            if(!empty($doc->allOfType('edm:Collection'))) {
+                $docTypes[] = "http://purl.org/dc/dcmitype/Collection";
+            }
+        }
+        return $docTypes;
+    }
+
+
+    /**
      * Execute the console command.
      *
      * @return mixed
@@ -45,10 +77,13 @@
         libxml_use_internal_errors(true);
 
         $skip = (int)$this->option('skip');
+        $raw = $this->option('raw');
 
         $this->comment("Skipping $skip records");
+        $this->comment("Recording raw queries: $raw");
 
         $gs = new \EasyRdf\Sparql\Client(Config::get('corpusparole.sesame_query_url'), Config::get('corpusparole.sesame_update_url'));
+        $gs_raw = new \EasyRdf\Sparql\Client(Config::get('corpusparole.sesame_query_url_raw'), Config::get('corpusparole.sesame_update_url_raw'));
 
 
         $client = new Client(Config::get('corpusparole.cocoon_oaipmh_url'));
@@ -62,6 +97,8 @@
 
         $insertTimeouts = 0;
 
+        $documentCounts = ['all' => 0, 'unknown' => 0];
+
         foreach ($recs as $item) {
 
             $identifier = (string) $item->xpath('/record/header/identifier')[0];
@@ -77,44 +114,119 @@
 
             $docUri = config('corpusparole.cocoon_doc_id_base_uri').substr($identifier, strlen(Config::get('corpusparole.cocoon_doc_id_base')));
 
-            $resDocs = $gs->query("ASK WHERE { GRAPH <$docUri> { ?s ?p ?o }}");
-            if(!$resDocs->getBoolean()) {
-                $docLoaded = false;
-                $loadRetry = 0;
-                while(!$docLoaded && $loadRetry < config('corpusparole.max_load_retry', 3)) {
-                    $loadRetry++;
-                    try {
-                        $doc = new \EasyRdf\Graph($docRdfUrl);
-                        $doc->load();
-                        $docLoaded = true;
+            $docLoaded = false;
+            $loadRetry = 0;
+            $doc = null;
+            while(!$docLoaded && $loadRetry < config('corpusparole.max_load_retry', 3)) {
+                $loadRetry++;
+                try {
+                    $doc = new \EasyRdf\Graph($docRdfUrl);
+                    $doc->load();
+                    $docLoaded = true;
+                }
+                //TODO: catch network exception - add error to database
+                catch(\Exception $e) {
+                    $code = $e->getCode();
+                    $message = $e->getMessage();
+                    $this->info("\nError processing $identifier. code : $code, message: $message");
+                    Log::debug("Error processing $identifier. code : $code, message: $message");
+                    if($code == 0 && stripos($message, 'timed out')>=0 ) {
+                        $this->info("\nTimeout error processing $identifier ($docRdfUrl) : $e, retrying");
+                        Log::warning("Timeout error processing $identifier ($docRdfUrl) : $e, retrying");
+                        continue;
+                    }
+                    else {
+                        $this->error("\nError processing $identifier ($docRdfUrl) : $e");
+                        Log::error("Error processing $identifier ($docRdfUrl) : $e");
+                        break;
                     }
-                    //TODO: catch network exception - add error to database
-                    catch(\Exception $e) {
-                        $code = $e->getCode();
-                        $message = $e->getMessage();
-                        $this->debug("\nError processing $identifier. code : $code, message: $message");
-                        Log::debug("Error processing $identifier. code : $code, message: $message");
-                        if($code == 1 && stripos($message, 'timed out')>=0 ) {
-                            $this->warning("\nTimeout error processing $identifier ($docRdfUrl) : $e, retrying");
-                            Log::warning("Timeout error processing $identifier ($docRdfUrl) : $e, retrying");
-                            continue;
-                        }
-                        else {
-                            $this->error("\nError processing $identifier ($docRdfUrl) : $e");
-                            Log::error("Error processing $identifier ($docRdfUrl) : $e");
-                            break;
-                        }
-                        //$this->error(print_r($e->getTraceAsString(),true));
+                    //$this->error(print_r($e->getTraceAsString(),true));
+                }
+            }
+            if(!$docLoaded) {
+                continue;
+            }
+
+            //insert raw
+            if($raw) {
+                $resDocsRaw = $gs_raw->query("ASK WHERE { GRAPH <$docUri> { ?s ?p ?o }}");
+                if($resDocsRaw->getBoolean()) {
+                    $gs_raw->clear($docUri);
+                }
+                $gs_raw->insert($doc, $docUri);
+            }
+
+            //map doc
+            $inputDocTypes = $this->getDocTypes($doc, $docUri);
+
+            $docType = count($inputDocTypes)>0? $inputDocTypes[0]:null;
+
+            if(is_null($docType) || !array_key_exists($docType,ImportCocoonRDF::MAPPER_CLASS_MAP)) {
+                $this->error("\nError processing $identifier ($docRdfUrl) : $docType unknown mapper");
+                Log::error("Error processing $identifier ($docRdfUrl) : $docType unknown mapper");
+                $documentCounts['unknown'] += 1;
+                continue;
+            }
+            $documentCounts['all'] += 1;
+            $documentCounts[$docType] = isset($documentCounts[$docType])?$documentCounts[$docType]+1:1;
+
+            $mapperClass = ImportCocoonRDF::MAPPER_CLASS_MAP[$docType];
+            $mapper = new $mapperClass($doc, $docUri);
+
+            $mapper->mapGraph();
+            $mappedGraphes = $mapper->getOutputGraphes();
+
+            foreach ($mapper->getOutputGraphes() as $mappedGraphKey => $mappedGraph) {
+
+                $mappedGraphUri = $mappedGraph->getUri();
+                try {
+                    $resDocs = $gs->query("CONSTRUCT { ?s ?p ?o } WHERE { GRAPH <$mappedGraphUri> { ?s ?p ?o }}");
+                } catch (\Exception $e) {
+                    $this->error("\nError on graph query $identifier ($mappedGraphUri) : $e \n" . $e->getBody() . "\n");
+                    Log::error("\nError on graph query $identifier ($mappedGraphUri) : $e \n" . $e->getBody());
+                    exit;
+                }
+
+                $mergedGraph = null;
+                $doDelete = true;
+
+                if($resDocs->isEmpty()) {
+                    $mergedGraph = $mappedGraph;
+                    $doDelete = false;
+                }
+                else {
+                    $doDelete = true;
+                    $mappedTypes = $this->getDocTypes($mappedGraph, $mappedGraphUri);
+                    $presentTypes = $this->getDocTypes($resDocs, $mappedGraphUri);
+
+                    if($docType == "http://purl.org/dc/dcmitype/Collection" || in_array("http://purl.org/dc/dcmitype/Collection", $mappedTypes)) {
+                        $merger = new \CorpusParole\Libraries\Mergers\CocoonCollectionRdfMerger();
+                        $baseGraph = $resDocs;
+                        $sourceGraph = $mappedGraph;
+                    }
+                    elseif ($docType == "http://purl.org/dc/dcmitype/Text") {
+                        $merger = new \CorpusParole\Libraries\Mergers\CocoonSoundRdfMerger();
+                        $baseGraph = $resDocs;
+                        $sourceGraph = $mappedGraph;
+                    }
+                    else {
+                        $merger = new \CorpusParole\Libraries\Mergers\CocoonSoundRdfMerger();
+                        $baseGraph = $mappedGraph;
+                        $sourceGraph = $resDocs;
+                    }
+                    $mergedGraph = $merger->mergeGraph($baseGraph, $sourceGraph, $mappedGraphUri);
+                    if(\EasyRdf\Isomorphic::isomorphic($resDocs, $mergedGraph)) {
+                        //graph are isomorphic no need to go farther for this graph
+                        Log::info("Graph are isomorphic for $mappedGraphUri (from $identifier : $docRdfUrl), skipping");
+                        continue;
                     }
                 }
-                if(!$docLoaded) {
-                    continue;
-                }
-                //TODO: treat errors
-                $subjects = $doc->resources();
-                $subject = reset($subjects)->getUri();
+
                 try {
-                    $gs->insert($doc, $subject);
+                    if($doDelete) {
+                        $gs->clear($mappedGraphUri);
+                    }
+                    $gs->insert($mergedGraph, $mappedGraphUri);
                 }
                 catch(\Exception $e) {
                     // just log not much we can do here...
@@ -134,5 +246,10 @@
         }
         $progressBar->setMessage("finished");
         $progressBar->finish();
+
+        $this->info("\nDocument count info: ");
+        foreach ($documentCounts as $docType => $docCount) {
+            $this->info("$docType => $docCount");
+        }
     }
 }
--- a/server/src/app/Http/routes.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/app/Http/routes.php	Fri Nov 27 17:59:36 2015 +0100
@@ -18,7 +18,7 @@
 Route::resource('bo/docs', 'Bo\DocumentListController');
 
 Route::controllers([
-    'auth' => 'Auth\AuthController',
+//    'auth' => 'Auth\AuthController',
     'password' => 'Auth\PasswordController',
 ]);
 
--- a/server/src/app/Libraries/CocoonUtils.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/app/Libraries/CocoonUtils.php	Fri Nov 27 17:59:36 2015 +0100
@@ -13,6 +13,15 @@
     }
 
     /**
+     * Extract id form corpus url.
+     *
+     * @return string
+     */
+    public static function getIdFromCorpusUri($uri) {
+        return substr($uri, strlen(config('corpusparole.corpus_doc_id_base_uri')));
+    }
+
+    /**
      * Create a Corpus resource id (purl url)
      *
      * @return string
--- a/server/src/app/Libraries/Mappers/CocoonAbstractRdfMapper.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/app/Libraries/Mappers/CocoonAbstractRdfMapper.php	Fri Nov 27 17:59:36 2015 +0100
@@ -24,9 +24,9 @@
  */
 abstract class CocoonAbstractRdfMapper implements RdfMapper {
 
-    public function __construct(Graph $inputGraph) {
+    public function __construct(Graph $inputGraph, $uri=null) {
         $this->inputGraph = $inputGraph;
-        $this->uri = $inputGraph->getUri();
+        $this->uri = is_null($uri)?$inputGraph->getUri():$uri;
         $this->outputGraphes = [];
     }
 
@@ -132,9 +132,12 @@
         $collections = $res->all('dc:isPartOf');
         foreach($collections as $coll) {
             if($coll instanceof Resource) {
-                $collectionGraph = new Graph($coll->getUri());
-                $this->outputGraphes[$coll->getUri()] = $collectionGraph;
-                $collectionGraph->resource($coll->getUri(), 'edm:Collection');
+                $collUri = $coll->getUri();
+                if(strpos(strtolower($collUri), "collection", strlen(config('cocoon_doc_id_base_uri'))) !== FALSE) {
+                    $collectionGraph = new Graph($collUri);
+                    $this->outputGraphes[$collUri] = $collectionGraph;
+                    $collectionGraph->resource($collUri, 'edm:Collection');
+                }
             }
         }
     }
--- a/server/src/app/Libraries/Mappers/CocoonTextRdfMapper.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/app/Libraries/Mappers/CocoonTextRdfMapper.php	Fri Nov 27 17:59:36 2015 +0100
@@ -135,11 +135,11 @@
         // We do not add date to the providedCHO for Text resource
     }
 
-    protected function propertyTypeMap($providedCHOResource, $prop, $value) {
-        if((!$value instanceof Resource) || $value->getUri() !== "http://purl.org/dc/dcmitype/Text") {
-            $providedCHOResource->add($prop, $value);
-        }
-    }
+    // protected function propertyTypeMap($providedCHOResource, $prop, $value) {
+    //     if((!$value instanceof Resource) || $value->getUri() !== "http://purl.org/dc/dcmitype/Text") {
+    //         $providedCHOResource->add($prop, $value);
+    //     }
+    // }
 
     protected function mapWebResources($res, $outputGraph) {
         $resId = CocoonUtils::getIdFromUri($this->getResourceBaseId($res));
--- a/server/src/app/Libraries/Mergers/CocoonAbstractRdfMerger.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/app/Libraries/Mergers/CocoonAbstractRdfMerger.php	Fri Nov 27 17:59:36 2015 +0100
@@ -26,10 +26,11 @@
      *
      * @return EasyRdf\Graph The new merged graph
      */
-    function mergeGraph($baseGraph, $srcGraph) {
+    function mergeGraph($baseGraph, $srcGraph, $uri = null) {
 
+        $uri = is_null($uri)?$baseGraph->getUri():$uri;
         $this->mergedArray = [];
-        $this->resGraph = new Graph($baseGraph->getUri());
+        $this->resGraph = new Graph($uri);
         $this->bnodeMerge = [];
         $this->baseGraph = $baseGraph;
         $this->srcGraph = $srcGraph;
@@ -78,11 +79,13 @@
                 $baseResource = $baseGraph->resource($baseUrl);
                 $srcResource = $srcGraph->resource($srcUrl);
 
-                $mergeMethod = $typeMergeMethodMap[$baseResource->typeAsResource()->getUri()];
-                $this->mergedArray[$bnodeId] = [];
+                if(!is_null($baseResource->typeAsResource()) && array_key_exists($baseResource->typeAsResource()->getUri(), $typeMergeMethodMap)) {
 
-                call_user_func(array($this, $mergeMethod), $baseResource, $srcResource, $bnodeId);
+                    $mergeMethod = $typeMergeMethodMap[$baseResource->typeAsResource()->getUri()];
+                    $this->mergedArray[$bnodeId] = [];
 
+                    call_user_func(array($this, $mergeMethod), $baseResource, $srcResource, $bnodeId);
+                }
             }
 
         }
@@ -183,8 +186,10 @@
 
 
     protected function mergeProperties($singleBNodeProperties, $singleProperties, &$targetArray, $baseRes, $srcRes) {
-        $srcArray = $this->srcGraph->toRdfPhp()[$srcRes->getUri()];
-        $baseArray = $this->baseGraph->toRdfPhp()[$baseRes->getUri()];
+        $srcRdfPhp = $this->srcGraph->toRdfPhp();
+        $srcArray = array_key_exists($srcRes->getUri(), $srcRdfPhp)?$srcRdfPhp[$srcRes->getUri()]:[];
+        $baseRdfPhp = $this->baseGraph->toRdfPhp();
+        $baseArray = array_key_exists($baseRes->getUri(), $baseRdfPhp)?$baseRdfPhp[$baseRes->getUri()]:[];
         foreach($srcRes->propertyUris() as $prop) {
             if(in_array($prop, $singleBNodeProperties)) {
                 $this->mergePropertySingleBNode($prop, $targetArray, $baseArray, $srcArray);
--- a/server/src/app/Libraries/Utils.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/app/Libraries/Utils.php	Fri Nov 27 17:59:36 2015 +0100
@@ -6,6 +6,42 @@
  */
 class Utils {
 
+    /**
+     * convert DateIntervals to milliseconds
+     * Months and year calculated by approximation based on average number
+     * of days over 4 years (365*4+1)
+     * @param \DateInterval $di the date interval
+     * @return the number of milliseconds or 0 if $di is null
+     */
+    public static function dateIntervalToMillis(\DateInterval $di) {
+        if(is_null($di)) {
+            return 0;
+        }
+        $seconds = ($di->s)
+         + ($di->i * 60)
+         + ($di->h * 60 * 60)
+         + ($di->d * 60 * 60 * 24)
+         + ($di->m * (365*4+1)/48*60*60*24)
+         + ($di->y * (365*4+1)/4*60*60*24);
+        return $seconds*1000;
+    }
+
+    /**
+     * convert iso8601 strings to milliseconds
+     * Months and year calculated by approximation based on average number
+     * of days over 4 years (365*4+1)
+     *
+     * @param str iso8601 string
+     * @return the number of milliseconds or 0 if $str is null
+     */
+    public static function iso8601IntervalToMillis($str) {
+        if(is_null($str) || $str === '') {
+            return 0;
+        }
+        $di = new \DateInterval($str);
+        return self::dateIntervalToMillis($di);
+    }
+
     /*
      * From http://www.thecave.info/php-get-mime-type-from-file-extension/
      */
--- a/server/src/app/Models/Document.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/app/Models/Document.php	Fri Nov 27 17:59:36 2015 +0100
@@ -25,86 +25,152 @@
 
     private $id = null;
 
+    // memoization
+    private $providedCHO = null;
+    private $title = false;
+    private $publishers = null;
+    private $mediaArray = null;
+    private $issued = null;
+    private $modified = null;
+
+    public function getProvidedCHO() {
+        if(is_null($this->providedCHO)) {
+            $this->providedCHO = $this->get("<http://www.europeana.eu/schemas/edm/aggregatedCHO>");
+        }
+        return $this->providedCHO;
+    }
+
+    private function clearMemoizationCache() {
+        $this->providedCHO = null;
+        $this->title = false;
+        $this->publishers = null;
+        $this->mediaArray = null;
+        $this->issued = null;
+        $this->modified = null;
+    }
+
     public function getId() {
         if(is_null($this->id)) {
-            $this->id = CocoonUtils::getIdFromUri($this->uri);
+            $this->id = CocoonUtils::getIdFromCorpusUri($this->uri);
         }
         return $this->id;
     }
 
     public function getTitle() {
-        try {
-            return $this->getLiteral('<http://purl.org/dc/elements/1.1/title>');
-        } catch(\Exception $e) {
-            return null;
+        if($this->title === false) {
+            try {
+                $this->title = $this->getProvidedCHO()->getLiteral('<http://purl.org/dc/elements/1.1/title>');
+            } catch(\Exception $e) {
+                $this->title = null;
+            }
         }
+        return $this->title;
     }
 
     public function getPublishers() {
-        try {
-            return $this->allLiterals('dc11:publisher');
-        } catch(\Exception $e) {
-           return [];
-       }
+        if(is_null($this->publishers)) {
+            try {
+                $this->publishers = $this->getProvidedCHO()->all('dc11:publisher');
+            } catch(\Exception $e) {
+               $this->publishers = [];
+            }
+        }
+        return $this->publishers;
+    }
+
+    public function getIssued() {
+        if(is_null($this->issued)) {
+            try {
+                $this->issued = $this->getProvidedCHO()->getLiteral("<http://purl.org/dc/terms/issued>");
+            } catch(\Exception $e) {
+                $this->issued = null;
+            }
+        }
+        return $this->issued;
+    }
+
+    public function getModified() {
+        if(is_null($this->modified)) {
+            try {
+                $this->modified = $this->getProvidedCHO()->getLiteral("<http://purl.org/dc/terms/modified>");
+                if(is_null($this->modified)) {
+                    $this->modified = $this->getIssued();
+                }
+                else {
+                    $this->modified = $this->modified->getValue();
+                }
+            } catch(\Exception $e) {
+                $this->modified = null;
+            }
+        }
+        return $this->modified;
     }
 
     public function getMediaArray() {
 
-        //TODO: add media type
-        $res = [];
-        $formats = [];
-        try {
-            $formats = $this->allResources("dc:isFormatOf");
-        } catch(\Exception $e) {
-            // do nothing
+        if(is_null($this->mediaArray)) {
+            //TODO: add media type
+            $this->mediaArray = [];
+
+            $master = $this->get('<http://www.europeana.eu/schemas/edm/isShownBy>');
+            $masterUrl = is_null($master)?null:$master->getUri();
+
+            foreach($this->graph->allOfType("<http://www.europeana.eu/schemas/edm/WebResources>") as $webResource) {
+                $extent = $webResource->getLiteral("dc:extent");
+                $extent = is_null($extent)?null:$extent->getValue();
+                $extent_ms = Utils::iso8601IntervalToMillis($extent);
+                $format = $webResource->getLiteral("dc11:format");
+
+                $this->mediaArray[$webResource->getUri()] = [
+                    'url' => $webResource->getUri(),
+                    'format' => is_null($format)?null:$format->getValue(),
+                    'extent' => $extent,
+                    'extent_ms' => $extent_ms,
+                    'master' => (($webResource->getUri() === $masterUrl)?true:false)
+                ];
+            }
         }
-        foreach ($formats as $f) {
-            $uri = $f->getUri();
-            $mimetype = Utils::getMimetype($uri);
-            array_push($res, ["url" => $uri, "format" => $mimetype]);
-        }
-
-        $format = null;
-        try {
-            $format = $this->getLiteral('dc11:format');
-        } catch(\Exception $e) {
-            // do nothing
-        }
-        array_push($res, ["url" => $this->getUri(), "format" => $format]);
-        return $res;
+        return $this->mediaArray;
     }
 
     public function getTypes() {
-        return $this->all('dc11:type');
+        return $this->getProvidedCHO()->all('dc11:type');
     }
 
     public function getDiscourseTypes() {
         return array_values(array_filter($this->getTypes(), function($v) {
-            return $v instanceof Literal && $v->getDatatypeUri() === Config::get('constants.OLAC_DISCOURSE_TYPE')['uri'];
+            return $v instanceof Literal && $v->getDatatypeUri() === Config::get('corpusparole.olac_discourse_type')['uri'];
         }));
     }
 
     public function getOtherTypes() {
         $res = array_values(array_filter($this->getTypes(), function($v) {
-            return $v instanceof Resource || $v->getDatatypeUri() !== Config::get('constants.OLAC_DISCOURSE_TYPE')['uri'];
+            return $v instanceof Resource || $v->getDatatypeUri() !== Config::get('corpusparole.olac_discourse_type')['uri'];
         }));
         return $res;
     }
 
+    /**
+     * change discourse type list
+     */
     public function updateDiscourseTypes(array $discoursesTypes) {
 
         $this->startDelta();
 
+        //delete
         foreach($this->getDiscourseTypes() as $discourseType) {
-            $this->delete('dc11:type', $discourseType);
-            $this->currentDelta->getDeletedGraph()->add($this, 'dc11:type', new Literal($discourseType, null, Config::get('constants.OLAC_DISCOURSE_TYPE')['uri']));
+            $literalValue = new Literal($discourseType, null, Config::get('corpusparole.olac_discourse_type')['uri']);
+            $this->getProvidedCHO()->delete('dc11:type', $literalValue);
+            $this->currentDelta->getDeletedGraph()->add($this->getProvidedCHO(), 'dc11:type', new Literal($discourseType, null, Config::get('corpusparole.olac_discourse_type')['uri']));
         }
-        // re-add them
 
+        // and re-add them
         foreach($discoursesTypes as $dType) {
-            $this->add('dc11:type', new Literal($dType, null, Config::get('constants.OLAC_DISCOURSE_TYPE')['uri']));
-            $this->currentDelta->getAddedGraph()->add($this, 'dc11:type', new Literal($dType, null, Config::get('constants.OLAC_DISCOURSE_TYPE')['uri']));
+            $this->getProvidedCHO()->add('dc11:type', new Literal($dType, null, Config::get('corpusparole.olac_discourse_type')['uri']));
+            $this->currentDelta->getAddedGraph()->add($this->getProvidedCHO(), 'dc11:type', new Literal($dType, null, Config::get('corpusparole.olac_discourse_type')['uri']));
         }
+
+        $this->clearMemoizationCache();
     }
 
     public function isIsomorphic($doc) {
@@ -142,6 +208,7 @@
                 'id' => $this->getId(),
                 'uri' => $this->getUri(),
                 'title' => $this->getTitle()->getValue(),
+                'modified' => $this->getModified(),
                 'publishers' => $publishers,
                 'mediaArray'=> $mediaArray
             ];
--- a/server/src/app/Providers/AppServiceProvider.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/app/Providers/AppServiceProvider.php	Fri Nov 27 17:59:36 2015 +0100
@@ -23,9 +23,9 @@
      */
     public function register()
     {
-        $this->app->bind(
-            'Illuminate\Contracts\Auth\Registrar',
-            'CorpusParole\Services\Registrar'
-        );
+        // $this->app->bind(
+        //     'Illuminate\Contracts\Auth\Registrar',
+        //     'CorpusParole\Services\Registrar'
+        // );
     }
 }
--- a/server/src/app/Repositories/RdfDocumentRepository.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/app/Repositories/RdfDocumentRepository.php	Fri Nov 27 17:59:36 2015 +0100
@@ -8,12 +8,14 @@
 use CorpusParole\Libraries\CorpusParoleException;
 use CorpusParole\Libraries\Sparql\SparqlClient;
 
+use EasyRdf\Graph;
+
 use Illuminate\Pagination\LengthAwarePaginator;
 use Illuminate\Pagination\Paginator;
 
 /**
  * Implement the DocumentRepository using EasyRdf
- * TODO: cetainly split the transaction management (+add, +delete +transaction ) to an extarnal class -> for this extend the sparql client.
+ * TODO: certainly split the transaction management (+add, +delete +transaction ) to an external class -> for this extend the sparql client.
  */
 class RdfDocumentRepository implements DocumentRepository {
 
@@ -33,7 +35,18 @@
         $data = [];
 
         foreach ($docs as $doc) {
-            array_push($data, new Document($doc->uri->getUri()));
+            $newGraph = new Graph($doc->uri->getUri());
+            $newGraph->add($doc->uri, "rdf:type", $newGraph->resource("http://www.openarchives.org/ore/terms/Aggregation"));
+            $newGraph->add($doc->uri, "http://www.europeana.eu/schemas/edm/aggregatedCHO", $doc->doc);
+            $newGraph->add($doc->doc, "rdf:type", $newGraph->resource("http://www.europeana.eu/schemas/edm/ProvidedCHO"));
+            $newGraph->add($doc->doc, "http://purl.org/dc/elements/1.1/title", $doc->title);
+            if(isset($doc->issued)) {
+                $newGraph->add($doc->doc, "http://purl.org/dc/terms/issued", $doc->issued);
+            }
+            if(isset($doc->modified)) {
+                $newGraph->add($doc->doc, "http://purl.org/dc/terms/modified", $doc->modified);
+            }
+            array_push($data, new Document($doc->uri->getUri(), $newGraph));
         }
 
         return $data;
@@ -41,13 +54,20 @@
 
     public function all() {
 
-        return $this->queryDocs("SELECT DISTINCT ?uri WHERE { GRAPH ?uri { ?s ?p ?o } } ORDER BY ?uri");
-
+        return $this->queryDocs(
+        "SELECT DISTINCT ?uri ?doc ?title ?issued ?modified".
+        "    WHERE {".
+        "        GRAPH ?uri { ?doc a <http://www.europeana.eu/schemas/edm/ProvidedCHO>.".
+        "        ?doc <http://purl.org/dc/elements/1.1/title> ?title.".
+        "        OPTIONAL {?doc <http://purl.org/dc/terms/issued> ?issued.} ".
+        "        OPTIONAL {?doc <http://purl.org/dc/terms/modified> ?modified.} }".
+        "    } ORDER BY ?uri"
+        );
     }
 
     public function get($id) {
 
-        $docUri = Config::get('corpusparole.cocoon_doc_id_base_uri').$id;
+        $docUri = Config::get('corpusparole.corpus_doc_id_base_uri').$id;
 
         // We want the CBD (Concise Bounded Description, cf. http://www.w3.org/Submission/CBD/)
         // WARNING: This seems to work in sesame for our dataset.
@@ -94,7 +114,7 @@
     }
 
     public function getCount() {
-        $res = $this->sparqlClient->query("SELECT (COUNT (DISTINCT ?g) as ?count) WHERE { GRAPH ?g { ?s ?p ?o } }");
+        $res = $this->sparqlClient->query("SELECT (COUNT (DISTINCT ?g) as ?count) WHERE { GRAPH ?g { ?s a <http://www.europeana.eu/schemas/edm/ProvidedCHO> } }");
         assert(!is_null($res) && $res->count()==1);
         return $res[0]->count->getValue();
     }
@@ -110,13 +130,24 @@
      */
     public function paginateAll($perPage = 15, $pageName = 'page')
     {
+        assert(is_numeric($perPage));
+
         $page = Paginator::resolveCurrentPage($pageName);
 
+        assert(is_numeric($page));
+
         $total = $this->getCount();
 
         $offset = max(0,($page - 1) * $perPage);
-
-        $query = "SELECT DISTINCT ?uri WHERE { GRAPH ?uri { ?s ?p ?o } } ORDER BY ?uri OFFSET $offset LIMIT $perPage";
+        
+        $query =
+            "SELECT DISTINCT ?uri ?doc ?title ?issued ?modified".
+            "    WHERE {".
+            "        GRAPH ?uri { ?doc a <http://www.europeana.eu/schemas/edm/ProvidedCHO>.".
+            "        ?doc <http://purl.org/dc/elements/1.1/title> ?title.".
+            "        OPTIONAL {?doc <http://purl.org/dc/terms/issued> ?issued.} ".
+            "        OPTIONAL {?doc <http://purl.org/dc/terms/modified> ?modified.} }".
+            "    } ORDER BY ?uri OFFSET $offset LIMIT $perPage";
 
         $results = $this->queryDocs($query);
 
--- a/server/src/config/constants.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/config/constants.php	Fri Nov 27 17:59:36 2015 +0100
@@ -4,59 +4,4 @@
 
     'VERSION' => [0,0,0,'alpha',1],
 
-    'OLAC_DISCOURSE_TYPE' => [
-        'uri' => 'http://www.language-archives.org/OLAC/1.1/discourse-type',
-        'values' => [
-            [
-                'code' => 'dialogue',
-                'name' => 'Dialogue',
-            ],
-
-            [
-                'code' => 'drama',
-                'name' => 'Drama',
-            ],
-
-            [
-                'code' => 'formulaic',
-                'name' => 'Formulaic Discourse',
-            ],
-
-            [
-                'code' => 'ludic',
-                'name' => 'Ludic Discourse',
-            ],
-            [
-                'code' => 'oratory',
-                'name' => 'Oratory',
-            ],
-
-            [
-                'code' => 'narrative',
-                'name' => 'Narrative Discourse',
-            ],
-
-            [
-                'code' => 'procedural',
-                'name' => 'Procedural Discourse',
-            ],
-
-            [
-                'code' => 'report',
-                'name' => 'Report',
-            ],
-
-            [
-                'code' => 'singing',
-                'name' => 'Singing',
-            ],
-
-            [
-                'code' => 'unintelligible_speech',
-                'name' => 'Unintelligible Speech',
-            ]
-        ]
-
-    ]
-
 ];
--- a/server/src/config/corpusparole.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/config/corpusparole.php	Fri Nov 27 17:59:36 2015 +0100
@@ -5,9 +5,13 @@
 return [
     'sesame_base_url' => $sesameBaseUrl,
     'sesame_repository' => env('CORPUSPAROLE_SESAME_REPOSITORY'),
+    'sesame_repository_raw' => env('CORPUSPAROLE_SESAME_REPOSITORY_RAW'),
     'max_load_retry' => env('CORPUSPAROLE_MAX_LOAD_RETRY', 5),
     'sesame_query_url' => $sesameBaseUrl.'repositories/'.env('CORPUSPAROLE_SESAME_REPOSITORY'),
     'sesame_update_url' => $sesameBaseUrl.'repositories/'.env('CORPUSPAROLE_SESAME_REPOSITORY').'/statements',
+    'sesame_query_url_raw' => $sesameBaseUrl.'repositories/'.env('CORPUSPAROLE_SESAME_REPOSITORY_RAW'),
+    'sesame_update_url_raw' => $sesameBaseUrl.'repositories/'.env('CORPUSPAROLE_SESAME_REPOSITORY_RAW').'/statements',
+
 
     'cocoon_rdf_base_uri' => env('CORPUSPAROLE_COCOON_RDF_BASE_URI'),
     'cocoon_oaipmh_url' => env('CORPUSPAROLE_COCOON_OAIPMH_URL'),
@@ -21,4 +25,59 @@
     'edm_provider' => 'Corpus de la Parole',
 
     'easyrdf_http_client_timeout' => env('EASYRDF_HTTP_CLIENT_TIMEOUT', 1000),
+
+    'olac_discourse_type' => [
+        'uri' => 'http://www.language-archives.org/OLAC/1.1/discourse-type',
+        'values' => [
+            [
+                'code' => 'dialogue',
+                'name' => 'Dialogue',
+            ],
+
+            [
+                'code' => 'drama',
+                'name' => 'Drama',
+            ],
+
+            [
+                'code' => 'formulaic',
+                'name' => 'Formulaic Discourse',
+            ],
+
+            [
+                'code' => 'ludic',
+                'name' => 'Ludic Discourse',
+            ],
+            [
+                'code' => 'oratory',
+                'name' => 'Oratory',
+            ],
+
+            [
+                'code' => 'narrative',
+                'name' => 'Narrative Discourse',
+            ],
+
+            [
+                'code' => 'procedural',
+                'name' => 'Procedural Discourse',
+            ],
+
+            [
+                'code' => 'report',
+                'name' => 'Report',
+            ],
+
+            [
+                'code' => 'singing',
+                'name' => 'Singing',
+            ],
+
+            [
+                'code' => 'unintelligible_speech',
+                'name' => 'Unintelligible Speech',
+            ]
+        ]
+
+    ]
 ];
--- a/server/src/resources/views/bo/docList.blade.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/resources/views/bo/docList.blade.php	Fri Nov 27 17:59:36 2015 +0100
@@ -10,11 +10,15 @@
                 <div class="panel-body">
                     <table class="table table-striped">
                         <thead>
-                            <tr><th>URI</th><th>ID</th></tr>
+                            <tr><th>ID</th><th>TITLE</th><th>DATE</th></tr>
                         </thead>
                         <tbody>
                         @foreach ($docs as $doc)
-                            <tr><td>{{ $doc->getUri() }}</td><td><a href="{{ route('bo.docs.show',[ 'id' => $doc->getId()]) }}">{{ $doc->getId() }}</a></td></tr>
+                            <tr>
+                                <td><a href="{{ route('bo.docs.show',[ 'id' => $doc->getId()]) }}">{{ $doc->getId() }}</a></td>
+                                <td>{{ $doc->getTitle() }}</td>
+                                <td>{{ $doc->getModified() }}</td>
+                            </tr>
                         @endforeach
                         </tbody>
                     </table>
--- a/server/src/tests/Controllers/DocumentListControllerTest.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/tests/Controllers/DocumentListControllerTest.php	Fri Nov 27 17:59:36 2015 +0100
@@ -10,7 +10,7 @@
  */
 class DocumentListControllerTest extends TestCase {
 
-    const GET_DOC = <<<EOD
+    const GET_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#> .
@@ -18,55 +18,71 @@
     @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-BOD092_SOUND> <http://purl.org/dc/elements/1.1/title> "Corpus LS émergente, L'oncle Geraldo, raconté par Ivaldo"@fr ;
-        <http://www.language-archives.org/OLAC/1.1/depositor> <http://viaf.org/viaf/202009521> , <http://viaf.org/viaf/74053259> ;
-        <http://purl.org/dc/elements/1.1/rights> "Copyright (c) Cuxac, Christian" ;
-        <http://purl.org/dc/elements/1.1/format> "video/mp4"^^<http://purl.org/dc/terms/IMT> ;
-        <http://purl.org/dc/terms/isFormatOf> <http://cocoon.huma-num.fr/data/boutet/BOD092_low.mp4> , <http://cocoon.huma-num.fr/data/boutet/BOD092_low.ogg> ;
-        <http://purl.org/dc/elements/1.1/subject> <http://lexvo.org/id/iso639-3/und> , "general_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> ;
-        <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/und> ;
-        <http://purl.org/dc/elements/1.1/type> "dialogue"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> , <http://purl.org/dc/dcmitype/MovingImage> , "primary_text"^^<http://www.language-archives.org/OLAC/1.1/linguistic-type> ;
-        <http://www.language-archives.org/OLAC/1.1/author> "Fusellier-Souza, Ivani" ;
-        <http://www.language-archives.org/OLAC/1.1/interviewer> "Fusellier-Souza, Ivani" ;
-        <http://www.language-archives.org/OLAC/1.1/compiler> "Boutet, Dominique" , "Cuxac, Christian" ;
-        <http://www.language-archives.org/OLAC/1.1/data_inputter> "Fiore, Sonia" , "Lacroix, Magdalena" , "Boutet, Dominique" ;
-        <http://www.language-archives.org/OLAC/1.1/speaker> "Ivaldo, Lucia" ;
-        <http://www.language-archives.org/OLAC/1.1/translator> "Fusellier-Souza, Ivani" ;
-        <http://purl.org/dc/elements/1.1/description> """Cette séquence fait partie du corpus vidéo de Langue des
-            Signes Emergentes utilisé lors de la thèse d'Ivani Fusellier-Souza : le locuteur Ivaldo
-            raconte que son oncle Geraldo est riche mais n'est pas radin, et qu'il y a très
-            longtemps lorsque les affaires marchaient pour son"""@fr ;
-        <http://purl.org/dc/terms/alternative> "Séquence 13, L'oncle Geraldo, raconté par Ivaldo"@fr ;
-        <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-        <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-nd/2.5/> ;
-        <http://purl.org/dc/terms/spatial> "Brésil, Brasilia"@fr , "BR"^^<http://purl.org/dc/terms/ISO3166> ;
-        <http://www.w3.org/2003/01/geo/wgs84_pos#long> "-47.9291"^^xsd:float ;
-        <http://www.w3.org/2003/01/geo/wgs84_pos#lat> "-15.7801"^^xsd:float ;
-        <http://purl.org/dc/terms/created> "2001-03"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://purl.org/dc/terms/tableOfContents> """00:00:00>00:00:45 Ivaldo raconte que son oncle
-            Geraldo est riche. C'est un homme cultivé, qui a beaucoup d'argent. Il habite près de
-            l'aéroport, où habite également l'amie de Lucia. La femme à Geraldo aussi est riche.
-            00:00:45>00:00:46 Lucia dit qu'il est riche, tant mieux pour lui. 00:00:46>00:01:55
-            Ivaldo raconte que son oncle était riche mais généreux. Il lui donne des billets d'avion
-            pour voyager. Il lui donne également des vêtements. Ensuite, Ivaldo raconte qu'avant,
-            son père était aisé et c'est l'oncle Geraldo qui ne l'était pas. Alors son père aidait
-            l'oncle Geraldo car les affaires allaient bien. Mais par la suite, les affaires ont
-            chutées et pour l'oncle Geraldo elles montaient."""@fr ;
-        <http://purl.org/dc/terms/extent> "PT00H01M54S" ;
-        <http://purl.org/dc/terms/isPartOf> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE> ;
-        <http://purl.org/dc/terms/issued> "2013-06-04T22:39:21+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
-        <http://crdo.risc.cnrs.fr/schemas/master> <http://cocoon.huma-num.fr/data/archi/masters/350801.mp4> ;
-        <http://purl.org/dc/terms/available> "2013-06-04"^^<http://purl.org/dc/terms/W3CDTF> .
+    _:genid-25e7608caea646d5ba7b21eaf92c050f-genid1 a <http://www.europeana.eu/schemas/edm/Place> ;
+    	owl:sameAs <http://sws.geonames.org/3469058/> ;
+    	<http://www.w3.org/2004/02/skos/core#note> "BR"^^<http://purl.org/dc/terms/ISO3166> , "Brésil, Brasilia"@fr ;
+    	<http://www.w3.org/2003/01/geo/wgs84_pos#lat> "-15.77972"^^xsd:float ;
+    	<http://www.w3.org/2003/01/geo/wgs84_pos#long> "-47.92972"^^xsd:float .
+
+    <http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-BOD092_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-BOD092_SOUND> ;
+    	<http://www.europeana.eu/schemas/edm/dataProvider> "Corpus de la Parole"@fr ;
+    	<http://www.europeana.eu/schemas/edm/hasView> <http://cocoon.huma-num.fr/data/boutet/BOD092_low.mp4> , <http://cocoon.huma-num.fr/data/boutet/BOD092_low.ogg> ;
+    	<http://www.europeana.eu/schemas/edm/isShownAt> <http://cocoon.huma-num.fr/exist/crdo/meta/crdo-BOD092_SOUND> ;
+    	<http://www.europeana.eu/schemas/edm/isShownBy> <http://cocoon.huma-num.fr/data/archi/masters/350801.mp4> ;
+    	<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/archi/masters/350801.mp4> a <http://www.europeana.eu/schemas/edm/WebResources> ;
+    	<http://purl.org/dc/elements/1.1/format> "video/mp4"^^<http://purl.org/dc/terms/IMT> ;
+    	<http://purl.org/dc/terms/created> "2001-03"^^<http://purl.org/dc/terms/W3CDTF> ;
+    	<http://purl.org/dc/terms/extent> "PT00H01M54S" ;
+    	<http://purl.org/dc/terms/issued> "2013-06-04T22:39:21+02:00"^^<http://purl.org/dc/terms/W3CDTF> .
+
+    <http://cocoon.huma-num.fr/data/boutet/BOD092_low.mp4> a <http://www.europeana.eu/schemas/edm/WebResources> ;
+    	<http://purl.org/dc/elements/1.1/format> "video/mp4"^^<http://purl.org/dc/terms/IMT> ;
+    	<http://purl.org/dc/terms/created> "2001-03"^^<http://purl.org/dc/terms/W3CDTF> ;
+    	<http://purl.org/dc/terms/extent> "PT00H01M54S" ;
+    	<http://purl.org/dc/terms/issued> "2013-06-04T22:39:21+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    	<http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/archi/masters/350801.mp4> .
 
-    <http://lexvo.org/id/iso639-3/und> rdfs:label "Langue des signes émergente"@fr .
-
-    <http://viaf.org/viaf/202009521> rdfs:label "Boutet, Dominique" ;
-        <http://xmlns.com/foaf/0.1/status> "depositor"^^<http://www.language-archives.org/OLAC/1.1/role> .
+    <http://cocoon.huma-num.fr/data/boutet/BOD092_low.ogg> a <http://www.europeana.eu/schemas/edm/WebResources> ;
+    	<http://purl.org/dc/elements/1.1/format> "video/ogg"^^<http://purl.org/dc/terms/IMT> ;
+    	<http://purl.org/dc/terms/created> "2001-03"^^<http://purl.org/dc/terms/W3CDTF> ;
+    	<http://purl.org/dc/terms/extent> "PT00H01M54S" ;
+    	<http://purl.org/dc/terms/issued> "2013-06-04T22:39:21+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    	<http://www.europeana.eu/schemas/edm/isDerivativeOf> <http://cocoon.huma-num.fr/data/archi/masters/350801.mp4> .
 
-    <http://viaf.org/viaf/74053259> rdfs:label "Cuxac, Christian" ;
-        <http://xmlns.com/foaf/0.1/status> "depositor"^^<http://www.language-archives.org/OLAC/1.1/role> .
+    <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-BOD092_SOUND> a <http://www.europeana.eu/schemas/edm/ProvidedCHO> ;
+    	<http://purl.org/dc/terms/created> "2001-03"^^<http://purl.org/dc/terms/W3CDTF> ;
+    	<http://purl.org/dc/terms/extent> "PT00H01M54S" ;
+    	<http://purl.org/dc/terms/issued> "2013-06-04T22:39:21+02:00"^^<http://purl.org/dc/terms/W3CDTF> ;
+    	<http://purl.org/dc/elements/1.1/contributor> <http://viaf.org/viaf/202009521> , <http://viaf.org/viaf/74053259> , "Fiore, Sonia" , <http://viaf.org/viaf/207122465> , "Lacroix, Magdalena" , "Ivaldo" , "Lucia" ;
+    	<http://purl.org/dc/elements/1.1/description> """Cette séquence fait partie du corpus vidéo de Langue des
+    		Signes Emergentes utilisé lors de la thèse d'Ivani Fusellier-Souza : le locuteur Ivaldo
+    		raconte que son oncle Geraldo est riche mais n'est pas radin, et qu'il y a très
+    		longtemps lorsque les affaires marchaient pour son"""@fr ;
+    	<http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/und> ;
+    	<http://purl.org/dc/elements/1.1/rights> "Copyright (c) Cuxac, Christian" ;
+    	<http://purl.org/dc/elements/1.1/subject> <http://ark.bnf.fr/ark:/12148/cb11946662b> , <http://ark.bnf.fr/ark:/12148/cb119339867> , <http://ark.bnf.fr/ark:/12148/cb11963612g> , "general_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , <http://ark.bnf.fr/ark:/12148/cb11965628b> , <http://lexvo.org/id/iso639-3/und> , <http://ark.bnf.fr/ark:/12148/cb119677899> , <http://ark.bnf.fr/ark:/12148/cb119511608> , <http://ark.bnf.fr/ark:/12148/cb16648129s> ;
+    	<http://purl.org/dc/elements/1.1/title> "Corpus LS émergente, L'oncle Geraldo, raconté par Ivaldo"@fr ;
+    	<http://purl.org/dc/elements/1.1/type> "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/dcmitype/MovingImage> ;
+    	<http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
+    	<http://purl.org/dc/terms/available> "2013-06-04"^^<http://purl.org/dc/terms/W3CDTF> ;
+    	<http://purl.org/dc/terms/isPartOf> <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-25e7608caea646d5ba7b21eaf92c050f-genid1 ;
+    	<http://www.language-archives.org/OLAC/1.1/depositor> <http://viaf.org/viaf/202009521> , <http://viaf.org/viaf/74053259> ;
+    	<http://www.language-archives.org/OLAC/1.1/interviewer> <http://viaf.org/viaf/207122465> ;
+    	<http://www.language-archives.org/OLAC/1.1/speaker> "Ivaldo" , "Lucia" ;
+    	<http://purl.org/dc/terms/tableOfContents> "00:00:00>00:00:45 Ivaldo raconte que son oncle Geraldo est riche. C'est un homme cultivé, qui a beaucoup d'argent. Il habite près de l'aéroport, où habite également l'amie de Lucia. La femme à Geraldo aussi est riche. 00:00:45>00:00:46 Lucia dit qu'il est riche, tant mieux pour lui. 00:00:46>00:01:55 Ivaldo raconte que son oncle était riche mais généreux. Il lui donne des billets d'avion pour voyager. Il lui donne également des vêtements. Ensuite, Ivaldo raconte qu'avant, son père était aisé et c'est l'oncle Geraldo qui ne l'était pas. Alors son père aidait l'oncle Geraldo car les affaires allaient bien. Mais par la suite, les affaires ont chutées et pour l'oncle Geraldo elles montaient."@fr ;
+    	<http://www.language-archives.org/OLAC/1.1/compiler> <http://viaf.org/viaf/202009521> , <http://viaf.org/viaf/74053259> ;
+    	<http://www.language-archives.org/OLAC/1.1/data_inputter> <http://viaf.org/viaf/202009521> , "Fiore, Sonia" , "Lacroix, Magdalena" ;
+    	<http://purl.org/dc/terms/alternative> "Séquence 13, L'oncle Geraldo, raconté par Ivaldo"@fr ;
+    	<http://www.language-archives.org/OLAC/1.1/author> <http://viaf.org/viaf/207122465> ;
+    	<http://www.language-archives.org/OLAC/1.1/translator> <http://viaf.org/viaf/207122465> .
+EOT;
 
-EOD;
 #""" comment for syntax highliting
 
     private $documentRepository;
@@ -103,11 +119,11 @@
     }
 
     public function testShow() {
-        $res_doc = new EasyRdf\Graph('http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-BOD092_SOUND',DocumentListControllerTest::GET_DOC);
+        $res_doc = new EasyRdf\Graph('http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-BOD092_SOUND',DocumentListControllerTest::GET_DOC);
         $this->documentRepository
             ->shouldReceive('get')
             ->once()
-            ->andReturn(new Document('http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-BOD092_SOUND', $res_doc));
+            ->andReturn(new Document('http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-BOD092_SOUND', $res_doc));
 
         $response = $this->visit('/bo/docs/crdo-BOD092_SOUND');
 
--- a/server/src/tests/Models/DocumentTest.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/tests/Models/DocumentTest.php	Fri Nov 27 17:59:36 2015 +0100
@@ -8,90 +8,178 @@
 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 ore: <http://www.openarchives.org/ore/terms/> .
+    @prefix edm: <http://www.europeana.eu/schemas/edm/> .
+    @prefix dc11: <http://purl.org/dc/elements/1.1/> .
+    @prefix olac: <http://www.language-archives.org/OLAC/1.1/> .
+    @prefix dc: <http://purl.org/dc/terms/> .
+    @prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> .
+    @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+    @prefix skos: <http://www.w3.org/2004/02/skos/core#> .
     @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/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND>
+      a ore:Aggregation ;
+      edm:aggregatedCHO <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_35_SOUND> ;
+      edm:provider "Corpus de la Parole"@fr ;
+      edm:dataProvider <http://viaf.org/viaf/142432638> ;
+      edm:isShownAt <http://cocoon.huma-num.fr/exist/crdo/meta/crdo-CFPP2000_35_SOUND> ;
+      edm:isShownBy <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> ;
+      edm:rights <http://creativecommons.org/licenses/by-nc-sa/4.0/> ;
+      edm:hasView <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.wav>, <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.mp3>, <http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xml>,  <http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xhtml>.
 
-    <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608> <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/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
-    	<http://purl.org/dc/elements/1.1/type> <http://purl.org/dc/dcmitype/Sound> , "primary_text"^^<http://www.language-archives.org/OLAC/1.1/linguistic-type> , "dialogue"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> ;
-    	<http://purl.org/dc/elements/1.1/subject> <http://lexvo.org/id/iso639-3/gsw> , "lexicography"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "phonetics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "anthropological_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> ;
-    	<http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/gsw> ;
-    	<http://www.language-archives.org/OLAC/1.1/depositor> <http://viaf.org/viaf/9122216> ;
-    	<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/title> "Atlas Linguistique et ethnographique de l'Alsace - Enquetes sur la conscience linguistique - ALA_608"@fr ;
-    	<http://www.language-archives.org/OLAC/1.1/interviewer> "Bothorel-Witz, Arlette" , "Huck, Dominique" ;
-    	<http://purl.org/dc/terms/isFormatOf> <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> , <http://cocoon.huma-num.fr/data/ala/ALA_608.mp3> ;
-    	<http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" ;
-    	<http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-nd/2.5/> ;
-    	<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/extent> "PT02H04M16S" ;
-    	<http://purl.org/dc/terms/created> "start=1980; end=1989; name=années 80"^^<http://purl.org/dc/terms/Period> ;
-    	<http://purl.org/dc/terms/spatial> "France, Alsace"@fr , "FR"^^<http://purl.org/dc/terms/ISO3166> ;
-    	<http://crdo.risc.cnrs.fr/schemas/master> <http://cocoon.huma-num.fr/data/ala/masters/ALA_608.wav> ;
-    	<http://purl.org/dc/terms/available> "2004-07-03"^^<http://purl.org/dc/terms/W3CDTF> ;
-    	<http://purl.org/dc/terms/issued> "2014-11-04T16:25:54+01:00"^^<http://purl.org/dc/terms/W3CDTF> .
+    <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-CFPP2000_35_SOUND>
+      a edm:ProvidedCHO ;
+      dc11:description "Enregistrement issu du Corpus de Français Parlé Parisien des années 2000 (CFPP2000)"@fr, "Enregistrement: Caractéristiques de l'enregistrement; Identifiant : CFPP2000 [03-01] Ozgur_Kilic_H_32_alii_3e; Langue : français; Editeur : Université Paris III – Syled ; Date : 17.11.2010; Lieu de l'enregistrement : au domicile de l’enquêté Özgur KILIÇ ; Enquêteur : Sonia BRANCA-ROSOFF; Quartier(s) concerné(s) : Paris 3e, et 20e (pour l’âge adulte); Transcription : Noalig TANGUY; Anonymisation : Noalig TANGUY; Durée : 0h46’; "@fr, "Enquêteur: Etat civil; Prénom et NOM : Sonia BRANCA-ROSOFF; Sexe : féminin; Lieu de naissance : New-York (USA); Lieu la petite enfance : Bretagne, puis région parisienne, puis de 8 à 16 ans Nice; Date de naissance : 16.12.1947; Situation familiale : mariée, deux enfants; Mobilité géographique : Paris 1967-1971, Aix-en-Provence 1971-1996, Paris 1996-2012; Scolarité; Niveau : Primaire [X] Secondaire [X] ; Supérieur : Licence [X] Post-licence [X] ; Dernier diplôme, avec année d’obtention : Doctorat d’État (sciences du langage) 1987; Travail; Activité actuelle : Enseignante-chercheuse (linguistique française), Université de la Sorbonne Nouvelle-Paris III, Paris; Activités passées : ; Langues; Langue première : français; Parents (profession, lieu de naissance, scolarité…); Mère : née en 1916 à Nice (France), interprète de conférences ; licence d’anglais; Père : né en 1913 à Mananjary (Madagascar), ingénieur.; "@fr, "Enquêté 1: Etat civil; Prénom et NOM fictifs : Özgur KILIÇ ; Sexe : masculin; Lieu de naissance: Paris 11e, France; Lieu la petite enfance : Paris 11e, France; Date de naissance : 07.02.1979; Age au moment de l’enregistrement : 32 ans; Situation familiale : pacsé, deux enfants; Mobilité géographique : 3e, 18e, 20e arrondissements; Relation (parenté, ami, etc) avec Enquêteur : aucune; Relation (parenté, ami, etc) avec autres enquêtés : amis; Scolarité; Niveau : Primaire [X] Secondaire [X] ; Supérieur : Licence [X] Post-licence [X] ; Dernier diplôme, avec année d’obtention : ; Précisions : Primaire  st Merri 75003 ; Secondaire : Victor Hugo, Turgot 75003, Jean Lurçat 75013 général bac ES Supérieur. Puis St Denis université (cinéma); Travail; Activité actuelle : ingénieur du son pour l'audiovisuel; Activités passées : restauration, assistant son pour l'audiovisuel ; Langues; Langues pratiquées : français, anglais, turc; Parents (profession, lieu de naissance, scolarité…); Mère : psychothérapeute, né a Houilles région parisienne France; Père : professeur d'université, né a Istanbul en Turquie.  ; "@fr, "Enquêté 2: Etat civil; Prénom et NOM fictifs : Michel CHEVRIER; Sexe : masculin; Lieu de naissance : naissance à Boulogne-Billancourt (92); Lieu la petite enfance : rue du Temple, 3e arrondissement, Paris; Date de naissance : 01.06.1979; Age au moment de l’enregistrement : 31 ans; Situation familiale : concubinage; Mobilité géographique : 3e, puis 20e (entre 2005 et 2009) puis Romainville (depuis 2009); Relation (parenté, ami, etc) avec Enquêteur : ; Relation (parenté, ami, etc) avec Enquêté NOM : ; Relation (parenté, ami, etc) avec Enquêté NOM : ; Prénom et NOM réels : ; Réseau par lequel contacté : ; Adresse (si connue) : ; Téléphone (si connu) : ; Scolarité; Niveau : Primaire [X] Secondaire [X] ; Supérieur : Licence [X] Post-licence [X] ; Dernier diplôme, avec année d’obtention : ; Précisions : Primaire : École à aire ouverte rue St Merri 75003 ; Secondaire (Collège Victor Hugo 75003) puis Lycée Autogéré de Paris (75015) Bac Littéraire. Deux années au CIM (école de jazz) dans le 75018, puis 3 ans au conservatoire du 9eme; Travail; Activité actuelle : Musicien, Compositeur, Professeur de piano jazz ; Activités passées : Musicien; Langues; Langues pratiquées : français, anglais; Parents (profession, lieu de naissance, scolarité…); Mère : ancienne médecin généraliste pneumologue, puis sociologue, née en France; Père : enseignant en sciences de l'éducation à Paris 8 né en Belgique; "@fr, "Enquêté 3: Etat civil; Prénom et NOM fictifs : Benoît DU BREUIL-DE-PONT-EN-AUGE; Sexe : masculin; Lieu de naissance : Paris 14e; Lieu la petite enfance :  Paris 3e; Date de naissance : 28.11.1978; Age au moment de l’enregistrement : 32 ans; Situation familiale : concubinage avéré, avec papier de la mairie tamponné et signé!; Mobilité géographique : à 2 ans vit dans le 9°, puis déménage pour le 3°, est resté dans la même rue pendant 20 ans tout en changeant d'immeuble. Ensuite le 19° pendant 4 ans, puis Pantin 6 mois puis Les Lilas. ; Relation (parenté, ami, etc) avec Enquêteur : aucune; Relation (parenté, ami, etc) avec autres enquêtés : voir Scolarité, Précisions; Prénom et NOM réels : ; Réseau par lequel contacté : ; Scolarité; Niveau : Primaire [X] Secondaire [X] ; Supérieur : Licence [ ] Post-licence [ ] ; Dernier diplôme, avec année d’obtention : CAP; Précisions : Primaire école à aire ouverte (St Merri) dans le 4° avec Augustin, Ôzgur, Michel. Secondaire : collège Victor-Hugo dans le 3° avec Ôzgur ; puis CAP ; Travail; Activité actuelle : ; Activités passées : ébéniste agenceur puis ébéniste restaurateur et enfin constructeur décors (ainsi que de nombreux petits jobs ayant duré moins d'un an); Langues; Langues pratiquées : français; Parents (profession, lieu de naissance, scolarité…); Mère : à la retraite ; secrétaire de rédaction dans un grand journal, baccalauréat ; née à Montrouge; Père : conseiller à travail à pole emploi, né à Boulogne Billancourt, baccalauréat présenté 3 ou 4 fois, puis obtenu par équivalence. ; "@fr, "Enquêté 4: Etat civil; Enquêté 4; Prénom et NOM fictifs : ; Sexe : féminin / masculin; Lieu de naissance : Paris 14e; Lieu de la petite enfance : Paris 4e et 3e ; Date de naissance : 06.12.1976; Age au moment de l’enregistrement : 34 ans; Situation familiale : ; Mobilité géographique : Rue la Bruyère 75009 (1976-1978), Rambuteau 75004 (1978-1987/88) & 75003 (chgt de côté de rue 1988-1998), a quitté Paris de 1998 à 2005 ; Rue Rambuteau 75003 (2006-2010), rue Gossec 75012 (2011); Relation (parenté, ami, etc) avec Enquêteur : aucune; Relation (parenté, ami, etc) avec Enquêté 2 : ami; Relation (parenté, ami, etc) avec Enquêté NOM : ; Réseau par lequel contacté : ; Scolarité; Niveau : Primaire [X] Secondaire [X] ; Supérieur : Licence [X] Post-licence [X] ; Dernier diplôme, avec année d’obtention : ; Précisions : Primaire : Ecole St Merri 75003. Secondaire : Collège François Couperin 75004, Institut St Pierre Fourier 75012 ; Cours Charlemagne 75014 ; Travail; Activité actuelle : Superviseur Centre d'appels ; Activités passées : Animateur Club Enfant, Réceptionniste ; Langues; Langues pratiquées :; Parents (profession, lieu de naissance, scolarité…); Mère : retraitée, Paris, bac + 1/2 (?) ; Père : Conseiller Pôle Emploi, Paris, bac. ; "@fr, "Enquêté 5: Etat civil; Prénom et NOM fictifs : Étienne SALVEGAS; Sexe : masculin; Lieu de naissance : Paris 12e; Lieu de la petite enfance : Paris 3e Le Marais; Date de naissance :  16.06.1978; Age au moment de l’enregistrement : 32 ans; Situation familiale : marié 1 enfant, 12 ans de vie commune ; Mobilité géographique : 3e (1978-1999) 19e (1999-2002) 9e (2002-2011) ; Relation (parenté, ami, etc) avec Enquêteur : ; Relation (parenté, ami, etc) avec Enquêté 2 : ami ; Relation (parenté, ami, etc) avec Enquêté NOM : ; Prénom et NOM réels : ; Scolarité; Primaire [X] Secondaire [X] ; Supérieur : Licence [X] Post-licence [ ] ; Dernier diplôme, avec année d’obtention : ; Précisions : Primaire : Ecole Vertus, rue des Vertus 3ème. Secondaire Collège Montgolfier / Lycée Turgot 3ème. Supérieur Droit Univ. Paris Panthéon Sorbonne ; Travail; Activité actuelle : évènementiel; Activités passées : stagiaire journaliste sportif / relations publiques, accueil, agent de  sécurité, remplacement gardien, réceptionniste hôtellerie.; Langues; Langues pratiquées :; Parents (profession, lieu de naissance, scolarité…); Mère : né à Paris, lycée ; Père : né à Oloron (64), lycée ; "@fr ;
+      dc11:language <http://lexvo.org/id/iso639-3/fra> ;
+      dc11:publisher <http://viaf.org/viaf/142432638> ;
+      dc11:type <http://purl.org/dc/dcmitype/Sound>, "primary_text"^^olac:linguistic-type, "narrative"^^olac:discourse-type, "report"^^olac:discourse-type, "unintelligible_speech"^^olac:discourse-type ;
+      dc:license <http://creativecommons.org/licenses/by-nc-sa/3.0/> ;
+      dc11:subject "lexicography"^^olac:linguistic-field, "phonetics"^^olac:linguistic-field, "anthropological_linguistics"^^olac:linguistic-field, "general_linguistics"^^olac:linguistic-field, <http://lexvo.org/id/iso639-3/fra>, "text_and_corpus_linguistics"^^olac:linguistic-field, "phonology"^^olac:linguistic-field, "semantics"^^olac:linguistic-field, "sociolinguistics"^^olac:linguistic-field, "syntax"^^olac:linguistic-field, "typology"^^olac:linguistic-field, "discourse_analysis"^^olac:linguistic-field, "historical_linguistics"^^olac:linguistic-field, "language_documentation"^^olac:linguistic-field, "mathematical_linguistics"^^olac:linguistic-field ;
+      dc11:title "CFPP2000 [03-01] Ozgur_Kilic_H_32_alii_3e Entretien de Ozgur KILIÇ 2"@fr ;
+      dc:accessRights "Freely available for non-commercial use" ;
+      dc:extent "PT48M26S" ;
+      dc:isPartOf <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE>, <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_CFPP2000> ;
+      dc11:source "CFPP2000"@fr ;
+      dc11:coverage "Quartier concerné : 3e"@fr ;
+      olac:depositor <http://viaf.org/viaf/93752300> ;
+      dc11:contributor <http://viaf.org/viaf/93752300>, "Branca-Rosoff, Sonia", "Kiliç Ozgur", "Chevrier Michel", "du-Breuil-de-Pont-en-Auge Benoît", "du-Breuil-de-Pont-en-Auge Augustin", "Salvegas Etienne", "Tanguy Noalig" ;
+      olac:interviewer "Branca-Rosoff, Sonia" ;
+      olac:responder "Kiliç Ozgur", "Chevrier Michel", "du-Breuil-de-Pont-en-Auge Benoît", "du-Breuil-de-Pont-en-Auge Augustin", "Salvegas Etienne" ;
+      olac:transcriber "Tanguy Noalig" ;
+      dc:available "2013-10-12"^^dc:W3CDTF ;
+      dc:created "2010-11-17"^^dc:W3CDTF ;
+      dc:issued "2013-10-12T14:35:57+02:00"^^dc:W3CDTF ;
+      dc:spatial [
+        a edm:Place ;
+        geo:lat "48.83975"^^xsd:float ;
+        geo:long "2.3542"^^xsd:float ;
+        skos:note "FR"^^dc:ISO3166, "France, Paris, Université Sorbonne Nouvelle Paris 3, site Censier"@fr ;
+        owl:sameAs <http://vocab.getty.edu/tgn/7008038>
+      ] .
 
-    <http://lexvo.org/id/iso639-3/gsw> rdfs:label "Alsacien"@fr .
+    <http://cocoon.huma-num.fr/data/archi/masters/372593.wav>
+      a edm:WebResources ;
+      dc:extent "PT48M26S" ;
+      dc11:format "audio/x-wav"^^dc:IMT ;
+      dc:created "2010-11-17"^^dc:W3CDTF ;
+      dc:issued "2013-10-12T14:35:57+02:00"^^dc:W3CDTF .
+
+    <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.wav>
+      a edm:WebResources ;
+      dc:extent "PT48M26S" ;
+      dc11:format "audio/x-wav"^^dc:IMT ;
+      edm:isDerivativeOf <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> ;
+      dc:created "2010-11-17"^^dc:W3CDTF ;
+      dc:issued "2013-10-12T14:35:57+02:00"^^dc:W3CDTF .
 
-    <http://viaf.org/viaf/9122216> rdfs:label "Huck, Dominique" ;
-    	<http://xmlns.com/foaf/0.1/status> "depositor"^^<http://www.language-archives.org/OLAC/1.1/role> .
+    <http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.mp3>
+      a edm:WebResources ;
+      dc:extent "PT48M26S" ;
+      dc11:format "audio/mpeg"^^dc:IMT ;
+      edm:isDerivativeOf <http://cocoon.huma-num.fr/data/archi/masters/372593.wav> ;
+      dc:created "2010-11-17"^^dc:W3CDTF ;
+      dc:issued "2013-10-12T14:35:57+02:00"^^dc:W3CDTF .
+
+    <http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xml>
+        a edm:WebResources ;
+        dc11:format "application/xml"^^dc:IMT ;
+        dc:created "2010-11-17"^^dc:W3CDTF ;
+        dc:issued "2013-11-04T22:20:07+01:00"^^dc:W3CDTF .
+
+    <http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xhtml>
+        a edm:WebResources ;
+        dc11:format "application/xhtml+xml"^^dc:IMT ;
+        dc:created "2010-11-17"^^dc:W3CDTF ;
+        dc:issued "2013-11-04T22:20:07+01:00"^^dc:W3CDTF .
 EOT;
 
 
     public function setUp() {
 
         parent::setup();
-        $this->graph = new EasyRdf\Graph("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", DocumentTest::TEST_DOC);
+        $this->graph = new EasyRdf\Graph("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", DocumentTest::TEST_DOC);
 
     }
 
     public function testConstructor() {
         $this->assertNotNull($this->graph, 'Graph shoud not be null');
 
-        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+        $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $this->graph);
 
-        $this->assertEquals('crdo-ALA_608',$doc->getId(),'Must have the correct id');
+        $this->assertEquals('crdo-CFPP2000_35_SOUND',$doc->getId(),'Must have the correct id');
     }
 
     public function testTitle() {
         $this->assertNotNull($this->graph, 'Graph shoud not be null');
 
-        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+        $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $this->graph);
 
-        $this->assertEquals("Atlas Linguistique et ethnographique de l'Alsace - Enquetes sur la conscience linguistique - ALA_608",$doc->getTitle(),'Must have correct title');
+        $this->assertEquals("CFPP2000 [03-01] Ozgur_Kilic_H_32_alii_3e 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 testPublisher() {
 
-        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+        $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $this->graph);
 
         $this->assertCount(1, $doc->getPublishers(), 'Publisher is an array of size 1');
-        $this->assertEquals(new EasyRdf\Literal("Atlas linguistiques, cultures et parlers régionaux de France",null,null), $doc->getPublishers()[0], "Must contains correct publisher");
-
+        $this->assertInstanceOf('EasyRdf\Resource', $doc->getPublishers()[0], 'publisher is a resource');
+        $this->assertEquals("http://viaf.org/viaf/142432638", $doc->getPublishers()[0]->getUri(),"");
     }
 
     public function testMediaArray() {
-        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+        $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $this->graph);
 
-        $this->assertCount(3, $doc->getMediaArray(), "Media array must be of size 3");
-        foreach($doc->getMediaArray() as $media) {
-            $this->assertCount(2, $media, "media is a 2 element array");
+        $this->assertCount(5, $doc->getMediaArray(), "Media array must be of size 5");
+        foreach($doc->getMediaArray() as $url => $media) {
+            $this->assertCount(5, $media, "media is a 5 element array");
             $this->assertArrayHasKey('format', $media, "media has 'format key'");
             $this->assertArrayHasKey('url', $media, "media has url");
+            $this->assertArrayHasKey('extent', $media, "media has extent");
+            $this->assertArrayHasKey('extent_ms', $media, "media has extent_ms");
+            $this->assertArrayHasKey('master', $media, "media has master");
+
+            $this->assertEquals($media['url'], $url);
+
+            $this->assertContains(
+                $media['url'],
+                [ "http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.wav",
+                  "http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.mp3",
+                  "http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xml",
+                  "http://cocoon.huma-num.fr/exist/crdo/cfpp2000/fra/Ozgur_Kilic_H_32_alii_3e-2.xhtml",
+                  "http://cocoon.huma-num.fr/data/archi/masters/372593.wav"
+                ]
+            );
+            if($url === "http://cocoon.huma-num.fr/data/archi/masters/372593.wav") {
+                $this->assertEquals('audio/x-wav', $media['format']);
+                $this->assertTrue($media['master'] === true, "should be master");
+            }
+            else {
+                $this->assertTrue($media['master'] === false, "should not be master");
+            }
+
+            if( $url === "http://cocoon.huma-num.fr/data/archi/masters/372593.wav" ||
+                $url === "http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.mp3" ||
+                $url === "http://cocoon.huma-num.fr/data/cfpp2000/Ozgur_Kilic_H_32_alii_3e-2.wav" ) {
+                $this->assertEquals("PT48M26S", $media['extent'], "extent is PT48M26S");
+                $this->assertGreaterThan(0, $media['extent_ms'], "extent_ms must be > 0");
+                $this->assertStringStartsWith('audio/', $media['format']);
+            }
+            else {
+                $this->assertNull($media['extent'], "no media extent");
+                $this->assertSame(0, $media['extent_ms'], "extend in ms is 0");
+                $this->assertStringStartsWith('application/', $media['format']);
+            }
+
         }
     }
 
     public function testGetTypes() {
-        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+        $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $this->graph);
 
-        $this->assertCount(3, $doc->getTypes(), "types array must be of size 3");
+        $this->assertCount(5, $doc->getTypes(), "types array must be of size 5");
 
         foreach($doc->getTypes() as $type) {
             $this->assertThat(
@@ -105,7 +193,7 @@
     }
 
     public function testGetOtherTypes() {
-        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+        $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $this->graph);
 
         $this->assertCount(2, $doc->getOtherTypes(), "types array must be of size 3");
 
@@ -121,18 +209,18 @@
     }
 
     public function testGetDiscourseTypes() {
-        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+        $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $this->graph);
 
-        $this->assertCount(1, $doc->getDiscourseTypes(), "types array must be of size 1");
+        $this->assertCount(3, $doc->getDiscourseTypes(), "types array must be of size 3");
 
         $this->assertContainsOnlyInstancesOf("EasyRdf\Literal", $doc->getDiscourseTypes(), "Result contains only literals");
         $type = $doc->getDiscourseTypes()[0];
-        $this->assertEquals("dialogue", $type, "discourse type is dialogue");
+        $this->assertEquals("narrative", $type->getValue(), "discourse type is narrative");
         $this->assertEquals("http://www.language-archives.org/OLAC/1.1/discourse-type", $type->getDatatypeUri(), "discourse type url");
     }
 
     public function testCloneDocument() {
-        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+        $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $this->graph);
 
         $doc2 = clone $doc;
 
@@ -143,8 +231,8 @@
     }
 
     public function testIsIsomorphic() {
-        $doc1 = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
-        $doc2 = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", new EasyRdf\Graph("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", DocumentTest::TEST_DOC));
+        $doc1 = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $this->graph);
+        $doc2 = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", new EasyRdf\Graph("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", DocumentTest::TEST_DOC));
 
         $this->assertTrue($doc1->isIsomorphic($doc2),"document must be isomorphic");
 
@@ -155,14 +243,14 @@
 
     public function testUpdateDiscourseTypes() {
 
-        $newDiscourseTypes = ['oratory','dialogue','narrative'];
+        $newDiscourseTypes = ['oratory','dialogue','narrative', 'formulaic', 'ludic'];
 
-        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
-        $this->assertCount(1, $doc->getDiscourseTypes(), "types array must be of size 1");
+        $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $this->graph);
+        $this->assertCount(3, $doc->getDiscourseTypes(), "types array must be of size 3");
 
         $doc->updateDiscourseTypes($newDiscourseTypes);
 
-        $this->assertCount(3, $doc->getDiscourseTypes(), "types array must be of size 3");
+        $this->assertCount(5, $doc->getDiscourseTypes(), "types array must be of size 5");
 
         $discourseTypes = $doc->getDiscourseTypes();
         foreach($newDiscourseTypes as $dt) {
@@ -173,9 +261,9 @@
 
     public function testUpdateDiscourseTypesDelta() {
 
-        $newDiscourseTypes = ['oratory','dialogue','narrative'];
+        $newDiscourseTypes = ['oratory','dialogue','narrative', 'formulaic', 'ludic'];
 
-        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+        $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $this->graph);
 
         $doc->updateDiscourseTypes($newDiscourseTypes);
 
@@ -185,13 +273,13 @@
 
         $delta = $doc->getDeltaList()[0];
 
-        $this->assertEquals("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $delta->getDeletedGraph()->getUri(), "uri of deleted graph must be ok");
-        $this->assertEquals("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $delta->getAddedGraph()->getUri(), "uri of added graph must be ok");
+        $this->assertEquals("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $delta->getDeletedGraph()->getUri(), "uri of deleted graph must be ok");
+        $this->assertEquals("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $delta->getAddedGraph()->getUri(), "uri of added graph must be ok");
 
-        $this->assertEquals(1, $delta->getDeletedGraph()->countTriples(), "deleted graph must have only one triple");
-        $this->assertEquals(3, $delta->getAddedGraph()->countTriples(), "deleted graph must have only one triple");
+        $this->assertEquals(3, $delta->getDeletedGraph()->countTriples(), "deleted graph must have only 3 triples");
+        $this->assertEquals(5, $delta->getAddedGraph()->countTriples(), "deleted graph must have only 5 triples");
 
-        $resQueryDiscourseType = $delta->getAddedGraph()->allLiterals('http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608', 'dc11:type');
+        $resQueryDiscourseType = $delta->getAddedGraph()->allLiterals($doc->getProvidedCHO(), 'dc11:type');
         foreach($resQueryDiscourseType as $dt) {
             $this->assertInstanceOf(EasyRdf\Literal::class, $dt, "This must be a litteral");
             $this->assertEquals('http://www.language-archives.org/OLAC/1.1/discourse-type', $dt->getDatatypeUri(), "The type of the Litteral must be correct");
@@ -206,11 +294,12 @@
 
         $newDiscourseTypes = ['oratory','dialogue','narrative'];
 
-        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+        $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", $this->graph);
         $doc->updateDiscourseTypes($newDiscourseTypes);
 
-        $doc2 = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", new EasyRdf\Graph("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", DocumentTest::TEST_DOC));
+        $doc2 = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", new EasyRdf\Graph("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-CFPP2000_35_SOUND", DocumentTest::TEST_DOC));
 
         $this->assertFalse($doc->isIsomorphic($doc2),"document must not be isomorphic after adding discourse type");
     }
+
 }
--- a/server/src/tests/Repositories/DocumentRepositoryIntegrationTest.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/tests/Repositories/DocumentRepositoryIntegrationTest.php	Fri Nov 27 17:59:36 2015 +0100
@@ -34,50 +34,70 @@
 EOT;
 
     const TEST_DOC = <<<EOT
-    <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608> <http://xmlns.com/foaf/0.1/primaryTopic> <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Document> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/description> "Extrait des enqu\u00EAtes dialectologiques en vue de constituer un atlas linguistique de l'Alsace."@fr .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/type> <http://purl.org/dc/dcmitype/Sound> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/type> "primary_text"^^<http://www.language-archives.org/OLAC/1.1/linguistic-type> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/type> "dialogue"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/subject> <http://lexvo.org/id/iso639-3/gsw> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/subject> "lexicography"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/subject> "phonetics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/subject> "anthropological_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/gsw> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/contributor> <http://viaf.org/viaf/9122216> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/contributor> _:genid2d5831d84541df446694586ac2006f96042dgenid1 .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/contributor> _:genid2d5831d84541df446694586ac2006f96042dgenid2 .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/publisher> "Atlas linguistiques, cultures et parlers r\u00E9gionaux de France" .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/rights> "Copyright (c) D\u00E9partement de dialectologie alsacienne et mosellane de l'Universit\u00E9 de Strasbourg" .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/title> "Atlas Linguistique et ethnographique de l'Alsace - Enquetes sur la conscience linguistique - ALA_608"@fr .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-nd/2.5/> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/isPartOf> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_ALA_CL> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/isPartOf> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/extent> "PT02H04M16S" .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/created> "start=1980; end=1989; name=ann\u00E9es 80"^^<http://purl.org/dc/terms/Period> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/spatial> "France, Alsace"@fr .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/spatial> "FR"^^<http://purl.org/dc/terms/ISO3166> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/isFormatOf> <http://cocoon.huma-num.fr/data/ala/ALA_608.mp3> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/isFormatOf> <http://cocoon.huma-num.fr/data/ala/masters/ALA_608.wav> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/available> "2004-07-03"^^<http://purl.org/dc/terms/W3CDTF> .
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/issued> "2014-11-04T16:25:54+01:00"^^<http://purl.org/dc/terms/W3CDTF> .
-    <http://lexvo.org/id/iso639-3/gsw> <http://www.w3.org/2000/01/rdf-schema#label> "Alsacien"@fr .
-    <http://viaf.org/viaf/9122216> <http://www.w3.org/2000/01/rdf-schema#label> "Huck, Dominique" .
-    <http://viaf.org/viaf/9122216> <http://xmlns.com/foaf/0.1/status> "depositor"^^<http://www.language-archives.org/OLAC/1.1/role> .
-    _:genid2d5831d84541df446694586ac2006f96042dgenid1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Agent> .
-    _:genid2d5831d84541df446694586ac2006f96042dgenid1 <http://xmlns.com/foaf/0.1/name> "Bothorel-Witz, Arlette" .
-    _:genid2d5831d84541df446694586ac2006f96042dgenid1 <http://xmlns.com/foaf/0.1/status> "interviewer"^^<http://www.language-archives.org/OLAC/1.1/role> .
-    _:genid2d5831d84541df446694586ac2006f96042dgenid2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Agent> .
-    _:genid2d5831d84541df446694586ac2006f96042dgenid2 <http://xmlns.com/foaf/0.1/name> "Huck, Dominique" .
-    _:genid2d5831d84541df446694586ac2006f96042dgenid2 <http://xmlns.com/foaf/0.1/status> "interviewer"^^<http://www.language-archives.org/OLAC/1.1/role> .
+    @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://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-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://cocoon.huma-num.fr/exist/crdo/meta/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/WebResources> ;
+    	<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/WebResources> ;
+    	<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/WebResources> ;
+    	<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;
 
     function __construct(string $name = null) {
         parent::__construct($name);
-        $this->graph = new EasyRdf\Graph("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", DocumentRepositoryIntegrationTest::TEST_DOC);
+        $this->graph = new EasyRdf\Graph("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-ALA_738", DocumentRepositoryIntegrationTest::TEST_DOC);
     }
 
     public function setUp() {
@@ -85,7 +105,7 @@
 
         $this->httpClient = new Client(['base_uri' => config('corpusparole.sesame_base_url')]);
         $this->sesameRepository = config('corpusparole.sesame_repository');
-        $this->cocoonDocIdBaseUri = config('corpusparole.cocoon_doc_id_base_uri');
+        $this->corpusDocIdBaseUri = config('corpusparole.corpus_doc_id_base_uri');
 
         $this->documentRepository = $this->app->make('CorpusParole\Repositories\DocumentRepository');
         $uniqueid = uniqid('corpusparole', true);
@@ -99,7 +119,7 @@
         $this->httpClient->put("repositories/$this->sesameRepository/statements", [
             'headers' => ['Content-type' => 'text/turtle;charset=UTF-8'],
             'body' => DocumentRepositoryIntegrationTest::TEST_DOC,
-            'query' => ['context' => '<http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608>'],
+            'query' => ['context' => '<http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-ALA_738>'],
         ]);
     }
 
@@ -109,14 +129,14 @@
     }
 
     public function testAll() {
-        $expectedId = $this->cocoonDocIdBaseUri.'crdo-ALA_608';
+        $expectedId = $this->corpusDocIdBaseUri.'crdo-ALA_738';
         $docList = $this->documentRepository->all();
         $this->assertCount(1, $docList, "Should have one element");
 
         $resDoc = $docList[0];
 
         $this->assertInstanceOf(Document::class, $resDoc, "Res doc must be a Document");
-        $this->assertEquals('crdo-ALA_608', $resDoc->getId(), "id must be crdo...");
+        $this->assertEquals('crdo-ALA_738', $resDoc->getId(), "id must be crdo...");
         $this->assertEquals($expectedId, $resDoc->getUri(), 'url must be ...');
         $this->assertNull($resDoc->getGraph(), 'Graph must be null');
 
@@ -124,27 +144,27 @@
 
     public function testGet() {
 
-        $expectedId = $this->cocoonDocIdBaseUri.'crdo-ALA_608';
+        $expectedId = $this->corpusDocIdBaseUri.'crdo-ALA_738';
         $returnedGraph = new EasyRdf\Graph($expectedId, DocumentRepositoryIntegrationTest::TEST_DOC);
 
-        $res = $this->documentRepository->get('crdo-ALA_608');
+        $res = $this->documentRepository->get('crdo-ALA_738');
 
         $this->assertInstanceOf(Document::class, $res, "Result must be of type Document");
-        $this->assertEquals('crdo-ALA_608', $res->getId(), 'id should be crdo-ALA_608' );
+        $this->assertEquals('crdo-ALA_738', $res->getId(), 'id should be crdo-ALA_738' );
         $this->assertNotNull($res->getGraph(), "Graph shoul not be null");
         $this->assertTrue(EasyRdf\Isomorphic::isomorphic($res->getGraph(),$returnedGraph));
     }
 
     public function testSave() {
 
-        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+        $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-ALA_738", $this->graph);
         $doc->updateDiscourseTypes(['oratory','drama','narrative']);
 
         $res = $this->documentRepository->save($doc);
 
         $this->assertTrue($res, 'Has started a transaction');
 
-        $res = $this->documentRepository->get('crdo-ALA_608');
+        $res = $this->documentRepository->get('crdo-ALA_738');
 
         $discoursesTypes = $res->getDiscourseTypes();
 
--- a/server/src/tests/Repositories/DocumentRepositoryTest.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/tests/Repositories/DocumentRepositoryTest.php	Fri Nov 27 17:59:36 2015 +0100
@@ -11,51 +11,6 @@
 class DocumentRepositoryTest extends TestCase {
 
     const TEST_DOC = <<<EOT
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Resource> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Document> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/description> "Extrait des enqu\u00EAtes dialectologiques en vue de constituer un atlas linguistique de l'Alsace."@fr .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/type> <http://purl.org/dc/dcmitype/Sound> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/type> "primary_text"^^<http://www.language-archives.org/OLAC/1.1/linguistic-type> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/type> "dialogue"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/subject> <http://lexvo.org/id/iso639-3/gsw> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/subject> "lexicography"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/subject> "phonetics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/subject> "anthropological_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/language> <http://lexvo.org/id/iso639-3/gsw> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/contributor> <http://viaf.org/viaf/9122216> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/contributor> _:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid1 .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/contributor> _:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid2 .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/publisher> "Atlas linguistiques, cultures et parlers r\u00E9gionaux de France" .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/rights> "Copyright (c) D\u00E9partement de dialectologie alsacienne et mosellane de l'Universit\u00E9 de Strasbourg" .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/elements/1.1/title> "Atlas Linguistique et ethnographique de l'Alsace - Enquetes sur la conscience linguistique - ALA_608"@fr .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/accessRights> "Freely available for non-commercial use" .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/license> <http://creativecommons.org/licenses/by-nc-nd/2.5/> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/isPartOf> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_ALA_CL> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/isPartOf> <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-COLLECTION_LANGUESDEFRANCE> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/extent> "PT02H04M16S" .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/created> "start=1980; end=1989; name=ann\u00E9es 80"^^<http://purl.org/dc/terms/Period> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/spatial> "France, Alsace"@fr .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/spatial> "FR"^^<http://purl.org/dc/terms/ISO3166> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/isFormatOf> <http://cocoon.huma-num.fr/data/ala/ALA_608.mp3> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/isFormatOf> <http://cocoon.huma-num.fr/data/ala/masters/ALA_608.wav> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/available> "2004-07-03"^^<http://purl.org/dc/terms/W3CDTF> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://purl.org/dc/terms/issued> "2014-11-04T16:25:54+01:00"^^<http://purl.org/dc/terms/W3CDTF> .
-<http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> <http://www.openrdf.org/schema/sesame#directType> <http://xmlns.com/foaf/0.1/Document> .
-_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Resource> .
-_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Agent> .
-_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid1 <http://xmlns.com/foaf/0.1/name> "Bothorel-Witz, Arlette" .
-_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid1 <http://xmlns.com/foaf/0.1/status> "interviewer"^^<http://www.language-archives.org/OLAC/1.1/role> .
-_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid1 <http://www.openrdf.org/schema/sesame#directType> <http://xmlns.com/foaf/0.1/Agent> .
-_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/01/rdf-schema#Resource> .
-_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid2 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Agent> .
-_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid2 <http://xmlns.com/foaf/0.1/name> "Huck, Dominique" .
-_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid2 <http://xmlns.com/foaf/0.1/status> "interviewer"^^<http://www.language-archives.org/OLAC/1.1/role> .
-_:genid2d6c3879d9d2484bd98bb0bcb9dd0364fc2dgenid2 <http://www.openrdf.org/schema/sesame#directType> <http://xmlns.com/foaf/0.1/Agent> .
-<http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608> <http://xmlns.com/foaf/0.1/primaryTopic> <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> .
-EOT;
-
-    const RES_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#> .
@@ -63,46 +18,68 @@
     @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
     @prefix fn: <http://www.w3.org/2005/xpath-functions#> .
 
-    <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> a <http://xmlns.com/foaf/0.1/Document> ;
-    	<http://purl.org/dc/elements/1.1/description> "Extrait des enquêtes dialectologiques en vue de constituer un atlas linguistique de l'Alsace."@fr ;
+    _: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://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-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://cocoon.huma-num.fr/exist/crdo/meta/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/WebResources> ;
+    	<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/WebResources> ;
     	<http://purl.org/dc/elements/1.1/format> "audio/x-wav"^^<http://purl.org/dc/terms/IMT> ;
-    	<http://purl.org/dc/elements/1.1/type> <http://purl.org/dc/dcmitype/Sound> , "primary_text"^^<http://www.language-archives.org/OLAC/1.1/linguistic-type> , "dialogue"^^<http://www.language-archives.org/OLAC/1.1/discourse-type> ;
-    	<http://purl.org/dc/elements/1.1/subject> <http://lexvo.org/id/iso639-3/gsw> , "lexicography"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "phonetics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> , "anthropological_linguistics"^^<http://www.language-archives.org/OLAC/1.1/linguistic-field> ;
+    	<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/WebResources> ;
+    	<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/contributor> <http://viaf.org/viaf/9122216> , _:genid-39d722daa01242edb2da8d2d1e71eae7-ED8A67E3CE4C51EA8EDC4ED1190E161A , _:genid-39d722daa01242edb2da8d2d1e71eae7-FD40C63A1295F7BE6765BB87A70CE839 ;
     	<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/title> "Atlas Linguistique et ethnographique de l'Alsace - Enquetes sur la conscience linguistique - ALA_608"@fr ;
+    	<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/license> <http://creativecommons.org/licenses/by-nc-nd/2.5/> ;
-    	<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/extent> "PT02H04M16S" ;
-    	<http://purl.org/dc/terms/created> "start=1980; end=1989; name=années 80"^^<http://purl.org/dc/terms/Period> ;
-    	<http://purl.org/dc/terms/spatial> "France, Alsace"@fr , "FR"^^<http://purl.org/dc/terms/ISO3166> ;
-    	<http://purl.org/dc/terms/isFormatOf> <http://cocoon.huma-num.fr/data/ala/ALA_608.mp3> , <http://cocoon.huma-num.fr/data/ala/masters/ALA_608.wav> ;
     	<http://purl.org/dc/terms/available> "2004-07-03"^^<http://purl.org/dc/terms/W3CDTF> ;
-    	<http://purl.org/dc/terms/issued> "2014-11-04T16:25:54+01:00"^^<http://purl.org/dc/terms/W3CDTF> .
-
-    _:genid-39d722daa01242edb2da8d2d1e71eae7-ED8A67E3CE4C51EA8EDC4ED1190E161A a <http://xmlns.com/foaf/0.1/Agent> ;
-    	<http://xmlns.com/foaf/0.1/name> "Bothorel-Witz, Arlette" ;
-    	<http://xmlns.com/foaf/0.1/status> "interviewer"^^<http://www.language-archives.org/OLAC/1.1/role> .
-
-    _:genid-39d722daa01242edb2da8d2d1e71eae7-FD40C63A1295F7BE6765BB87A70CE839 a <http://xmlns.com/foaf/0.1/Agent> ;
-    	<http://xmlns.com/foaf/0.1/name> "Huck, Dominique" ;
-    	<http://xmlns.com/foaf/0.1/status> "interviewer"^^<http://www.language-archives.org/OLAC/1.1/role> .
-
-    <http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608> <http://xmlns.com/foaf/0.1/primaryTopic> <http://cocoon.huma-num.fr/data/ala/ALA_608_22km.wav> .
+    	<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;
 
-
     function __construct(string $name = null) {
         parent::__construct($name);
     }
 
     public function setUp() {
         parent::setUp();
-        $this->graph = new EasyRdf\Graph("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", DocumentRepositoryTest::TEST_DOC);
-        $this->cocoonDocIdBaseUri = config('corpusparole.cocoon_doc_id_base_uri');
+        $this->graph = new EasyRdf\Graph("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-ALA_738", DocumentRepositoryTest::TEST_DOC);
+        $this->corpusDocIdBaseUri = config('corpusparole.corpus_doc_id_base_uri');
     }
 
     public function tearDown() {
@@ -111,7 +88,7 @@
 
 
     public function testAll() {
-        $expectedId = $this->cocoonDocIdBaseUri.'crdo-ALA_608';
+        $expectedId = $this->corpusDocIdBaseUri.'crdo-ALA_738';
         $returnedArray = [
             m::mock('resObj', function($mock) use (&$expectedId) {
                 $mock->uri = new EasyRdf\Resource($expectedId);
@@ -129,27 +106,27 @@
         $resDoc = $res[0];
 
         $this->assertInstanceOf(Document::class, $resDoc, "Res doc must be a Document");
-        $this->assertEquals('crdo-ALA_608', $resDoc->getId(), "id must be crdo...");
+        $this->assertEquals('crdo-ALA_738', $resDoc->getId(), "id must be crdo...");
         $this->assertEquals($expectedId, $resDoc->getUri(), 'url must be ...');
         $this->assertNull($resDoc->getGraph(), 'Graph must be null');
     }
 
     public function testGet() {
 
-        $expectedId = $this->cocoonDocIdBaseUri.'crdo-ALA_608';
-        $returnedGraph = new EasyRdf\Graph($expectedId, DocumentRepositoryTest::RES_DOC);
+        $expectedId = $this->corpusDocIdBaseUri.'crdo-ALA_738';
+        $returnedGraph = new EasyRdf\Graph($expectedId, DocumentRepositoryTest::TEST_DOC);
 
         $sparqlClientMock = m::mock('CorpusParole\Libraries\Sparql\SparqlClient');
         $sparqlClientMock->shouldReceive('query')->with(containsString($expectedId))
                 ->andReturn($returnedGraph);
         $documentRepository = $this->app->make('CorpusParole\Repositories\RdfDocumentRepository', [$sparqlClientMock]);
 
-        $res = $documentRepository->get('crdo-ALA_608');
+        $res = $documentRepository->get('crdo-ALA_738');
 
         $this->assertInstanceOf(Document::class, $res, "Result must be of type Document");
-        $this->assertEquals('crdo-ALA_608', $res->getId(), 'id should be crdo-ALA_608' );
+        $this->assertEquals('crdo-ALA_738', $res->getId(), 'id should be crdo-ALA_738' );
         $this->assertNotNull($res->getGraph(), "Graph shoul not be null");
-        $this->assertTrue(EasyRdf\Isomorphic::isomorphic($res->getGraph(), new EasyRdf\Graph($expectedId, DocumentRepositoryTest::RES_DOC)));
+        $this->assertTrue(EasyRdf\Isomorphic::isomorphic($res->getGraph(), new EasyRdf\Graph($expectedId, DocumentRepositoryTest::TEST_DOC)));
     }
 
     public function testSave() {
@@ -162,7 +139,7 @@
         $documentRepository = $this->app->make('CorpusParole\Repositories\RdfDocumentRepository', [$sparqlClientMock]);
 
 
-        $doc = new Document("http://purl.org/poi/crdo.vjf.cnrs.fr/crdo-ALA_608", $this->graph);
+        $doc = new Document("http://purl.org/poi/corpusdelaparole.huma-num.fr/crdo-ALA_738", $this->graph);
         $doc->updateDiscourseTypes(['oratory','drama','narrative']);
 
         $res = $documentRepository->save($doc);
@@ -184,8 +161,6 @@
                 ->andReturn($returnedCount);
         $documentRepository = $this->app->make('CorpusParole\Repositories\RdfDocumentRepository', [$sparqlClientMock]);
 
-
-
     }
 
 }
--- a/server/src/tests/libraries/Mappers/CocoonTextRdfMapperTest.php	Tue Nov 17 13:11:55 2015 +0100
+++ b/server/src/tests/libraries/Mappers/CocoonTextRdfMapperTest.php	Fri Nov 27 17:59:36 2015 +0100
@@ -127,7 +127,7 @@
     }
 
     /**
-     * Test taht the returned graph does not have a http://purl.org/dc/dcmitype/Sound type
+     * Test that the returned graph does not have a http://purl.org/dc/dcmitype/Sound type
      *
      * @return void
      */
@@ -137,19 +137,17 @@
 
         $this->assertNotNull($providedCHO);
 
-        $this->assertEmpty($providedCHO->all($this->resGraphes['BASE']->resource('http://purl.org/dc/elements/1.1/type'), 'resource'), 'Should not find dc element:type value as resource');
-        $this->assertcount(2, $providedCHO->all($this->resGraphes['BASE']->resource('http://purl.org/dc/elements/1.1/type')), 'but should find 2 literals');
-
-        $expResMap = [
-            'primary_text' => 'http://www.language-archives.org/OLAC/1.1/linguistic-type',
-            'narrative' => 'http://www.language-archives.org/OLAC/1.1/discourse-type'
-        ];
+        $this->assertcount(3, $providedCHO->all($this->resGraphes['BASE']->resource('http://purl.org/dc/elements/1.1/type')), 'but should find 2 literals');
 
         $dcTypeList = $providedCHO->all($this->resGraphes['BASE']->resource('http://purl.org/dc/elements/1.1/type'));
         foreach ($dcTypeList as $dcType) {
-            $this->assertInstanceOf('EasyRdf\Literal', $dcType, "dc type must be a literal");
-            $this->assertArrayHasKey($dcType->getValue(),$expResMap, 'Value must be in expected result Map');
-            $this->assertEquals($expResMap[$dcType->getValue()], $dcType->getDatatypeUri());
+            $this->assertThat(
+                $dcType,
+                $this->logicalXor(
+                    $this->isInstanceOf(EasyRdf\Literal::class),
+                    $this->isInstanceOf(EasyRdf\Resource::class)
+                )
+            );
         }
     }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/tests/libraries/UtilsTest.php	Fri Nov 27 17:59:36 2015 +0100
@@ -0,0 +1,28 @@
+<?php
+
+use CorpusParole\Libraries\Utils;
+
+class UtilsTest extends TestCase {
+    function __construct(string $name = null) {
+        parent::__construct($name);
+    }
+
+    public function setup() {
+    }
+
+    public function tearDown() {
+    }
+
+    public function testDateIntervalToMillis() {
+        $di = new \DateInterval("P1Y1M1DT1H1M1S");
+
+        $ms = Utils::dateIntervalToMillis($di);
+
+        $this->assertEquals(34277461000, $ms, "duration must be 3427746100");
+    }
+
+    public function testiso8601IntervalToMillis() {
+        $ms = Utils::iso8601IntervalToMillis("P1Y1M1DT1H1M1S");
+        $this->assertEquals(34277461000, $ms, "duration must be 3427746100");
+    }
+}