source: cows/branches/migrate-py26-pylons10/cows/pylons/templates/wms_capabilities_1_1_1.xml @ 7342

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/cows/branches/migrate-py26-pylons10/cows/pylons/templates/wms_capabilities_1_1_1.xml@7342
Revision 7342, 7.6 KB checked in by spascoe, 9 years ago (diff)

New branch for migration to Python-2.6 and Pylons-1.0.

Line 
1<?xml version="1.0"?>
2<!DOCTYPE WMT_MS_Capabilities SYSTEM
3 "http://schemas.opengis.net/wms/1.1.1/WMS_MS_Capabilities.dtd">
4
5<?python
6
7from cows.pylons.genshi_util import RenameElementFilter
8from genshi import QName
9from pylons import url
10
11?>
12
13<WMT_MS_Capabilities xmlns:py="http://genshi.edgewall.org/"
14          xmlns:xlink="http://www.w3.org/1999/xlink"
15                     version="1.1.1">
16
17  <!--! ====================================================================== -->
18  <!--!
19      To change the tag name we need to wrap a markup macro in a python
20      function
21  -->
22
23  <Operation py:def="_opContent(op)">
24    <Format py:for="f in op.parameters['Format'].possibleValues.allowedValues" py:content="f"/>
25    <DCPType><HTTP>
26      <Get>
27        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
28                        xlink:href="${op.get.href}"/>
29      </Get>
30    </HTTP></DCPType>
31  </Operation>
32 
33 
34    <py:def function="markupLegendURL(l)">
35      <LegendURL width="${l.width}" height="${l.height}">
36         <Format>${l.format}</Format>
37         <OnlineResource xlink:type="simple" xlink:href="${l.onlineResource.href}"/>
38      </LegendURL>
39    </py:def>
40 
41        <py:def function="markupStyle(s)">
42          <Style>
43            <Name>${s.name}</Name>
44            <Title>${s.title}</Title>
45            <py:for each="l in s.legendURLs" py:if="getattr(s, 'legendURLs', None) != None">
46              ${markupLegendURL(l)}
47            </py:for>
48          </Style>
49        </py:def>
50   
51    <py:def function="markupMetadataURL(l)">
52      <MetadataURL type="${showAtt(l, 'type')}" >
53         <Format>${l.format}</Format>
54         <OnlineResource xlink:type="simple" xlink:href="${l.onlineResource.href}"/>
55      </MetadataURL>
56    </py:def>   
57 
58  <?python
59 
60  def markupOperation(opName, op):
61    """Render an OWS operation description for the Capabilities section.
62    """
63
64    return RenameElementFilter(QName(opName))(_opContent(op))
65
66  ?>
67
68
69<?python
70
71    def showAtt(obj, attname):
72        if not hasattr(obj,attname) or getattr(obj, attname) == None:
73            return ''
74           
75        return getattr(obj, attname)
76         
77
78?>
79
80  <Layer py:def="markupLayer(ds)" queryable="${int(ds.queryable)}">
81   
82    <py:if test="ds.identifier is not None">
83        <Name py:content="ds.identifier"/>
84    </py:if>
85   
86    <Title py:content="ds.titles[0]"/>
87    <Abstract py:if="len(ds.abstracts)>0" py:content="ds.abstracts[0]"/>
88   
89    <py:if test="ds.CRSs is not None">   
90        <CRS py:for="crs in ds.CRSs" py:content="crs"/>
91    </py:if>
92   
93    <py:for each="bb in ds.boundingBoxes">
94      <BoundingBox SRS="${bb.crs}"
95                   minx="${'%.2f'%bb.lowerCorner[0]}"
96                   miny="${'%.2f'%bb.lowerCorner[1]}"
97                   maxx="${'%.2f'%bb.upperCorner[0]}"
98                   maxy="${'%.2f'%bb.upperCorner[1]}"/>
99    </py:for>
100
101
102
103    <!--!TODO Attribution from metadata -->
104    <!--!TODO AuthorityURL from metadata -->
105    <!--!TODO FeatureListURL from metadata -->
106    <!--!TODO Identifier from metadata -->
107    <!--!TODO DataURL from metadata -->
108    <!--!TODO MetadataURL from metadata -->
109   
110    <!--!NOTE: this is an ad-hoc implementation not using the ows_common.model classes
111         !TODO: fixme -->
112    <!--!TODO ScaleHint -->
113
114    <Dimension py:for="d_n, d in ds.dimensions.iteritems()"
115               name="${d_n}" units="${d.valuesUnit}"
116               unitSymbol="${d.unitSymbol}"/>
117               
118    <Extent py:for="d_n, d in ds.dimensions.iteritems()" name="${d_n}" default="${d.defaultValue}" 
119            py:content="','.join(d.possibleValues.allowedValues)"/>
120<!--! nearestValue="${int(d.nearestValue)}" -->
121
122   
123    <py:if test="ds.identifier is not None">
124   
125        <py:choose test="ds.styles">
126   
127            <py:when test="['']">
128                <Style>
129                    <Name>default</Name>
130                    <Title>Default</Title>
131                    <LegendURL width="${ds.legendSize[0]}" height="${ds.legendSize[1]}">
132                            <Format py:for="f in ds.legendFormats" py:content="f"/>
133                            <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
134                                xlink:href="${url.current(qualified=True, action='index')}?request=GetLegend&amp;layers=${ds.identifier}"/>
135                    </LegendURL>
136                </Style>
137            </py:when>
138   
139            <py:otherwise>
140                <py:for each="s in ds.styles" py:if="getattr(ds, 'styles', None) != None">
141                    ${markupStyle(s)}
142                </py:for>
143            </py:otherwise>
144   
145        </py:choose>
146       
147        <py:if test="len(ds.metadataURLs) > 0">
148            <py:for each="url in ds.metadataURLs">
149                ${markupMetadataURL(url)}
150            </py:for>
151        </py:if>
152       
153    </py:if>   
154   
155    <Layer py:for="c in ds.children" py:replace="markupLayer(c)"></Layer>
156
157
158  </Layer>
159
160  <!--! ====================================================================== -->
161
162
163  <Service py:with="sm=c.capabilities; si=c.capabilities.serviceIdentification">
164    <Name>OGC:WMS</Name>
165    <Title py:content="si.titles[0]"/>
166    <Abstract py:if="len(si.abstracts)>0" py:content="si.abstracts[0]"/>
167    <KeywordList>
168      <Keyword py:for="kw in si.keywords"
169               py:content="kw"/>
170    </KeywordList>
171    <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" 
172                    xlink:href="${url.current(qualified=True, action='index')}?"/>
173   
174    <ContactInformation py:if="sm.serviceProvider is not None"
175                        py:with="rp=sm.serviceProvider.serviceContact">
176      <ContactPersonPrimary>
177        <ContactPerson py:if="rp is not None" py:content="rp.individualName"/>
178        <ContactOrganization py:content="sm.serviceProvider.providerName"/>
179      </ContactPersonPrimary>
180      <ContactPosition py:content="rp.positionName"/>
181
182      <py:with py:if="rp.contactInfo is not None" vars="cn=rp.contactInfo">
183        <ContactAddress py:if="cn.address is not None">
184          <AddressType>postal</AddressType>
185          <Address>
186            <py:for each="d in cn.address.deliveryPoints">${d}</py:for>
187          </Address>
188          <City py:content="cn.address.city"/>
189          <StateOrProvince py:content="cn.address.administrativeArea"/>
190          <PostCode py:content="cn.address.postalCode"/>
191          <Country py:content="cn.address.country"/>
192        </ContactAddress>
193        <ContactVoiceTelephone py:if="cn.phone is not None"
194                               py:content="cn.phone.voice"/>
195        <ContactFacsimileTelephone py:if="cn.phone is not None"
196                                   py:content="cn.phone.facsimile"/>
197        <ContactElectronicMailAddress py:if="cn.address is not None"
198                                      py:content="cn.address.electronicMailAddress"/>
199      </py:with>
200    </ContactInformation>
201   
202    <Fees py:content="si.fees"/>
203    <AccessConstraints py:content="si.accessConstraints"/>
204  </Service>
205 
206  <!--! These fields are represented in ows_common as service constraints -->
207  <Capability py:with="sm=c.capabilities; om=sm.operationsMetadata">
208    <py:if test="om is not None">
209      <?python ops = ['GetCapabilities', 'GetMap', 'GetFeatureInfo'] ?>
210      <Request>
211        <py:for each="opName in ops" py:if="opName in om.operationDict.keys()">
212          <span py:content="markupOperation(opName, om.operationDict[opName])" py:strip="True"/>
213        </py:for>
214        <py:for each="opName in ops" py:if="opName in om.operationDict.keys()">
215          <?python exceptions = om.operationDict[opName].parameters.get('ExceptionFormat') ?>
216          <Exception py:if="exceptions is not None">
217            <Format py:for="e in exceptions.possibleValues.allowedValues"
218                    py:content="e"/>
219          </Exception>
220        </py:for>
221      </Request>
222    </py:if>
223   
224    <!--!TODO:  capability exceptions -->
225    <Exception><Format>text/xml</Format></Exception>
226
227    <Layer py:if="sm.contents is not None">
228      <Title>Contents</Title>
229      <Layer py:for="ds in sm.contents.datasetSummaries"
230             py:replace="markupLayer(ds)">
231      </Layer>
232    </Layer>
233  </Capability>
234</WMT_MS_Capabilities>
Note: See TracBrowser for help on using the repository browser.