src/Controller/WorkController.php line 281

Open in your IDE?
  1. <?php
  2. // src/Controller/WorkController.php
  3. namespace App\Controller;
  4. use Symfony\Component\Routing\Annotation\Route;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. class WorkController  extends DMAbstractController
  9. {
  10.     function creationeventStructurer($description)
  11.     {
  12.         $descstruct = array();
  13.         $descstruct["class"] = array();
  14.         $item $description["results"]["bindings"][0];
  15.         $descstruct["timespan"] = ""// TODO mettre ce champs à jour
  16.         $descstruct["name"] = $descstruct["entityid"] = $descstruct["productid"] = $descstruct["family"] =
  17.         $descstruct["musee"] = $descstruct["note"] = $descstruct["title"] = "";
  18.         $descstruct["musee"] = $item["label"]["value"];
  19.         $descstruct["physical"] = $item["physical"]["value"];
  20.         $descstruct["concept"] = $item["concept"]["value"];
  21.         if (array_key_exists("createur"$item)) {
  22.             $descstruct["createur"] = $item["createur"]["value"];
  23.             $descstruct["createurlabel"] = $item["createurlabel"]["value"];
  24.         } else $descstruct["createur"] = $descstruct["createurlabel"] = "";
  25.         if (array_key_exists("title"$item))
  26.             $descstruct["title"] = $item["title"]["value"];
  27.         else
  28.             $descstruct["title"] = "<titre inconnu dans cette base>";
  29.         /*
  30.          * if (array_key_exists("note", $item))
  31.             $descstruct["note"] = $item["note"]["value"];
  32.         */
  33.         return $descstruct;
  34.     }
  35.     function creationeventDescription($desc)
  36.     {
  37.         $uri $desc["uri"];
  38.         $user $this->getParameter('app.sparql_user');
  39.         $pass $this->getParameter('app.sparql_pass');
  40.         $auth $user ":" $pass// le dataset dmsites devrait être en libre accès
  41.         $format "application/sparql-results+json";
  42.         $sparqltemplate = <<<txt
  43. prefix ecrm: <http://www.cidoc-crm.org/cidoc-crm/>
  44. PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
  45. PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
  46. select distinct  ?site ?source ?label ?acte ?concept ?createur ?createurlabel ?title ?note ?physical #?p ?o
  47. where {
  48.     # temporaire cause mauvais report sur tpt values ?dmsiteservice { <https://kg.grains-de-culture.fr/dmsites/sparql>}
  49.     values ?dmsiteservice { <https://graphpat.telecom-paris.fr/dmsites/sparql>}
  50.     graph ?g {
  51.     <__uri__>
  52.         ecrm:P108_has_produced  ?physical ;
  53.         ecrm:P94_has_created ?concept .
  54.         OPTIONAL {
  55.             <__uri__> ecrm:P14_carried_out_by ?createur . # et si plusieurs créateurs?
  56.             ?createur rdfs:label ?createurlabel .
  57.         }
  58.         OPTIONAL {
  59.             ?concept  ecrm:P149_is_identified_by ?title
  60.         }
  61.         OPTIONAL {
  62.              ?concept   ecrm:P3_has_note ?note 
  63.         }
  64.     ?physical
  65.         <http://datamusee.givingsense.eu/onto/DMP18_has_current_curator> ?site;
  66.         <http://datamusee.givingsense.eu/onto/PX1_source> ?source.
  67.     service ?dmsiteservice {
  68.         ?site skos:prefLabel ?label
  69.         filter(lang(?label)="fr")
  70.         }
  71.   }
  72. }
  73. txt;
  74.         $query str_replace("__uri__"$uri$sparqltemplate);
  75.         $endpoint $desc["endpoint"];
  76.         $requestURL $endpoint '?'
  77.             'query=' urlencode($query)
  78.             . '&format=' urlencode($format);
  79.         $description json_decode(self::request($requestURL$auth), true);
  80.         if (!(array_key_exists("results"$description)) or (count($description["results"]["bindings"])==0))
  81.         {
  82.             foreach ($desc["altendpoints"] as $endpoint) {
  83.                 $desc["endpoint"] = $endpoint;
  84.                 $requestURL $endpoint '?'
  85.                     'query=' urlencode($query)
  86.                     . '&format=' urlencode($format);
  87.                 $description json_decode(self::request($requestURL$auth), true);
  88.                 if (count($description) != 0) break;
  89.             }
  90.         }
  91.         $descstruct["name"] = "";
  92.         $descstruct["musee"] = "";
  93.         $descstruct["acte"] = "";
  94.         $descstruct["concept"] = "";
  95.         $descstruct["note"] = "";
  96.         $descstruct self::creationeventStructurer($description);
  97.         $descstruct["dataset"] = "dm";
  98.         $descstruct["timespan"] = ""// TODO mettre ce champs à jour
  99.         // 26/6/2024 changement de point car le report sur TPT ne marche pas actuellement
  100.         // $descstruct["triplestore"] = "https://kg.grains-de-culture.fr/";
  101.         $descstruct["triplestore"] = "https://kg.grains-de-culture.fr/";
  102.         $descstruct["query"] = $query;
  103.         $descstruct["jsonarray"] = $description;
  104.         $descstruct["url"] = $requestURL;
  105.         $descstruct["uri"] = $uri;
  106.         $descstruct["entitytype"] = "Evénement de création";
  107.         /* $descstruct["entityid"] = $entityid; */
  108.         //return $this->render('work/dmcreationevent.html.twig', [
  109.         return $this->render('testTemplateSite.html.twig', [
  110.             'desc' => $desc,
  111.             'descstruct' => $descstruct,
  112.             'entitytype' => $descstruct["entitytype"],
  113.             //'description' => $description
  114.             'description' => count($description)  /* => self::printArray($description), */
  115.         ]);
  116.     }
  117.     function workconceptStructurer($description)
  118.     {
  119.         $descstruct = array();
  120.         $descstruct["class"] = array();
  121.         $descstruct["name"] = "";
  122.         $descstruct["musee"] = "";
  123.         $descstruct["museelabel"] = "";
  124.         $descstruct["acte"] = "";
  125.         $descstruct["concept"] = "";
  126.         $descstruct["note"] = "";
  127.         $descstruct["physical"] = "";
  128.         if (count($description["results"]["bindings"])) {
  129.             $item $description["results"]["bindings"][0];
  130.             $descstruct["name"] = $descstruct["entityid"] = $descstruct["productid"] = $descstruct["physical"] =
  131.             $descstruct["musee"] = $descstruct["museelabel"] = $descstruct["note"] = "";
  132.             if (array_key_exists("label"$item)) {
  133.                 $descstruct["museelabel"] = $item["label"]["value"];
  134.             }
  135.             $descstruct["musee"] = $item["site"]["value"];
  136.             $descstruct["acte"] = $item["acte"]["value"];
  137.             $descstruct["concept"] = $item["concept"]["value"];
  138.             $descstruct["physical"] = $item["physical"]["value"];
  139.             if (array_key_exists("createur"$item)) {
  140.                 $descstruct["createur"] = $item["createur"]["value"];
  141.                 $descstruct["createurlabel"] = $item["createurlabel"]["value"];
  142.             } else {
  143.                 $descstruct["createur"] = "";
  144.                 $descstruct["createurlabel"] = "<inconnu>";
  145.             }
  146.             if (array_key_exists("title"$item))
  147.                 $descstruct["title"] = $item["title"]["value"];
  148.             else
  149.                 $descstruct["title"] = "l'oeuvre n'a pas de titre connu dans cette base";
  150.             /*
  151.              * if (array_key_exists("note", $item))
  152.                 $descstruct["note"] = $item["note"]["value"];
  153.             */
  154.         }
  155.         return $descstruct;
  156.     }
  157.     function workconceptDescription($desc$format)
  158.     {
  159.         $uri $desc["uri"];
  160.         $user $this->getParameter('app.sparql_user');
  161.         $pass $this->getParameter('app.sparql_pass');
  162.         $auth $user ":" $pass// le dataset dmsites devrait être en libre accès
  163.         //$format = "application/sparql-results+json";
  164.         $reqformat $format;
  165.         if ($reqformat=="html")
  166.             $reqformat "json";
  167.         $sparqltemplate = <<<txt
  168. prefix ecrm: <http://www.cidoc-crm.org/cidoc-crm/>
  169. PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
  170. PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
  171. select distinct ?concept ?site ?source ?label ?acte ?concept ?createur ?createurlabel ?title ?note ?physical #?p ?o
  172.         where {
  173.         values ?concept {<__uri__> } .
  174.         graph ?g {
  175.         ?concept ecrm:P65_is_shown_by ?physical .
  176.         ?physical    <http://datamusee.givingsense.eu/onto/DMP18_has_current_curator> ?site.
  177.         ?acte ecrm:P108_has_produced  ?physical ;
  178.         OPTIONAL { 
  179.               ?acte ecrm:P14_carried_out_by ?createur . # et si plusieurs créateurs? 
  180.               ?createur rdfs:label ?createurlabel . 
  181.         }
  182.         OPTIONAL {
  183.             ?concept ecrm:P149_is_identified_by ?title
  184.         }
  185.         OPTIONAL {
  186.             ?concept   ecrm:P3_has_note ?note
  187.         }
  188.     #service <https://kg.grains-de-culture.fr/dmsites/sparql>
  189.     OPTIONAL {
  190.         ?site rdfs:label*/skos:prefLabel* ?label
  191.             filter(lang(?label)="fr")
  192.         }
  193.      }
  194. }
  195. txt;
  196.         $query str_replace("__uri__"$uri$sparqltemplate);
  197.         $requestURL $desc["endpoint"] . '?'
  198.             'query=' urlencode($query)
  199.             . '&format=' urlencode($reqformat);
  200.         $jsonres self::request($requestURL$auth);
  201.         $description json_decode($jsonrestrue);
  202.         if (($description==null) or (!(array_key_exists("results"$description)) or (count($description["results"]["bindings"])==0)))
  203.         {
  204.             foreach ($desc["altendpoints"] as $endpoint) {
  205.                 $desc["endpoint"] = $endpoint;
  206.                 $requestURL $endpoint '?'
  207.                     'query=' urlencode($query)
  208.                     . '&format=' urlencode($reqformat);
  209.                 $jsonres self::request($requestURL$auth);
  210.                 $description json_decode($jsonrestrue);
  211.                 if (count($description["results"]["bindings"]) != 0) break;
  212.                 # les sites de SemJoconde n'ont pas été reportés dans le dataset dmsites => chercher directement sans appel au service
  213.                 $query str_replace("service <https://kg.grains-de-culture.fr/dmsites/sparql>"""$query);
  214.                 $query str_replace("service <https://graphpat.telecom-paris.fr/dmsites/sparql>"""$query);
  215.                 $requestURL $endpoint '?'
  216.                     'query=' urlencode($query)
  217.                     . '&format=' urlencode($reqformat);
  218.                 $jsonres self::request($requestURL$auth);
  219.                 //echo $jsonres;
  220.                 $description json_decode($jsonrestrue);
  221.                 if (count($description["results"]["bindings"]) != 0) break;
  222.             }
  223.         }
  224.         $descstruct self::workconceptStructurer($description);
  225.         $descstruct["dataset"] = "dm";
  226.         // 26/6/2024 changement de point car le report sur TPT ne marche pas actuellement
  227.         // $descstruct["triplestore"] = "https://kg.grains-de-culture.fr/";
  228.         $descstruct["triplestore"] = "https://graphpat.telecom-paris.fr/";
  229.         $descstruct["query"] = $query;
  230.         $descstruct["jsonarray"] = $description;
  231.         $descstruct["url"] = $requestURL;
  232.         $descstruct["uri"] = $uri;
  233.         $descstruct["entitytype"] = "Eléments conceptuels décrivant la création";
  234.         /* $descstruct["entityid"] = $entityid; */
  235.         switch($format) {
  236.             case 'json':
  237.                 $mime $this->mimetype($format);
  238.                 $response = new Response($jsonres,
  239.                     Response::HTTP_OK,
  240.                     array('content-type' => $mime)
  241.                 );
  242.                 break;
  243.             case 'xml':
  244.                 $call $desc["eventendpoint"].'?'
  245.                     .'query='.urlencode($query)
  246.                     .'&format='.$this->mimetype($format)
  247.                     .'&output='.$format;
  248.                 $mime $this->mimetype($format);
  249.                 $result =self::request($call$auth);
  250.                 $response = new Response($result,
  251.                     Response::HTTP_OK,
  252.                     array('content-type' => $mime)
  253.                 );
  254.                 break;
  255.             default:
  256.                 $response =
  257.                     $this->render('work/dmconcept.html.twig', [
  258.                     // $this->render('testTemplateConcept2.html.twig', [
  259.                         'desc' => $desc,
  260.                         'descstruct' => $descstruct,
  261.                         'entitytype' => $descstruct["entitytype"],
  262.                         'description' => $description
  263.                         //'description' => count($description)  /* => self::printArray($description), */
  264.                         //'description' =>   var_dump($description)
  265.                     ]);
  266.                 break;
  267.         }
  268.         $response->headers->addCacheControlDirective('must-revalidate'true);
  269.         $response->setSharedMaxAge(3600);
  270.         //$response->headers->set('Content-Type', 'application/json');
  271.         return $response;
  272.     }
  273.     function physicalworkStructurer($description)
  274.     {
  275.         /*
  276.          *
  277.         $descstruct = array();
  278.         $descstruct["types"] = array();
  279.         $descstruct["name"] = $descstruct["musee"]  =$descstruct["acte"]  =$descstruct["concept"]  =$descstruct["title"]  =
  280.         $descstruct["createur"] = $descstruct["createurlabel"] = $descstruct["note"] = "";
  281.         if ($description) {
  282.             if (array_key_exists("P108_has_produced", $description)) $descstruct["phys"] = $description["P108_has_produced"];
  283.             if (array_key_exists("P94_has_created", $description)) $descstruct["concept"] = $description["P94_has_created"];
  284.             if (array_key_exists("P4_has_time_span", $description)) $descstruct["timespan"] = $description["P4_has_time_span"];
  285.             #if (array_key_exists("@type", $description)) $descstruct["types"] = $description["@type"];
  286.         }
  287.         return $descstruct;
  288.         */
  289.         $descstruct = array();
  290.         $descstruct["class"] = array();
  291.         $descstruct["name"] = $descstruct["entityid"] = $descstruct["productid"] = $descstruct["family"] =
  292.         $descstruct["musee"] =$descstruct["museelabel"] = $descstruct["note"] = "";
  293.         $descstruct["acte"] = "";
  294.         $descstruct["concept"] = "";
  295.         $descstruct["title"] = "pas de titre connu pour l'oeuvre";
  296.         $descstruct["createur"] = "";
  297.         $descstruct["createurlabel"] = "<inconnu>";
  298.         // echo "count ".count($description["results"]["bindings"]);
  299.         if (count($description["results"]["bindings"])) {
  300.             $item $description["results"]["bindings"][0];
  301.             if (array_key_exists("label"$item)) {
  302.                 $descstruct["museelabel"] = $item["label"]["value"];
  303.             } elseif  (array_key_exists("labelJoc"$item)) {
  304.                 $descstruct["museelabel"] = $item["labelJoc"]["value"];
  305.             }
  306.             $descstruct["musee"] = $item["site"]["value"];
  307.             $descstruct["acte"] = $item["acte"]["value"];
  308.             $descstruct["concept"] = $item["concept"]["value"];
  309.             $descstruct["timespan"] ="";
  310.             if (array_key_exists("createur"$item)) {
  311.                 $descstruct["createur"] = $item["createur"]["value"];
  312.                 $descstruct["createurlabel"] = $item["createurlabel"]["value"];
  313.             }
  314.             if (array_key_exists("title"$item))
  315.                 $descstruct["title"] = $item["title"]["value"];
  316.             /**/
  317.             /*
  318.              * if (array_key_exists("note", $item))
  319.                 $descstruct["note"] = $item["note"]["value"];
  320.             */
  321.         // TODO ici, l'élément non trouvé devrait donner lieu à un affichage spécifique
  322.         return $descstruct;
  323.     }
  324.     function physicalworkDescription($desc$format)
  325.     {
  326.         $uri $desc["uri"];
  327.         $user $this->getParameter('app.sparql_user');
  328.         $pass $this->getParameter('app.sparql_pass');
  329.         $auth $user ":" $pass// le dataset dmsites devrait être en libre accès
  330.         //$format = "application/sparql-results+json";
  331.         $sparqltemplate = <<<txt
  332. prefix ecrm: <http://www.cidoc-crm.org/cidoc-crm/>
  333. PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
  334. PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
  335. select distinct  ?uri ?site ?concept  ?title  ?acte ?source ?createur ?createurlabel ?note ?label ?labelJoc
  336. where {
  337.   values ?uri { <__uri__>}
  338.   # temporaire cause mauvais report sur TPT values ?dmsitesendpoint { <https://kg.grains-de-culture.fr/dmsites/sparql> }
  339.   values ?dmsitesendpoint { <https://graphpat.telecom-paris.fr/dmsites/sparql>}
  340.   # temporaire cause mauvais report sur TPT values ?jocondeendpoint { <https://kg.grains-de-culture.fr/SemJoconde/sparql> }
  341.   values ?jocondeendpoint { <https://graphpat.telecom-paris.fr/SemJoconde/sparql>}
  342.   graph ?g {
  343.     ?uri 
  344.         <http://datamusee.givingsense.eu/onto/DMP18_has_current_curator> ?site ;
  345.         <http://datamusee.givingsense.eu/onto/PX1_source> ?source.
  346.        ?acte ecrm:P108_has_produced  ?uri  .
  347.          ?concept ecrm:P65_is_shown_by  ?uri .
  348.         OPTIONAL {
  349.             ?acte ecrm:P14_carried_out_by ?createur . # et si plusieurs créateurs?
  350.             ?createur rdfs:label ?createurlabel .
  351.         }
  352.         OPTIONAL {
  353.             ?concept ecrm:P149_is_identified_by ?title
  354.         }
  355.           OPTIONAL {
  356.              ?concept   ecrm:P3_has_note ?note 
  357.         }
  358.         #  OPTIONAL { service ?dmsitesendpoint {
  359.         #  graph ?gsites { # à cause de la non-configuration du graphe par défaut sur l'installation TPT
  360.         #  ?site skos:prefLabel ?label
  361.         #  filter(lang(?label)="fr") }}
  362.         #}
  363.         #  OPTIONAL { service ?jocondeendpoint {
  364.         #graph ?gjoc { # à cause de la non-configuration du graphe par défaut sur l'installation TPT
  365.         #  ?site skos:prefLabel ?labelJoc
  366.         #  filter(lang(?labelJoc)="fr") }}
  367.         #}
  368.     }
  369. }
  370. txt;
  371.         $query str_replace("__uri__"$uri$sparqltemplate);
  372.         $reqformat $format;
  373.         if ($reqformat=="html")
  374.             $reqformat "json";
  375.         $requestURL $desc["endpoint"] . '?'
  376.             'query=' urlencode($query)
  377.             . '&format=' urlencode($reqformat);
  378.         $jsonres self::request($requestURL$auth);
  379.         $description json_decode($jsonrestrue);
  380.         if (($description==null) or (!(array_key_exists("results"$description)) or (count($description["results"]["bindings"])==0)))
  381.         {
  382.             foreach ($desc["altendpoints"] as $endpoint) {
  383.                 $desc["endpoint"] = $endpoint;
  384.                 $requestURL $endpoint '?'
  385.                     'query=' urlencode($query)
  386.                     . '&format=' urlencode($reqformat);
  387.                 $jsonres self::request($requestURL$auth);
  388.                 $description json_decode($jsonrestrue);
  389.                 // 26/6/2024 bug à comprendre sur ce test 'Parameter must be an array or an object that implements Countable' if (count($description) != 0) break;
  390.             }
  391.         }
  392.         $descstruct["name"] = "";
  393.         $descstruct["musee"] = "";
  394.         $descstruct["acte"] = "";
  395.         $descstruct["concept"] = "";
  396.         $descstruct["note"] = "";
  397.         $descstruct self::physicalworkStructurer($description);
  398.         $descstruct["dataset"] = "dmworks ou SemJoconde";
  399.         // 26/6/2024 changement de point car le report sur TPT ne marche pas actuellement
  400.         // $descstruct["triplestore"] = "https://kg.grains-de-culture.fr/";
  401.         $descstruct["triplestore"] = "https://graphpat.telecom-paris.fr/";
  402.         $descstruct["query"] = $query;
  403.         $descstruct["jsonarray"] = $description;
  404.         $descstruct["url"] = $requestURL;
  405.         $descstruct["uri"] = $uri;
  406.         $descstruct["entitytype"] = "Instance matérielle de la création";
  407.         //$descstruct["entityid"] = $entityid; */
  408.         switch($format) {
  409.             case 'json':
  410.                 $mime $this->mimetype($format);
  411.                 $response = new Response($jsonres,
  412.                     Response::HTTP_OK,
  413.                     array('content-type' => $mime)
  414.                 );
  415.                 break;
  416.             case 'xml':
  417.                 $call $desc["eventendpoint"].'?'
  418.                     .'query='.urlencode($query)
  419.                     .'&format='.$this->mimetype($format)
  420.                     .'&output='.$format;
  421.                 $mime $this->mimetype($format);
  422.                 $result =self::request($call$auth);
  423.                 $response = new Response($result,
  424.                     Response::HTTP_OK,
  425.                     array('content-type' => $mime)
  426.                 );
  427.                 break;
  428.             default:
  429.                 $response =
  430.                     $this->render('work/dmwork.html.twig', [
  431.                     //$this->render('testTemplateSite.html.twig', [
  432.                     'desc' => $desc,
  433.                     'descstruct' => $descstruct,
  434.                     'entitytype' => $descstruct["entitytype"],
  435.                     'description' => $description
  436.                     //'description' => count($description)  /* => self::printArray($description), */
  437.                     //'description' =>   var_dump($description)
  438.                 ]);
  439.                 break;
  440.         }
  441.         $response->headers->addCacheControlDirective('must-revalidate'true);
  442.         $response->setSharedMaxAge(3600);
  443.         //$response->headers->set('Content-Type', 'application/json');
  444.         return $response;
  445.     }
  446.     /**
  447.      * @Route("/onto/event/creation/{id}")
  448.      */
  449.     /*
  450.      * ATTENTION Défini dans EventContoller, qui prime sur cette définition
  451.      */
  452.     public function dmcreationevent($id)
  453.     {
  454.         // exemple: http://datamusee.givingsense.eu/onto/product/@1234
  455.         $desc = array();
  456.         $desc["endpoint"] = "https://kg.grains-de-culture.fr/dmworks/sparql";
  457.         # replace temporaire cause mauvais report sur TPT
  458.         $desc["endpoint"] = str_replace("https://kg.grains-de-culture.fr/""https://graphpat.telecom-paris.fr/",$desc["endpoint"]);
  459.         $desc["altendpoints"] = ["https://kg.grains-de-culture.fr/SemJoconde/sparql"];
  460.         # replace temporaire cause mauvais report sur TPT
  461.         $desc["altendpoints"] = str_replace("https://kg.grains-de-culture.fr/""https://graphpat.telecom-paris.fr/",$desc["altendpoints"]);
  462.         $desc["dataset"] = "dmworks or SemJoconde";
  463.         $desc["comment"] = "";
  464.         $desc["id"] = $id;
  465.         $desc["uri"] = "http://datamusee.givingsense.eu/onto/event/creation/" $desc["id"];
  466.         return self::creationeventDescription($desc);
  467.     }
  468.     /**
  469.     @Route("onto/work/physical/{id}.{_format}", defaults={"_format": "html"}, requirements={
  470.      *         "_format": "html|json|xml|ttl"
  471.      *     })
  472.      */
  473.     public function dmphysicalwork(Request $request$id)
  474.     {
  475.         // exemple: http://datamusee.givingsense.eu/onto/work/physical/AE037477
  476.         $format $this->getFormat($request);
  477.         $desc = array();
  478.         $desc["endpoint"] = "https://kg.grains-de-culture.fr/dmworks/sparql";
  479.         # replace temporaire cause mauvais report sur TPT
  480.         $desc["endpoint"] = str_replace("https://kg.grains-de-culture.fr/""https://graphpat.telecom-paris.fr/",$desc["endpoint"]);
  481.         $desc["altendpoints"] = ["https://kg.grains-de-culture.fr/SemJoconde/sparql"];
  482.         # replace temporaire cause mauvais report sur TPT
  483.         $desc["altendpoints"] = str_replace("https://kg.grains-de-culture.fr/""https://graphpat.telecom-paris.fr/",$desc["altendpoints"]);
  484.         $desc["dataset"] = "dmworks or SemJoconde";
  485.         $desc["comment"] = "";
  486.         $desc["id"] = $id;
  487.         $desc["uri"] = "http://datamusee.givingsense.eu/onto/work/physical/" $desc["id"];
  488.         return self::physicalworkDescription($desc$format);
  489.     }
  490.     /**
  491.     @Route("onto/work/concept/{id}.{_format}", defaults={"_format": "html"}, requirements={
  492.      *         "_format": "html|json|xml|ttl"
  493.      *     })
  494.      */
  495.     public function dmconceptobject(Request $request$id)
  496.     {
  497.         // exemple: http://datamusee.givingsense.eu/onto/work/concept/AE037477
  498.         $format $this->getFormat($request);
  499.         $desc = array();
  500.         $desc["endpoint"] = "https://kg.grains-de-culture.fr/dmworks/sparql";
  501.         # replace temporaire cause mauvais report sur TPT
  502.         $desc["endpoint"] = str_replace("https://kg.grains-de-culture.fr/""https://graphpat.telecom-paris.fr/",$desc["endpoint"]);
  503.         $desc["altendpoints"] = ["https://kg.grains-de-culture.fr/SemJoconde/sparql"];
  504.         # replace temporaire cause mauvais report sur TPT
  505.         $desc["altendpoints"] = str_replace("https://kg.grains-de-culture.fr/""https://graphpat.telecom-paris.fr/",$desc["altendpoints"]);
  506.         $desc["dataset"] = "dmworks or SemJoconde";
  507.         $desc["comment"] = "";
  508.         $desc["id"] = $id;
  509.         $desc["uri"] = "http://datamusee.givingsense.eu/onto/work/concept/" $desc["id"];
  510.         return self::workconceptDescription($desc$format);
  511.     }
  512. }