source: pmb4.2/trunk/fuentes/pmb/admin/convert/imports/ris2unimarc/ris2pmbxml.inc.php @ 815

Last change on this file since 815 was 815, checked in by jrpelegrina, 4 years ago

Initial release of pmb 4.2

  • Property svn:executable set to *
File size: 11.4 KB
Line 
1<?php
2// +-------------------------------------------------+
3// © 2002-2004 PMB Services / www.sigb.net pmb@sigb.net et contributeurs (voir www.sigb.net)
4// +-------------------------------------------------+
5// $Id: ris2pmbxml.inc.php,v 1.9 2014-11-03 09:02:50 mbertin Exp $
6
7require_once("$class_path/marc_table.class.php");
8require_once("$include_path/isbn.inc.php");
9
10function organize_line($tab_line){
11        $res = array();
12       
13        for($i=0;$i<count($tab_line);$i++){
14                if(preg_match("/([A-Z0-9]{1,4}) *- (.*)/",$tab_line[$i],$matches)){
15                        $champ = $matches[1];
16                        if($res[$champ]) {
17                                $res[$champ] = $res[$champ]."###".trim($matches[2]);           
18                        } else $res[$champ] = trim($matches[2]);
19                } else {
20                        $res[$champ] = $res[$champ]." ".trim($tab_line[$i]);
21                }
22        }       
23        return $res;
24}
25
26
27function convert_ris($notice, $s, $islast, $isfirst, $param_path) {
28        global $cols;
29        global $ty;
30        global $intitules;
31        global $base_path,$origine;
32        global $tab_functions;
33        global $lot;
34        global $charset;
35       
36        if(mb_detect_encoding($notice) =='UTF-8' && $charset == "iso-8859-1")
37                $notice = utf8_decode($notice);
38
39        if (!$tab_functions) $tab_functions=new marc_list('function');
40        $fields=explode("\n",$notice);
41        $error="";
42        if($fields)
43                $data="<notice>\n";
44        $lignes = organize_line($fields);
45        foreach($lignes as $champ=>$value) {           
46                switch($champ){                                         
47                        case 'CT':
48                        case 'TI':
49                        case 'T1':
50                                //Titre principal
51                                $titre = $value;                               
52                        break;
53                        case 'T2':
54                                //Autre info sur titre
55                                $titre_other = $value;
56                        break;
57                        case 'PB':
58                                //Editeur
59                                $editeur_nom = $value;
60                        break;
61                        case 'CY':
62                                //Editeur
63                                $editeur_ville = $value;
64                        break;
65                        case 'AU':
66                                //Autres auteurs
67                                $autres_auteurs = $value;
68                        break;
69                        case 'A1':
70                                //Auteur principal
71                                $auteur_principal = $value;
72                        break;
73                        case 'A2':
74                                //Auteur secondaire
75                                $auteur_secondaire = $value;
76                        break;                 
77                        case 'SN':
78                                //ISBN/ISSN
79                                $code = trim($value);
80                                $pos = strpos($code,"(");
81                                if ($pos !== false) $code = substr($code,0,$pos);
82                                if(isISBN($code)){
83                                        $infos_isbn=$code;
84                                } elseif(isISSN($code)){
85                                        $infos_issn=$code;
86                                } else $error = "wrong ISBN/ISSN \n";
87                        break;
88                        case 'UR':
89                                //URL
90                                $url = $value;
91                        break;
92                        case 'PY':
93                                //Date de publication (YYYY/MM/DD)
94                                $dates = explode("/",$value);
95                                if($dates[0]) $year = $dates[0];
96                                if($dates[1]) $month = $dates[1];
97                                if($dates[2]) $day = $dates[2];
98                                $publication_date = $year;
99                                if($year && $month && $day){
100                                        $date_sql = str_replace("/","-",$value);
101                                        $mention_date = $value;
102                                } else if($year && $month && !$day){
103                                        $date_sql = $year."-".$month."-01";
104                                        $mention_date = $year."/".$month;
105                                } else if($year && !$month && !$day){
106                                        $date_sql = $year."-01-01";
107                                        $mention_date = $year;
108                                }                       
109                        break;
110                        case 'TY':
111                                //Document type
112                                switch($value){
113                                        case 'ABST':
114                                                $subtype='Abstract';
115                                        break;
116                                        case 'BOOK':
117                                                $subtype='Book';
118                                        break;
119                                        case 'CHAP':
120                                                $subtype='Chapter';
121                                        break;
122                                        case 'COMP':
123                                                $subtype='Computing Program';
124                                        break;
125                                        case 'CONF':
126                                                $subtype='Conference Proceedings';
127                                        break;
128                                        case 'INPR':
129                                                $subtype='Preprint';
130                                        break;
131                                        case 'NEWS':
132                                        case 'JFULL':
133                                                $subtype='Journal';
134                                        break;
135                                        case 'MGZN':
136                                        case 'JOUR':
137                                                $subtype='Article';
138                                        break;
139                                        case 'MAP':
140                                                $subtype='Map';
141                                        break;
142                                        case 'UNPB':
143                                        case 'RPRT':
144                                                $subtype='Report';
145                                        break;
146                                        case 'SLIDE':
147                                                $subtype='Presentation';
148                                        break;
149                                        case 'THES':
150                                                $subtype='Thesis';
151                                        break;
152                                        default :
153                                                $subtype='Article';
154                                        break;
155                                }                               
156                        break;
157                        case 'N1':
158                                //Notes
159                                $notes = $value;
160                        break; 
161                        case 'SP':
162                                //Start page
163                                $start_page = $value;
164                        break;
165                        case 'EP':
166                                //End page
167                                $end_page = $value;
168                        break;
169                        case 'KW':
170                                //Mots cles
171                                $keywords = $value;     
172                        break;
173                        case 'AD':
174                                //Collectivite
175                                $collectivite = $value;
176                        break;
177                        case 'IS':
178                                //Numéro de bulletin
179                                $bull_num = $value;
180                                break;
181                        case 'VL':
182                                //Volume
183                                $bull_vol = $value;
184                                break;
185                        case 'AB':
186                                //Résumé
187                                $resume = $value;
188                                break;
189                        case 'JF':
190                                //Titre du pério
191                                $perio_title = $value;
192                                break;
193                        default:
194                                $data .= '';
195                        break;
196                }               
197        }
198       
199        //Construction du fichier
200       
201        $data.= "<rs>n</rs>
202                  <dt>a</dt>
203                  <bl>a</bl>
204                  <hl>2</hl>
205                  <el>1</el>
206                  <ru>i</ru>\n";       
207       
208        //Soyons sûr que le microtime ne sera plus le même..
209        usleep(1);
210       
211        $data.="<f c='001' ind='  '>\n";
212        $data.=htmlspecialchars(microtime(),ENT_QUOTES,$charset);
213        $data.="</f>\n";
214
215        if($titre){
216                $data.="<f c='200' ind='  '>\n";                                                               
217                $data.="        <s c='a'>".htmlspecialchars($titre,ENT_QUOTES,$charset)."</s>";
218                if($titre_other) $data.="       <s c='e'>".htmlspecialchars($titre_other,ENT_QUOTES,$charset)."</s>";
219                $data.="</f>\n";
220        }
221        if($editeur_nom || $publication_date || $editeur_ville){
222                $data.="<f c='210' ind='  '>\n";                               
223                if($editeur_ville) $data.="     <s c='a'>".htmlspecialchars($editeur_ville,ENT_QUOTES,$charset)."</s>\n";               
224                if($editeur_nom) $data.="       <s c='c'>".htmlspecialchars($editeur_nom,ENT_QUOTES,$charset)."</s>\n";
225                if($publication_date) $data.="  <s c='d'>".htmlspecialchars($publication_date,ENT_QUOTES,$charset)."</s>";     
226                $data.="</f>\n";
227        }       
228        if($start_page || $end_page){
229                $data.="<f c='215' ind='  '>\n";                               
230                if($start_page && $end_page) $data.="   <s c='a'>".htmlspecialchars($start_page."-".$end_page,ENT_QUOTES,$charset)."</s>\n";
231                if(!$start_page && $end_page) $data.="  <s c='a'>".htmlspecialchars($end_page,ENT_QUOTES,$charset)."</s>\n";
232                if($start_page && !$end_page) $data.="  <s c='a'>".htmlspecialchars($start_page,ENT_QUOTES,$charset)."</s>\n";                 
233                $data.="</f>\n";
234        }       
235        if($notes){
236                $note = explode('###',$notes);
237                $doi ="";
238                $pubmedid = "";
239                for($i=0;$i<count($note);$i++){
240                        if(strpos($note[$i],"doi:")!== false) {
241                                $doi = $note[$i];
242                        } else if (strpos($note[$i],"PubMed ID:")!== false){
243                                $pubmedid =  $note[$i];
244                        } else {                               
245                                if(strlen($note[$i]) > 9000){
246                                        $word =wordwrap($note[$i],9000,"####");
247                                        $words = explode("####",$word);
248                                        for($j=0;$j<count($words);$j++){                                               
249                                                $data.="<f c='300' ind='  '>\n";
250                                                $data.="        <s c='a'>".htmlspecialchars($words[$j],ENT_QUOTES,$charset)."</s>\n";
251                                                $data.="</f>\n";                                               
252                                        }
253                                } else {
254                                        $data.="<f c='300' ind='  '>\n";
255                                        $data.="        <s c='a'>".htmlspecialchars($note[$i],ENT_QUOTES,$charset)."</s>\n";
256                                        $data.="</f>\n";
257                                }
258                        }
259                }       
260        }
261        if($resume){
262                $data.="<f c='330' ind='  '>\n";                               
263                $data.="        <s c='a'>".htmlspecialchars($resume,ENT_QUOTES,$charset)."</s>\n";                     
264                $data.="</f>\n";
265        }               
266        if($perio_title){
267                $data.="<f c='461' ind='  '>\n";                               
268                $data.="        <s c='t'>".htmlspecialchars($perio_title,ENT_QUOTES,$charset)."</s>\n"; 
269                if($infos_issn) $data.="        <s c='x'>".htmlspecialchars($infos_issn,ENT_QUOTES,$charset)."</s>\n"; 
270                $data.="        <s c='9'>lnk:perio</s>\n";             
271                $data.="</f>\n";
272        }       
273        if($bull_num || $bull_vol){
274                $data.="<f c='463' ind='  '>\n";                                                               
275                if($bull_num && $bull_vol) 
276                        $data.="        <s c='v'>"."vol. ".htmlspecialchars($bull_vol,ENT_QUOTES,$charset).", no. ".htmlspecialchars($bull_num,ENT_QUOTES,$charset)."</s>\n";
277                else if($bull_num && !$bull_vol)
278                        $data.="        <s c='v'>no. ".htmlspecialchars($bull_num,ENT_QUOTES,$charset)."</s>\n";
279                else if(!$bull_num && $bull_vol)
280                        $data.="        <s c='v'>vol. ".htmlspecialchars($bull_vol,ENT_QUOTES,$charset)."</s>\n";
281                if($date_sql)
282                        $data.="        <s c='d'>".htmlspecialchars($date_sql,ENT_QUOTES,$charset)."</s>\n";
283                if($mention_date)
284                        $data.="        <s c='e'>".htmlspecialchars($mention_date,ENT_QUOTES,$charset)."</s>\n";
285                $data.="        <s c='9'>lnk:bull</s>\n";               
286                $data.="</f>\n";
287        }
288        if($keywords){
289                $mots = explode('###',$keywords);
290                for($i=0;$i<count($mots);$i++){
291                        $data.="<f c='610' ind='0 '>\n";
292                        $data.="        <s c='a'>".htmlspecialchars($mots[$i],ENT_QUOTES,$charset)."</s>\n";
293                        $data.="</f>\n";
294                }
295        }
296       
297        if($auteur_principal){
298                $aut = explode(", ",$auteur_principal);
299                $data.="<f c='700' ind='  '>\n";                                                               
300                $data.="        <s c='a'>".htmlspecialchars($aut[0],ENT_QUOTES,$charset)."</s>\n";
301                $data.="        <s c='b'>".htmlspecialchars($aut[1],ENT_QUOTES,$charset)."</s>\n";
302                if($aut[2]) $data.="    <s c='c'>".htmlspecialchars($aut[2],ENT_QUOTES,$charset)."</s>\n";
303                $data.="</f>\n";
304        }
305       
306        if($collectivite){
307                $collectivites = explode("###",$collectivite);
308                if((count($collectivites) == 1) && !$auteur_principal) {
309                        $coll_elt = explode(", ",$collectivites[0],2);
310                        $coll_nom = $coll_elt[0];
311                        $coll_pays = trim(substr($coll_elt[1],(strrpos($coll_elt[1],", ")+1)));
312                        $coll_lieu = trim(substr($coll_elt[1],0,-(strlen($coll_pays)+2)));
313                        $data.="<f c='710' ind='0 '>\n";                                                               
314                        $data.="        <s c='a'>".htmlspecialchars($coll_nom,ENT_QUOTES,$charset)."</s>\n";
315                        $data.="        <s c='e'>".htmlspecialchars($coll_lieu,ENT_QUOTES,$charset)."</s>\n";
316                        $data.="        <s c='m'>".htmlspecialchars($coll_pays,ENT_QUOTES,$charset)."</s>\n";
317                        $data.="</f>\n";
318                } else {
319                        for($i=0;$i<count($collectivites);$i++){
320                                $coll_elt = explode(", ",$collectivites[$i],2);
321                                $coll_nom = $coll_elt[0];
322                                $coll_pays = trim(substr($coll_elt[1],(strrpos($coll_elt[1],", ")+1)));
323                                $coll_lieu = trim(substr($coll_elt[1],0,-(strlen($coll_pays)+2)));
324                               
325                                $data.="<f c='711' ind='0 '>\n";                                                               
326                                $data.="        <s c='a'>".htmlspecialchars($coll_nom,ENT_QUOTES,$charset)."</s>\n";
327                                $data.="        <s c='e'>".htmlspecialchars($coll_lieu,ENT_QUOTES,$charset)."</s>\n";
328                                $data.="        <s c='m'>".htmlspecialchars($coll_pays,ENT_QUOTES,$charset)."</s>\n";
329                                $data.="</f>\n";
330                        }
331                } 
332        }
333        if($autres_auteurs){
334                $others = explode("###",$autres_auteurs);
335                for($i=0;$i<count($others);$i++){
336                        $aut = explode(", ",$others[$i]);
337                        $data.="<f c='701' ind='  '>\n";                                                               
338                        $data.="        <s c='a'>".htmlspecialchars($aut[0],ENT_QUOTES,$charset)."</s>\n";
339                        $data.="        <s c='b'>".htmlspecialchars($aut[1],ENT_QUOTES,$charset)."</s>\n";
340                        if($aut[2]) $data.="    <s c='c'>".htmlspecialchars($aut[2],ENT_QUOTES,$charset)."</s>\n";
341                        $data.="</f>\n";
342                }
343        }
344        if($auteur_secondaire){
345                $secs = explode("###",$auteur_secondaire);
346                for($i=0;$i<count($secs);$i++){
347                        $aut = explode(", ",$secs);
348                        $data.="<f c='702' ind='  '>\n";                                                               
349                        $data.="        <s c='a'>".htmlspecialchars($aut[0],ENT_QUOTES,$charset)."</s>\n";
350                        $data.="        <s c='b'>".htmlspecialchars($aut[1],ENT_QUOTES,$charset)."</s>\n";
351                        if($aut[2]) $data.="    <s c='c'>".htmlspecialchars($aut[2],ENT_QUOTES,$charset)."</s>\n";
352                        $data.="</f>\n";
353                }
354        }
355       
356        if($url){
357                $data.="<f c='856' ind='  '>\n";
358                $data.="        <s c='u'>".htmlspecialchars($url,ENT_QUOTES,$charset)."</s>";
359                $data.="</f>\n";
360        }       
361        if($subtype){
362                $data.="<f c='900' ind='  '>\n";
363                $data.="        <s c='a'>".htmlspecialchars($subtype,ENT_QUOTES,$charset)."</s>\n";
364                $data.="        <s c='l'>Sub-Type</s>\n";
365                $data.="        <s c='n'>subtype</s>\n";
366                $data.="</f>\n";
367        }
368        if($doi){
369                $doi = trim(str_replace("doi:","",$doi));
370                if($doi){
371                        $data.="<f c='900' ind='  '>\n";
372                        $data.="        <s c='a'>".htmlspecialchars($doi,ENT_QUOTES,$charset)."</s>\n";
373                        $data.="        <s c='l'>DOI id</s>\n";
374                        $data.="        <s c='n'>pmi_doi_identifier</s>\n";
375                        $data.="</f>\n";
376                }
377        }
378        if($pubmedid){ 
379                $pubmedid = trim(str_replace("PubMed ID:","",$pubmedid));
380                if($pubmedid){ 
381                        $data.="<f c='900' ind='  '>\n";
382                        $data.="        <s c='a'>".htmlspecialchars($pubmedid,ENT_QUOTES,$charset)."</s>\n";
383                        $data.="        <s c='l'>Numéro PUBMED</s>\n";
384                        $data.="        <s c='n'>pmi_xref_dbase_id</s>\n";
385                        $data.="</f>\n";
386                }
387        }
388        $data .= "</notice>\n";
389
390        if (!$error) $r['VALID'] = true; else $r['VALID']=false;
391        $r['ERROR'] = $error;
392        $r['DATA'] = $data;
393        return $r;
394}
395?>
Note: See TracBrowser for help on using the repository browser.