function unserialize($infos, $mode)
 {
     global $openurl_map;
     global $class_path;
     $elements = array();
     foreach ($infos as $key => $values) {
         switch ($key) {
             case "rft_id":
                 //descripteurs identifier
                 foreach ($values as $value) {
                     if (preg_match('/([^:]+:[^:]*):.*/', $value, $match)) {
                         $iclass = $openurl_map[strtolower('info:ofi/nam:' . $match[1])]['class'];
                         $ident = new $iclass();
                         $ident->setEntityType($this->type);
                         $ident->unserialize($value);
                         $this->descriptors[] = $ident;
                     }
                 }
                 break;
             case "rft_val_fmt":
                 //By-Value
                 $class = $openurl_map[strtolower($values[0])]['class'];
                 break;
             case "rft_ref_fmt":
                 //By-Reference
                 $content = openurl_transport_http::get($infos["rft_ref"][0]);
                 switch (self::$serialize) {
                     case "kev_mtx":
                     default:
                         $content = openurl_serialize_kev_mtx::unserialize($content);
                         foreach ($content as $key => $value) {
                             $content[$key] = $value[0];
                         }
                         break;
                 }
                 $byref = new $openurl_map[strtolower($values[0])]['class']();
                 $byref->setEntityType($this->type);
                 $byref->unserialize($content, true);
                 $this->descriptors[] = $byref;
                 break;
             case "rft_dat":
                 //Private Data
                 break;
             default:
                 //on colle les éléments du by-value dans un tableau
                 if (substr($key, -3) != "ref") {
                     $elements[$key] = $values[0];
                 }
                 break;
         }
     }
     if ($class) {
         $byval = new $class();
         $byval->setEntityType($this->type);
         $byval->unserialize($elements);
         $this->descriptors[] = $byval;
     }
 }
 function serialize($debug = false)
 {
     if ($debug) {
         highlight_string("ContextObject :" . print_r($this->infos, true));
     }
     $this->context = openurl_serialize_kev_mtx::serialize($this->infos);
     //on ajoute les entités
     foreach ($this->entities as $entity) {
         $entity_serialized = $entity->serialize($debug);
         if ($entity_serialized != "") {
             $this->context .= "&" . $entity_serialized;
         }
     }
     return $this->context;
 }
 function generateURL($debug = false)
 {
     if (!$this->serialized_tsp) {
         $this->serialized_tsp = $this->serialize($debug);
     }
     if (!$this->serialized_obj) {
         $this->serialized_obj = openurl_serialize_kev_mtx::serialize(array('url_ctx_val' => $this->contextObject->serialize($debug)));
     }
     return $this->service_address . (strpos($this->service_address, "?") === false ? "?" : "&") . $this->serialized_tsp . ($this->serialized_obj ? "&" . $this->serialized_obj : "");
 }
 function serialize($tab)
 {
     return openurl_serialize_kev_mtx::serialize($tab);
 }