source: TI07-MOLES/trunk/PythonCode/wsgi/MDIP.py @ 2260

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI07-MOLES/trunk/PythonCode/wsgi/MDIP.py@2522
Revision 2260, 2.7 KB checked in by lawrence, 13 years ago (diff)

Slight changes to support modified xqueries, and modified xquery
itself ... first cut at MDIP (based on DC, doesn't actually do
anything proper for now).

Line 
1#code for handling MDIP records
2#this IS NOT FINISHED ...
3#all it does is handle first order childeren, and probably prints rubbish ...
4from xmlHandler import xmlHandler,stripNamespace
5from htmlUtilities import span
6
7class MDIP(dict):
8    ''' This class represents MDIP in Python '''
9   
10    def __init__(self,xml):
11        ''' Initialise an MDIP record from xml '''
12       
13        self.metadataType='MDIP'
14        self.xml=xml
15        self.XH=xmlHandler(xml,string=1)
16        self.tree=self.XH.tree
17        self.order=[]
18
19        for tag in self.tree.getchildren():
20            name=stripNamespace(tag.tag)
21            u=(name,tag.text)
22            if u[1] is None: u=(name,'')
23            if name in self.keys():
24                if isinstance(self[name],list):
25                    self[name].append(u[1])
26                else:
27                    self[name]=[self[name],u[1]]
28            else:
29                self.order.append(name)
30                self.update((u,))
31           
32    def toHTML(self):
33       
34        def __nicelist(item):
35            k=''
36            if isinstance(item,list):
37                k+=item[0]
38                for i in item[1:]: k+=', %s'%i
39            else:
40                k+=item
41            return k
42           
43        m='<div class="metadata">'
44        h="%s<p>"%m
45        if 'title' in self.keys():
46            h+=span(self['title'],'title')+'<br/>'
47        if 'creator' in self.keys():
48            h+=span(__nicelist(self['creator']),'title')+'<br/>'
49        h+=m
50        if 'description' in self.keys():
51            h+='<div class="abstract">'+span('description: ','keywords')+span(self['description'],'metaentry')+'</div>'
52        for key in self.order:
53            if key not in ['title','creator','description']:
54                k=span(key,'keywords')+': '
55                k+=__nicelist(self[key])
56                h+=span(k,'metaentry')+'<br/>'
57        h+='</div></div>'
58        return h
59
60    def shortHTML(self,link):
61        pass
62
63import unittest
64class TestCase(unittest.TestCase):
65   
66    def testMDIP(self):
67       
68        x='''<oai_dc:dc xmlns:dc="http://purl.org/dc/elements/1.1/"
69         xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
70          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
71           xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/
72            http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
73            <dc:title> A test title</dc:title>
74            <dc:creator>Bryan</dc:creator>
75            <dc:creator>Anne</dc:creator>
76            <dc:subject>A</dc:subject><dc:subject>B</dc:subject></oai_dc:dc>'''
77        y=MDIP(x)
78        z=y['subject']
79        print z
80        a=y.toHTML()
81        print a
82       
83if __name__=="__main__":
84    unittest.main()
Note: See TracBrowser for help on using the repository browser.