source: TI01-discovery/trunk/schema/numsim/renderNumSim.py @ 1118

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

Some slight modifications to render Charlotte's numsim
docs ...

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