Mercurial > hg > MetaDataProvider
annotate MetaDataFolder.py @ 17:ba617e755c56
mostly finished attributions and copyright
author | casties |
---|---|
date | Tue, 02 Aug 2011 18:28:39 +0200 |
parents | 41b90f09a1f2 |
children | 611b6df70840 |
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 |
112 #logging.debug("get Metadata: %s"%url) | |
113 md = getHttpData(url) | |
114 return md | |
115 | |
12 | 116 def getDomFromPathOrUrl(self, path): |
117 """returns DOM of metadata file at given path""" | |
118 dom = None | |
119 data = self.getMDFromPathOrUrl(path) | |
120 if data: | |
121 dom = ET.fromstring(data) | |
122 | |
123 return dom | |
124 | |
14 | 125 def getXmlPathObj(self, xmlpath): |
126 """returns object at xmlpath""" | |
9 | 127 # make xmlpath relative for Zope |
128 if xmlpath[0] == '/': | |
129 xmlpath = xmlpath[1:] | |
130 | |
14 | 131 obj = self.restrictedTraverse(xmlpath, None) |
132 return obj | |
133 | |
17 | 134 def getXmlPathData(self, xmlpath, path=None, dom=None, recursive=0, all=False, allText=False): |
14 | 135 """returns contents of element at xmlpath as dict""" |
136 logging.error("getXmlPathData(%s)"%xmlpath) | |
137 mdObj = self.getXmlPathObj(xmlpath) | |
9 | 138 if mdObj is not None: |
17 | 139 return mdObj.getData(path=path, dom=dom, recursive=recursive, all=all, allText=allText) |
9 | 140 else: |
141 logging.error("getXmlPathData: MetaData element at '%s' not found!"%xmlpath) | |
142 return None | |
143 | |
17 | 144 def getXmlPathFormatted(self, xmlpath, template, path=None, dom=None, data=None, allFields=False, recursive=0, all=False, allText=False): |
14 | 145 """returns contents of element at xmlpath as dict""" |
146 logging.error("getXmlPathFormatted(xmlpath=%s, template=%s)"%(xmlpath,template)) | |
147 mdObj = self.getXmlPathObj(xmlpath) | |
148 if mdObj is not None: | |
149 if data is None: | |
17 | 150 data = mdObj.getData(path=path, dom=dom, recursive=recursive, all=all, allText=allText) |
14 | 151 |
152 if data is None: | |
153 return '' | |
154 | |
155 fmt = '' | |
15 | 156 if all: |
14 | 157 # data is list of elements |
158 for d in data: | |
159 # concatenate formatted strings | |
160 fmt += mdObj.getFormatted(template, path=path, dom=dom, data=d, allFields=allFields) + '\n' | |
161 | |
162 else: | |
163 fmt = mdObj.getFormatted(template, path=path, dom=dom, data=data, allFields=allFields) | |
164 | |
165 return fmt | |
166 | |
167 else: | |
168 logging.error("getXmlPathFormatted: MetaData element at '%s' not found!"%xmlpath) | |
169 return '' | |
170 | |
12 | 171 def getResourceData(self, path=None, dom=None): |
172 """returns contents of resource tag as dict""" | |
173 return self.getXmlPathData('resource', path=path, dom=dom) | |
174 | |
8 | 175 def getTexttoolData(self, path=None, dom=None): |
176 """returns contents of texttool tag as dict""" | |
9 | 177 return self.getXmlPathData('resource/meta/texttool', path=path, dom=dom) |
8 | 178 |
12 | 179 def getAccessData(self, path=None, dom=None): |
180 """returns contents of access tag as dict""" | |
181 return self.getXmlPathData('resource/meta/access-conditions/access', path=path, dom=dom) | |
182 | |
15 | 183 def getAttributionData(self, path=None, dom=None, all=True): |
14 | 184 """returns contents of attribution tag as dict""" |
15 | 185 return self.getXmlPathData('resource/meta/access-conditions/attribution', path=path, dom=dom, all=all) |
14 | 186 |
15 | 187 def getAttributionFormatted(self, template, path=None, dom=None, data=None, all=True): |
14 | 188 """returns formatted contents of access tag""" |
15 | 189 return self.getXmlPathFormatted('resource/meta/access-conditions/attribution', template, path=path, dom=dom, data=data, all=all) |
14 | 190 |
17 | 191 def getCopyrightData(self, path=None, dom=None, recursive=1, all=True): |
14 | 192 """returns contents of copyright tag as dict""" |
17 | 193 return self.getXmlPathData('resource/meta/access-conditions/copyright', path=path, dom=dom, recursive=recursive, all=all) |
14 | 194 |
15 | 195 def getCopyrightFormatted(self, template, path=None, dom=None, data=None, all=True): |
14 | 196 """returns formatted contents of access tag""" |
15 | 197 return self.getXmlPathFormatted('resource/meta/access-conditions/copyright', template, path=path, dom=dom, data=data, all=all) |
14 | 198 |
9 | 199 def getBibData(self, path=None, dom=None): |
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
200 """returns contents of bib tag as dict""" |
8 | 201 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
|
202 |
4 | 203 def getBibMapping(self, bibtype): |
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
204 """returns MetaDataMapping for resource/meta/bib of bibtype""" |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
205 return self.resource.meta.bib.getMapping(bibtype) |
4 | 206 |
207 def getBibFields(self, bibdata): | |
208 """returns dict with metadata description for bibdata""" | |
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
209 return self.resource.meta.bib.getMapFields(bibdata) |
4 | 210 |
211 def getBibMappedData(self, bibdata, allFields=False): | |
212 """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
|
213 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
|
214 |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
215 def getDCMappedData(self, bibdata): |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
216 """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
|
217 return self.resource.meta.bib.getDCMappedData(bibdata) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
218 |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
219 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
|
220 """get the metadafrom server""" |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
221 logging.debug("getBibFormattedMetaData(path=%s)"%path) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
222 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
|
223 |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
224 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
|
225 """get the metadafrom server""" |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
226 logging.debug("getBibFormattedMetaDataExtended(path=%s)"%path) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
227 return self.resource.meta.bib.getFormatted('metadata_extended_template', path=path, dom=dom, data=bibdata, allFields=True) |
4 | 228 |
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
229 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
|
230 """get the metadafrom server""" |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
231 logging.debug("getBibFormattedLabel(%s)"%path) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
232 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
|
233 |
8 | 234 # compatibility |
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
235 getFormattedMetaData = getBibFormattedMetaData |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
236 getFormattedMetaDataShort = getBibFormattedMetaData |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
237 getFormattedMetaDataExtended = getBibFormattedMetaDataExtended |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
238 getFormattedLabel = getBibFormattedLabel |
8 | 239 |
4 | 240 |
11 | 241 def OLDgetDCFormatted(self,path): |
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
242 """get the metadata as dc set""" |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
243 logging.debug("getDCFormatted(path=%s)"%path) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
244 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
|
245 namespaceUsed=False |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
246 |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
247 md = self.getMDFromPathOrUrl(path) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
248 logging.debug("MD in XML"+md) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
249 im = amara.parse(md, prefixes=namespace) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
250 |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
251 typePaths=im.xml_xpath('//bib/@type') |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
252 archimedes=False |
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 if len(typePaths)<1: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
255 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
|
256 if len(typePaths)>0: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
257 type = "archimedes" |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
258 archimedes=True |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
259 else: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
260 typePaths=im.xml_xpath('//mpiwg:bib/@type') |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
261 if len(typePaths)<1: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
262 return "" |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
263 else: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
264 namespaceUsed=True |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
265 |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
266 type=unicode(typePaths[0]) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
267 else: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
268 type=unicode(typePaths[0]) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
269 logging.info("got type:"+type) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
270 try: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
271 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
|
272 except: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
273 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
|
274 return "" |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
275 |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
276 try: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
277 dcMapping=getattr(self.main.meta.bib,"dc",None) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
278 except: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
279 logging.error("getMetaDataFromServer no dc in meta/bib") |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
280 return "" |
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 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
|
283 dcMds=dcMapping.generateMappingHash() |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
284 |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
285 mdHash=[] |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
286 logging.debug("Value: %s"%repr(mds)) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
287 |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
288 for key,valueTriple in mds.items(): |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
289 value=valueTriple[0] |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
290 logging.debug("Value: %s"%repr(value)) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
291 logging.debug("Key: %s"%repr(key)) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
292 if value!="": |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
293 if not archimedes: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
294 if namespaceUsed: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
295 try: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
296 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
|
297 except: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
298 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
|
299 else: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
300 v = im.xml_xpath('//bib/%s/text()'%value) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
301 else: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
302 v = im.xml_xpath('//archimedes/%s/text()'%value) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
303 if len(v) > 0: |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
304 dc=dcMds[key][0] |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
305 |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
306 if (dc !="") and (value !=""): |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
307 logging.debug("%s--> : %s"%(repr(value),dc)) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
308 mdHash.append([dc,unicode(v[0])]) |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
309 |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
310 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
|
311 ret+="<dc:type>%s</dc:type>"%type |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
312 for md in mdHash: |
4 | 313 |
6
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
314 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
|
315 ret+="</bib>" |
00147a1ab4ac
division between MetaDataFolder and Metadata looks good now (to me :-)
casties
parents:
5
diff
changeset
|
316 return ret |
4 | 317 |
318 | |
319 changeMetaDataFolderForm = PageTemplateFile('zpt/changeMetaDataFolder',globals()) | |
320 | |
321 security.declarePublic('changeMetaDataFolder') | |
322 def changeMetaDataFolder(self,title,metaDataServerUrl,RESPONSE=None): | |
323 """Change MetaDataFolder""" | |
324 self.title = title | |
325 self.metaDataServerUrl=metaDataServerUrl | |
326 if RESPONSE is not None: | |
327 RESPONSE.redirect('manage_main') | |
328 | |
329 | |
9 | 330 def manage_addMetaDataFolderForm(self): |
331 """add MetaDataFolder form""" | |
332 pt = PageTemplateFile('zpt/addMetadataFolderForm',globals()).__of__(self) | |
333 return pt() | |
4 | 334 |
335 def manage_addMetaDataFolder(self,id,title,RESPONSE=None): | |
336 """a MetaDataFolder objekt""" | |
337 newObj=MetaDataFolder(id,title) | |
338 self.Destination()._setObject(id,newObj) | |
339 if RESPONSE is not None: | |
340 RESPONSE.redirect('manage_main') | |
341 |