Mercurial > hg > MetaDataProvider
annotate MetaDataFolder.py @ 10:68bc459c9f59
getmd handles empty url
| author | casties |
|---|---|
| date | Fri, 29 Jul 2011 12:09:33 +0200 |
| parents | eeaad777d3d7 |
| children | a29665fa9c62 |
| 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 | |
| 9 from MetaDataMapping import MetaDataMapping | |
| 10 from MetaData import MetaData | |
| 11 | |
| 12 def normalizeBibField(bt, underscore=True): | |
| 13 """returns normalised bib type for looking up mappings""" | |
| 14 bt = bt.strip().replace(' ', '-').lower() | |
| 15 if underscore: | |
| 16 bt = bt.replace('_', '-') | |
| 17 | |
| 18 return bt | |
| 19 | |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
20 def OLDgetBibdataFromDom(dom): |
| 4 | 21 """returns dict with all elements from bib-tag""" |
| 22 bibinfo = {} | |
| 23 bib = dom.find(".//meta/bib") | |
| 24 if bib is not None: | |
| 25 # put type in @type | |
| 26 type = bib.get('type') | |
| 27 bibinfo['@type'] = normalizeBibField(type) | |
| 28 # put all subelements in dict | |
| 29 for e in bib: | |
| 30 bibinfo[normalizeBibField(e.tag)] = getText(e) | |
| 31 | |
| 32 return bibinfo | |
| 33 | |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
34 def toString(list): |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
35 ret=u"" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
36 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
37 for l in list: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
38 ret+=unicode(l) |
|
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 return ret |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
41 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
42 def dcMetaDataToHash(mdSet): |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
43 """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
|
44 @param mdSet: String containing DCMetadata informmation |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
45 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
|
46 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
47 NSS = { |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
48 '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
|
49 'dc': 'http://dublincore.org/documents/dcmi-namespace/', |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
50 'owl':"http://www.w3.org/2002/07/owl#", |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
51 '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
|
52 } |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
53 ret={} |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
54 import StringIO |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
55 import sys |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
56 buffer= StringIO.StringIO(mdSet) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
57 try: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
58 md = amara.parse(buffer,prefixes=NSS) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
59 except: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
60 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
|
61 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
62 ret["error"]=mdSet |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
63 return ret |
|
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["title"] = toString(md.xml_xpath("//dc:title/text()")) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
66 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
|
67 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
|
68 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
69 return ret |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
70 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
71 |
| 4 | 72 class MetaDataFolder(Folder): |
| 73 """provides methods for managing complete metadata structures""" | |
| 74 meta_type='MetaDataFolder' | |
| 75 security=ClassSecurityInfo() | |
| 76 manage_options = Folder.manage_options+( | |
| 5 | 77 {'label':'Main Config','action':'changeMetaDataFolderForm'}, |
| 4 | 78 ) |
| 79 | |
| 5 | 80 def __init__(self,id,title='',metaDataServerUrl=''): |
| 4 | 81 """initialize a new instance""" |
| 82 self.id = id | |
| 83 self.title = title | |
| 5 | 84 self.metaDataServerUrl = metaDataServerUrl |
| 4 | 85 |
| 86 | |
| 87 def getMDFromPathOrUrl(self,path): | |
| 10 | 88 """returns contents of metadata file from server as text""" |
| 89 if not path: | |
| 90 logging.error("getMDFromPathOrUrl: empty path!") | |
| 91 return "" | |
| 92 | |
| 4 | 93 parsedurl = urlparse.urlparse(path) |
| 94 if parsedurl[0] != "": | |
| 95 # has schema (e.g. http) | |
| 96 url=path | |
| 97 else: | |
| 98 # path only | |
| 8 | 99 path = path.replace('/mpiwg/online/', '') |
| 4 | 100 if path.endswith("index.meta"): |
| 8 | 101 url = self.metaDataServerUrl%path |
| 4 | 102 else: |
| 8 | 103 url = os.path.join(self.metaDataServerUrl%path,'index.meta') |
| 4 | 104 |
| 105 #logging.debug("get Metadata: %s"%url) | |
| 106 md = getHttpData(url) | |
| 107 return md | |
| 108 | |
| 9 | 109 def getXmlPathData(self, xmlpath, path=None, dom=None): |
| 110 """returns contents of element at xmlpath as dict""" | |
| 111 logging.error("getXmlPathData(%s)"%xmlpath) | |
| 112 # make xmlpath relative for Zope | |
| 113 if xmlpath[0] == '/': | |
| 114 xmlpath = xmlpath[1:] | |
| 115 | |
| 116 mdObj = self.restrictedTraverse(xmlpath, None) | |
| 117 if mdObj is not None: | |
| 118 return mdObj.getData(path=path, dom=dom) | |
| 119 else: | |
| 120 logging.error("getXmlPathData: MetaData element at '%s' not found!"%xmlpath) | |
| 121 return None | |
| 122 | |
| 8 | 123 def getTexttoolData(self, path=None, dom=None): |
| 124 """returns contents of texttool tag as dict""" | |
| 9 | 125 return self.getXmlPathData('resource/meta/texttool', path=path, dom=dom) |
| 8 | 126 |
| 9 | 127 def getBibData(self, path=None, dom=None): |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
128 """returns contents of bib tag as dict""" |
| 8 | 129 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
|
130 |
| 4 | 131 def getBibMapping(self, bibtype): |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
132 """returns MetaDataMapping for resource/meta/bib of bibtype""" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
133 return self.resource.meta.bib.getMapping(bibtype) |
| 4 | 134 |
| 135 def getBibFields(self, bibdata): | |
| 136 """returns dict with metadata description for bibdata""" | |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
137 return self.resource.meta.bib.getMapFields(bibdata) |
| 4 | 138 |
| 139 def getBibMappedData(self, bibdata, allFields=False): | |
| 140 """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
|
141 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
|
142 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
143 def getDCMappedData(self, bibdata): |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
144 """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
|
145 return self.resource.meta.bib.getDCMappedData(bibdata) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
146 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
147 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
|
148 """get the metadafrom server""" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
149 logging.debug("getBibFormattedMetaData(path=%s)"%path) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
150 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
|
151 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
152 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
|
153 """get the metadafrom server""" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
154 logging.debug("getBibFormattedMetaDataExtended(path=%s)"%path) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
155 return self.resource.meta.bib.getFormatted('metadata_extended_template', path=path, dom=dom, data=bibdata, allFields=True) |
| 4 | 156 |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
157 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
|
158 """get the metadafrom server""" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
159 logging.debug("getBibFormattedLabel(%s)"%path) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
160 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
|
161 |
| 8 | 162 # compatibility |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
163 getFormattedMetaData = getBibFormattedMetaData |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
164 getFormattedMetaDataShort = getBibFormattedMetaData |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
165 getFormattedMetaDataExtended = getBibFormattedMetaDataExtended |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
166 getFormattedLabel = getBibFormattedLabel |
| 8 | 167 |
| 4 | 168 |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
169 def getDCFormatted(self,path): |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
170 """get the metadata as dc set""" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
171 logging.debug("getDCFormatted(path=%s)"%path) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
172 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
|
173 namespaceUsed=False |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
174 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
175 md = self.getMDFromPathOrUrl(path) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
176 logging.debug("MD in XML"+md) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
177 im = amara.parse(md, prefixes=namespace) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
178 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
179 typePaths=im.xml_xpath('//bib/@type') |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
180 archimedes=False |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
181 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
182 if len(typePaths)<1: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
183 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
|
184 if len(typePaths)>0: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
185 type = "archimedes" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
186 archimedes=True |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
187 else: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
188 typePaths=im.xml_xpath('//mpiwg:bib/@type') |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
189 if len(typePaths)<1: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
190 return "" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
191 else: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
192 namespaceUsed=True |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
193 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
194 type=unicode(typePaths[0]) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
195 else: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
196 type=unicode(typePaths[0]) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
197 logging.info("got type:"+type) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
198 try: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
199 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
|
200 except: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
201 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
|
202 return "" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
203 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
204 try: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
205 dcMapping=getattr(self.main.meta.bib,"dc",None) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
206 except: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
207 logging.error("getMetaDataFromServer no dc in meta/bib") |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
208 return "" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
209 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
210 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
|
211 dcMds=dcMapping.generateMappingHash() |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
212 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
213 mdHash=[] |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
214 logging.debug("Value: %s"%repr(mds)) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
215 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
216 for key,valueTriple in mds.items(): |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
217 value=valueTriple[0] |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
218 logging.debug("Value: %s"%repr(value)) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
219 logging.debug("Key: %s"%repr(key)) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
220 if value!="": |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
221 if not archimedes: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
222 if namespaceUsed: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
223 try: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
224 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
|
225 except: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
226 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
|
227 else: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
228 v = im.xml_xpath('//bib/%s/text()'%value) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
229 else: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
230 v = im.xml_xpath('//archimedes/%s/text()'%value) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
231 if len(v) > 0: |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
232 dc=dcMds[key][0] |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
233 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
234 if (dc !="") and (value !=""): |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
235 logging.debug("%s--> : %s"%(repr(value),dc)) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
236 mdHash.append([dc,unicode(v[0])]) |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
237 |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
238 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
|
239 ret+="<dc:type>%s</dc:type>"%type |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
240 for md in mdHash: |
| 4 | 241 |
|
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
242 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
|
243 ret+="</bib>" |
|
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
244 return ret |
| 4 | 245 |
| 246 | |
| 247 changeMetaDataFolderForm = PageTemplateFile('zpt/changeMetaDataFolder',globals()) | |
| 248 | |
| 249 security.declarePublic('changeMetaDataFolder') | |
| 250 def changeMetaDataFolder(self,title,metaDataServerUrl,RESPONSE=None): | |
| 251 """Change MetaDataFolder""" | |
| 252 self.title = title | |
| 253 self.metaDataServerUrl=metaDataServerUrl | |
| 254 if RESPONSE is not None: | |
| 255 RESPONSE.redirect('manage_main') | |
| 256 | |
| 257 | |
| 9 | 258 def manage_addMetaDataFolderForm(self): |
| 259 """add MetaDataFolder form""" | |
| 260 pt = PageTemplateFile('zpt/addMetadataFolderForm',globals()).__of__(self) | |
| 261 return pt() | |
| 4 | 262 |
| 263 def manage_addMetaDataFolder(self,id,title,RESPONSE=None): | |
| 264 """a MetaDataFolder objekt""" | |
| 265 newObj=MetaDataFolder(id,title) | |
| 266 self.Destination()._setObject(id,newObj) | |
| 267 if RESPONSE is not None: | |
| 268 RESPONSE.redirect('manage_main') | |
| 269 |
