source: mods2solr.py @ 38:8a694e2a6847

Revision 38:8a694e2a6847, 103.7 KB checked in by hagenbruch@phoibe.ub.rub.de, 6 years ago (diff)

Version 0.3

Line 
1#!/usr/bin/env python
2# encoding: utf-8
3"""
4mods2solr.py
5
6Created by Andre Hagenbruch on 2009-02-19.
7Copyright (c) 2009 University Library Bochum. All rights reserved.
8"""
9
10from MARCCodes import MARCRelators
11from MARCCodes import languageCodes
12from bibtex_util import umlaut
13from cgi import escape
14import datetime
15from dc_util import *
16from dcds_util import *
17from jcr import *
18from lxml import etree
19from mods_util import *
20import re
21from sesame_util import *
22import simplejson as json
23from solr_util import commit
24from solr_util import solr
25from solr_util import update
26from tictocs import *
27from xml_util import xml2cdata
28from resources import sigelmap
29from resources import countrymap
30import urllib
31import logging
32import cPickle as pickle
33import redis
34from peer_reviewed import issns
35
36logging.basicConfig(level=logging.DEBUG)
37
38MODS_NAMESPACE = 'http://www.loc.gov/mods/v3'
39DCTERMS_NAMESPACE = 'http://purl.org/dc/terms'
40XLINK_NAMESPACE = 'http://www.w3.org/1999/xlink'
41MODS = '{%s}' % MODS_NAMESPACE
42DCTERMS = '{%s}' % DCTERMS_NAMESPACE
43XLINK = '{%s}' % XLINK_NAMESPACE
44
45NSMAP = {None: MODS_NAMESPACE,
46    'dcterms': DCTERMS_NAMESPACE,
47    'xlink': XLINK_NAMESPACE
48}
49
50MERCATOR = ('946301', '946302', '946303', '946304', '946760', '946761', '946762')
51RDs = ('403001', '404001', '405001', '406001', '401001', '402001')
52EXCs = ('3070000',)
53RURS = ('942001',)
54
55# from lang_id import *
56
57# GENRE_MAP = {
58#       'JournalArticle': 'Aufsatz',
59#       'ComputerProgram': 'Software',
60#       'Contribution': 'Aufsatz',
61#       'PressRelease': 'Pressemitteilung',
62#       'CollectedEdition': 'Edition',
63#       'Monograph': 'Monographie'
64# }
65
66GENRE_MAP = {
67    'Beitrag in Sammelwerk' : 'Aufsatz',
68    'Zeitschriftenaufsatz' : 'Aufsatz',
69    'Zeitungsartikel' : 'Aufsatz',
70    'Rezension' : 'Aufsatz',
71    'Beitrag in Gesetzeskommentar' : 'Aufsatz',
72    'Lexikonartikel' : 'Aufsatz',
73    'Lexikonbeitrag': 'Aufsatz',
74    'Vorwort' : 'Sonstiges',
75    'Sammelwerk' : 'Buch',
76    'Monographie' : 'Buch',
77    'Festschrift' : 'Buch',
78    'Tagungsband' : 'Buch',
79    'Bachelorarbeit': 'Buch',
80    'Dissertation' : 'Buch',
81    'Habilitation' : 'Buch',
82    'Magisterarbeit' : 'Buch',
83    'Masterarbeit': 'Buch',
84    'Diplomarbeit' : 'Buch',
85    'Erste Staatsexamensarbeit': 'Buch',
86    'Zweite Staatsexamensarbeit': 'Buch',
87    'Hochschulschrift': 'Buch',
88    'Sonderheft' : 'Buch',
89    'Edition' : 'Buch',
90    'Musikdruck' : 'Buch',
91    'Gesetzeskommentar' : 'Buch',
92    'Internetdokument' : 'Elektronische Ressource',
93    'Software' : 'Elektronische Ressource',
94    'Patentschrift' : 'Sonstiges',
95    'Graue Literatur' : 'Sonstiges',
96    'Pressemitteilung' : 'Sonstiges',
97    'Vortrag' : 'Sonstiges',
98    'Vorlesungsskript': 'Sonstiges',
99    'Rundfunksendung' : 'Sonstiges',
100    'Meeting Abstract' : 'Sonstiges',
101    'Poster Abstract' : 'Sonstiges',
102    'Poster': 'Sonstiges',
103    'Abstract': 'Sonstiges',
104    'Hörbuch' : 'Sonstiges',
105    'Nachwort': 'Sonstiges',
106    'Interview': 'Sonstiges',
107    'Bühnenwerk':  'Sonstiges',
108    'Ton- und Filmdokument': 'Sonstiges',
109}
110
111
112GENRE_LOCAL_MAP = {
113    'Contribution' : 'Beitrag in Sammelwerk',
114    'JournalArticle': 'Zeitschriftenaufsatz',
115    'NewspaperArticle' : 'Zeitungsartikel',
116    'ContributionInLegalCommentary' : 'Beitrag in Gesetzeskommentar',
117    'BookEdited': 'Sammelwerk',
118    'Book' : 'Monographie',
119    'ConferenceProceedings' : 'Tagungsband',
120    'Thesis' : 'Hochschulschrift',
121    'SpecialIssue' : 'Sonderheft',
122    'CollectedWorks' : 'Edition',
123    'LegalCommentary' : 'Gesetzeskommentar',
124    'InternetDocument' : 'Internetdokument',
125    'ComputerProgram': 'Software',
126    'Patent' : 'Patentschrift',
127    'UnpublishedWork' : 'Graue Literatur',
128    'PressRelease': 'Pressemitteilung',
129    'Lecture': 'Vortrag',
130    'Broadcast': 'Rundfunksendung',
131    'AudioBook' : 'Hörbuch',
132    'AudioOrVideoDocument': 'Ton- und Filmdokument',
133    'RadioPlay': 'Rundfunksendung',
134}
135
136
137# RIS_GENRE_MAP = {
138#       'JournalArticle': 'JOUR',
139#       'ComputerProgram': 'COMP',
140#       'Contribution': 'JOUR',
141#       'PressRelease': 'INPR',
142#       'CollectedEdition': 'GEN',
143#       'Monograph': 'BOOK'
144# }
145
146RIS_GENRE_MAP = {
147    'Rezension': 'JOUR',
148    'Lexikonbeitrag': 'GEN',
149    'Festschrift': 'BOOK',
150    'Bachelorarbeit': 'THESIS',
151    'Dissertation': 'THESIS',
152    'Habilitation': 'THESIS',
153    'Magisterarbeit': 'THESIS',
154    'Masterarbeit': 'THESIS',
155    'Diplomarbeit': 'THESIS',
156    'Erste Staatsexamensarbeit': 'THESIS',
157    'Zweite Staatsexamensarbeit': 'THESIS',
158    'Musikdruck': 'BOOK',
159    'Pressemitteilung': 'GEN',
160    'Vortrag': 'GEN',
161    'Lexikonartikel': 'GEN',
162    'Vorwort': 'GEN',
163    'Vorlesungsskript': 'GEN',
164    'Rundfunksendung': 'GEN',
165    'Meeting Abstract' : 'GEN',
166    'Poster Abstract' : 'GEN',
167    'Poster': 'GEN',
168    'Abstract': 'GEN',
169    'Hörbuch': 'GEN',
170    'Nachwort': 'GEN',
171    'Interview': 'GEN',
172    'Bühnenwerk':  'GEN',
173    'Ton- und Filmdokument': 'GEN',
174}
175
176RIS_GENRE_LOCAL_MAP = {
177    'Contribution': 'JOUR',
178    'JournalArticle': 'JOUR',
179    'NewspaperArticle': 'JOUR',
180    'BookEdited': 'BOOK',
181    'Book': 'BOOK',
182    'ConferenceProceedings': 'CONF',
183    'SpecialIssue': 'BOOK',
184    'CollectedWorks': 'BOOK',
185    'InternetDocument': 'ICOMM',
186    'ComputerProgram': 'COMP',
187    'Patent': 'PAT',
188    'UnpublishedWork': 'UNPB',
189    'LegalCommentary': 'BOOK',
190    'ContributionInLegalCommentary': 'JOUR',
191    'Thesis': 'THES',
192    'Lecture': 'GEN',
193    'PressRelease': 'GEN',
194    'Broadcast': 'GEN',
195    'AudioBook': 'GEN',
196    'AudioOrVideoDocument': 'GEN',
197    'RadioPlay': 'GEN',
198}
199
200# BIBTEX_GENRE_MAP = {
201#       'JournalArticle': 'article',
202#       'ComputerProgram': 'misc',
203#       'Contribution': 'article',
204#       'PressRelease': 'misc',
205#       'CollectedEdition': 'book',
206#       'Monograph': 'book'
207# }
208
209BIBTEX_GENRE_MAP = {
210    'Beitrag in Sammelwerk': 'incollection',
211    'Rezension': 'article',
212    'Festschrift': 'book',
213    'Bachelorarbeit': 'misc',
214    'Dissertation': 'phdthesis',
215    'Habilitation': 'book',
216    'Magisterarbeit': 'mastersthesis',
217    'Masterarbeit': 'mastersthesis',
218    'Diplomarbeit': 'mastersthesis',
219    'Erste Staatsexamensarbeit': 'mastersthesis',
220    'Zweite Staatsexamensarbeit': 'mastersthesis',
221    'Musikdruck': 'book',
222    'Pressemitteilung': 'misc',
223    'Vortrag': 'misc',
224    'Lexikonartikel': 'misc',
225    'Lexikonbeitrag': 'misc',
226    'Vorwort': 'misc',
227    'Vorlesungsskript': 'misc',
228    'Rundfunksendung': 'misc',
229    'Meeting Abstract': 'misc',
230    'Poster Abstract': 'misc',
231    'Poster': 'misc',
232    'Abstract': 'misc',
233    'Hörbuch': 'misc',
234    'Nachwort': 'misc',
235    'Interview': 'misc',
236    'Bühnenwerk':  'misc',
237    'Ton- und Filmdokument': 'misc',
238}
239
240BIBTEX_GENRE_LOCAL_MAP = {
241    'Contribution': 'incollection',
242    'JournalArticle': 'article',
243    'NewspaperArticle': 'article',
244    'BookEdited': 'book',
245    'Book': 'book',
246    'ConferenceProceedings': 'proceedings',
247    'SpecialIssue': 'book',
248    'CollectedWorks': 'book',
249    'InternetDocument': 'misc',
250    'ComputerProgram': 'misc',
251    'Patent': 'misc',
252    'UnpublishedWork': 'unpublished',
253    'LegalCommentary': 'book',
254    'ContributionInLegalCommentary': 'incollection',
255    'Thesis': 'book',
256    'Lecture': 'misc',
257    'PressRelease': 'misc',
258    'Broadcast': 'misc',
259    'AudioBook': 'misc',
260    'AudioOrVideoDocument': 'misc',
261    'RadioPlay': 'misc',
262}
263
264CSL_TYPES_MAP = {
265    'Beitrag in Sammelwerk' : 'chapter',
266    'Zeitschriftenaufsatz' : 'article-journal',
267    'Zeitungsartikel' : 'article-newspaper',
268    'Rezension' : 'review',
269    'Beitrag in Gesetzeskommentar' : 'legal_case',
270    'Lexikonartikel' : 'entry-dictionary',
271    'Vorwort' : 'chapter',
272    'Sammelwerk' : 'book',
273    'Monographie' : 'book',
274    'Festschrift' : 'book',
275    'Tagungsband' : 'book',
276    'Dissertation' : 'thesis',
277    'Habilitation' : 'thesis',
278    'Bachelorarbeit' : 'thesis',
279    'Masterarbeit' : 'thesis',
280    'Magisterarbeit' : 'thesis',
281    'Diplomarbeit' : 'thesis',
282    'Erste Staatsexamensarbeit': 'thesis',
283    'Zweite Staatsexamensarbeit': 'thesis',
284    'Hochschulschrift': 'book',
285    'Sonderheft' : 'book',
286    'Edition' : 'book',
287    'Musikdruck' : 'book',
288    'Gesetzeskommentar' : 'legal_case',
289    'Internetdokument' : 'webpage',
290    'Software' : 'webpage',
291    'Patentschrift' : 'patent',
292    'Graue Literatur' : 'report',
293    'Interview' : 'interview',
294    'Pressemitteilung' : 'article',
295    'Vortrag' : 'speech',
296    'Vorlesungsskript' : 'manuskript',
297    'Rundfunksendung' : 'broadcast',
298    'Meeting Abstract' : 'report',
299    'Poster' : 'report',
300    'Poster Abstract' : 'report',
301    'Abstract': 'report',
302    'Hörbuch' : 'book',
303    'Nachwort': 'chapter',
304    'Bühnenwerk':  'motion_picture',
305    'Ton- und Filmdokument': 'motion_picture',
306    }
307
308CSL_TYPES_LOCAL_MAP = {
309    'Contribution' : 'chapter',
310    'JournalArticle': 'article-journal',
311    'NewspaperArticle' : 'article-newspaper',
312    'ContributionInLegalCommentary' : 'legal_case',
313    'BookEdited': 'book',
314    'Book' : 'book',
315    'ConferenceProceedings' : 'book',
316    'Thesis' : 'thesis',
317    'SpecialIssue' : 'book',
318    'CollectedWorks' : 'book',
319    'LegalCommentary' : 'legal_case',
320    'InternetDocument' : 'webpage',
321    'ComputerProgram': 'webpage',
322    'Patent' : 'patent',
323    'UnpublishedWork' : 'manuscript',
324    'PressRelease': 'article',
325    'Lecture': 'speech',
326    'Broadcast': 'broadcast',
327    'AudioBook' : 'book',
328    'AudioOrVideoDocument': 'motion_picture',
329    'RadioPlay': 'motion_picture',
330}
331
332DATE_RANGE_RE = re.compile('(\d{4})-\[?\d{4}\]?')
333MESH_MAP = pickle.load(open('mesh_map.pkl', 'rb'))
334DBPEDIA_MAP = pickle.load(open('dbpedia_mesh_map2.pkl', 'rb'))
335#PAPERC_MAP = pickle.load(open('/home/hagenbruch/dev/OPAC/paperc/paperc.pkl', 'rb'))
336PAPERC_URL_MAP = json.load(open('/home/hagenbruch/nontrans_dev/OPAC/paperc/paperc_url.json'))
337PAPERC_DESCR_MAP = json.load(open('/home/hagenbruch/nontrans_dev/OPAC/paperc/paperc_descr.json'))
338
339def get_title(twig):
340    titlepart = ''
341    for title in twig:
342        if title.tag == '%stitle' % MODS:
343            titlepart = title.text
344        if title.tag == '%ssubTitle' % MODS:
345            titlepart += ' : %s' % title.text
346    return titlepart.encode('utf-8')
347
348def get_name(twig):
349    realname = ''
350    nametype = ''
351    namerole = ''
352    nametype = twig.attrib['type']
353    pnd = ''
354#    try:
355#        pnd = twig.attrib.get('ID').replace('pnd', '')
356#    except AttributeError:
357#        pnd = twig.attrib.get('ID')
358    try:
359        pnd = twig.attrib.get('valueURI').replace('http://d-nb.info/gnd/', '')
360    except AttributeError:
361        #logging.debug(twig.attrib.get('valueURI'))
362        pass
363    for part in twig:
364        if part.tag == '%snamePart' % MODS:
365            realname = part.text
366        if part.tag == '%srole' % MODS:
367            for role in part:
368                if role.tag == '%sroleTerm' % MODS:
369                    namerole = role.text
370    return (realname, nametype, namerole, pnd)
371
372def _make_stws(self, stw):
373    stws_de = set()
374    stws_en = set()
375    try:
376        for pref_en in stw.get('prefLabel_en'):
377            stws_en.add(pref_en)
378    except TypeError:
379        pass
380    try:
381        for pref_de in stw.get('prefLabel_de'):
382            stws_de.add(pref_de)
383    except TypeError:
384        pass
385    try:
386        for alt_en in stw.get('altLabel_en'):
387            stws_en.add(alt_en)
388    except TypeError:
389        pass
390    try:
391        for alt_de in stw.get('altLabel_de'):
392            stws_de.add(alt_de)
393    except TypeError:
394        pass
395
396    try:
397        for broader_id in stw.get('broader'):
398            broader = eval(self.stw_redis.hget('stwid', broader_id))
399            try:
400                for pref_en in broader.get('prefLabel_en'):
401                    stws_en.add(pref_en)
402            except TypeError:
403                pass
404            try:
405                for pref_de in broader.get('prefLabel_de'):
406                    stws_de.add(pref_de)
407            except TypeError:
408                pass
409            try:
410                for alt_en in broader.get('altLabel_en'):
411                    stws_en.add(alt_en)
412            except TypeError:
413                pass
414            try:
415                for alt_de in broader.get('altLabel_de'):
416                    stws_de.add(alt_de)
417            except TypeError:
418                pass
419    except TypeError:
420        pass
421
422    try:
423        for related_id in stw.get('related'):
424            related = eval(self.stw_redis.hget('stwid', related_id))
425            try:
426                for pref_en in related.get('prefLabel_en'):
427                    stws_en.add(pref_en)
428            except TypeError:
429                pass
430            try:
431                for pref_de in related.get('prefLabel_de'):
432                    stws_de.add(pref_de)
433            except TypeError:
434                pass
435            try:
436                for alt_en in related.get('altLabel_en'):
437                    stws_en.add(alt_en)
438            except TypeError:
439                pass
440            try:
441                for alt_de in related.get('altLabel_de'):
442                    stws_de.add(alt_de)
443            except TypeError:
444                pass
445    except TypeError:
446        pass
447
448    return stws_de, stws_en
449
450def sparql(ids):
451    c = connection('http://134.147.247.41:8080/openrdf-sesame/')
452    #c = connection('http://134.147.247.36:8080/openrdf-sesame/')
453    c.use_repository('stw')
454    c.addnamespace('skos', 'http://www.w3.org/2004/02/skos/core#')
455       
456    descriptors = {}
457    subjects = set()
458       
459    for myid in ids:
460        #logging.debug(myid)
461        #p = c.query('select distinct ?pref where{<http://zbw.eu/beta/stw/descriptor/%s> skos:prefLabel ?pref}' % myid)
462        p = c.query('select distinct ?pref where{<http://zbw.eu/stw/descriptor/%s> skos:prefLabel ?pref}' % myid)
463                               
464#        a = c.query("""
465#                                       SELECT DISTINCT ?alt
466#                                       WHERE {
467#                                               <http://zbw.eu/beta/stw/descriptor/%s> skos:altLabel ?alt
468#                                       }
469#                                       """ % myid)
470        a = c.query("""
471                                        SELECT DISTINCT ?alt
472                                        WHERE {
473                                                <http://zbw.eu/stw/descriptor/%s> skos:altLabel ?alt
474                                        }
475                                        """ % myid)
476       
477#        n = c.query("""
478#                                       SELECT DISTINCT ?narrower
479#                                       WHERE {
480#                                               <http://zbw.eu/beta/stw/descriptor/%s> skos:narrower ?nar. ?nar skos:prefLabel ?narrower
481#                                       }
482#                                       """ % myid)
483        n = c.query("""
484                                        SELECT DISTINCT ?narrower
485                                        WHERE {
486                                                <http://zbw.eu/stw/descriptor/%s> skos:narrower ?nar. ?nar skos:prefLabel ?narrower
487                                        }
488                                        """ % myid)
489
490        # b = c.query("""
491        #                       SELECT DISTINCT ?broader
492        #                       WHERE {
493        #                               <http://zbw.eu/beta/stw/descriptor/%s> skos:broader ?bro. ?bro skos:prefLabel ?broader
494        #                       }
495        #                       """ % myid)
496                               
497#        rel = c.query("""
498#                                       SELECT DISTINCT ?related
499#                                       WHERE {
500#                                               <http://zbw.eu/beta/stw/descriptor/%s> skos:related ?rel. ?rel skos:prefLabel ?related
501#                                       }
502#                                       """ % myid)
503        rel = c.query("""
504                                        SELECT DISTINCT ?related
505                                        WHERE {
506                                                <http://zbw.eu/stw/descriptor/%s> skos:related ?rel. ?rel skos:prefLabel ?related
507                                        }
508                                        """ % myid)
509
510        #logging.debug(p)
511
512
513        for r in p:
514            #logging.error(p)
515            for i in r:
516                #logging.debug(i)
517                try:
518                    subjects.add(r[i]['value'])
519                    if r[i]['xml:lang'] == 'de':
520                        descriptors.setdefault(myid, []).append(r[i]['value'])
521                except TypeError:
522                    logging.debug(r)
523                    raise
524                                               
525        for r in a:
526            for i in r:
527                #print r[i]['value']
528                subjects.add(r[i]['value'])
529                if r[i]['xml:lang'] == 'de':
530                    descriptors.setdefault(myid, []).append(r[i]['value'])
531       
532        for r in n:
533            for i in r:
534                #print r[i]['value']
535                subjects.add(r[i]['value'])
536       
537        # for r in b:
538        #       for i in r:
539        #               print r[i]['value']
540               
541        for r in rel:
542            for i in r:
543                #print r[i]['value']
544                subjects.add(r[i]['value'])
545
546    return (descriptors, subjects)
547
548_pnd_cache = {}
549
550def _check_consent(pnd):
551    if _pnd_cache.get(pnd):
552        return _pnd_cache.get(pnd)
553    else:
554        response = urllib.urlopen('http://bibliographie-admin.ub.rub.de/rubauthor/%s/consent' % pnd)#.read()
555        resp = response.read()
556        #logging.info('CODE: %s' % response.getcode())
557        if response.getcode() == 500: # Noch nicht in der Redaktion?
558            _pnd_cache.setdefault(pnd, resp)
559            return 'False'
560        else:
561            _pnd_cache.setdefault(pnd, resp)
562            return resp
563
564class Collection(object):
565       
566    def __init__(self, **args):
567        self.filename = args.get('filename')
568        #self.fakultaet = fakultaet
569        self.fach = args.get('fach', '')
570        self.disziplin = args.get('disziplin', '')
571        self.institution = args.get('institution', '')
572        self.inst_label = args.get('inst_label', '')
573        self.fakid = args.get('fakid', '')
574        self.instid = args.get('instid', '')
575        self.debug = args.get('debug', '')
576        self.orga_redis = redis.Redis(host='localhost', port=6379, db=0)
577        self.stw_redis = redis.Redis(host='localhost', port=6379, db=1)
578       
579    def feed(self):
580        update(Collection.convert(self))
581        #commit()
582        #commit()
583
584    def convert(self):
585        try:
586            intree = etree.parse(self.filename)
587        except:
588            raise
589        doc = ''
590        index = elm ('add', None)
591        record_counter = 1
592        lang_hist = {}
593        #abbr_title = {}
594        debug_id = ''
595        debug_genre = ''
596       
597        #print genre_local.text
598        records = intree.findall('%smods' % MODS)
599
600        # Consent checking no longer needed -- we don't display any abstracts in 0.2
601        #abstract_consent = True
602               
603               
604        #for data in intree.iter():
605        for data in records:
606            csl_json = {}
607            genre = set()
608            genre_local = ''
609            stw_ids = []
610            year = ''
611            issn = ''
612            abstract = False
613            institute = set()
614            research_campus = set()
615            fakultaet = set()
616            zentraleeinheit = set()
617            rci = set()
618            fachgebiet = set()
619            pr = 'false'
620
621            if data.tag == '%smods' % MODS:
622                doc = (elm('doc', None))
623                doc.append(solr('disziplin', self.disziplin))
624                if self.institution == 'Fakultaet':
625                    doc.append(solr('fakultaet', self.inst_label))
626                    doc.append(solr('fakinst_cloud', self.inst_label))
627                else:
628                    doc.append(solr('zentraleeinheit', self.inst_label))
629                    doc.append(solr('fakinst_cloud', self.inst_label))
630                if self.inst_label.lower() != self.fach.lower():
631                    #logging.error('%s => %s' % self.inst_label.lower(), self.fach.lower())
632                    doc.append(solr('fach', self.fach))
633                if self.fakid is not None:
634                    doc.append(solr('fakid', self.fakid))
635                if self.instid != '':
636                    doc.append(solr('instid', self.instid))
637
638                if data.find('.//%sabstract' % MODS) != None:
639                    abstract = True
640                #doc.append(solr('recordCreationDate', datetime.datetime.now().isoformat()[:-9] + '00Z'))
641                #doc.append(solr('id', 'tag:bibliographie.ub.rub.de,2009:%s:%s' % (self.fach.replace(' ', '_').decode('utf-8'), str(record_counter))))
642                #doc.append(solr('entryID', '%s_%s' % (self.fach.replace(' ', '_'), str(record_counter))))
643                guid = data.find('.//%srecordInfo/%srecordIdentifier' % (MODS, MODS))
644                doc.append(solr('id', guid.text))
645                doc.append(solr('entryID', guid.text))
646                debug_id = guid.text
647                #dcds_tree = desc('tag:bibliographie.ub.rub.de,2009:%s:%s' % (self.fach.replace(' ', '_').decode('utf-8'), str(record_counter)))
648                dcds_tree = desc(guid.text)
649                csl_json.setdefault(guid.text, {}).setdefault('id', guid.text)
650                #csl_json.setdefault(guid.text, {}).setdefault('suffix', '<a href="/entry/%s">&raquo;</a>' % guid.text)
651                dc_list = []
652                #dc_list.append(dc('identifier', 'tag:bibliographie.ub.rub.de,2009:%s:%s' % (self.fach.replace(' ', '_').decode('utf-8'), str(record_counter))))
653                dc_list.append(dc('identifier', guid.text))
654                bib_authors = []
655                bib_editors = []
656                bibtex_list = []
657                ris_list = []
658                keywords = []
659
660                for elem in data:
661                    #genre = elem.xpath('//mods:genre[not(@authority)]', namespaces = {'mods': 'http://www.loc.gov/mods/v3', 'dcterms': 'http://purl.org/dc/terms', 'xsi': 'http://www.w3.org/2001/XMLSchema-instance'})
662                    #genre_local = elem.find('.//%sgenre[@authority="local"]' % MODS)
663                                       
664                    if elem.tag == '%sgenre' % MODS:
665                        if len(elem.attrib) == 0:
666                            genre.add(elem.text)
667                            csl_json.setdefault(guid.text, {}).setdefault('type', CSL_TYPES_MAP.get(elem.text))
668                        else:
669                            if elem.attrib['authority'] == 'local':
670                                genre_local = elem.text
671                                csl_json.setdefault(guid.text, {}).setdefault('type', CSL_TYPES_LOCAL_MAP.get(elem.text))
672                                debug_genre = elem.text
673
674#                    ois = []
675#                    if debug_genre == 'Patent':
676#                        #logging.debug(etree.tostring(elem))
677#                        ois = data.findall('.//%soriginInfo' % MODS)
678#
679#                    for myoi in ois:
680#                        #logging.debug(etree.tostring(myoi))
681#                        pt = myoi.find('.//%splaceTerm' % MODS)
682#                        #logging.debug(etree.tostring(pt))
683#                        for oi in myoi:
684#                            if oi.tag == '%sdateOther' % MODS:
685#                                try:
686#                                    doc.append(solr('anmeldeland', countrymap.get(pt.text)))
687#                                    csl_json.setdefault(guid.text, {}).setdefault('publisher-place', countrymap.get(pt.text))
688#                                except AttributeError:
689#                                    pass
690#                            if oi.tag == '%sdateIssued' % MODS:
691#                                try:
692#                                    doc.append(solr('publikationsland', countrymap.get(pt.text)))
693#                                    csl_json.setdefault(guid.text, {}).setdefault('publisher-place', countrymap.get(pt.text))
694#                                except AttributeError:
695#                                    pass
696#                    ois = []
697
698                    if elem.tag == '%sname' % MODS:
699                        ris_authors = ''
700                        realname, nametype, namerole, pnd = get_name(elem)
701                        try:
702                            if nametype == 'personal':
703                                lastname, firstname = realname.split(', ')
704                        except:
705                            logging.debug('Could not split name %s in %s' % (realname, debug_id))
706                        if pnd != '':
707                            doc.append(solr('pnd', '%s#%s' % (realname, pnd)))
708                            doc.append(solr('pndid', pnd.replace('pnd', '')))
709                            #logging.debug(pnd)
710                            try:
711                                orga = eval(self.orga_redis.hget('pndorga', pnd))
712                                if len(orga) > 0:
713                                    tmp ={}
714                                    for org in orga:
715                                        del org['ordnungsnummer']
716                                        #org.setdefault('pnd', pnd)
717                                        #logging.debug('2 %s' % orga_tmp)
718                                        tmp.setdefault(pnd, {}).setdefault('name', realname)
719                                        tmp.setdefault(pnd, {}).setdefault('orga', []).append(org)
720                                    #logging.debug(tmp)
721                                    doc.append(solr('ra_struct', json.dumps(tmp)))
722                                    doc.append(solr('ra_pnd', u'%s#%s§%s' % (realname, pnd, json.dumps(tmp.get(pnd).get('orga')))))
723                                    doc.append(solr('rubauthor', realname))
724                                for unit in orga:
725                                    #logging.info('%s => %s' % (pnd, unit.get('institut')))
726                                    if unit.get('ordnungsnummer') in MERCATOR:
727                                        doc.append(solr('research_campus', 'Mercator Research Group'))
728                                        doc.append(solr('rci', unit.get('institut')))
729                                    if unit.get('ordnungsnummer') in RDs:
730                                        doc.append(solr('research_campus', 'Research Department'))
731                                        doc.append(solr('rci', unit.get('institut')))
732                                    if unit.get('ordnungsnummer') in EXCs:
733                                        doc.append(solr('research_campus', 'Exzellenzcluster'))
734                                        doc.append(solr('rci', unit.get('institut')))
735                                    if unit.get('ordnungsnummer') in RURS:
736                                        doc.append(solr('research_campus', 'RURS'))
737                                        doc.append(solr('rci', unit.get('institut')))
738                                    if unit.get('institut') != '':
739                                        institute.add(unit.get('institut'))
740
741                                        #doc.append(solr('institut', unit.get('institut')))
742                            except TypeError:
743                                pass
744                                #logging.debug('PND: %s' % pnd)
745                               
746#                            abstract_consent = _check_consent(pnd)
747                            #logging.info('CONSENT: %s => %s' % (pnd, abstract_consent))
748                        if namerole == 'aut' and nametype == 'personal':
749                            doc.append(solr('creator', realname))
750                            doc.append(solr('fperson', realname))
751                            doc.append(solr('person', realname))
752                            bib_authors.append(umlaut(realname))
753                            ris_authors += 'A1  - %s\n' % realname
754                            ris_list.append(ris_authors)
755                            dc_list.append(dc('creator', realname))
756                            dcds_tree.append(stmt('creator', realname))
757                            csl_temp = {}
758                            if lastname:
759                                csl_temp.setdefault('family', lastname)
760                                csl_temp.setdefault('given', firstname)
761                            else:
762                                csl_temp.setdefault('literal', realname)
763                            csl_json.setdefault(guid.text, {}).setdefault('author', []).append(csl_temp)
764                        if namerole == 'aui' and nametype == 'personal':
765                            doc.append(solr('creator', realname))
766                            doc.append(solr('fperson', realname))
767                            doc.append(solr('person', realname))
768                            bib_authors.append(umlaut(realname))
769                            ris_authors += 'A1  - %s\n' % realname
770                            ris_list.append(ris_authors)
771                            dc_list.append(dc('creator', realname))
772                            dcds_tree.append(stmt('creator', realname))
773                            csl_temp = {}
774                            if lastname:
775                                csl_temp.setdefault('family', lastname)
776                                csl_temp.setdefault('given', firstname)
777                            else:
778                                csl_temp.setdefault('literal', realname)
779                            csl_json.setdefault(guid.text, {}).setdefault('author', []).append(csl_temp)
780                        if namerole == 'aft' and nametype == 'personal':
781                            doc.append(solr('creator', realname))
782                            doc.append(solr('fperson', realname))
783                            doc.append(solr('person', realname))
784                            bib_authors.append(umlaut(realname))
785                            ris_authors += 'A1  - %s\n' % realname
786                            ris_list.append(ris_authors)
787                            dc_list.append(dc('creator', realname))
788                            dcds_tree.append(stmt('creator', realname))
789                            csl_temp = {}
790                            if lastname:
791                                csl_temp.setdefault('family', lastname)
792                                csl_temp.setdefault('given', firstname)
793                            else:
794                                csl_temp.setdefault('literal', realname)
795                                csl_json.setdefault(guid.text, {}).setdefault('author', []).append(csl_temp)
796                        if namerole == 'inv' and nametype == 'personal':
797                            doc.append(solr('creator', realname))
798                            doc.append(solr('fperson', realname))
799                            doc.append(solr('person', realname))
800                            bib_authors.append(umlaut(realname))
801                            ris_authors += 'A1  - %s\n' % realname
802                            ris_list.append(ris_authors)
803                            dc_list.append(dc('creator', realname))
804                            dcds_tree.append(stmt('creator', realname))
805                            csl_temp = {}
806                            if lastname:
807                                csl_temp.setdefault('family', lastname)
808                                csl_temp.setdefault('given', firstname)
809                            else:
810                                csl_temp.setdefault('literal', realname)
811                            csl_json.setdefault(guid.text, {}).setdefault('author', []).append(csl_temp)
812                        if namerole == 'ctb' and nametype == 'personal':
813                            doc.append(solr('contributor', realname))
814                            doc.append(solr('fperson', realname))
815                            doc.append(solr('person', realname))
816                            csl_temp = {}
817                            if lastname:
818                                csl_temp.setdefault('family', lastname)
819                                csl_temp.setdefault('given', firstname)
820                            else:
821                                csl_temp.setdefault('literal', realname)
822                            csl_json.setdefault(guid.text, {}).setdefault('contributor', []).append(csl_temp)
823                        if namerole == 'ctb' and nametype == 'corporate':
824                            doc.append(solr('institution', realname))
825                            dcds_tree.append(stmt('contributor', realname))
826                            dc_list.append(dc('contributor', realname))
827                        if namerole == 'edt' and nametype == 'corporate':
828                            doc.append(solr('institution', realname))
829                            dcds_tree.append(stmt('contributor', realname))
830                            dc_list.append(dc('contributor', realname))
831                        if namerole == 'hst' and nametype == 'corporate':
832                            doc.append(solr('veranstalter', realname))
833                            dcds_tree.append(stmt('contributor', realname))
834                            dc_list.append(dc('contributor', realname))
835                        if namerole == 'edt' and nametype == 'personal':
836                            doc.append(solr('editor', realname))
837                            doc.append(solr('fperson', realname))
838                            doc.append(solr('person', realname))
839                            bib_editors.append(umlaut(realname))
840                            csl_temp = {}
841                            if lastname:
842                                csl_temp.setdefault('family', lastname)
843                                csl_temp.setdefault('given', firstname)
844                            else:
845                                csl_temp.setdefault('literal', realname)
846                            csl_json.setdefault(guid.text, {}).setdefault('editor', []).append(csl_temp)
847                        if namerole == 'cwt' and nametype == 'personal':
848                            doc.append(solr('bearbeiter', realname))
849                            doc.append(solr('fperson', realname))
850                            doc.append(solr('person', realname))
851                            dcds_tree.append(stmt('contributor', realname))
852                            dc_list.append(dc('contributor', realname))
853                            csl_temp = {}
854                            if lastname:
855                                csl_temp.setdefault('family', lastname)
856                                csl_temp.setdefault('given', firstname)
857                            else:
858                                csl_temp.setdefault('literal', realname)
859                            csl_json.setdefault(guid.text, {}).setdefault('contributor', []).append(csl_temp)
860                        if namerole == 'org' and nametype == 'personal':
861                            doc.append(solr('begruender', realname))
862                            doc.append(solr('fperson', realname))
863                            doc.append(solr('person', realname))
864                            dcds_tree.append(stmt('contributor', realname))
865                            dc_list.append(dc('contributor', realname))
866                            csl_temp = {}
867                            if lastname:
868                                csl_temp.setdefault('family', lastname)
869                                csl_temp.setdefault('given', firstname)
870                            else:
871                                csl_temp.setdefault('literal', realname)
872                            csl_json.setdefault(guid.text, {}).setdefault('contributor', []).append(csl_temp)
873                        if namerole == 'ths' and nametype == 'personal':
874                            doc.append(solr('betreuer', realname))
875                            doc.append(solr('fperson', realname))
876                            doc.append(solr('person', realname))
877                            dcds_tree.append(stmt('contributor', realname))
878                            dc_list.append(dc('contributor', realname))
879                            csl_temp = {}
880                            if lastname:
881                                csl_temp.setdefault('family', lastname)
882                                csl_temp.setdefault('given', firstname)
883                            else:
884                                csl_temp.setdefault('literal', realname)
885                            csl_json.setdefault(guid.text, {}).setdefault('contributor', []).append(csl_temp)
886                        if namerole == 'spk' and nametype == 'personal':
887                            doc.append(solr('vortragender', realname))
888                            doc.append(solr('fperson', realname))
889                            doc.append(solr('person', realname))
890                            dcds_tree.append(stmt('contributor', realname))
891                            dc_list.append(dc('contributor', realname))
892                            csl_temp = {}
893                            if lastname:
894                                csl_temp.setdefault('family', lastname)
895                                csl_temp.setdefault('given', firstname)
896                            else:
897                                csl_temp.setdefault('literal', realname)
898                            csl_json.setdefault(guid.text, {}).setdefault('author', []).append(csl_temp)
899                        if namerole == 'inv' and nametype == 'personal':
900                            doc.append(solr('erfinder', realname))
901                            doc.append(solr('fperson', realname))
902                            doc.append(solr('person', realname))
903                            dcds_tree.append(stmt('contributor', realname))
904                            dc_list.append(dc('contributor', realname))
905                            csl_temp = {}
906                            if lastname:
907                                csl_temp.setdefault('family', lastname)
908                                csl_temp.setdefault('given', firstname)
909                            else:
910                                csl_temp.setdefault('literal', realname)
911                            csl_json.setdefault(guid.text, {}).setdefault('author', []).append(csl_temp)
912                        if namerole == 'pta' and nametype == 'personal':
913                            doc.append(solr('anmelder', realname))
914                            doc.append(solr('fperson', realname))
915                            doc.append(solr('person', realname))
916                            dcds_tree.append(stmt('contributor', realname))
917                            dc_list.append(dc('contributor', realname))
918                            csl_temp = {}
919                            if lastname:
920                                csl_temp.setdefault('family', lastname)
921                                csl_temp.setdefault('given', firstname)
922                            else:
923                                csl_temp.setdefault('literal', realname)
924                            csl_json.setdefault(guid.text, {}).setdefault('contributor', []).append(csl_temp)
925                        if namerole == 'prg' and nametype == 'personal':
926                            doc.append(solr('entwickler', realname))
927                            doc.append(solr('fperson', realname))
928                            doc.append(solr('person', realname))
929                            dcds_tree.append(stmt('contributor', realname))
930                            dc_list.append(dc('contributor', realname))
931                            csl_temp = {}
932                            if lastname:
933                                csl_temp.setdefault('family', lastname)
934                                csl_temp.setdefault('given', firstname)
935                            else:
936                                csl_temp.setdefault('literal', realname)
937                            csl_json.setdefault(guid.text, {}).setdefault('contributor', []).append(csl_temp)
938                        if namerole == 'hnr' and nametype == 'personal':
939                            doc.append(solr('gefeierter', realname))
940                            doc.append(solr('fperson', realname))
941                            doc.append(solr('person', realname))
942                            dcds_tree.append(stmt('contributor', realname))
943                            dc_list.append(dc('contributor', realname))
944                            csl_temp = {}
945                            if lastname:
946                                csl_temp.setdefault('family', lastname)
947                                csl_temp.setdefault('given', firstname)
948                            else:
949                                csl_temp.setdefault('literal', realname)
950                            csl_json.setdefault(guid.text, {}).setdefault('contributor', []).append(csl_temp)
951                        if namerole == 'trl' and nametype == 'personal':
952                            doc.append(solr('uebersetzer', realname))
953                            doc.append(solr('fperson', realname))
954                            doc.append(solr('person', realname))
955                            dcds_tree.append(stmt('contributor', realname))
956                            dc_list.append(dc('contributor', realname))
957                            csl_temp = {}
958                            if lastname:
959                                csl_temp.setdefault('family', lastname)
960                                csl_temp.setdefault('given', firstname)
961                            else:
962                                csl_temp.setdefault('literal', realname)
963                            csl_json.setdefault(guid.text, {}).setdefault('translator', []).append(csl_temp)
964                        if namerole == 'act' and nametype == 'personal':
965                            doc.append(solr('schauspieler', realname))
966                            doc.append(solr('fperson', realname))
967                            doc.append(solr('person', realname))
968                            dcds_tree.append(stmt('contributor', realname))
969                            dc_list.append(dc('contributor', realname))
970                            csl_temp = {}
971                            if lastname:
972                                csl_temp.setdefault('family', lastname)
973                                csl_temp.setdefault('given', firstname)
974                            else:
975                                csl_temp.setdefault('literal', realname)
976                            csl_json.setdefault(guid.text, {}).setdefault('contributor', []).append(csl_temp)
977                        if namerole == 'pdr' and nametype == 'personal':
978                            doc.append(solr('projektleitung', realname))
979                            doc.append(solr('fperson', realname))
980                            doc.append(solr('person', realname))
981                            dcds_tree.append(stmt('contributor', realname))
982                            dc_list.append(dc('contributor', realname))
983                            csl_temp = {}
984                            if lastname:
985                                csl_temp.setdefault('family', lastname)
986                                csl_temp.setdefault('given', firstname)
987                            else:
988                                csl_temp.setdefault('literal', realname)
989                            csl_json.setdefault(guid.text, {}).setdefault('contributor', []).append(csl_temp)
990                        if namerole == 'std' and nametype == 'personal':
991                            doc.append(solr('buehnenbildner', realname))
992                            doc.append(solr('fperson', realname))
993                            doc.append(solr('person', realname))
994                            dcds_tree.append(stmt('contributor', realname))
995                            dc_list.append(dc('contributor', realname))
996                            csl_temp = {}
997                            if lastname:
998                                csl_temp.setdefault('family', lastname)
999                                csl_temp.setdefault('given', firstname)
1000                            else:
1001                                csl_temp.setdefault('literal', realname)
1002                            csl_json.setdefault(guid.text, {}).setdefault('contributor', []).append(csl_temp)
1003                        if namerole == 'cst' and nametype == 'personal':
1004                            doc.append(solr('kostuemdesigner', realname))
1005                            doc.append(solr('fperson', realname))
1006                            doc.append(solr('person', realname))
1007                            dcds_tree.append(stmt('contributor', realname))
1008                            dc_list.append(dc('contributor', realname))
1009                            csl_temp = {}
1010                            if lastname:
1011                                csl_temp.setdefault('family', lastname)
1012                                csl_temp.setdefault('given', firstname)
1013                            else:
1014                                csl_temp.setdefault('literal', realname)
1015                            csl_json.setdefault(guid.text, {}).setdefault('contributor', []).append(csl_temp)
1016                        if namerole == 'elg' and nametype == 'personal':
1017                            doc.append(solr('licht_und_tonmeister', realname))
1018                            doc.append(solr('fperson', realname))
1019                            doc.append(solr('person', realname))
1020                            dcds_tree.append(stmt('contributor', realname))
1021                            dc_list.append(dc('contributor', realname))
1022                            csl_temp = {}
1023                            if lastname:
1024                                csl_temp.setdefault('family', lastname)
1025                                csl_temp.setdefault('given', firstname)
1026                            else:
1027                                csl_temp.setdefault('literal', realname)
1028                            csl_json.setdefault(guid.text, {}).setdefault('contributor', []).append(csl_temp)
1029                        if namerole == 'pro' and nametype == 'personal':
1030                            doc.append(solr('produzent', realname))
1031                            doc.append(solr('fperson', realname))
1032                            doc.append(solr('person', realname))
1033                            dcds_tree.append(stmt('contributor', realname))
1034                            dc_list.append(dc('contributor', realname))
1035                            csl_temp = {}
1036                            if lastname:
1037                                csl_temp.setdefault('family', lastname)
1038                                csl_temp.setdefault('given', firstname)
1039                            else:
1040                                csl_temp.setdefault('literal', realname)
1041                            csl_json.setdefault(guid.text, {}).setdefault('author', []).append(csl_temp)
1042                        if namerole == 'chr' and nametype == 'personal':
1043                            doc.append(solr('choreograph', realname))
1044                            doc.append(solr('fperson', realname))
1045                            doc.append(solr('person', realname))
1046                            dcds_tree.append(stmt('contributor', realname))
1047                            dc_list.append(dc('contributor', realname))
1048                            csl_temp = {}
1049                            if lastname:
1050                                csl_temp.setdefault('family', lastname)
1051                                csl_temp.setdefault('given', firstname)
1052                            else:
1053                                csl_temp.setdefault('literal', realname)
1054                            csl_json.setdefault(guid.text, {}).setdefault('author', []).append(csl_temp)
1055                        if namerole == 'spk' and nametype == 'personal':
1056                            doc.append(solr('sprecher', realname))
1057                            doc.append(solr('fperson', realname))
1058                            doc.append(solr('person', realname))
1059                            dcds_tree.append(stmt('contributor', realname))
1060                            dc_list.append(dc('contributor', realname))
1061                            csl_temp = {}
1062                            if lastname:
1063                                csl_temp.setdefault('family', lastname)
1064                                csl_temp.setdefault('given', firstname)
1065                            else:
1066                                csl_temp.setdefault('literal', realname)
1067                            csl_json.setdefault(guid.text, {}).setdefault('contributor', []).append(csl_temp)
1068                        if namerole == 'tcd' and nametype == 'personal':
1069                            doc.append(solr('technischer_leiter', realname))
1070                            doc.append(solr('fperson', realname))
1071                            doc.append(solr('person', realname))
1072                            dcds_tree.append(stmt('contributor', realname))
1073                            dc_list.append(dc('contributor', realname))
1074                            csl_temp = {}
1075                            if lastname:
1076                                csl_temp.setdefault('family', lastname)
1077                                csl_temp.setdefault('given', firstname)
1078                            else:
1079                                csl_temp.setdefault('literal', realname)
1080                            csl_json.setdefault(guid.text, {}).setdefault('contributor', []).append(csl_temp)
1081                        if namerole == 'pmn' and nametype == 'personal':
1082                            doc.append(solr('produktionsleitung', realname))
1083                            doc.append(solr('fperson', realname))
1084                            doc.append(solr('person', realname))
1085                            dcds_tree.append(stmt('contributor', realname))
1086                            dc_list.append(dc('contributor', realname))
1087                            csl_temp = {}
1088                            if lastname:
1089                                csl_temp.setdefault('family', lastname)
1090                                csl_temp.setdefault('given', firstname)
1091                            else:
1092                                csl_temp.setdefault('literal', realname)
1093                            csl_json.setdefault(guid.text, {}).setdefault('contributor', []).append(csl_temp)
1094                        else:
1095                            pass
1096                            # bib_authors.append(umlaut(realname))
1097                            # ris_authors += 'A1  - %s\n' % realname
1098                            # ris_list.append(ris_authors)
1099                            # dc_list.append(dc('creator', realname))
1100                    if elem.tag == '%stitleInfo' % MODS:
1101                        if elem.attrib.get('type') == 'translated':
1102                            doc.append(solr('parallel_title', get_title(elem)))
1103                            # Keine Paralleltitel in BibTeX und RIS?
1104                            dcds_tree.append(stmt('alternative', get_title(elem)))
1105                        elif elem.attrib.get('type') == 'uniform':
1106                            doc.append(solr('uniform_title', get_title(elem)))
1107                        else:
1108                            #doc.append(solr('title', get_title(elem)))
1109                            doc.append(solr('title', elem.find('.//%stitle' % MODS).text))
1110                            try:
1111                                doc.append(solr('subtitle', elem.find('.//%ssubTitle' % MODS).text))
1112                            except AttributeError:
1113                                pass
1114                            doc.append(solr('sorttitle', get_title(elem)))
1115                            dcds_tree.append(stmt('title', get_title(elem)))
1116                            bibtex_list.append('\ttitle = {{%s}},\n' % umlaut(get_title(elem).decode('utf-8')))
1117                            #bibtex += '\ttitle = {{%s}},\n' % umlaut(get_title(elem))
1118                            ris_list.append('T1  - %s\n' % get_title(elem).decode('utf-8'))
1119                            #ris_list.append('T1  - %s\n' % get_title(elem))
1120                            dc_list.append(dc('title', get_title(elem).decode('utf-8')))
1121                            csl_json.setdefault(guid.text, {}).setdefault('title', get_title(elem).decode('utf-8'))
1122                    if elem.tag == '%ssubject' % MODS:
1123                        if elem.attrib.get('authority', '') == 'stw':
1124                            if elem.text != '18012-3': # 'Deutschland' blows up the subject list...
1125                                for topic in elem:
1126                                    stw_ids.append(topic.text)
1127                        if elem.attrib.get('authority', '') == 'international patent classification':
1128                            doc.append(solr('ipc', elem.text))
1129                        if elem.attrib.get('authority', '') == 'mesh':
1130                            for topic in elem:
1131                                doc.append(solr('mesh_descr', topic.text))
1132                                try:
1133                                    doc.append(solr('mesh_term', MESH_MAP.get(topic.text)))
1134                                    doc.append(solr('fsubject', MESH_MAP.get(topic.text)))
1135                                except KeyError:
1136                                    logging.warn('MESH descriptor %s could not be mapped!' % topic_text)
1137                                try:
1138                                    for label in DBPEDIA_MAP.get(topic.text).get('labels').values():
1139                                        doc.append(solr('dbpedia_label', label))
1140                                    for comment in DBPEDIA_MAP.get(topic.text).get('comments').values():
1141                                        doc.append(solr('dbpedia_abstract', comment))
1142                                    doc.append(solr('dbpedia_uri', DBPEDIA_MAP.get(topic.text).get('URI')))
1143                                    doc.append(solr('dbpedia_uri_label', '%s#%s' % (DBPEDIA_MAP.get(topic.text).get('URI'), DBPEDIA_MAP.get(topic.text).get('labels').get('en'))))
1144                                except AttributeError:
1145                                    pass
1146
1147                        if elem.attrib.get('authority', 'thesoz'):
1148                            pass # No mapping yet...
1149                        if elem.attrib.get('authority', 'lcc'):
1150                            pass # No mapping yet...
1151                        if not 'authority' in elem.attrib:
1152                            for topic in elem:
1153                                doc.append(solr('subject', topic.text))
1154                                doc.append(solr('fsubject', topic.text))
1155                                doc.append(solr('tagcloud', topic.text))
1156                                dcds_tree.append(stmt('subject', topic.text))
1157                                keywords.append(umlaut(topic.text))
1158                                ris_list.append('KW  - %s\n' % topic.text)
1159                                dc_list.append(dc('subject', topic.text))
1160                    if elem.tag == '%sidentifier' % MODS:
1161                        if elem.attrib.get('type') == 'isbn':
1162                            doc.append(solr('isbn', elem.text.replace('-', '')))
1163                            doc.append(solr('isxn', elem.text.replace('-', '')))
1164                            dcds_tree.append(stmt('identifier', 'urn:isbn:%s' % elem.text))
1165                            dc_list.append(dc('identifier', 'urn:isbn:%s' % elem.text))
1166                            bibtex_list.append('\tISBN = {%s},\n' % elem.text)
1167                            ris_list.append('SN  - %s\n' % elem.text)
1168                            csl_json.setdefault(guid.text, {}).setdefault('ISBN', elem.text)
1169                            if elem.text in PAPERC_URL_MAP:
1170                                #logging.info('PAPERC: %s => %s' % (elem.text, PAPERC_URL_MAP.get(elem.text)))
1171                                doc.append(solr('paperc_url', PAPERC_URL_MAP.get(elem.text)))
1172                            if elem.text in PAPERC_DESCR_MAP:
1173                                if abstract == False:
1174                                    #logging.debug('ABSTRACT')
1175                                    #logging.info('PAPERC: %s => %s' % (elem.text, PAPERC_DESCR_MAP.get(elem.text)))
1176                                    doc.append(solr('ro_abstract', PAPERC_DESCR_MAP.get(elem.text)))
1177                        if elem.attrib.get('type') == 'pm':
1178                            doc.append(solr('pmid', elem.text))
1179                            csl_json.setdefault(guid.text, {}).setdefault('pmid', elem.text)
1180                        if elem.attrib.get('type') == 'doi':
1181                            doc.append(solr('doi', elem.text))
1182                            dcds_tree.append(stmt('identifier', 'urn:doi:%s' % elem.text))
1183                            dc_list.append(dc('identifier', 'urn:doi:%s' % elem.text))
1184                            ris_list.append('SN  - %s\n' % elem.text)
1185                            csl_json.setdefault(guid.text, {}).setdefault('DOI', elem.text)
1186                        if elem.attrib.get('displayLabel') == u'Veröffentlichungs-Nr.':
1187                            doc.append(solr('veroeffentlichungsnr', elem.text))
1188                            dcds_tree.append(stmt('identifier', elem.text))
1189                            dc_list.append(dc('identifier', elem.text))
1190                            ris_list.append('SN  - %s\n' % elem.text)
1191                        if elem.attrib.get('displayLabel') == 'Anmeldenummer':
1192                            doc.append(solr('anmeldenummer', elem.text))
1193                            dcds_tree.append(stmt('identifier', elem.text))
1194                            dc_list.append(dc('identifier', elem.text))
1195                            ris_list.append('SN  - %s\n' % elem.text)
1196                    if elem.tag == '%srelatedItem' % MODS:
1197                        #if elem.attrib['type'] == 'host':
1198                        if elem.attrib.get('type') == 'host':
1199                            for host in elem:
1200                                if host.tag == '%sidentifier' % MODS:
1201                                    if host.attrib['type'] == 'issn':
1202                                        issn = host.text
1203                                        if tictocs.get(host.text, ''):
1204                                            doc.append(solr('tictoc', tictocs.get(host.text)))
1205                                        #if jcr.get(year).get(host.text):
1206                                        #print year
1207                                        #print host.text
1208                                        #raise KeyError()
1209                                        #doc.append(solr('jcr', jcr.get(year).get(host.text)))
1210                                        try:
1211                                            doc.append(solr('issn', host.text.replace('-', '')))
1212                                        except AttributeError:
1213                                            logging.debug(debug_id)
1214                                            raise
1215                                        doc.append(solr('isxn', host.text.replace('-', '')))
1216                                        bibtex_list.append('\tISSN = {%s},\n' % host.text)
1217                                        ris_list.append('SN  - %s\n' % host.text)
1218                                        dcds_tree.append(stmt('isPartOf', 'urn:issn:%s' % host.text))
1219                                        dc_list.append(dc('relation', 'urn:issn:%s' % host.text))
1220                                        if host.text in issns:
1221                                            pr = 'true'
1222                                    elif host.attrib['type'] == 'isbn':
1223                                        try:
1224                                            doc.append(solr('isbn', host.text.replace('-', '')))
1225                                        except AttributeError:
1226                                            logging.error('ISBN: %s in %s' % (host.text, debug_id))
1227                                            raise
1228                                        doc.append(solr('isxn', host.text.replace('-', '')))
1229                                        bibtex_list.append('\tISBN = {%s},\n' % host.text)
1230                                        ris_list.append('SN  - %s\n' % host.text)
1231                                        dcds_tree.append(stmt('isPartOf', 'urn:isbn:%s' % host.text))
1232                                        dc_list.append(dc('relation', 'urn:isbn:%s' % host.text))
1233                                        csl_json.setdefault(guid.text, {}).setdefault('ISBN', host.text)
1234                                        if host.text in PAPERC_URL_MAP:
1235                                            #logging.info('SERIES_PAPERC: %s => %s' % (host.text, PAPERC_URL_MAP.get(host.text)))
1236                                            doc.append(solr('paperc_url', PAPERC_URL_MAP.get(host.text)))
1237                                        if host.text in PAPERC_DESCR_MAP:
1238                                            if abstract == False:
1239                                                #logging.debug('ABSTRACT')
1240                                                #logging.info('SERIES_PAPERC: %s => %s' % (host.text, PAPERC_DESCR_MAP.get(host.text)))
1241                                                doc.append(solr('paperc_url', PAPERC_DESCR_MAP.get(host.text)))
1242
1243                                        # worldcat = xisbn(host.text.replace('-', ''))
1244                                        #                                                                       if worldcat.startswith('http'):
1245                                        #                                                                               doc.append(solr('worldcat_url', worldcat))
1246                                        # gb = google_book(host.text.replace('-', ''))
1247                                        #                                                                       if gb.startswith('http'):
1248                                        #                                                                               doc.append(solr('google_book_url', gb))
1249                                if host.tag == '%stitleInfo' % MODS:
1250                                    if host.attrib.get('type') != 'abbreviated':
1251                                        doc.append(solr('journal_title', get_title(host)))
1252                                        doc.append(solr('fjtitle', get_title(host)))
1253                                        bibtex_list.append('\tjournal = {%s},\n' % umlaut(get_title(host).decode('utf-8')))
1254                                        ris_list.append('JO  - %s\n' % get_title(host).decode('utf-8'))
1255                                        dcds_tree.append(stmt('isPartOf', get_title(host).decode('utf-8')))
1256                                        dc_list.append(dc('relation', get_title(host).decode('utf-8')))
1257                                        csl_json.setdefault(guid.text, {}).setdefault('container-title', get_title(host).decode('utf-8'))
1258                                    else:
1259                                        #doc.append(solr('abbr_jtitle', get_title(host)))
1260                                        ris_list.append('JA  - %s\n' % get_title(host).decode('utf-8'))
1261                                if host.tag == '%sname' % MODS:
1262                                    realname, nametype, namerole, pnd = get_name(host)
1263                                    if pnd != '':
1264                                        doc.append(solr('pnd', '%s#%s' % (realname, pnd.replace('pnd', ''))))
1265                                    if namerole == 'edt' and nametype == 'personal':
1266                                        doc.append(solr('editor', realname))
1267                                        #doc.append(solr('fperson', realname))
1268                                        bib_editors.append(realname)
1269                                        ris_list.append('ED  - %s\n' % realname)
1270                                        csl_temp = {}
1271                                        if lastname:
1272                                            csl_temp.setdefault('family', lastname)
1273                                            csl_temp.setdefault('given', firstname)
1274                                        else:
1275                                            csl_temp.setdefault('literal', realname)
1276                                        csl_json.setdefault(guid.text, {}).setdefault('collection-editor', []).append(csl_temp)
1277                                    if namerole == 'aut' and nametype == 'personal':
1278                                        doc.append(solr('creator', realname))
1279                                        #doc.append(solr('fperson', realname))
1280                                        bib_editors.append(realname)
1281                                        ris_list.append('AU  - %s\n' % realname)
1282                                        csl_temp = {}
1283                                        if lastname:
1284                                            csl_temp.setdefault('family', lastname)
1285                                            csl_temp.setdefault('given', firstname)
1286                                        else:
1287                                            csl_temp.setdefault('literal', realname)
1288                                        csl_json.setdefault(guid.text, {}).setdefault('container-author', []).append(csl_temp)
1289                                if host.tag == '%spart' % MODS:
1290                                    for detail in host:
1291                                        if detail.tag == '%sdate' % MODS:
1292                                            #doc.append(solr('date', '%s%s' % (detail.text, '-01-01T00:00:00Z')))
1293                                            year = ''
1294                                            if debug_genre == 'NewspaperArticle':
1295                                                mydate = detail.text
1296                                                dateparts = mydate.split('-')
1297                                                try:
1298                                                    year = '%s.%s.%s' % (dateparts[2], dateparts[1], dateparts[0])
1299                                                except IndexError:
1300                                                    year = '??.??.%s' % (dateparts[0])
1301                                            else:
1302                                                year = detail.text
1303                                            doc.append(solr('date', year))
1304                                            #print year
1305                                            if detail.text.startswith('['):
1306                                                #detail.text = detail.text.replace('[', '')
1307                                                #detail.text = detail.text.replace(']', '')
1308                                                #doc.append(solr('fdate', detail.text))
1309                                                doc.append(solr('fdate', detail.text[1:-1]))
1310                                                doc.append(solr('in_print', 'true'))
1311                                                #csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [int(detail.text[1:-1])])
1312                                                csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [[detail.text[1:-1]]])
1313                                            elif DATE_RANGE_RE.match(detail.text):
1314                                                date_range = DATE_RANGE_RE.match(detail.text)
1315                                                doc.append(solr('fdate', date_range.group(1)))
1316                                                #csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [int(date_range.group(1))])
1317                                                csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [[date_range.group(1)]])
1318                                            else:
1319                                                try:
1320                                                    #csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [int(x) for x in detail.text.split('-')])
1321                                                    csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [[x for x in detail.text.split('-')]])
1322                                                except ValueError:
1323                                                    logging.error('DATE: %s in %s' % (detail.text, debug_id))
1324                                                if debug_genre != 'NewspaperArticle':
1325                                                    doc.append(solr('fdate', year[:4]))
1326                                                else:
1327                                                    doc.append(solr('fdate', year[-4:]))
1328                                            dcds_tree.append(stmt('issued', detail.text))
1329                                            dc_list.append(dc('date', detail.text))
1330                                            bibtex_list.append('\tyear = {%s},\n' % year)
1331                                            ris_list.append('Y1  - %s///\n' % year)
1332                                        if detail.tag == '%sdetail' % MODS:
1333                                            if detail.attrib['type'] == 'issue':
1334                                                doc.append(solr('issue', detail[0].text))
1335                                                bibtex_list.append('\tnumber = {%s},\n' % detail[0].text)
1336                                                ris_list.append('IS  - %s\n' % detail[0].text)
1337                                                csl_json.setdefault(guid.text, {}).setdefault('issue', detail[0].text)
1338                                            if detail.attrib['type'] == 'volume':
1339                                                doc.append(solr('host_volume', detail[0].text))
1340                                                bibtex_list.append('\tvolume = {%s},\n' % detail[0].text)
1341                                                ris_list.append('VL  - %s\n' % detail[0].text)
1342                                                csl_json.setdefault(guid.text, {}).setdefault('volume', detail[0].text)
1343                                            if detail.attrib['type'] == 'delivery complement':
1344                                                doc.append(solr('complement_number', detail[0].text))
1345                                        if detail.tag == '%sextent' % MODS:
1346                                            if detail.attrib['unit'] == 'pages':
1347                                                doc.append(solr('pages', detail[0].text))
1348                                                bibtex_list.append('\tpages = {%s},\n' % detail[0].text)
1349                                                dcds_tree.append(stmt('extent', detail[0].text))
1350                                                dc_list.append(dc('format', detail[0].text))
1351                                                csl_json.setdefault(guid.text, {}).setdefault('page', detail[0].text)
1352                                if host.tag == '%srelatedItem' % MODS:
1353                                    if host.attrib['type'] == 'series':
1354                                        for series in host:
1355                                            if series.tag == '%stitleInfo' % MODS:
1356                                                # print get_title(series).decode('utf8')
1357                                                doc.append(solr('series_title', get_title(series)))
1358                                                doc.append(solr('fjtitle', get_title(series)))
1359                                                dcds_tree.append(stmt('isPartOf', get_title(series)))
1360                                                dc_list.append(dc('relation', get_title(series).decode('utf-8')))
1361                                                bibtex_list.append('\tseries = {%s},\n' % umlaut(get_title(series).decode('utf-8')))
1362                                                csl_json.setdefault(guid.text, {}).setdefault('collection-title', get_title(series).decode('utf-8'))
1363                                            if series.tag == '%spart' % MODS:
1364                                                for detail in series:
1365                                                    if detail.tag == '%sdate' % MODS:
1366                                                        #doc.append(solr('date', '%s%s' % (detail.text, '-01-01T00:00:00Z')))
1367                                                        doc.append(solr('date', detail.text))
1368                                                        year = detail.text
1369                                                        #print year
1370                                                        if DATE_RANGE_RE.search(detail.text):
1371                                                            date_range = DATE_RANGE_RE.search(detail.text)
1372                                                            doc.append(solr('fdate', date_range.group(1)))
1373                                                            #csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [int(date_range.group(1))])
1374                                                            csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [[date_range.group(1)]])
1375                                                        else:
1376                                                            if year.startswith('['):
1377                                                                year = year.replace('[', '')
1378                                                                year = year.replace(']', '')
1379                                                                doc.append(solr('in_print', 'true'))
1380                                                            doc.append(solr('fdate', year[1:-1]))
1381                                                            #csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [int(year[1:-1])])
1382                                                            csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [[year[1:-1]]])
1383                                                    if detail.tag == '%sdetail' % MODS:
1384                                                        if detail.attrib['type'] == 'issue':
1385                                                            doc.append(solr('issue', detail[0].text))
1386                                                            csl_json.setdefault(guid.text, {}).setdefault('issue', detail[0].text)
1387                                                        if detail.attrib['type'] == 'volume':
1388                                                            doc.append(solr('series_volume', detail[0].text))
1389                                                            csl_json.setdefault(guid.text, {}).setdefault('volume', detail[0].text)
1390                                                    if detail.tag == '%sextent' % MODS:
1391                                                        if detail.attrib['unit'] == 'pages':
1392                                                            doc.append(solr('pages', detail[0].text))
1393                                                            csl_json.setdefault(guid.text, {}).setdefault('page', detail[0].text)
1394                                if host.tag == '%soriginInfo' % MODS:
1395                                    for info in host:
1396                                        if info.tag == '%spublisher' % MODS:
1397                                            doc.append(solr('publisher', info.text))
1398                                            dcds_tree.append(stmt('publisher', info.text))
1399                                            ris_list.append('PB  - %s\n' % info.text)
1400                                            bibtex_list.append('\tpublisher = {%s},\n' % umlaut(info.text))
1401                                            csl_json.setdefault(guid.text, {}).setdefault('publisher', info.text)
1402                                        if info.tag == '%splace' % MODS:
1403                                            doc.append(solr('place', info[0].text))
1404                                            csl_json.setdefault(guid.text, {}).setdefault('publisher-place', info[0].text)
1405                                        if info.tag == '%spages' % MODS:
1406                                            doc.append(solr('pages', info[0].text))
1407                                            csl_json.setdefault(guid.text, {}).setdefault('page', info[0].text)
1408                                        if info.tag == '%sdateIssued' % MODS:
1409                                            if debug_genre == 'ContributionInLegalCommentary':
1410                                                doc.append(solr('complement_date', info.text))
1411                                            else:
1412                                                if info.text:
1413                                                    # doc.append(solr('date', '%s%s' % (info.text, '-01-01T00:00:00Z')))
1414                                                    doc.append(solr('date', info.text))
1415                                                    year = info.text
1416                                                    #print year
1417                                                    if DATE_RANGE_RE.search(info.text):
1418                                                        date_range = DATE_RANGE_RE.search(info.text)
1419                                                        doc.append(solr('fdate', date_range.group(1)))
1420                                                        #csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [int(date_range.group(1))])
1421                                                        csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [[date_range.group(1)]])
1422                                                    else:
1423                                                        if year.startswith('['):
1424                                                                year = year.replace('[', '')
1425                                                                year = year.replace(']', '')
1426                                                                doc.append(solr('in_print', 'true'))
1427                                                        doc.append(solr('fdate', year[:4]))
1428                                                        #csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [int(x) for x in year.split('-')])
1429                                                        csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [[x for x in year.split('-')]])
1430                        if elem.attrib.get('type') == 'preceding':
1431                            for prec in elem:
1432                                if prec.tag == '%soriginInfo' % MODS:
1433                                    for info in prec:
1434                                        if info.tag == '%sdateIssued' % MODS:
1435                                            if info.text:
1436                                                doc.append(solr('date_other', info.text))
1437                                               
1438                        if elem.attrib.get('type') == 'otherVersion':
1439                            for version in elem:
1440                                if version.tag == '%stitleInfo' % MODS:
1441                                    for title in version:
1442                                        if title.tag == '%stitle' % MODS:
1443                                            if version.attrib.get('type') == 'translated':
1444                                                doc.append(solr('parallel_title', title.text))
1445                        # elif elem.attrib.get('type') == 'constituent':
1446                        #       stellen = []
1447                        #       ids = []
1448                        #       for part in elem:
1449                        #               if part.tag == '%spart' % MODS:
1450                        #                       for extent in part:
1451                        #                               if extent.tag == '%sextent' % MODS:
1452                        #                                       if extent.attrib.get('unit') == 'reference':
1453                        #                                               stellen = extent[0].text.split('; ')
1454                        #                                               # print stellen
1455                        #                               if extent.tag == '%sidentifier' % MODS:
1456                        #                                       ids = extent.text.split('; ')
1457                        #       if len(stellen) == len(ids):
1458                        #               for stelle, pri_id in zip(stellen, ids):
1459                        #                       doc.append(solr('stelle', '%s: http://archeoinf.de/gela/%s' % (stelle, pri_id)))
1460                        #       elif len(stellen) < len(ids):
1461                        #               if stellen:
1462                        #                       # if len(stellen) > 1:
1463                        #                               # print 'stellen', stellen
1464                        #                               # print ids
1465                        #                       pass
1466                        #               else:
1467                        #                       # print 'stellen', stellen
1468                        #                       # print ids
1469                        #                       pass
1470                        #       else:
1471                        #               # print 'stellen', stellen
1472                        #               # print ids
1473                        #               pass
1474                               
1475                        if elem.attrib.get('type') == 'series':
1476                            for series in elem:
1477                                if series.tag == '%stitleInfo' % MODS:
1478                                    # print get_title(series).decode('utf8')
1479                                    doc.append(solr('series_title', get_title(series)))
1480                                    doc.append(solr('fjtitle', get_title(series)))
1481                                    dcds_tree.append(stmt('isPartOf', get_title(series)))
1482                                    dc_list.append(dc('relation', get_title(series).decode('utf-8')))
1483                                    bibtex_list.append('\tseries = {%s},\n' % umlaut(get_title(series).decode('utf-8')))
1484                                    csl_json.setdefault(guid.text, {}).setdefault('collection-title', get_title(series).decode('utf-8'))
1485                                if series.tag == '%spart' % MODS:
1486                                    for detail in series:
1487                                        if detail.tag == '%sdate' % MODS:
1488                                            #doc.append(solr('date', '%s%s' % (detail.text, '-01-01T00:00:00Z')))
1489                                            doc.append(solr('date', detail.text))
1490                                            year = detail.text
1491                                            #print year
1492                                            if DATE_RANGE_RE.search(detail.text):
1493                                                date_range = DATE_RANGE_RE.search(detail.text)
1494                                                doc.append(solr('fdate', date_range.group(1)))
1495                                                #csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [int(date_range.group(1))])
1496                                                csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [[date_range.group(1)]])
1497                                            else:
1498                                                doc.append(solr('fdate', year[:4]))
1499                                                #csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [int(x) for x in year.split('-')])
1500                                                csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [[x for x in year.split('-')]])
1501                                        if detail.tag == '%sdetail' % MODS:
1502                                            if detail.attrib['type'] == 'issue':
1503                                                doc.append(solr('issue', detail[0].text))
1504                                                csl_json.setdefault(guid.text, {}).setdefault('issue', detail[0].text)
1505                                            if detail.attrib['type'] == 'volume':
1506                                                doc.append(solr('series_volume', detail[0].text))
1507                                                csl_json.setdefault(guid.text, {}).setdefault('volume', detail[0].text)
1508                                        if detail.tag == '%sextent' % MODS:
1509                                            if detail.attrib['unit'] == 'pages':
1510                                                doc.append(solr('pages', detail[0].text))
1511                                                csl_json.setdefault(guid.text, {}).setdefault('page', detail[0].text)
1512                                if series.tag == '%soriginInfo' % MODS:
1513                                    for origin in series:
1514                                        if origin.tag == '%sedition' % MODS:
1515                                            doc.append(solr('edition', origin.text))
1516                                            bibtex_list.append('\tedition = {%s},\n' % origin.text)
1517                                            csl_json.setdefault(guid.text, {}).setdefault('edition', origin.text)
1518                                        if origin.tag == '%spublisher' % MODS:
1519                                            doc.append(solr('publisher', origin.text))
1520                                            dcds_tree.append(stmt('publisher', origin.text))
1521                                            bibtex_list.append('\tpublisher = {%s},\n' % umlaut(origin.text))
1522                                            csl_json.setdefault(guid.text, {}).setdefault('publisher', origin.text)
1523                                        if origin.tag == '%splace' % MODS:
1524                                            if debug_genre != 'Patent':
1525                                                doc.append(solr('place', origin[0].text))
1526                                                csl_json.setdefault(guid.text, {}).setdefault('publisher-place', origin[0].text)
1527                                        if origin.tag == '%spages' % MODS:
1528                                            doc.append(solr('pages', origin[0].text))
1529                                            csl_json.setdefault(guid.text, {}).setdefault('page', origin[0].text)
1530                                        if origin.tag == '%sdateIssued' % MODS:
1531                                            doc.append(solr('date', origin.text))
1532                                            #logging.debug('%s in %s' % (info.text, debug_id))
1533                                            if DATE_RANGE_RE.search(info.text):
1534                                                date_range = DATE_RANGE_RE.search(info.text)
1535                                                doc.append(solr('fdate', date_range.group(1)))
1536                                                #csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [int(date_range.group(1))])
1537                                                csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [[date_range.group(1)]])
1538                                            else:
1539                                                doc.append(solr('fdate', origin.text[:4]))
1540                                                #logging.debug('%s in %s' % (origin.text, debug_id))
1541                                            bibtex_list.append('\tyear = {%s},\n' % origin.text)
1542                                            ris_list.append('Y1  - %s///\n' % origin.text)
1543                                            dcds_tree.append(stmt('issued', origin.text))
1544                                            dc_list.append(dc('date', origin.text))
1545                                            #csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [int(x) for x in origin.text.split('-')])
1546                                            csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [[x for x in origin.text.split('-')]])
1547                                        if origin.tag == '%sdateOther' % MODS:
1548                                            doc.append(solr('date_other', origin.text))
1549                    if elem.tag == '%slocation' % MODS:
1550                        if elem.attrib.get('type') == 'isReferencedBy':
1551                                pass
1552                    if elem.tag == '%soriginInfo' % MODS:
1553                        for origin in elem:
1554                            if origin.tag == '%sedition' % MODS:
1555                                doc.append(solr('edition', origin.text))
1556                                bibtex_list.append('\tedition = {%s},\n' % origin.text)
1557                                csl_json.setdefault(guid.text, {}).setdefault('edition', origin.text)
1558                            if origin.tag == '%spublisher' % MODS:
1559                                doc.append(solr('publisher', origin.text))
1560                                dcds_tree.append(stmt('publisher', origin.text))
1561                                bibtex_list.append('\tpublisher = {%s},\n' % umlaut(origin.text))
1562                                csl_json.setdefault(guid.text, {}).setdefault('publisher', origin.text)
1563                            if origin.tag == '%splace' % MODS:
1564                                if debug_genre != 'Patent':
1565                                    doc.append(solr('place', origin[0].text))
1566                                    csl_json.setdefault(guid.text, {}).setdefault('publisher-place', origin[0].text)
1567                                else:
1568                                    di = elem.find('.//%sdateIssued' % MODS)
1569                                    do = elem.find('.//%sdateOther' % MODS)
1570                                    if di != None:
1571                                        #logging.debug('DATE_ISSUED %s' % etree.tostring(elem))
1572                                        doc.append(solr('publikationsland', countrymap.get(origin[0].text)))
1573                                        csl_json.setdefault(guid.text, {}).setdefault('publisher-place', countrymap.get(origin[0].text))
1574                                    if do != None:
1575                                        #logging.debug('DATE_OTHER %s' % etree.tostring(elem))
1576                                        doc.append(solr('anmeldeland', countrymap.get(origin[0].text)))
1577                                    if di == None and do == None:
1578                                        #logging.debug('NO DATE %s' % etree.tostring(elem))
1579                                        doc.append(solr('anmeldeland', countrymap.get(origin[0].text)))
1580                            if origin.tag == '%sdateIssued' % MODS:
1581                                doc.append(solr('date', origin.text))
1582                                #logging.debug('%s in %s' % (info.text, debug_id))
1583                                if DATE_RANGE_RE.search(info.text):
1584                                    date_range = DATE_RANGE_RE.search(info.text)
1585                                    doc.append(solr('fdate', date_range.group(1)))
1586                                    #csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [int(date_range.group(1))])
1587                                    csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [[date_range.group(1)]])
1588                                elif origin.text.startswith('['):
1589                                    doc.append(solr('fdate', origin.text[1:-1]))
1590                                    #csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [int(x) for x in origin.text[1:-1].split('-')])
1591                                    csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [[x for x in origin.text[1:-1].split('-')]])
1592                                    # HERE
1593                                    #logging.debug('%s in %s' % (origin.text, debug_id))
1594                                else:
1595                                    doc.append(solr('fdate', origin.text[:4]))
1596                                    #csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [int(x) for x in origin.text.split('-')])
1597                                    csl_json.setdefault(guid.text, {}).setdefault('issued', {}).setdefault('date-parts', [[x for x in origin.text.split('-')]])
1598                                bibtex_list.append('\tyear = {%s},\n' % origin.text)
1599                                ris_list.append('Y1  - %s///\n' % origin.text)
1600                                dcds_tree.append(stmt('issued', origin.text))
1601                                dc_list.append(dc('date', origin.text))
1602                            if origin.tag == '%sdateOther' % MODS:
1603                                doc.append(solr('date_other', origin.text))
1604                    if elem.tag == '%slocation' % MODS:
1605                        for location in elem:
1606                            #mylocation = ''
1607                            if location.tag == '%sphysicalLocation' % MODS:
1608                                doc.append(solr('isil', 'DE-%s' % location.text.replace('/', '-')))
1609                                doc.append(solr('location', sigelmap.get(location.text, '')))
1610                            if location.tag == '%sshelfLocator' % MODS:
1611                                doc.append(solr('locator', location.text))
1612                            if location.tag == '%surl' % MODS:
1613                                if not location.text.startswith('http://'):
1614                                    logging.error('INVALID URL: %s' % location.text)
1615                                doc.append(solr('url', location.text))
1616                                bibtex_list.append('\tURL = {%s}' % location.text)
1617                                csl_json.setdefault(guid.text, {}).setdefault('URL', location.text)
1618                    if elem.tag == '%slanguage' % MODS:
1619                        for lang in elem:
1620                            if lang.tag == '%slanguageTerm' % MODS:
1621                                try:
1622                                    if lang.attrib['authority'] == 'iso639-2b':
1623                                        lang_hist[lang.text] = lang_hist.setdefault(lang.text, 0) + 1
1624                                        doc.append(solr('language', languageCodes[lang.text]['ger']))
1625                                        dcds_tree.append(stmt('language', languageCodes[lang.text]['ger']))
1626                                        dc_list.append(dc('language', languageCodes[lang.text]['ger']).decode('utf-8'))
1627                                        bibtex_list.append('\tlanguage = {%s},\n' % umlaut(languageCodes[lang.text]['ger'].decode('utf-8')))
1628                                        # RIS hat keine Sprache?
1629                                except KeyError:
1630                                    logging.error('LANGUAGE: %s in %s' % (lang.text, debug_id))
1631                    if elem.tag == '%sabstract' % MODS:
1632                        # lang = NGram('LM_MOD')
1633                        # for i in elem.text:
1634                            # print '%s (%d)' % (i, elem.text.index(i)),
1635                        # print '%s => %s' % (elem.text, lang.classify(elem.text))
1636                        # print
1637
1638#                        if abstract_consent == 'True':
1639#                            doc.append(solr('abstract', elem.text))
1640#                            dc_list.append(dc('description', elem.text))
1641#                            dcds_tree.append(stmt('abstract', elem.text))
1642#                            bibtex_list.append('\tabstract = {%s},\n' % elem.text)
1643#                            ris_list.append('N2  - %s\n' % elem.text)
1644#                        else:
1645                        #logging.debug(etree.tostring(elem))
1646                        doc.append(solr('ro_abstract', elem.text))
1647                        data.remove(elem)
1648                        #logging.debug(etree.tostring(data))
1649#                    if elem.tag == '%sclassification' % MODS:
1650#                        if elem.attrib.get('authority', '') == 'stw':
1651#                            if elem.text != '18012-3': # 'Deutschland' blows up the subject list...
1652#                                stw_ids.append(elem.text)
1653#                            elif elem.attrib.get('authority', '') == 'international patent classification':
1654#                                doc.append(solr('ipc', elem.text))
1655                    if elem.tag == '%sphysicalDescription' % MODS:
1656                        for extent in elem:
1657                            if extent.tag == '%sextent' % MODS:
1658                                doc.append(solr('format', extent.text))
1659                                dcds_tree.append(stmt('format', extent.text))
1660                                dc_list.append(dc('format', extent.text))
1661                            if extent.tag == '%snote' % MODS:
1662                                if extent.attrib.get('displayLabel') == u'Betriebssystem':
1663                                    doc.append(solr('os', extent.attrib.get('displayLabel')))
1664                                elif extent.attrib.get('displayLabel') == u'Technische Details':
1665                                    doc.append(solr('details', extent.attrib.get('displayLabel')))
1666                                elif extent.attrib.get('displayLabel') == u'Lizenztyp':
1667                                    doc.append(solr('licence_type', extent.attrib.get('displayLabel')))
1668                                elif extent.attrib.get('displayLabel') == u'Lizenznummer':
1669                                    doc.append(solr('licence_no', extent.attrib.get('displayLabel')))
1670                                elif extent.attrib.get('displayLabel') == u'Anzahl Bände':
1671                                    doc.append(solr('host_volume', extent.text))
1672                            if extent.tag == '%sform' % MODS:
1673                                if debug_genre == 'Software':
1674                                    doc.append(solr('speichermedium', extent.text))
1675                    if elem.tag == '%srecordInfo' % MODS:
1676                        for info in elem:
1677                            if info.tag == '%srecordContentSource' % MODS:
1678                               pass
1679                            if info.tag == '%srecordCreationDate' % MODS:
1680                                #json_dict.setdefault('recordCreationDate', datetime.datetime.now().isoformat()[:-9] + '00Z') # Citavi ISO-Format abwarten
1681                                #doc.append(solr('recordCreationDate', datetime.datetime.now().isoformat()[:-9] + '00Z')) # Citavi ISO-Format abwarten
1682                                doc.append(solr('recordCreationDate', '%sT00:00:00Z' % info.text))
1683                            if info.tag == '%srecordChangeDate' % MODS:
1684                                #doc.append(solr('recordChangeDate', datetime.datetime.now().isoformat()[:-9] + '00Z')) # Citavi ISO-Format abwarten
1685                                #json_dict.setdefault('recordChangeDate', datetime.datetime.now().isoformat()[:-9] + '00Z') # Citavi ISO-Format abwarten
1686                                doc.append(solr('recordChangeDate', '%sT00:00:00Z' % info.text))
1687                            # json_dict.setdefault('typeOfResource', 'Text')
1688                    if elem.tag == '%sextension' % MODS:
1689                        for bc in elem:
1690                            if bc.tag == '%sbibliographicCitation' % DCTERMS:
1691                                doc.append(solr('bibliographicCitation', bc.text))
1692                                dcds_tree.append(stmt('bibliographicCitation', bc.text))
1693                    if elem.tag == '%stableOfContents' % MODS:
1694                        if elem.attrib.get('%shref' % XLINK):
1695                            doc.append(solr('toc_link', elem.attrib.get('%shref' % XLINK)))
1696                            dcds_tree.append(stmt('tableOfContents', elem.attrib.get('%shref' % XLINK)))
1697                            dc_list.append(dc('description', elem.attrib.get('%shref' % XLINK)))
1698                        if elem.text:
1699                            doc.append(solr('toc_text', elem.text))
1700                            dcds_tree.append(stmt('tableOfContents', elem.text))
1701                            dc_list.append(dc('description', elem.text))
1702                    if elem.tag == '%snote' % MODS:
1703                        if elem.attrib.get('displayLabel') == u'Ansprüche':
1704                            doc.append(solr('ansprueche', elem.text))
1705                        elif elem.attrib.get('displayLabel') == u'Prioritätsdaten':
1706                            doc.append(solr('prio', elem.text))
1707                        if elem.attrib.get('displayLabel') == u'Titelzusätze':
1708                            doc.append(solr('titelzusatz', elem.text.replace('[', '').replace(']', '')))
1709                        try:
1710                            elem.attrib['displayLabel']
1711                        except KeyError:
1712                            doc.append(solr('note', elem.text))
1713
1714
1715                                       
1716                #print etree.tostring(doc)
1717               
1718                if genre:
1719                    try:
1720                        genre = list(genre)
1721                        doc.append(solr('genrel1', GENRE_MAP[genre[0]]))
1722                        doc.append(solr('genrel2', genre[0]))
1723                        ris = 'TY  - %s\n' % RIS_GENRE_MAP[genre[0]]
1724                        #bibtex = '@%s{%s_%s,\n' % (BIBTEX_GENRE_MAP[genre[0]], self.fach.decode('utf-8'), str(record_counter))
1725                        bibtex = '@%s{%s_%s,\n' % (BIBTEX_GENRE_MAP[genre[0]], self.fach.decode('utf-8'), guid.text)
1726                        dcds_tree.append(stmt('type', GENRE_MAP[genre[0]]))
1727                        dc_list.append(dc('type', GENRE_MAP[genre[0]]))
1728                        genre_local = ''
1729                    except KeyError as ke:
1730                        logging.error('GENRE: %s' % ke)
1731
1732                if genre_local:
1733                    try:
1734                        tmp = GENRE_LOCAL_MAP[genre_local]
1735                        doc.append(solr('genrel1', GENRE_MAP[tmp]))
1736                        doc.append(solr('genrel2', tmp))
1737                        ris = 'TY  - %s\n' % RIS_GENRE_LOCAL_MAP[genre_local]
1738                        #bibtex = '@%s{%s_%s,\n' % (BIBTEX_GENRE_LOCAL_MAP[genre_local], self.fach.decode('utf-8'), str(record_counter))
1739                        bibtex = '@%s{%s_%s,\n' % (BIBTEX_GENRE_LOCAL_MAP[genre_local], self.fach.decode('utf-8'), guid.text)
1740                        dcds_tree.append(stmt('type', GENRE_MAP[tmp]))
1741                        dc_list.append(dc('type', GENRE_MAP[tmp]))
1742                    except KeyError, e:
1743                        logging.debug('UNBEKANNTER PUBLIKATIONSTYP: %s' % e)
1744                   
1745                if len(institute) > 0:
1746                    for institut in institute:
1747                        doc.append(solr('institut', institut))
1748
1749
1750#                if stw_ids:
1751#                    #logging.debug(stw_ids)
1752#                    (stw_descriptors, stw_subjects) = sparql(stw_ids)
1753#                    for stw_desc in stw_descriptors:
1754#                        #logging.debug(stw_desc)
1755#                        doc.append(solr('stwdesc', stw_desc))
1756#                        for term in stw_descriptors[stw_desc]:
1757#                            doc.append(solr('stwterm', term))
1758#
1759#                    for stw_subject in stw_subjects:
1760#                        #logging.debug(stw_subject)
1761#                        doc.append(solr('fsubject', stw_subject))
1762
1763                if stw_ids:
1764                    stws_de = set()
1765                    stws_en = set()
1766                    for stw_id in stw_ids:
1767                        tmp_de, tmp_en = _make_stws(self, eval(self.stw_redis.hget('stwid', stw_id)))
1768                        for de in tmp_de:
1769                            stws_de.add(de)
1770                        for en in tmp_en:
1771                            stws_en.add(en)
1772
1773                    stws_de = sorted(list(stws_de))
1774                    for de in stws_de:
1775                        doc.append(solr('stwterm_de', de))
1776                        doc.append(solr('fsubject', de))
1777
1778                    stws_en = sorted(list(stws_en))
1779                    for en in stws_en:
1780                        doc.append(solr('stwterm_en', en))
1781                        doc.append(solr('fsubject', en))
1782                       
1783
1784                if issn:
1785                    try:
1786                        if jcr.get(year).get(issn):
1787                            doc.append(solr('jcr', jcr.get(year).get(issn)))
1788                    except AttributeError:
1789                        pass
1790                               
1791                if bib_authors:
1792                    if len(bib_authors) > 1:
1793                        bibtex += '\tauthor = {%s},\n' % ' and '.join(bib_authors)
1794                    else:
1795                        bibtex += '\tauthor = {%s},\n' % bib_authors[0]
1796                if bib_editors:
1797                    if len(bib_editors) > 1:
1798                        bibtex += '\teditor = {%s},\n' % ' and '.join(bib_editors)
1799                    else:
1800                        bibtex += '\teditor = {%s},\n' % bib_editors[0]
1801                if keywords:
1802                    if len(keywords) > 1:
1803                        bibtex += '\tkeywords = {%s},\n' % '; '.join(keywords)
1804                    else:
1805                        bibtex += '\tkeywords = {%s},\n' % keywords[0]
1806                bibtex += ''.join(bibtex_list)
1807                bibtex += '}'
1808                ris += ''.join(ris_list)
1809                ris += 'ER - '
1810
1811                doc.append(solr('mods', xml2cdata(data)))
1812                doc.append(solr('bibtex', bibtex))
1813                doc.append(solr('ris', ris))
1814                doc.append(solr('json', json.dumps(csl_json)))
1815                doc.append(solr('dc', dc2cdata(escape('\n'.join(dc_list))).encode('utf-8')))
1816                doc.append(solr('dcds', xml2cdata(dcds_tree)))
1817                doc.append(solr('peer_reviewed', pr))
1818                       
1819                index.append(doc)
1820                record_counter += 1
1821        myrecords = record_counter  - 1
1822        logging.info('NUMBER OF RECORDS: %d' % myrecords)
1823        #print lang_hist
1824        if self.debug == True:
1825            logging.info(etree.tostring(index, pretty_print=True))
1826        return index
1827               
1828def main():
1829    #commit()
1830    #feed('20090506-gela.xml')
1831    #commit()
1832    #convert('20090520-gela.xml', 'Gela')
1833    #convert('20090520-bergemann.xml', 'Bergemann')
1834    #feed('20090526-bergemann.xml', 'Bergemann')
1835    #feed('20090520-gela.xml', 'Gela')
1836    #convert('MODS_Export.xml', 'Dummy')
1837    c = Collection(filename='/home/hagenbruch/dev/bibliographie-index/mods-xml/physik-astronomie.xml')
1838    c.convert()
1839
1840
1841if __name__ == '__main__':
1842    main()
Note: See TracBrowser for help on using the repository browser.