Mercurial > hg > MetaDataProvider
annotate MetaDataFolder.py @ 27:a0d273542509
better DRI handling.
| author | casties |
|---|---|
| date | Wed, 15 Aug 2012 17:07:37 +0200 |
| parents | a19575be96e8 |
| children | 40508e672841 |
| rev | line source |
|---|---|
| 4 | 1 from OFS.Folder import Folder |
| 2 from Products.PageTemplates.PageTemplateFile import PageTemplateFile | |
| 3 from Globals import package_home | |
| 4 from AccessControl import ClassSecurityInfo | |
| 5 import os.path | |
| 9 | 6 import urlparse |
| 4 | 7 import logging |
| 8 | |
| 12 | 9 import xml.etree.ElementTree as ET |
| 10 | |
| 4 | 11 from MetaDataMapping import MetaDataMapping |
| 12 from MetaData import MetaData | |
| 12 | 13 from SrvTxtUtils import getHttpData, getText |
| 4 | 14 |
| 15 def normalizeBibField(bt, underscore=True): | |
| 16 """returns normalised bib type for looking up mappings""" | |
| 17 bt = bt.strip().replace(' ', '-').lower() | |
| 18 if underscore: | |
| 19 bt = bt.replace('_', '-') | |
| 20 | |
| 21 return bt | |
| 22 | |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
23 def OLDgetBibdataFromDom(dom): |
| 4 | 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 | |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
37 def toString(list): |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
38 ret=u"" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
39 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
40 for l in list: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
41 ret+=unicode(l) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
42 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
43 return ret |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
44 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
45 def dcMetaDataToHash(mdSet): |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
46 """Convenience Function for creates a hash from the DCMetadataset |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
47 @param mdSet: String containing DCMetadata informmation |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
48 currently only in the format getDCMetadata of this module""" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
49 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
50 NSS = { |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
51 'rdf': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
52 'dc': 'http://dublincore.org/documents/dcmi-namespace/', |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
53 'owl':"http://www.w3.org/2002/07/owl#", |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
54 'rdfs':"http://www.w3.org/2000/01/rdf-schema#" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
55 } |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
56 ret={} |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
57 import StringIO |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
58 import sys |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
59 buffer= StringIO.StringIO(mdSet) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
60 try: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
61 md = amara.parse(buffer,prefixes=NSS) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
62 except: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
63 logging.error("Error: %s (%s)"%(sys.exc_info()[0],sys.exc_info()[1])) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
64 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
65 ret["error"]=mdSet |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
66 return ret |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
67 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
68 ret["title"] = toString(md.xml_xpath("//dc:title/text()")) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
69 ret["creator"] =toString(md.xml_xpath("//dc:creator/text()")) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
70 ret["date"] = toString(md.xml_xpath("//dc:date/text()")) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
71 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
72 return ret |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
73 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
74 |
| 4 | 75 class MetaDataFolder(Folder): |
| 76 """provides methods for managing complete metadata structures""" | |
| 77 meta_type='MetaDataFolder' | |
| 78 security=ClassSecurityInfo() | |
| 79 manage_options = Folder.manage_options+( | |
| 5 | 80 {'label':'Main Config','action':'changeMetaDataFolderForm'}, |
| 4 | 81 ) |
| 82 | |
| 12 | 83 metaDataServerUrl = "http://digilib.mpiwg-berlin.mpg.de/digitallibrary/servlet/Texter?fn=%s" |
| 84 """URL of metadata server. %s replaced by file path.""" | |
| 85 | |
| 86 def __init__(self,id,title='',metaDataServerUrl=None): | |
| 4 | 87 """initialize a new instance""" |
| 88 self.id = id | |
| 89 self.title = title | |
| 12 | 90 if metaDataServerUrl: |
| 91 self.metaDataServerUrl = metaDataServerUrl | |
| 4 | 92 |
| 93 | |
| 94 def getMDFromPathOrUrl(self,path): | |
| 10 | 95 """returns contents of metadata file from server as text""" |
| 96 if not path: | |
| 97 logging.error("getMDFromPathOrUrl: empty path!") | |
| 12 | 98 return None |
| 10 | 99 |
| 4 | 100 parsedurl = urlparse.urlparse(path) |
| 101 if parsedurl[0] != "": | |
| 102 # has schema (e.g. http) | |
| 103 url=path | |
| 104 else: | |
| 105 # path only | |
| 8 | 106 path = path.replace('/mpiwg/online/', '') |
| 4 | 107 if path.endswith("index.meta"): |
| 8 | 108 url = self.metaDataServerUrl%path |
| 4 | 109 else: |
| 8 | 110 url = os.path.join(self.metaDataServerUrl%path,'index.meta') |
| 4 | 111 |
|
23
5ed16f971297
getDomFromPathOrUrl does not throw exception but returns None.
casties
parents:
20
diff
changeset
|
112 try: |
|
5ed16f971297
getDomFromPathOrUrl does not throw exception but returns None.
casties
parents:
20
diff
changeset
|
113 md = getHttpData(url) |
|
5ed16f971297
getDomFromPathOrUrl does not throw exception but returns None.
casties
parents:
20
diff
changeset
|
114 return md |
|
5ed16f971297
getDomFromPathOrUrl does not throw exception but returns None.
casties
parents:
20
diff
changeset
|
115 |
|
5ed16f971297
getDomFromPathOrUrl does not throw exception but returns None.
casties
parents:
20
diff
changeset
|
116 except: |
|
5ed16f971297
getDomFromPathOrUrl does not throw exception but returns None.
casties
parents:
20
diff
changeset
|
117 logging.error("getMDFromPathOrUrl: unable to get data!") |
|
5ed16f971297
getDomFromPathOrUrl does not throw exception but returns None.
casties
parents:
20
diff
changeset
|
118 |
|
5ed16f971297
getDomFromPathOrUrl does not throw exception but returns None.
casties
parents:
20
diff
changeset
|
119 return None |
| 4 | 120 |
| 12 | 121 def getDomFromPathOrUrl(self, path): |
| 122 """returns DOM of metadata file at given path""" | |
| 123 dom = None | |
| 124 data = self.getMDFromPathOrUrl(path) | |
| 125 if data: | |
| 126 dom = ET.fromstring(data) | |
| 127 | |
| 128 return dom | |
| 129 | |
| 14 | 130 def getXmlPathObj(self, xmlpath): |
| 131 """returns object at xmlpath""" | |
| 9 | 132 # make xmlpath relative for Zope |
| 133 if xmlpath[0] == '/': | |
| 134 xmlpath = xmlpath[1:] | |
| 135 | |
| 14 | 136 obj = self.restrictedTraverse(xmlpath, None) |
| 137 return obj | |
| 138 | |
| 17 | 139 def getXmlPathData(self, xmlpath, path=None, dom=None, recursive=0, all=False, allText=False): |
| 14 | 140 """returns contents of element at xmlpath as dict""" |
| 141 logging.error("getXmlPathData(%s)"%xmlpath) | |
| 142 mdObj = self.getXmlPathObj(xmlpath) | |
| 9 | 143 if mdObj is not None: |
| 17 | 144 return mdObj.getData(path=path, dom=dom, recursive=recursive, all=all, allText=allText) |
| 9 | 145 else: |
| 27 | 146 logging.error("getXmlPathData: MetaData object for '%s' not found!"%xmlpath) |
| 9 | 147 return None |
| 148 | |
| 17 | 149 def getXmlPathFormatted(self, xmlpath, template, path=None, dom=None, data=None, allFields=False, recursive=0, all=False, allText=False): |
| 14 | 150 """returns contents of element at xmlpath as dict""" |
| 151 logging.error("getXmlPathFormatted(xmlpath=%s, template=%s)"%(xmlpath,template)) | |
| 152 mdObj = self.getXmlPathObj(xmlpath) | |
| 153 if mdObj is not None: | |
| 154 if data is None: | |
| 17 | 155 data = mdObj.getData(path=path, dom=dom, recursive=recursive, all=all, allText=allText) |
| 14 | 156 |
| 157 if data is None: | |
| 158 return '' | |
| 159 | |
| 160 fmt = '' | |
| 15 | 161 if all: |
| 14 | 162 # data is list of elements |
| 163 for d in data: | |
| 164 # concatenate formatted strings | |
| 165 fmt += mdObj.getFormatted(template, path=path, dom=dom, data=d, allFields=allFields) + '\n' | |
| 166 | |
| 167 else: | |
| 168 fmt = mdObj.getFormatted(template, path=path, dom=dom, data=data, allFields=allFields) | |
| 169 | |
| 170 return fmt | |
| 171 | |
| 172 else: | |
| 27 | 173 logging.error("getXmlPathFormatted: MetaData object for '%s' not found!"%xmlpath) |
| 14 | 174 return '' |
| 175 | |
| 12 | 176 def getResourceData(self, path=None, dom=None): |
| 177 """returns contents of resource tag as dict""" | |
| 178 return self.getXmlPathData('resource', path=path, dom=dom) | |
| 179 | |
| 8 | 180 def getTexttoolData(self, path=None, dom=None): |
| 181 """returns contents of texttool tag as dict""" | |
| 9 | 182 return self.getXmlPathData('resource/meta/texttool', path=path, dom=dom) |
| 8 | 183 |
| 12 | 184 def getAccessData(self, path=None, dom=None): |
| 185 """returns contents of access tag as dict""" | |
| 186 return self.getXmlPathData('resource/meta/access-conditions/access', path=path, dom=dom) | |
| 187 | |
| 15 | 188 def getAttributionData(self, path=None, dom=None, all=True): |
| 14 | 189 """returns contents of attribution tag as dict""" |
| 15 | 190 return self.getXmlPathData('resource/meta/access-conditions/attribution', path=path, dom=dom, all=all) |
| 14 | 191 |
| 15 | 192 def getAttributionFormatted(self, template, path=None, dom=None, data=None, all=True): |
| 14 | 193 """returns formatted contents of access tag""" |
| 15 | 194 return self.getXmlPathFormatted('resource/meta/access-conditions/attribution', template, path=path, dom=dom, data=data, all=all) |
| 14 | 195 |
| 17 | 196 def getCopyrightData(self, path=None, dom=None, recursive=1, all=True): |
| 14 | 197 """returns contents of copyright tag as dict""" |
| 18 | 198 # information is two tags deep - recursive=1 |
| 17 | 199 return self.getXmlPathData('resource/meta/access-conditions/copyright', path=path, dom=dom, recursive=recursive, all=all) |
| 14 | 200 |
| 18 | 201 def getCopyrightFormatted(self, template, path=None, dom=None, data=None, recursive=1, all=True): |
| 14 | 202 """returns formatted contents of access tag""" |
| 18 | 203 # information is two tags deep - recursive=1 |
| 204 return self.getXmlPathFormatted('resource/meta/access-conditions/copyright', template, path=path, dom=dom, data=data, recursive=recursive, all=all) | |
| 14 | 205 |
| 20 | 206 def getContextData(self, path=None, dom=None, all=True): |
| 207 """returns contents of context tag as dict""" | |
| 208 # information is two tags deep - recursive=1 | |
| 209 return self.getXmlPathData('resource/meta/context', path=path, dom=dom, all=all) | |
| 210 | |
| 211 | |
| 26 | 212 def getDRI(self, path=None, dom=None, type="escidoc"): |
| 24 | 213 """returns the DRI of the document""" |
| 26 | 214 dris = self.getXmlPathData('resource/meta/dri', path=path, dom=dom, all=True) |
| 27 | 215 #logging.debug("getDRI: dris=%s"%repr(dris)) |
| 26 | 216 if dris is None: |
| 217 return None | |
| 218 | |
| 219 for dri in dris: | |
| 27 | 220 #logging.debug("getDRI: dri=%s"%dri) |
| 221 if type is None: | |
| 222 # no type -- take the first one | |
| 223 return dri.get('@text', None) | |
| 224 | |
| 225 # use element with matching @type | |
| 26 | 226 att = dri.get('@attr', None) |
| 227 if att is not None: | |
| 228 if (att.get('type', None) == type): | |
| 229 return dri.get('@text', None) | |
| 230 | |
| 231 return None | |
| 27 | 232 |
| 24 | 233 |
| 9 | 234 def getBibData(self, path=None, dom=None): |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
235 """returns contents of bib tag as dict""" |
| 8 | 236 return self.resource.meta.bib.getData(path=path, dom=dom) |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
237 |
| 4 | 238 def getBibMapping(self, bibtype): |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
239 """returns MetaDataMapping for resource/meta/bib of bibtype""" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
240 return self.resource.meta.bib.getMapping(bibtype) |
| 4 | 241 |
| 242 def getBibFields(self, bibdata): | |
| 243 """returns dict with metadata description for bibdata""" | |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
244 return self.resource.meta.bib.getMapFields(bibdata) |
| 4 | 245 |
| 246 def getBibMappedData(self, bibdata, allFields=False): | |
| 247 """returns dict with metadata descriptions and data for bibdata""" | |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
248 return self.resource.meta.bib.getMappedData(bibdata, allFields=allFields) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
249 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
250 def getDCMappedData(self, bibdata): |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
251 """returns dict with DC keys and data from bibdata""" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
252 return self.resource.meta.bib.getDCMappedData(bibdata) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
253 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
254 def getBibFormattedMetaData(self, path=None, dom=None, bibdata=None): |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
255 """get the metadafrom server""" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
256 logging.debug("getBibFormattedMetaData(path=%s)"%path) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
257 return self.resource.meta.bib.getFormatted('metadata_template', path=path, dom=dom, data=bibdata) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
258 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
259 def getBibFormattedMetaDataExtended(self,path=None, dom=None, bibdata=None): |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
260 """get the metadafrom server""" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
261 logging.debug("getBibFormattedMetaDataExtended(path=%s)"%path) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
262 return self.resource.meta.bib.getFormatted('metadata_extended_template', path=path, dom=dom, data=bibdata, allFields=True) |
| 4 | 263 |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
264 def getBibFormattedLabel(self,path=None, dom=None, bibdata=None): |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
265 """get the metadafrom server""" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
266 logging.debug("getBibFormattedLabel(%s)"%path) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
267 return self.resource.meta.bib.getFormatted('label_template', path=path, dom=dom, data=bibdata) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
268 |
| 8 | 269 # compatibility |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
270 getFormattedMetaData = getBibFormattedMetaData |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
271 getFormattedMetaDataShort = getBibFormattedMetaData |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
272 getFormattedMetaDataExtended = getBibFormattedMetaDataExtended |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
273 getFormattedLabel = getBibFormattedLabel |
| 8 | 274 |
| 4 | 275 |
| 11 | 276 def OLDgetDCFormatted(self,path): |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
277 """get the metadata as dc set""" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
278 logging.debug("getDCFormatted(path=%s)"%path) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
279 namespace={ 'mpiwg': "http://www.mpiwg-berlin.mpg.de/ns/mpiwg"} |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
280 namespaceUsed=False |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
281 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
282 md = self.getMDFromPathOrUrl(path) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
283 logging.debug("MD in XML"+md) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
284 im = amara.parse(md, prefixes=namespace) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
285 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
286 typePaths=im.xml_xpath('//bib/@type') |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
287 archimedes=False |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
288 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
289 if len(typePaths)<1: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
290 typePaths=im.xml_xpath('//meta/archimedes') # sinderfall fuer veraltete index.meta files vom typ archimedes |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
291 if len(typePaths)>0: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
292 type = "archimedes" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
293 archimedes=True |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
294 else: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
295 typePaths=im.xml_xpath('//mpiwg:bib/@type') |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
296 if len(typePaths)<1: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
297 return "" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
298 else: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
299 namespaceUsed=True |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
300 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
301 type=unicode(typePaths[0]) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
302 else: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
303 type=unicode(typePaths[0]) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
304 logging.info("got type:"+type) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
305 try: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
306 mapping=getattr(self.main.meta.bib,type.lower(),None) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
307 except: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
308 logging.error("getMetaDataFromServer no mapping for type: %s"%type) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
309 return "" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
310 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
311 try: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
312 dcMapping=getattr(self.main.meta.bib,"dc",None) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
313 except: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
314 logging.error("getMetaDataFromServer no dc in meta/bib") |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
315 return "" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
316 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
317 mds=mapping.generateMappingHash() # Hole das Mapping generisches Feld --> Feld im entsprechenden Typ |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
318 dcMds=dcMapping.generateMappingHash() |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
319 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
320 mdHash=[] |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
321 logging.debug("Value: %s"%repr(mds)) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
322 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
323 for key,valueTriple in mds.items(): |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
324 value=valueTriple[0] |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
325 logging.debug("Value: %s"%repr(value)) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
326 logging.debug("Key: %s"%repr(key)) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
327 if value!="": |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
328 if not archimedes: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
329 if namespaceUsed: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
330 try: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
331 v = im.xml_xpath('//mpiwg:bib/mpiwg:%s/text()'%value) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
332 except: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
333 logging.error('cannot do: //mpiwg:bib/mpiwg:%s/text()'%value) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
334 else: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
335 v = im.xml_xpath('//bib/%s/text()'%value) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
336 else: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
337 v = im.xml_xpath('//archimedes/%s/text()'%value) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
338 if len(v) > 0: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
339 dc=dcMds[key][0] |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
340 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
341 if (dc !="") and (value !=""): |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
342 logging.debug("%s--> : %s"%(repr(value),dc)) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
343 mdHash.append([dc,unicode(v[0])]) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
344 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
345 ret="""<bib xmlns:dc="http://dublincore.org/documents/dcmi-namespace/"> """ |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
346 ret+="<dc:type>%s</dc:type>"%type |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
347 for md in mdHash: |
| 4 | 348 |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
349 ret+="""<dc:%s>%s</dc:%s>"""%(md[0],xml.sax.saxutils.escape(md[1]),md[0]) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
350 ret+="</bib>" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
351 return ret |
| 4 | 352 |
| 353 | |
| 354 changeMetaDataFolderForm = PageTemplateFile('zpt/changeMetaDataFolder',globals()) | |
| 355 | |
| 356 security.declarePublic('changeMetaDataFolder') | |
| 357 def changeMetaDataFolder(self,title,metaDataServerUrl,RESPONSE=None): | |
| 358 """Change MetaDataFolder""" | |
| 359 self.title = title | |
| 360 self.metaDataServerUrl=metaDataServerUrl | |
| 361 if RESPONSE is not None: | |
| 362 RESPONSE.redirect('manage_main') | |
| 363 | |
| 364 | |
| 9 | 365 def manage_addMetaDataFolderForm(self): |
| 366 """add MetaDataFolder form""" | |
| 367 pt = PageTemplateFile('zpt/addMetadataFolderForm',globals()).__of__(self) | |
| 368 return pt() | |
| 4 | 369 |
| 370 def manage_addMetaDataFolder(self,id,title,RESPONSE=None): | |
| 371 """a MetaDataFolder objekt""" | |
| 372 newObj=MetaDataFolder(id,title) | |
| 373 self.Destination()._setObject(id,newObj) | |
| 374 if RESPONSE is not None: | |
| 375 RESPONSE.redirect('manage_main') | |
| 376 |
