source: TI01-discovery/trunk/schema/numsim/NumSim2Html.py @ 884

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI01-discovery/trunk/schema/numsim/NumSim2Html.py@884
Revision 884, 4.5 KB checked in by lawrence, 15 years ago (diff)

More complete html-isation of numsim ...

Line 
1import ElementTree as ET
2#
3# Start with methods for handling the various types we've defined and what they should look like
4#  See useful ideas at http://effbot.org/zone/element-iterparse.htm#plist
5
6class WrapGetText:
7        '''Return the character text tab from any subelement (returns None for
8        missing attributes/subelements unless they begin with __).'''
9        #From http://online.effbot.org/2003_07_01_archive.htm#element-tricks
10        def __init__(self, element):
11            self._element = element
12        def __getattr__(self, tag):
13            if tag.startswith("__"): raise AttributeError(tag)
14            return self._element.findtext(tag)
15
16def _theader(title,span=1):
17        ''' Produces a table header for table block titles '''
18        h='''
19        <table cellspacing="0" cellpadding="3" border="0">
20        <tbody>
21        <tr><td class="lineHead" colspan="%s"><span class="headingO">%s</span></td></tr>'''%(str(span),title)
22        return h
23
24def _wrapAttrib(e,item):
25        ''' Wraps an attribute request appropriately '''
26        a=e.attrib.get(item)
27        h=''
28        if a is not None: h=a
29        return h
30       
31def _hyperlink(e):
32        ''' Takes an element object which has an NS_link attribute
33        set and returns a hyperlink'''
34        href='{http://www.w3.org/1999/xlink}href'
35        title='{http://www.w3.org/1999/xlink}title'
36        try:
37                s='<a href="%s">%s</a>'%(_wrapAttrib(e,href),_wrapAttrib(e,title))
38        except:
39                s=''
40        return s
41       
42def Condition(e):
43        ''' Common elements for initial and boundary condition elements '''
44        if e is None: return ''
45        html='<div id="condition">'
46        ctype=_wrapAttrib(e,'NS_Type')
47        if ctype == 'Unknown': ctype=''
48        if ctype !='': ctype=': '+ctype
49        ptype=_wrapAttrib(e,'NS_Perturbed') #for initial condition
50        if ptype != '': ptype=' ('+ptype+')'
51        html+='<p class="emphatic">%s</p>'% (e.tag+ctype+ptype)
52        html+=Description(e.find('NS_Description'))
53        html+=References(e.find('NS_References'))
54        html+=Parameters(e.find('NS_ControlledParameters'))
55        html+=RelatedTo(e.find('NS_BoundaryDataset'))
56        html+='</div>'
57        return html
58       
59def Parameters(e):
60        if e is None: return ''
61        html='<ul>'
62        for item in e.findall('NS_Value'):
63                html+='<li>%s</li>'%item.text
64        html+='</ul>'
65        return html
66
67def Description(element):
68        '''Takes a description element and formats it appropriately'''
69        # note that there may be between zero and many related URIs
70        if element is None: return ''
71        related=element.findall('NS_RelatedURI')
72        s='<p>'+element.text
73        if len(related)>0: 
74                links=True
75                s+='<ul>'
76                for uri in related:
77                        s+='<li>'+RelatedTo(uri)+'</li>'
78                s+='</ul>'
79        s+='</p>'
80        return s
81       
82def Model(e,title=None):
83        ''' Parse a model element '''
84        html=''
85        if e is None: return html
86        if title is not None:
87                html+='<h3>%s</h3>'%title
88        html+='<DIV id="SubBlock">'+_theader(e.find('NS_Name').text)
89        html+='<tr><td>%s</td></tr>'%Description(e.find('NS_Description'))
90        html+='<tr><td>%s</td></tr>'%References(e.find('NS_References'))
91        html+='<tr><td>%s</td></tr>'%RelatedTo(e.find('NS_RelatedModel'))
92        for item in e.findall('NS_Component'):
93                html+='<tr><td>%s</td></tr>'%Model(item)
94        html+='</tbody></table></DIV>'
95        return html
96       
97def References(e):
98        ''' Takes a reference list and formats it (currently doesn't support ISO option)'''
99        if e is None: return ''
100        s='<DIV id="RefList"><p>References:<ul>'
101        for item in e.findall('NS_Reference'):
102                s+='<li>%s</li>'%item.text
103        s+='</ul></p></DIV>'
104        return s
105       
106def RelatedTo(e):
107        '''Return html for a relationship'''
108        if e is None: return ''
109        r=e.find('NS_Relationship')
110        s='<p class="emphatic">%s: %s'%(e.tag[3:],_hyperlink(e))
111        if r is not None:
112                s+='</p><p>'+r.text
113        s+='</p>'
114        return s
115       
116def Simulated(element):
117       
118        html='<div id="Simulated"><h2>Simulated Data</h2>'
119        html+=Description(element.find('NS_Description'))
120       
121        html+='<div id="SubBlock">'+_theader('Constraints')
122        for i in element.findall('NS_BoundaryCondition'):html+='<tr><td>%s</td></tr>'%Condition(i)
123        for i in element.findall('NS_InitialCondition'):html+='<tr><td>%s</td></tr>'%Condition(i)
124        html+='</tbody></table></div>'
125       
126        html+=Model(element.find('NS_Model'),title='Model')
127       
128        html+='</div>' #close simulated div
129
130        return html
131       
132if __name__=="__main__":
133        x=ET.parse('HADCM3 PUM 4.5 Beowulf.xml').getroot()
134        html=Simulated(x)
135        print '''<?xml version="1.0" encoding="UTF-8"?>
136                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
137                <html xmlsns="http://www.w3.org/1999/xhtml" xml:lang="en">
138                        <head>
139                                <META http-equiv="Content-Type" content="text/xhtml; charset=iso-8859-1"/>
140                                <title>Browse: %s</title>
141                                <LINK media="all, screen" href="numsim.css" type="text/css" rel="stylesheet"/>
142                        </head>'''%'NS Test'
143        print html
144        print '</html>'
Note: See TracBrowser for help on using the repository browser.