Mercurial > hg > MetaDataProvider
comparison MetaDataFolder.py @ 28:40508e672841
richer metadata for bib. still not sufficient though.
author | casties |
---|---|
date | Mon, 20 Aug 2012 20:14:45 +0200 |
parents | a0d273542509 |
children | b3428e281ee2 |
comparison
equal
deleted
inserted
replaced
27:a0d273542509 | 28:40508e672841 |
---|---|
18 if underscore: | 18 if underscore: |
19 bt = bt.replace('_', '-') | 19 bt = bt.replace('_', '-') |
20 | 20 |
21 return bt | 21 return bt |
22 | 22 |
23 def OLDgetBibdataFromDom(dom): | |
24 """returns dict with all elements from bib-tag""" | |
25 bibinfo = {} | |
26 bib = dom.find(".//meta/bib") | |
27 if bib is not None: | |
28 # put type in @type | |
29 type = bib.get('type') | |
30 bibinfo['@type'] = normalizeBibField(type) | |
31 # put all subelements in dict | |
32 for e in bib: | |
33 bibinfo[normalizeBibField(e.tag)] = getText(e) | |
34 | |
35 return bibinfo | |
36 | |
37 def toString(list): | 23 def toString(list): |
38 ret=u"" | 24 ret=u"" |
39 | 25 |
40 for l in list: | 26 for l in list: |
41 ret+=unicode(l) | 27 ret+=unicode(l) |
42 | 28 |
43 return ret | 29 return ret |
44 | |
45 def dcMetaDataToHash(mdSet): | |
46 """Convenience Function for creates a hash from the DCMetadataset | |
47 @param mdSet: String containing DCMetadata informmation | |
48 currently only in the format getDCMetadata of this module""" | |
49 | |
50 NSS = { | |
51 'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', | |
52 'dc': 'http://dublincore.org/documents/dcmi-namespace/', | |
53 'owl':"http://www.w3.org/2002/07/owl#", | |
54 'rdfs':"http://www.w3.org/2000/01/rdf-schema#" | |
55 } | |
56 ret={} | |
57 import StringIO | |
58 import sys | |
59 buffer= StringIO.StringIO(mdSet) | |
60 try: | |
61 md = amara.parse(buffer,prefixes=NSS) | |
62 except: | |
63 logging.error("Error: %s (%s)"%(sys.exc_info()[0],sys.exc_info()[1])) | |
64 | |
65 ret["error"]=mdSet | |
66 return ret | |
67 | |
68 ret["title"] = toString(md.xml_xpath("//dc:title/text()")) | |
69 ret["creator"] =toString(md.xml_xpath("//dc:creator/text()")) | |
70 ret["date"] = toString(md.xml_xpath("//dc:date/text()")) | |
71 | |
72 return ret | |
73 | |
74 | 30 |
75 class MetaDataFolder(Folder): | 31 class MetaDataFolder(Folder): |
76 """provides methods for managing complete metadata structures""" | 32 """provides methods for managing complete metadata structures""" |
77 meta_type='MetaDataFolder' | 33 meta_type='MetaDataFolder' |
78 security=ClassSecurityInfo() | 34 security=ClassSecurityInfo() |
229 return dri.get('@text', None) | 185 return dri.get('@text', None) |
230 | 186 |
231 return None | 187 return None |
232 | 188 |
233 | 189 |
234 def getBibData(self, path=None, dom=None): | 190 def getBibData(self, path=None, dom=None, all=False, recursive=0): |
235 """returns contents of bib tag as dict""" | 191 """returns contents of bib tag as dict""" |
236 return self.resource.meta.bib.getData(path=path, dom=dom) | 192 return self.resource.meta.bib.getData(path=path, dom=dom, all=all, recursive=recursive) |
237 | 193 |
238 def getBibMapping(self, bibtype): | 194 def getBibMapping(self, bibtype): |
239 """returns MetaDataMapping for resource/meta/bib of bibtype""" | 195 """returns MetaDataMapping for resource/meta/bib of bibtype""" |
240 return self.resource.meta.bib.getMapping(bibtype) | 196 return self.resource.meta.bib.getMapping(bibtype) |
241 | 197 |
249 | 205 |
250 def getDCMappedData(self, bibdata): | 206 def getDCMappedData(self, bibdata): |
251 """returns dict with DC keys and data from bibdata""" | 207 """returns dict with DC keys and data from bibdata""" |
252 return self.resource.meta.bib.getDCMappedData(bibdata) | 208 return self.resource.meta.bib.getDCMappedData(bibdata) |
253 | 209 |
254 def getBibFormattedMetaData(self, path=None, dom=None, bibdata=None): | 210 def getBibFormattedMetaData(self, path=None, dom=None, bibdata=None, bibxdata=None): |
255 """get the metadafrom server""" | 211 """get the metadafrom server""" |
256 logging.debug("getBibFormattedMetaData(path=%s)"%path) | 212 logging.debug("getBibFormattedMetaData(path=%s)"%path) |
257 return self.resource.meta.bib.getFormatted('metadata_template', path=path, dom=dom, data=bibdata) | 213 return self.resource.meta.bib.getFormatted('metadata_template', path=path, dom=dom, data=bibdata, xdata=bibxdata) |
258 | 214 |
259 def getBibFormattedMetaDataExtended(self,path=None, dom=None, bibdata=None): | 215 def getBibFormattedMetaDataExtended(self,path=None, dom=None, bibdata=None, bibxdata=None): |
260 """get the metadafrom server""" | 216 """get the metadafrom server""" |
261 logging.debug("getBibFormattedMetaDataExtended(path=%s)"%path) | 217 logging.debug("getBibFormattedMetaDataExtended(path=%s)"%path) |
262 return self.resource.meta.bib.getFormatted('metadata_extended_template', path=path, dom=dom, data=bibdata, allFields=True) | 218 return self.resource.meta.bib.getFormatted('metadata_extended_template', path=path, dom=dom, data=bibdata, xdata=bibxdata, allFields=True) |
263 | 219 |
264 def getBibFormattedLabel(self,path=None, dom=None, bibdata=None): | 220 def getBibFormattedLabel(self,path=None, dom=None, bibdata=None): |
265 """get the metadafrom server""" | 221 """get the metadafrom server""" |
266 logging.debug("getBibFormattedLabel(%s)"%path) | 222 logging.debug("getBibFormattedLabel(%s)"%path) |
267 return self.resource.meta.bib.getFormatted('label_template', path=path, dom=dom, data=bibdata) | 223 return self.resource.meta.bib.getFormatted('label_template', path=path, dom=dom, data=bibdata) |
270 getFormattedMetaData = getBibFormattedMetaData | 226 getFormattedMetaData = getBibFormattedMetaData |
271 getFormattedMetaDataShort = getBibFormattedMetaData | 227 getFormattedMetaDataShort = getBibFormattedMetaData |
272 getFormattedMetaDataExtended = getBibFormattedMetaDataExtended | 228 getFormattedMetaDataExtended = getBibFormattedMetaDataExtended |
273 getFormattedLabel = getBibFormattedLabel | 229 getFormattedLabel = getBibFormattedLabel |
274 | 230 |
275 | 231 |
276 def OLDgetDCFormatted(self,path): | |
277 """get the metadata as dc set""" | |
278 logging.debug("getDCFormatted(path=%s)"%path) | |
279 namespace={ 'mpiwg': "http://www.mpiwg-berlin.mpg.de/ns/mpiwg"} | |
280 namespaceUsed=False | |
281 | |
282 md = self.getMDFromPathOrUrl(path) | |
283 logging.debug("MD in XML"+md) | |
284 im = amara.parse(md, prefixes=namespace) | |
285 | |
286 typePaths=im.xml_xpath('//bib/@type') | |
287 archimedes=False | |
288 | |
289 if len(typePaths)<1: | |
290 typePaths=im.xml_xpath('//meta/archimedes') # sinderfall fuer veraltete index.meta files vom typ archimedes | |
291 if len(typePaths)>0: | |
292 type = "archimedes" | |
293 archimedes=True | |
294 else: | |
295 typePaths=im.xml_xpath('//mpiwg:bib/@type') | |
296 if len(typePaths)<1: | |
297 return "" | |
298 else: | |
299 namespaceUsed=True | |
300 | |
301 type=unicode(typePaths[0]) | |
302 else: | |
303 type=unicode(typePaths[0]) | |
304 logging.info("got type:"+type) | |
305 try: | |
306 mapping=getattr(self.main.meta.bib,type.lower(),None) | |
307 except: | |
308 logging.error("getMetaDataFromServer no mapping for type: %s"%type) | |
309 return "" | |
310 | |
311 try: | |
312 dcMapping=getattr(self.main.meta.bib,"dc",None) | |
313 except: | |
314 logging.error("getMetaDataFromServer no dc in meta/bib") | |
315 return "" | |
316 | |
317 mds=mapping.generateMappingHash() # Hole das Mapping generisches Feld --> Feld im entsprechenden Typ | |
318 dcMds=dcMapping.generateMappingHash() | |
319 | |
320 mdHash=[] | |
321 logging.debug("Value: %s"%repr(mds)) | |
322 | |
323 for key,valueTriple in mds.items(): | |
324 value=valueTriple[0] | |
325 logging.debug("Value: %s"%repr(value)) | |
326 logging.debug("Key: %s"%repr(key)) | |
327 if value!="": | |
328 if not archimedes: | |
329 if namespaceUsed: | |
330 try: | |
331 v = im.xml_xpath('//mpiwg:bib/mpiwg:%s/text()'%value) | |
332 except: | |
333 logging.error('cannot do: //mpiwg:bib/mpiwg:%s/text()'%value) | |
334 else: | |
335 v = im.xml_xpath('//bib/%s/text()'%value) | |
336 else: | |
337 v = im.xml_xpath('//archimedes/%s/text()'%value) | |
338 if len(v) > 0: | |
339 dc=dcMds[key][0] | |
340 | |
341 if (dc !="") and (value !=""): | |
342 logging.debug("%s--> : %s"%(repr(value),dc)) | |
343 mdHash.append([dc,unicode(v[0])]) | |
344 | |
345 ret="""<bib xmlns:dc="http://dublincore.org/documents/dcmi-namespace/"> """ | |
346 ret+="<dc:type>%s</dc:type>"%type | |
347 for md in mdHash: | |
348 | |
349 ret+="""<dc:%s>%s</dc:%s>"""%(md[0],xml.sax.saxutils.escape(md[1]),md[0]) | |
350 ret+="</bib>" | |
351 return ret | |
352 | |
353 | |
354 changeMetaDataFolderForm = PageTemplateFile('zpt/changeMetaDataFolder',globals()) | 232 changeMetaDataFolderForm = PageTemplateFile('zpt/changeMetaDataFolder',globals()) |
355 | 233 |
356 security.declarePublic('changeMetaDataFolder') | 234 security.declarePublic('changeMetaDataFolder') |
357 def changeMetaDataFolder(self,title,metaDataServerUrl,RESPONSE=None): | 235 def changeMetaDataFolder(self,title,metaDataServerUrl,RESPONSE=None): |
358 """Change MetaDataFolder""" | 236 """Change MetaDataFolder""" |