Das Herz der Zwerge 2
| Bezeichnung | Wert |
|---|---|
| Titel |
Das Herz der Zwerge 2
|
| Untertitel |
Roman
|
| Verfasserangabe |
Markus Heitz
|
| Medienart | |
| Sprache | |
| Person | |
| Auflage |
1. Auflage
|
| Verlag | |
| Ort |
München
|
| Jahr | |
| Umfang |
500 Seiten
|
| ISBN10 |
3-426-22786-X
|
| ISBN13 |
978-3-426-22786-2
|
| Schlagwort |
Die Zwerge
Die Rückkehr der Zwerge Markus Heitz Fantasy-Bestsellerautor Epische Fantasy
LotR
Tolkien Peter Jackson Der Herr der Ringe Völkerfantasy Tungdil Goldhand high fantasy Magie Schlachten Drachen Das geborgene Land Goimron Fantasy Romane für Erwachsene Fantasy Bücher Erwachsene Fantasy Romane Fantasy Saga Fantasy Serie Fantasy Reihe Fantasy Bestseller Dark Fantasy Bücher düstere Fantasy Bücher High Fantasy Bücher Fantasy Zwerge Zwerge Fantasy Zwerge Heitz Zwerge Markus Heitz Zwerge Saga Zwerge Buch Markus Heitz Die Zwerge Zwerge 9 markus heitz reihenfolge Markus Heitz Bücher Die Zwerge Reihenfolge markus heitz die zwerge reihenfolge Deutsche Fantasy deutsche fantasy autoren Softcover / Belletristik/Fantasy Fantasy |
| Annotation |
#!/usr/bin/perl # # Name: dokserv # # Eingabe: ueber QUERY_STRING (CGI); Parameter: # idn = IDN des Dokumentes (req) # dok_var = Dokumentenvariante (opt) # dok_nam = Dokumentenname (opt) # dok_ext = Dokument-Extension (opt) # dok_fpr = Dokument-Fingerprint (opt) # datei = Dateiname - Erweiterung fuer beliebige ARchivdateien # s. Hinweise vom 12.3.2001 # # In Abweichung davon werden auch requests akzeptiert, # die statt der IDN folgende Parameter besetzt haben # (Loesung fuer BIBLIOPLUS vom 6.12.2004): # Eingabe: prov = Provider der Datei (req) # id = Identifikation (req) # dok_var = Dokumentenvariante (opt) # # # Ausgabe: bei ausschliesslicher Angabe der IDN wird die # Dokument-Informationsseite ausgegeben # ($DOC_ROOT/$idn/$DOC_PAGE_NAME.$DOC_PAGE_EXT), # bei besetztem idn, dok_var und dok_fpr wird das Dokument # $DOC_ROOT/$idn/$dok_var/$DOC_FPR_PREFIX$dok_fpr.$DOC_FPR_EXT # ausgegeben, # bei besetztem idn, dok_var und dok_ext wird # das Dokument $DOC_ROOT/$idn/$dok_var/$idn.$dok_ext ausgegeben, # bei besetztem idn, dok_nam und dok_ext wird # das Dokument $DOC_ROOT/$idn/$dok_nam.$dok_ext ausgegeben. # In den letzten beiden Faellen wird ausserdem der korrekte MIME- # type ueber $dok_ext bestimmt. # # bei besetztem prov,id (ohne dok_var) wird Variante 1 des # Dokumentes in der Tabelle objects der DB ostore ausgg. # bei besetztem prov,id,dok_var wird entspr. Variante des # Dokumentes in der Tabelle objects der DB ostore ausgg. # In den letzten beiden Faellen wird dok_ext in der DB benutzt # um den mimetype zu ermitteln # # Note: fuer die Kodierung wird eine Datei mit MIME-Typen benoetigt. # Format: # # MIME-TYPE ext1 ext2 ... # ... # # Beispiel: # # text/html html htm # video/mpeg mpeg mpg mpe # # Ein hash (#) als Kommentarzeichen in der ersten Spalte ist erlaubt # # Autor: Thomas Seidel # # 18.06.1998 SeT erstellt # 07.07.1998 SeT dok_fpr fuer Fingerprints ergaenzt # 04.09.1998 SeT Content-Disposition: inline; filename=xxx ergaenzt # 20.04.1999 SeT Pfad fuer mime.types auf /usr/local/apache/etc geaendert # 11.10.1999 gp pfade fuer neuen deposit geaendert # 16.08.2000 rh ergaenzt um neue Verzeichnis-Struktur fuer Verlags-Publikationen # 29.01.2001 si Dokumentuebersichten fuer Netpub's heissen access.xml # 12.03.2001 si Erweiterung der Eingabe um Parameter "datei". Bei Wahl # dieses Parameters koennen keine der anderen Parameter # beruecksichtigt werden # 12.03.2001 si Erweiterung zur Bedienung von beliebigen Dateien # im Pfad $DOC_ROOT_ARCH (z.Zt. nur fuer das ARCHDBSM) # 29.03.2001 si Erweiterung zur Bedienung von Personendaten im Pfad # $DOC_ROOT_PERS (statische HTML-Seiten only) # 23.11.2001 si Keine Beruecksichtigung der access.xml, stattdessen access.htm - Probleme, dass Cocoon nicht laeuft # 18.11.2002 au Ber�cksichtiung von Hex-codierten "=" in URL # 08.05.2003 Si Erweiterung zur Bedienung von PND-Eintr�gen: erh�lt dokserv # Parameter idn mit einem Wert zwischen 10000000 und 14999999 # wird ein Link auf OPAC geliefert: sub output_pnd # 10.12.2003 Si Bei Anforderung einer nicht vorhandenen Frontpage wird ein # http-Header mit Status-Code 404 gesendet + Meldung wie vor # dafuer wurde die Routine "output_perled_file" umbenannt # 30.06.2004 Si Link fuer OPAC geaendert (LInk in PND-Eintrag) # 06.12.2004 Si fuer Retrieval von BIBLIOPLUS-Dokumenten aus ostore ergaenzt # 17.01.2005 sI verbesserte Fehlermeldung, wenn Parameter id statt idn ang. # 19.09.2008 Si Abfrage ob Datei .restricted in Verzeichnis. Wenn ja, R�ckgabe einer 403-Meldung # 04.02.2010 Si seit heute werden auch 10stellige IDNs bei Diss'n unterst�tzt. �nderung in Zeilen 157 und 165 # 23.02.2010 Si seit heute werden auch 10stellige IDNs bei NP'n unterst�tzt. �nderung in Zeilen 177ff # Root-Verzeichnisse fuer die Dokumente # echt: $DOC_ROOT_VERL = '/data/diglib/data/ep/netpub'; $DOC_ROOT_DISS = '/data/diglib/data/ep/dissonline'; $DOC_ROOT_ARCH = '/data/diglib/data/ep/archiv'; $DOC_ROOT_PERS = '/data/htdocs/personen'; # test: # $DOC_ROOT_VERL = '/home/heuvelmann/public_html/data/netpub'; # $DOC_ROOT_DISS = '/home/heuvelmann/public_html/data/dissonline'; # Namen und Extensionen der Dokumentuebersichtsseiten $DOC_PAGE_NAME_VERL = 'access'; $DOC_PAGE_EXT_VERL = 'htm'; #$DOC_PAGE_EXT_VERL = 'xml'; $DOC_PAGE_NAME_DISS = 'index'; $DOC_PAGE_EXT_DISS = 'htm'; $DOC_PAGE_EXT_PERS = 'htm'; # Praefix und Extension fuer Fingerprintdatei $DOC_FPR_PREFIX = 'ddb'; $DOC_FPR_EXT = 'txt'; # Datei mit MIME-Kodierungen # $MIME_TYPES = '/httpd/conf/mime.types'; # echt: $MIME_TYPES = '/etc/mime.types'; #$MIME_TYPES = '/etc/apache2/mime.types'; # test: # $MIME_TYPES = '/usr/local/apache/etc/mime.types'; # HTML-Datei fuer Meldungen # echt: $ERR_PAGE = "/data/diglib/data/ep/dissonline/etc/dokserv_msg.htm"; # test: # $ERR_PAGE = "/home/heuvelmann/public_html/etc/dokserv_msg.htm"; # Hauptprogramm # parse_query/1 parses incoming data to erl and eval scripts (See mod_esi(3)) # as defined in the standard URL format, that is '+' becomes 'space' and # decoding of hexadecimal characters (%xx). MAIN: { PARSE_QUERY: { $QUERY_STRING = $ENV{'QUERY_STRING'};# or last PARSE_QUERY; %param = &split_string($QUERY_STRING) or last PARSE_QUERY; # Zweig fuer beliebige Dateien - alte Loesung fuer DBSM-Dateien if( $par_file = $param{'datei'} ){ $par_dok_ext = $par_file; $par_dok_ext =~ s/.+\.(\w+)$/$1/; $par_file =~ s/\-/\//g; $doc_file = "$DOC_ROOT_ARCH/$par_file"; &output_doc($doc_file, $par_dok_ext) or last PARSE_QUERY; last MAIN; } # Zweig fuer BIBLIOPLUS Objekte aus Datenbank ostore if( $param{'prov'} ne '' && $param{'id'} ne '' ){ $prov = $param{'prov'}; $id = $param{'id'}; $dok_var = $param{'dok_var'}; if( $dok_var eq '' ){ $dok_var=1; } # default &output_obj($prov, $id, $dok_var) or last PARSE_QUERY; last MAIN; } $par_idn = $param{'idn'} or last PARSE_QUERY; # Zweig fuer Personendaten # if ( $par_idn =~ /^[1][^5]\d+[\dxX]$/ ) {# n� Zeile ist genauer # if ( $par_idn =~ /^[1][^5-9]\d+[\dxX]$/ ) { - f�hrte dazu, dass 10stellige IDNs als PND-Ids interpretiert wurden # 4.2.2010/si: auch 10stellige IDNs sind m�glich mit f�hrender 1 if ( $par_idn =~ /^[1][^5-9]\d\d\d\d\d\d[\dxX]$/ ) { &output_pnd($par_idn) or last PARSE_QUERY; #folgende 2 Zeilen auskommentiert - wurden die jemals benutzt? 8.5.03 Si # $doc_file = "$DOC_ROOT_PERS/$par_idn.$DOC_PAGE_EXT_PERS"; # &output_doc($doc_file, $DOC_PAGE_EXT_PERS) or last PARSE_QUERY; last MAIN; } # 4.2.2010/si Optionale f�hrende 1 wird toleriert - f�r Unterst�tzung 10stelliger IDNs if ( $par_idn !~ /^1?[0-9]{8}[0-9Xx]$/ ) { last PARSE_QUERY; } $par_idn = lc( $par_idn ); # Zweig fuer Verlagspublikationen: $DOC_ROOT = $DOC_ROOT_VERL; $DOC_PAGE_NAME = $DOC_PAGE_NAME_VERL; $DOC_PAGE_EXT = $DOC_PAGE_EXT_VERL; if ( length($par_idn) == 9 ){ @idn_array = split (/ */, $par_idn, 9) or last PARSE_QUERY; $path_netpub = "$DOC_ROOT/" ."$idn_array[7]$idn_array[8]/" ."$idn_array[5]$idn_array[6]/" ."$idn_array[3]$idn_array[4]/" ."$par_idn"; } elsif ( length($par_idn) == 10 ){ @idn_array = split (/ */, $par_idn, 10) or last PARSE_QUERY; $path_netpub = "$DOC_ROOT/" ."$idn_array[8]$idn_array[9]/" ."$idn_array[6]$idn_array[7]/" ."$idn_array[4]$idn_array[5]/" ."$par_idn"; } if ( -d "$path_netpub/_meta" ) { $doc_file = "$path_netpub/_meta/$DOC_PAGE_NAME.$DOC_PAGE_EXT"; $par_dok_ext = $DOC_PAGE_EXT; } elsif ( -d "$path_netpub/_META" ) { $doc_file = "$path_netpub/_META/$DOC_PAGE_NAME.$DOC_PAGE_EXT"; $par_dok_ext = $DOC_PAGE_EXT; } # Zweig fuer Dissertationen: else { $DOC_ROOT = $DOC_ROOT_DISS; $DOC_PAGE_NAME = $DOC_PAGE_NAME_DISS; $DOC_PAGE_EXT = $DOC_PAGE_EXT_DISS; if ( ( $par_dok_ext = $param{'dok_ext'} ) ) { if ( ( $par_dok_var = $param{'dok_var'} ) ) { $doc_file = "$DOC_ROOT/$par_idn/$par_dok_var/$par_idn.$par_dok_ext"; } elsif ( ( $par_dok_nam = $param{'dok_nam'} ) ) { $doc_file = "$DOC_ROOT/$par_idn/$par_dok_nam.$par_dok_ext"; } else { last PARSE_QUERY; } } else { if ( ( $par_dok_fpr = $param{'dok_fpr'} ) ) { if ( ( $par_dok_var = $param{'dok_var'} ) ) { $doc_file = "$DOC_ROOT/$par_idn/$par_dok_var/$DOC_FPR_PREFIX$par_dok_fpr.$DOC_FPR_EXT"; $par_dok_ext = $DOC_FPR_EXT; } else { last PARSE_QUERY; } } else { $doc_file = "$DOC_ROOT/$par_idn/$DOC_PAGE_NAME.$DOC_PAGE_EXT"; $par_dok_ext = $DOC_PAGE_EXT; } } } &output_doc($doc_file, $par_dok_ext) or last PARSE_QUERY; last MAIN; } if( $par_idn ){ $message = "
Leider wurde der angeforderte Datensatz nicht gefunden. Mit den Suchm�glichkeiten unseres Katalogs kann der Datensatz (IDN = $par_idn) ermittelt werden.
Zum Katalog https://portal.dnb.de
Handelt es sich um ein lizenzpflichtiges Dokument, ist die Netzpublikation nur an bestimmten Endger�ten in den Leses�len der Deutschen Nationalbibliothek verf�gbar.
Handelt es sich um einen technischen Fehler, wenden Sie sich an die Email-Adresse np-problem@dnb.de "; } elsif($param{'id'}){ $message = "Auf das Dokument (ID = $param{'id'}) kann nicht zugegriffen werden, da die Angabe eines Providers fehlt. Eventuell wollten Sie auf das Dokument mit der IDN=$param{'id'} zugreifen: http://deposit.dnb.de/cgi-bin/dokserv?idn=$param{'id'}"; } else { $message = "Auf das Dokument (datei = $param{datei}) kann nicht zugegriffen werden."; } &output_perled_file_404( $ERR_PAGE ); } # Unterprogramme................. sub split_string { my ($string) = @_; my (%params); $string =~ s/%3[dD]/=/g; # HMA 18.11.02, kann so auch URL mit Hex-Cod "=" verarbeiten foreach $par ( split ( '&', $string ) ) { ($name, $value) = split ( '=', $par, 2 ); $params{$name} = $value; } return %params; } sub output_doc { my ($doc_file, $doc_ext) = @_; my ($mime_type); my ($doc_name); $mime_type = &get_mime_type($doc_ext) or return 0; $doc_name = substr($doc_file, rindex($doc_file, '/') + 1); $restricted_file = $doc_file; $restricted_file =~ s/$doc_name/\.restricted/; if ( -r $restricted_file ){ $message = "Auf das Dokument (datei = $param{datei}) kann aus rechtlichen Gründen nicht zugegriffen werden."; &output_perled_file_404( $ERR_PAGE ); return 1; } if ( ! -r $doc_file ) { return 0 }; print "Content-type: $mime_type\n"; print "Content-Disposition: inline; filename=$doc_name\n\n"; &output_file($doc_file) or return 0; return 1; } sub output_obj { my ($doc_prov, $doc_id, $doc_var) = @_; my ($mime_type, $doc_ext, $out_doc); use lib '/data/diglib/software/perl5-site_perl/BiblioPlus'; use ostore; # MySQL-Modul # erst Dateinamenserweiterung erfragen (fungiert auch als DB-Test) $doc_ext = &ostore::GET_NAME_EXT($doc_prov,$doc_id,$doc_var); $mime_type = &get_mime_type($doc_ext) or return 0; $out_doc = &ostore::READ_OBJECT($doc_prov,$doc_id,$doc_var); if( $out_doc =~ /^failed/ ){ $message = "Auf das Dokument mit dem Schlüssel ($doc_prov,$doc_id,$doc_var) kann nicht zugegriffen werden."; &output_perled_file_404( $ERR_PAGE ); return 1; } if( $out_doc =~ /charset=UTF-8/m ){ print "Content-type: $mime_type;charset=UTF-8\n\n"; } else { print "Content-type: $mime_type\n\n"; } print $out_doc; return 1; } sub output_pnd { my ($idn) = @_; print "Content-type: text/html\n\n"; if ( $ENV{'REMOTE_ADDR'} =~ /^10\.3\d\..*/ ){ print "\n\n Deutsche Nationalbibliothek\n \n\n\n"; } else { print "\n\n Deutsche Nationalbibliothek\n \n\n\n"; #obsolet seit ? print "\n\n Deutsche Nationalbibliothek\n \n\n\n"; # obsolet seit 29.6.04 print "\n\n Die Deutsche Bibliothek\n \n\n\n"; } return 1; } sub get_mime_type { my ($doc_ext) = @_; $doc_ext = lc( $doc_ext ); open( MIME_FILE, $MIME_TYPES ) or return 0; while ( ) { next if /^\#/; chomp; ( $type, @ext ) = split; if ( grep( $doc_ext eq $_, @ext ) ) { close( MIME_FILE ); return $type; } } close( MIME_FILE ); return "unknown/binary"; } sub output_file { my ($doc_file) = @_; open (OUT_DOC, $doc_file) or return 0; while ( ) { print; } close (OUT_DOC); } sub output_perled_file_404 { my ($file) = @_; my ($tail); print "Status: 404 Not Found\n"; print "Content-type: text/html\n\n"; #print " "; open (OUT_FILE, $file) or return 0; while ( ) { print, next unless / /i; print $`; $perl = $'; while ( ) { $perl = $perl . $`, $tail = $', last if /<\/perl>/i; $perl = $perl . $_; } eval $perl; print $tail; } close (OUT_FILE); }
|
