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""" |
