Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
buechereielektrik:unapi:picarecord.php [2009-12-20 14:51] – Some minor bugfixes. strolsbuechereielektrik:unapi:picarecord.php [2010-01-10 22:28] (current) – Redirect rosenke
Line 1: Line 1:
-<code> +This file was renamed to [[unAPI.inc.php]].
-<?php +
- +
-/*  Copyright 2008 2009 Goetz Hatop +
-  Goetz Hatop's original Version can be found at +
-  <ftp://ftp.ub.uni-marburg.de/pub/research/unapi.tar.gz>  +
- */ +
- +
-/*  Copyright 2009 Stephan Rosenke <rosenke@ulb.tu-darmstadt.de> */ +
- +
-/*  This program is free software: you can redistribute it and/or modify +
-  it under the terms of the GNU General Public License as published by +
-  the Free Software Foundation, either version 3 of the License, or +
-  (at your option) any later version. +
- * +
-  This program is distributed in the hope that it will be useful, +
-  but WITHOUT ANY WARRANTY; without even the implied warranty of +
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +
-  GNU General Public License for more details. +
- * +
-  You should have received a copy of the GNU General Public License +
-  along with this program.  If not, see <http://www.gnu.org/licenses/>+
- */ +
- +
-/*  Version: 0.1 */ +
- +
-/*  Changelog +
- * +
-  20091220: Check whether curl-Module is available, if not use +
-              file_get_contents(). +
-              Some minor bugfixes. +
-  20091215:   Added function "getJson" to class "Picappn"+
-              Made ISBN in getBibTex() unique. +
-              Filtered some characters in getArrayNice(). +
-  20091214:   Added function "convOutputNice", "getArrayNice", "getBibsonomy", +
-              "getKeysText" and "getKeysBibTex" to class "Picappn"+
-              Handled empty records for dc and rdf. +
-  20091213: Added function "convOutput" to class "Picappn"+
-              Defined text-format. +
-              Defined bibtex-format. +
-  20091211:   Added function "final_result"+
-  20091210: Put class "Picappn" to PicaRecord.php. +
- * Ordered functions alphabetically. +
- * Added functions "getArray", "getPlain" and  "getText" to class +
- * "Picappn"+
- * Added functions "decodePicaArray", "getArray" and "getPlain" to +
- * class "PicaRecord"+
-  20091210: Started with Goetz Hatop's version of 2009-12-08 +
- */ +
- +
-$opac_url = "http://pica1l.lhb.tu-darmstadt.de/DB=LHBDA/XML=1.0/PPN?PPN="; +
-//$opac_url = "http://opac.ub.uni-marburg.de/XML=1.0/PPN?PPN="; +
-//$opac_url = "http://cbsopac.rz.uni-frankfurt.de/XML=1.0/PPN?PPN="; +
-//$opac_url = "http://gso.gbv.de/XML=1.0/PPN?PPN="; +
- +
-$bibsonomy_url = "http://www.bibsonomy.org/BibtexHandler?requTask=upload&selection="; +
- +
-$filter_nice = array( +
- '{' => '', +
- '}' => '' +
- ); +
- +
-/** represents a bibliographic data record from oclc/pica LBS  +
-  */ +
-class PicaRecord { +
-  // 15 dublin core elements http://dublincore.org/documents/dces/ +
-  var $contributor, $coverage, $creator, $date, $description, $format; +
-  var $identifier, $language, $publisher, $related, $rights, $source; +
-  var $subject, $title, $type; +
-  // 1 for me +
-  var $signatur; +
- +
-  function PicaRecord() { +
-     //default values +
-     $this->type = "Text"; +
-     $this->rights = "--"; +
-     $this->description = ""; +
-  } +
- +
-  /** private -- make pica data behave well */ +
-  function decodePica($str) { +
-    $tag = ""; +
-    $res = ""; +
-    for ($i=0;$i<=strlen($str)-1;++$i) { +
-        $ch = substr($str,$i,1); +
-        switch (ord($ch)) { +
-          case 31: //information separator one +
-             $ch = substr($str,++$i,1); //new tag ahead +
-             if ($tag!="") { +
-                $res .= "</".$tag.">"; +
-                $tag = $this->getTagName($ch); +
-                $res .= "<".$tag.">"; +
-             } else { +
-                $tag = $this->getTagName($ch); +
-                $res .= "<".$tag.">"; +
-             } +
-             break; +
- +
-          case 30: //information separator two, another field to follow +
-             $res .= "</".$tag.">\n"; +
-             $tag = ""; +
-             break; +
- +
-          case 226: //pica two byte char accent like "é"; +
-             $ch = substr($str,++$i,1); // read one char ahead +
-             $res .= $this->getCode2($ch); +
-             break; +
- +
-          default: +
-             $res .= $this->getCode($ch); +
-             break; +
-        } //switch +
- +
-    } +
-    $res .= "</".$tag.">"; +
-    return $res; +
-  } +
- +
-  /** private -- make pica data behave well and put them to an array*/ +
-  function decodePica_array($str) { +
-    $tag = ""; +
-    $res = ""; +
-    for ($i=0;$i<=strlen($str)-1;++$i) { +
-        $ch = substr($str,$i,1); +
-        switch (ord($ch)) { +
-          case 31: //information separator one +
-             $ch = substr($str,++$i,1); //new tag ahead +
-             $tag = $this->getTagName($ch); +
-             $res[$tag] = ""; +
-             break; +
-          case 30: //information separator two, another field to follow +
-             break; +
-          case 226: //pica two byte char accent like "é"; +
-             $ch = substr($str,++$i,1); // read one char ahead +
-             $res[$tag] .= $this->getCode2($ch); +
-             break; +
-          default: +
-             $res[$tag] .= $this->getCode($ch); +
-             break; +
-        } //switch +
-    } +
-    return $res; +
-  } +
- +
-  /** public -- transform raw pica data to array */ +
-  function getArray($str) { +
-     // pica record separator is ascii record separator +
-     $lines = explode(chr(30), $str); +
-     $res = ""; +
-     foreach ($lines as $line) { +
-       $in1 = ltrim($line); +
-       $ch1 = substr($in1,1,1); +
-       //first char between 0-9 +
-       if (ord($ch1) >47 && ord($ch1)<58) { +
-          $pos = strpos($in1, ' '); +
-          $key = substr($in1,0,$pos); +
-          $val = substr($in1,$pos+1); +
-          $val = $this->decodePica_array($val); +
-          $pica_array[$key] = $val; +
-       } else { +
-         //not valid +
-       } +
-     } +
-     $res = $pica_array; +
-     return $res; +
-  } +
- +
-  /** private -- recode pica charset */ +
-  function getCode($ch) { +
-     $xx = ord($ch); +
-     switch($xx) { +
-       //case 30: return "\n"; //information separator two +
-       //case 31: return "::"; //information separator one +
-       case 10: return "\n"; // ascii line feed +
-       // case 60: return "["; +
-       case 60: return "&lt;"; +
-       // case 62: return "]"; +
-       case 62: return "&gt;"; +
-       case 64: return ""; // @ pica no sort sign +
-       case 209: return "ä"; +
-       case 210: return "ö"; +
-       case 211: return "ü"; +
-       case 216: return "ß"; +
-       case 193: return "Ä"; +
-       case 194: return "Ö"; +
-       case 195: return "Ü"; +
-       default: +
-          if ($xx<30 || $xx>128) { +
-             return "[".$xx."]"; +
-          } +
-          return $ch; +
-     } +
-  } +
- +
-  /** private -- not complete set of double byte pica characters started with +
-      an accent sign */ +
-  function getCode2($ch) { +
-     switch($ch) { +
-       case 'e' : return "é"; +
-       case 'u' : return "ú"; +
-       case 'a' : return "á"; +
-       case 'o' : return "ó"; +
-       case 'E' : return "É"; +
-       case 'c' : return "ć"; +
-       case 's' : return "ś"; +
-       case 'z' : return "ś"; +
-       default: +
-             return $ch; +
-     } +
-  } +
- +
-  /** public -- return simple dublin core record from pica data */ +
-  //used by unapi +
-  function getDublinCore($str) { +
-    $res = $this->getXmlData($str); //parse dublin core +
- +
-    if (empty($res)) return ""; +
- +
-    $res  = "<?xml version=\"1.0\" ?>\n"; +
-    $res .="<record>\n"; +
-    $res .= "<contributor>".$this->contributor."</contributor>\n"; +
-    $res .= "<coverage>".$this->coverage."</coverage>\n"; +
-    $res .= "<creator>".$this->creator."</creator>\n"; +
-    $res .= "<date>".$this->date."</date>\n"; +
-    $res .= "<description>".$this->description."</description>\n"; +
-    $res .= "<format>".$this->format."</format>\n"; +
-    $res .= "<identifier>".$this->identifier."</identifier>\n"; +
-    $res .= "<language>".$this->language."</language>\n"; +
-    $res .= "<publisher>".$this->publisher."</publisher>\n"; +
-    $res .= "<related>".$this->related."</related>\n"; +
-    $res .= "<rights>".$this->rights."</rights>\n"; +
-    $res .= "<source>".$this->source."</source>\n"; +
-    $res .= "<subject>".$this->subject."</subject>\n"; +
-    $res .= "<title>".$this->title."</title>\n"; +
-    $res .= "<type>".$this->type."</type>\n"; +
-    $res .="</record>\n"; +
-    return $res; +
-  } +
- +
-  /** public -- transform raw pica plus to a more readable diagnostic format */ +
-  //used by unapi +
-  function getPicaPlus($str) { +
-    $res = $this->transcribe_pica_utf8($str); +
-    $res = $this->transcribe_pica_rec($res); +
-    return $res; +
-  } +
- +
-  /** private -- rename numeric tags not allowed in xml */ +
-  function getTagName($ch) { +
-     if (ord($ch) >47 && ord($ch)<58) { +
-        return "x".$ch; +
-     } else { +
-        return $ch; +
-     } +
-  } +
- +
-  /** public -- transform raw pica data to valid xml */ +
-  //used by unapi +
-  function getXmlData($str) { +
-     // pica record separator is ascii record separator +
-     $lines = explode(chr(30), $str); +
-     $res = ""; +
-     foreach ($lines as $line) { +
-       $in1 = ltrim($line); +
-       $ch1 = substr($in1,1,1); +
-       //first char between 0-9 +
-       if (ord($ch1) >47 && ord($ch1)<58) { +
-          $pos = strpos($in1, ' '); +
-          $key = substr($in1,0,$pos); +
-          $val = substr($in1,$pos+1); +
-          $val = $this->decodePica($val); +
-          //$res .= "[$key] [$val]\n"; +
-          $res .= "<field tag=\"$key\">$val</field>\n"; +
-          //side effect to scan dublin core elements +
-          $this->readData($key,$val); +
-       } else { +
-         //not valid +
-       } +
-     } +
-     return $res; +
-  } +
- +
-  /** private -- read dublin core elements */ +
-  function readData($key, $val) { +
-     //switch on first 4 letters to catch 041A/001 +
-     switch (substr($key,0,4)) { +
-       case '028C': //Sonstige beteiligte bzw. verantwortliche Personen +
-            $this->contributor .= " ".$this->readTag($val, "x8"); +
-            break; +
-       case '201@': //unkown +
-            // The spatial or temporal topic of the resource +
-            // $this->coverage = $this->readTag($val, "v"); +
-            break; +
-       case '209S': //unkown. DOI ? +
-            //The spatial or temporal topic of the resource +
-            $this->identifier = $this->readTag($val, "u"); +
-            break; +
-       case '028A': //creator +
-            $this->creator = $this->readTag($val, "x8"); +
-            break; +
-       case '028B': //2. und weitere Verfasser +
-            // $this->creator .= " ".$this->readTag($val, "x8"); +
-            break; +
-       case '011@': //date Erscheinungsjahr +
-            $this->date = $this->readTag($val, "a"); +
-            break; +
-       case '004A': //ISBN +
-            $this->identifier = $this->readTag($val, "x0"); +
-            break; +
-       case '009P': //Elektronische Adresse der Personen-Website +
-            //related : A related resource. +
-            $this->related = $this->readTag($val, "u"); +
-            break; +
-       case '009Q': //Elektronische Adresse der Online-Ressource +
-            //related : A related resource. +
-            $this->related = $this->readTag($val, "u"); +
-            break; +
-       case '034I': //format : file format or dimensions of the resource. +
-            $this->format .= " ".$this->readTag($val, "a"); +
-            break; +
-       case '034D': //Seitenanzahl +
-            $this->format .= " ".$this->readTag($val, "a"); +
-            break; +
-       case '036G': //Ungezählte Schriftenreihen +
-            $this->subject = $this->readTag($val, "a")." "; +
-            break; +
-       case '209A': //Signaturen +
-            $this->signatur = $this->readTag($val, "a"); +
-            break; +
-       case '010@': //language +
-            $this->language = $this->readTag($val, "a"); +
-            break; +
-       case '033A': //publisher +
-            $pub1 = $this->readTag($val, "p"); +
-            $pub2 = $this->readTag($val, "n"); +
-            $this->publisher = $pub1." [".$pub2."]"; +
-            break; +
-       case '4201': //rights : Information about rights held in and over +
-            $this->rights = $this->readTag($val, "a"); +
-            break; +
-       case '4219': //rights : Information about rights held in and over +
-            $this->rights = $this->readTag($val, "a"); +
-            break; +
-       case '036D': //nicht dokumentiert: Sammelband Gesamtausgabe +
-            //source : A related resource from which the described is derived. +
-            $this->source = $this->readTag($val, "x8")." "; +
-            //$this->source .= $this->readTag($val, "l"); +
-            break; +
-       case '045B': //DDC +
-            $this->subject = "DDC: ".$this->readTag($val, "a"); +
-            break; +
-       case '045Z': //RVK +
-            $this->subject = $this->readTag($val, "a"); +
-            break; +
-       case '041A': //unknown +
-            if ($this->description !== "") $this->description .= ", "; +
-            $this->description .= $this->readTag($val, "x8"); +
-            break; +
-       case '044A': //unknown +
-            if ($this->description !== "") $this->description .= ", "; +
-            $this->description .= $this->readTag($val, "a"); +
-            break; +
-       case '044N': //Maschinell erstellte Indexeintraege +
-            if ($this->description !== "") $this->description .= ", "; +
-            $this->description .= $this->readTag($val, "a"); +
-            break; +
-       case '044K': //Einzelschlagwort +
-            if ($this->description !== "") $this->description .= ", "; +
-            $this->description .= $this->readTag($val, "x8"); +
-            break; +
-       case '041A': //Blackwell subjects +
-            if ($this->description !== "") $this->description .= ", "; +
-            $this->description .= $this->readTag($val, "x8"); +
-            break; +
-       case '021A': //Hauptsachtitel +
-            $this->title = $this->readTag($val, "a"); +
-            $subtitle = $this->readTag($val, "d"); +
-            if ($subtitle!="") $this->title .= ": ".$subtitle; +
-            break; +
-       case '016A': //Materialspezifische Codes für elektronische Ressourcen +
-            //type The nature or genre of the resource. +
-            $this->type = $this->readTag($val, "a"); +
-            break; +
-       default: +
-            break; +
-     } +
-     //return $res; +
-  } +
- +
-  /** public -- parse dublin core data */ +
-  //client functionality +
-  // comment out if using PHP4 +
-  function readDublinCore($str) { +
-     $doc = new DomDocument(); +
-     $doc -> loadXML($str); +
-     $xp = new DomXPath($doc); +
-     $this->contributor = $xp->query("/record/contributor")->item(0)->nodeValue; +
-     $this->coverage = $xp->query("/record/coverage")->item(0)->nodeValue; +
-     $this->creator = $xp->query("/record/creator")->item(0)->nodeValue; +
-     $this->date = $xp->query("/record/date")->item(0)->nodeValue; +
-     $this->description = $xp->query("/record/description")->item(0)->nodeValue; +
-     $this->format = $xp->query("/record/format")->item(0)->nodeValue; +
-     $this->identifier = $xp->query("/record/identifier")->item(0)->nodeValue; +
-     $this->language = $xp->query("/record/language")->item(0)->nodeValue; +
-     $this->publisher = $xp->query("/record/publisher")->item(0)->nodeValue; +
-     $this->related = $xp->query("/record/related")->item(0)->nodeValue; +
-     $this->rights = $xp->query("/record/rights")->item(0)->nodeValue; +
-     $this->source = $xp->query("/record/source")->item(0)->nodeValue; +
-     $this->subject = $xp->query("/record/subject")->item(0)->nodeValue; +
-     $this->title = $xp->query("/record/title")->item(0)->nodeValue; +
-     $this->type = $xp->query("/record/type")->item(0)->nodeValue; +
-     return $res; +
-  } +
- +
-  /** public -- parse dublin core data */ +
-  //  experimental, does not work +
-  /* +
-  function readRDF_DC($str) { +
-     $doc = new DomDocument(); +
-     $doc -> loadXML($str); +
-     $xp = new DomXPath($doc); +
-     $this->contributor = $xp->query("/rdf/dc:contributor")->item(0)->nodeValue; +
-     $this->coverage = $xp->query("/rdf/dc:coverage")->item(0)->nodeValue; +
-     $this->creator = $xp->query("/rdf/dc:creator")->item(0)->nodeValue; +
-     $this->date = $xp->query("/rdf/dc:date")->item(0)->nodeValue; +
-     $this->description = $xp->query("/rdf/dc:description")->item(0)->nodeValue; +
-     $this->format = $xp->query("/rdf/dc:format")->item(0)->nodeValue; +
-     $this->identifier = $xp->query("/rdf/dc:identifier")->item(0)->nodeValue; +
-     $this->language = $xp->query("/rdf/dc:language")->item(0)->nodeValue; +
-     $this->publisher = $xp->query("/rdf/dc:publisher")->item(0)->nodeValue; +
-     $this->related = $xp->query("/rdf/dc:related")->item(0)->nodeValue; +
-     $this->rights = $xp->query("/rdf/dc:rights")->item(0)->nodeValue; +
-     $this->source = $xp->query("/rdf/dc:source")->item(0)->nodeValue; +
-     $this->subject = $xp->query("/rdf/dc:subject")->item(0)->nodeValue; +
-     $this->title = $xp->query("/rdf/dc:title")->item(0)->nodeValue; +
-     $this->type = $xp->query("/rdf/dc:type")->item(0)->nodeValue; +
-     return $res; +
-  } +
-  */ +
- +
-  /** private -- read tag content from string */ +
-  function readTag($val, $tag) { +
-     $x = strpos($val,"<".$tag.">"); +
-     $y = strpos($val,"</".$tag.">"); +
-     if ($x===FALSE) return ""; +
-     return substr($val,$x+2+strlen($tag),$y-$x-2-strlen($tag)); +
-  } +
- +
-  /** public -- read XML data */ +
-  // client functionality +
-  function readXmlData($str) { +
-     $lines = explode("\n", $str); +
-     //$res = ""; +
-     foreach ($lines as $line) { +
-       $line = trim($line); +
-       if ($line=="") continue; +
-       $x = strpos($line, "<field tag="); +
-       if ($x!==0) continue; +
-       $y = strpos($line, "\"",12); +
-       $key = substr($line, 12, $y-12); +
-       $z = strpos($line, "</field>"); +
-       if ($z===FALSE) continue; +
-       $val = substr($line,$y+2, $z-$y-2); +
-       $this->readData($key, $val); +
-       //$res .= "[$key] [$val]\n"; +
-     } +
-     //return $res; +
-  } +
- +
-  /** private -- transcribe separators to diagnostic format */ +
-  function transcribe_pica_rec($str) { +
-     return strtr( $str, array( +
-       "\x1F" => "$", "\x1E" => "\n", "\x0A" => "\n" +
-     )); +
-  } +
- +
-  /** private -- pica charset handling (we want utf8) */ +
-  function transcribe_pica_utf8($str) { +
-     return strtr( $str, array( +
-       "\xD1" => "ä", "\xD2" => "ö", "\xD3" => "ü", "\xD8" => "ß", +
-       "\xC1" => "Ä", "\xC2" => "Ö", "\xC3" => "Ü" +
-     )); +
-  } +
-} //end class PicaRecord +
- +
-/** get a pica record via pica xml web interface and return */ +
-class Picappn { +
-  // require php5-curl +
-  var $opac; +
-  var $url; +
-  var $ppn; +
-  var $myself; +
- +
-  var $prec; // a picarecord +
- +
-  //constructor  +
-  function Picappn() { +
-    //probably localhost on a typical pica psi production system +
-    global $opac_url; +
-    $this->opac = $opac_url; +
-    $this->ppn = 0; +
-    $this->prec = new PicaRecord(); +
-  } +
- +
-  /** public -- convert for output using raw array data*/ +
-  function convOutput($array,$text,$separator,$category,$subfield,$suffix) { +
-    if (empty($array)) return ""; +
-    if (!empty($subfield)) { +
-      if (empty($array[$category][$subfield])) return ""; +
-      $res = $text.$separator.$array[$category][$subfield].$suffix; +
-    } else { +
-      if (empty($array[$category])) return ""; +
-      $res = $text.$separator.$array[$category].$suffix; +
-    } +
-    return $res;  +
-  } +
- +
-  /** public -- convert for output using nice array data*/ +
-  function convOutputNice($array_nice,$array_text,$key,$prefix,$suffix) { +
-    if (empty($array_nice)) return ""; +
-    if (empty($array_nice[$key])) return ""; +
-    $res = $array_text[$key].$prefix.$array_nice[$key].$suffix; +
-    return $res;  +
-  } +
- +
-  /** public -- return record as Array */ +
-  function getArray() { +
-    if ($this->ppn == 0) return ""; +
-    $res = $this->getData($this->ppn); +
-    $res = $this->prec->getArray($res); +
-    return $res; +
-  } +
- +
-  /** public -- return array with speaking keys */ +
-  function getArrayNice($array_raw) { +
-    if (empty($array_raw)) return ""; +
-    $record = $array_raw; +
- +
-    global $filter_nice; +
- +
-    //Type +
-    $res['type'] = strtr($record['002@']['x0'], $filter_nice); +
- +
-    //Author +
-    $res['author'] = strtr($record['028A']['x8'], $filter_nice); +
-    //Editor +
-    $res['editor'] = strtr($record['028C']['x8'], $filter_nice); +
- +
-    //Title +
-    $res['title'] = strtr($record['021A']['a'], $filter_nice); +
- +
-    //Series +
-    $res['series'] = strtr($record['036F']['x8'], $filter_nice)." ".strtr($record['036F']['l'], $filter_nice); +
- +
-    //Address, especially city +
-    $res['address'] = strtr($record['033A']['p'], $filter_nice); +
-    //Publisher +
-    $res['publisher'] = strtr($record['033A']['n'], $filter_nice); +
-    //Edition +
-    $res['edition'] = strtr($record['032@']['a'], $filter_nice); +
-    //Year +
-    $res['year'] = strtr($record['011@']['a'], $filter_nice); +
- +
-    //ISBNs +
-    $res['isbn10'] = strtr($record['004A']['x0'], $filter_nice); +
-    $res['isbn13'] = strtr($record['004A']['A'], $filter_nice); +
- +
-    //PPN +
-    $res['ppn'] = strtr($record['003@']['x0'], $filter_nice); +
-    return $res; +
-  } +
- +
-  /** public -- return BibTex record from pica data */ +
-  //used by bibsonomy +
-  function getBibsonomy() { +
-    if ($this->ppn == 0) return ""; +
- +
-    $res = $this->getBibTex(); +
-    $res = urlencode($res); +
- +
-    global $bibsonomy_url; +
-    $res = $bibsonomy_url.$res; +
- +
-    return $res; +
-  } +
- +
-  /** public -- return BibTex record from pica data */ +
-  //used by unapi +
-  function getBibTex() { +
-    if ($this->ppn == 0) return ""; +
-    $record_raw = $this->getArray($this->ppn); +
-    $record_nice = $this->getArrayNice($record_raw); +
-    $keys_nice = $this->getKeysBibTex(); +
- +
-    //make sure there is only one ISBN +
-    if (!empty($record_nice['isbn13'])) unset($record_nice['isbn10']); +
- +
-    if (substr($record_nice['type'], 0, 2) == "Aa") { +
-      //Type +
-      $res = "@book {"; +
- +
-      //create identifier +
-      $res .= $this->convOutput($record_raw,"","",'003@','x0',""); +
-      $res .= $this->convOutput($record_raw,"","",'011@','a',",\n"); +
- +
-      //Author et al. +
-      $i = array('author', 'editor', 'title', 'series', 'address', 'publisher', +
-        'edition', 'year', 'isbn10', 'isbn13'); +
- +
-      foreach ($i as $j) { +
-        $res .= $this->convOutputNice($record_nice,$keys_nice,$j," = {","},\n"); +
-      } +
- +
-      //Call Number +
-      $res .= $this->convOutput($record_raw,"  note"," = {","209A/01",'a',"}"); +
-    } +
-    $res .= "\n}"; +
-    return $res; +
-  } +
- +
-  /** private -- get data via pica xml interface */ +
-  function getData($ppn) { +
-    //check whether curl-Module is available, if not available use fallback +
-    if (function_exists('curl_init')) { +
-      $ch = curl_init("$this->url"); +
-      curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); +
-      curl_setopt($ch, CURLOPT_COOKIE, session_name().'='.session_id() );  +
-      //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1 );  +
-      curl_setopt($ch, CURLOPT_HEADER, 0); +
-      $res = curl_exec($ch); +
-      curl_close($ch); +
-    } else { +
-      $res = file_get_contents("$this->url"); +
-    } +
-    return $res; +
-  } +
- +
-  /** public -- return simple dublin core record data from pica record */ +
-  function getDublinCore() { +
-    $res = $this->getData($this->ppn); +
-    $res = $this->prec->getDublinCore($res); +
-    return $res; +
-  } +
- +
-  /** public -- return dublin core rdf data from pica record */ +
-  function getDublinCoreRDF() { +
-    $res = $this->getData($this->ppn); +
-    $res = $this->prec->getXmlData($res); //parses dublin core +
- +
-    if (empty($res)) return ""; +
- +
-    $res  = "<?xml version=\"1.0\"?>\n"; +
-    $res .= "<!DOCTYPE rdf:RDF PUBLIC "; +
-    $res .= "\"-//DUBLIN CORE//DCMES DTD 2002/07/31//EN\"\n"; +
-    $res .= "\"http://dublincore.org/documents/2002/07/31/"; +
-    $res .= "dcmes-xml/dcmes-xml-dtd.dtd\">\n"; +
-    $res .= "<rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" +
-             xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n"; +
-    $res .= "<rdf:Description rdf:about=\"" +
-            .$this->myself."?ppn=".$this->ppn."&amp;format=rdf"."\">\n"; +
-    $res .= "<dc:contributor>".$this->prec->contributor."</dc:contributor>\n"; +
-    $res .= "<dc:coverage>".$this->prec->coverage."</dc:coverage>\n"; +
-    $res .= "<dc:creator>".$this->prec->creator."</dc:creator>\n"; +
-    $res .= "<dc:date>".$this->prec->date."</dc:date>\n"; +
-    $res .= "<dc:description>".$this->prec->description."</dc:description>\n"; +
-    $res .= "<dc:format>".$this->prec->format."</dc:format>\n"; +
-    $res .= "<dc:identifier>".$this->prec->identifier."</dc:identifier>\n"; +
-    $res .= "<dc:language>".$this->prec->language."</dc:language>\n"; +
-    $res .= "<dc:publisher>".$this->prec->publisher."</dc:publisher>\n"; +
-    $res .= "<dc:related>".$this->prec->related."</dc:related>\n"; +
-    $res .= "<dc:rights>".$this->prec->rights."</dc:rights>\n"; +
-    $res .= "<dc:source>".$this->prec->source."</dc:source>\n"; +
-    $res .= "<dc:subject>".$this->prec->subject."</dc:subject>\n"; +
-    $res .= "<dc:title>".$this->prec->title."</dc:title>\n"; +
-    $res .= "<dc:type>".$this->prec->type."</dc:type>\n"; +
-    $res .= "</rdf:Description>\n"; +
-    $res .= "</rdf:RDF>\n"; +
-    return $res; +
-  } +
- +
-  /** public -- return JSON record from pica data */ +
-  //used by unapi +
-  function getJson() { +
-    if ($this->ppn == 0) return ""; +
- +
-    $res = $this->getArray(); +
-    //(PHP 5 >= 5.2.0, PECL json >= 1.2.0) +
-    $res = json_encode($res); +
- +
-    return $res; +
-  } +
- +
-  /** public -- return array with key names for BibTex*/ +
-  function getKeysBibTex() { +
-    //Type +
-    $res['type'] = 'Art'; +
- +
-    //Author +
-    $res['author'] = '  author'; +
-    //Editor +
-    $res['editor'] = '  editor'; +
- +
-    //Title +
-    $res['title'] = '  title'; +
- +
-    //Series +
-    $res['series'] = '  series'; +
- +
-    //Address, especially city +
-    $res['address'] = '  address'; +
-    //Publisher +
-    $res['publisher'] = '  publisher'; +
-    //Edition +
-    $res['edition'] = '  edition'; +
-    //Year +
-    $res['year'] = '  year'; +
- +
-    //ISBNs +
-    $res['isbn10'] = ' isbn'; +
-    $res['isbn13'] = '  isbn'; +
- +
-    //PPN +
-    $res['ppn'] = '  note'; +
-    return $res; +
-  } +
- +
-  /** public -- return array with key names for text*/ +
-  function getKeysText() { +
-    //Type +
-    $res['type'] = 'Art'; +
- +
-    //Author +
-    $res['author'] = 'Autor'; +
-    //Editor +
-    $res['editor'] = 'Herausgeber'; +
- +
-    //Title +
-    $res['title'] = 'Titel'; +
- +
-    //Series +
-    $res['series'] = 'Schriftenreihe'; +
- +
-    //Address, especially city +
-    $res['address'] = 'Ort'; +
-    //Publisher +
-    $res['publisher'] = 'Verlag'; +
-    //Edition +
-    $res['edition'] = 'Auflage'; +
-    //Year +
-    $res['year'] = 'Jahr'; +
- +
-    //ISBNs +
-    $res['isbn10'] = 'ISBN-10'; +
-    $res['isbn13'] = 'ISBN-13'; +
- +
-    //PPN +
-    $res['ppn'] = 'PPN'; +
-    return $res; +
-  } +
- +
-  /** public -- return formated pica plus record */ +
-  function getPicaPlus() { +
-    if ($this->ppn == 0) return ""; +
-    $res = $this->getData($this->ppn); +
-    $res = $this->prec->getPicaPlus($res); +
-    $head = "<?xml version='1.0' encoding='UTF-8'?>\n"; +
-    $head .= "<record url=\"$this->url\">\n"; +
-    $tail = "</record>\n"; +
-    return $head.$res.$tail; +
-  } +
- +
-  /** public -- return formated plain record */ +
-  function getPlain() { +
-    if ($this->ppn == 0) return ""; +
-    $res = $this->getData($this->ppn); +
-    $res = $this->prec->getXmlData($res); +
-    return $res; +
-  } +
- +
-  /** public -- return simple text record from pica data */ +
-  //used by unapi +
-  function getText() { +
-    if ($this->ppn == 0) return ""; +
-    $record_raw = $this->getArray($this->ppn); +
-    $record_nice = $this->getArrayNice($record_raw); +
-    $keys_nice = $this->getKeysText(); +
-    $res = ""; +
- +
-    if (substr($record_nice['type'], 0, 2) == "Aa") { +
-      //Type +
-      $res .= "Art:\t\tMonographie\n"; +
- +
-      //Author +
-      $res .= $this->convOutputNice($record_nice,$keys_nice,"author",":\t\t","\n"); +
-      //Editor +
-      $res .= $this->convOutputNice($record_nice,$keys_nice,"editor",":\t","\n"); +
- +
-      //Title +
-      $res .= $this->convOutputNice($record_nice,$keys_nice,"title",":\t\t","\n"); +
- +
-      //Series +
-      $res .= $this->convOutputNice($record_nice,$keys_nice,"series",":\t","\n"); +
- +
-      //Address, especially city +
-      $res .= $this->convOutputNice($record_nice,$keys_nice,"address",":\t\t","\n"); +
-      //Publisher +
-      $res .= $this->convOutputNice($record_nice,$keys_nice,"publisher",":\t\t","\n"); +
-      //Edition +
-      $res .= $this->convOutputNice($record_nice,$keys_nice,"edition",":\t","\n"); +
-      //Year +
-      $res .= $this->convOutputNice($record_nice,$keys_nice,"year",":\t\t","\n"); +
- +
-      //ISBNs +
-      $res .= $this->convOutputNice($record_nice,$keys_nice,"isbn10",":\t","\n"); +
-      $res .= $this->convOutputNice($record_nice,$keys_nice,"isbn13",":\t","\n"); +
- +
-      //Call Number +
-      $i = 1; +
-      $j = 0; +
-      while ( $i <= 99 ) { +
-        if (($i <= 9) && ($j == 0)) { +
-          $j = "0".$i; +
-        } elseif (($i > 9) && ($j == 0)) { +
-          $j = $i; +
-        } +
-        $res .= $this->convOutput($record_raw,"Signatur",":\t","209A/$j",'a',"\n"); +
-        $i++; +
-        if ($i <= 9 ) { +
-          $j = "0".$i; +
-        } else { +
-          $j = $i; +
-        } +
-        if (empty($record_raw["209A/$j"]['a'])) break; +
-      } +
- +
-      $res .= $this->convOutputNice($record_nice,$keys_nice,"ppn",":\t\t","\n"); +
-    } +
-    return $res; +
-  } +
- +
-  /** public -- return xml formated pica record */ +
-  function getXmlData() { +
-    if ($this->ppn == 0) return ""; +
-    $res = $this->getData($this->ppn); +
-    $res = $this->prec->getXmlData($res);  +
-    $head = "<?xml version='1.0' ?>\n"; +
-    //$head .= "<record>\n"; +
-    //$head .= "<record url=\"$this->opac\">\n"; +
-    //$head .= "<record url=\"$this->url\">\n"; +
-    //$head .= "<record url=\"".htmlspecialchars($this->url)."\">\n"; +
-    //$head .= "<record url=\"".$this->opac.$this->ppn."\">\n"; +
-    $head .= "<record url=\"".htmlentities($this->url)."\">\n"; +
-    $tail = "</record>\n"; +
-    return $head.$res.$tail; +
-  } +
- +
-  //public +
-  function setOpac($opac) { +
-    $this->opac = $opac; +
-  } +
- +
-  //public -- set ppn, the unapi identifier +
-  function setPpn($ppn) { +
-    $this->ppn = $ppn; +
-    $this->url = $this->opac.$ppn."&PLAIN=ON"; +
-    $this->myself = $_SERVER['PHP_SELF']+
-  } +
- +
-} //end class Picappn +
- +
-/* Return result or 404 */ +
-function final_result($res, $content_type) { +
-  if (!empty($res)) { +
-    header("Content-type: $content_type"); +
-    echo $res; +
-  } else { +
-    header('HTTP/1.0 404 Not Found'); +
-  } +
-+
- +
-?> +
-</code>+
buechereielektrik/unapi/picarecord.php.1261317080.txt · Last modified: 2009-12-20 14:51 by strols
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0