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 unserialize($str)
 {
     global $include_path;
     global $openurl_map;
     global $url_ctx_val, $url_ctx_ref;
     $openurl_map = array();
     //on va avoir besoin du mapping...
     require_once "{$include_path}/parser.inc.php";
     _parser_($include_path . "/openurl/openurl_mapping.xml", array("ITEM" => "_getMapItem_"), "MAP");
     $ctx = new openurl_context_object_kev_mtx_ctx();
     if ($url_ctx_val != "") {
         //Transport By-Value
         $ctx->unserialize($url_ctx_val);
     } else {
         if ($url_ctx_ref != "") {
             //Transport By-Reference
             $content = openurl_transport_http::get($url_ctx_ref);
             $ctx->unserialize($content);
         } else {
             //Transport Inline
             $ctx->unserialize($str);
         }
     }
 }
 function send()
 {
     return openurl_transport_http::get($this->generateURL());
 }