source: cows/trunk/cows/pylons/templates/wfs_capabilities_2_0_0.xml @ 4376

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/cows/trunk/cows/pylons/templates/wfs_capabilities_2_0_0.xml@4376
Revision 4376, 6.0 KB checked in by domlowe, 11 years ago (diff)

Adding WFS 2.0.0 capabilities template

Line 
1<?xml version="1.0"?>
2
3<?python
4
5from cows.pylons.genshi_util import RenameElementFilter
6from genshi import QName
7import webhelpers as h
8
9?>
10
11<WFS_Capabilities xmlns:py="http://genshi.edgewall.org/"
12                  xmlns="http://www.opengis.net/wfs/2.0"
13                  xmlns:xlink="http://www.w3.org/1999/xlink"
14                  xmlns:ows="http://www.opengis.net/ows/1.1"
15                  xmlns:gml="http://www.opengis.net/gml"
16                  xmlns:fes="http://www.opengis.net/fes/2.0"
17                  xmlns:ogc="http://www.opengis.net/ogc" 
18                  xmlns:csml="http://ndg.nerc.ac.uk/csml" version="2.0.0">
19  <!--! TODO: declare csml namespace on the fly -->
20       
21  <!--! ====================================================================== -->
22  <!--!
23      To change the tag name we need to wrap a markup macro in a python
24      function
25  -->
26
27  <Operation py:def="_opContent(op)">
28    <Format py:for="f in op.parameters['Format'].possibleValues.allowedValues" py:content="f"/>
29    <DCPType><HTTP>
30      <Get>
31        <OnlineResource xlink:type="simple" xlink:href="${op.get.href}"/>
32      </Get>
33    </HTTP></DCPType>
34  </Operation>
35  <?python
36 
37  def markupOperation(opName, op):
38    """Render an OWS operation description for the Capabilities section.
39    """
40
41    return RenameElementFilter(QName(opName))(_opContent(op))
42
43  ?>
44
45          <FeatureType py:def="markupLayer(ds)">
46                <Name py:content="ds.identifier"/>
47                <Title py:content="ds.titles[0]"/>
48                <Abstract py:if="len(ds.abstracts)>0" py:content="ds.abstracts[0]"/>
49                <ows:Keywords>
50                        <ows:Keyword py:for="kw in ds.keywords" py:content="kw"/>                       
51                </ows:Keywords>         
52                <DefaultCRS>WGS:84</DefaultCRS>
53                <OutputFormats>
54                        <Format py:for="format in ds.outputformats" py:content="format"/>
55                </OutputFormats>       
56                <?python exBBox = ds.wgs84BoundingBoxes[0]?>
57                <ows:WGS84BoundingBox>
58                  <ows:LowerCorner py:content="str(exBBox.lowerCorner[0]) + ' ' + str(exBBox.lowerCorner[1])" />
59                  <ows:UpperCorner py:content="str(exBBox.upperCorner[0]) + ' ' + str(exBBox.upperCorner[1])" />
60                </ows:WGS84BoundingBox>
61          </FeatureType>
62  <!--! ====================================================================== -->
63
64
65  <ows:ServiceIdentification py:with="sm=c.capabilities; si=c.capabilities.serviceIdentification">
66    <ows:Title py:content="si.titles[0]"/>
67    <ows:Abstract py:if="len(si.abstracts)>0" py:content="si.abstracts[0]"/>
68    <ows:Keywords py:if="len(si.keywords)>0">
69      <ows:Keyword py:for="kw in si.keywords"
70               py:content="kw"/>
71    </ows:Keywords>
72    <!--! <OnlineResource xlink:type="simple" xlink:href="${h.url_for(qualified=True, action='index')}?"/> -->
73    <ows:ServiceType>OGC:WFS</ows:ServiceType>
74        <ows:ServiceTypeVersion>2.0.0</ows:ServiceTypeVersion>
75    <ows:Fees py:content="si.fees"/>
76    <ows:AccessConstraints py:content="si.accessConstraints"/>
77  </ows:ServiceIdentification>
78  <ows:ServiceProvider py:with="sm=c.capabilities; rp=sm.serviceProvider.serviceContact">
79    <ows:ProviderName py:content="sm.serviceProvider.providerName"/>
80    <ows:ServiceContact>
81                <ows:IndividualName py:if="rp is not None" py:content="rp.individualName"/>
82                <ows:PositionName py:content="rp.positionName"/>
83                <py:with vars="cn=rp.contactInfo" py:if="cn is not None">
84                <ows:ContactInfo py:if="cn.phone is not None">
85                        <ows:Phone>
86                                <ows:Voice py:content="cn.phone.voice"/>
87                                <ows:Facsimile py:content="cn.phone.facsimile"/>
88                        </ows:Phone>
89                        <ows:Address py:if="cn.address is not None">
90                                  <ows:DeliveryPoint><py:for each="d in cn.address.deliveryPoints">${d}</py:for>
91                                  </ows:DeliveryPoint>
92                                  <ows:City py:content="cn.address.city"/>
93                                  <ows:AdministrativeArea py:content="cn.address.administrativeArea"/>
94                                  <ows:PostalCode py:content="cn.address.postalCode"/>
95                                  <ows:Country py:content="cn.address.country"/>
96                                  <ows:ElectronicMailAddress py:content="cn.address.electronicMailAddress"/>                                                     
97                        </ows:Address> 
98                </ows:ContactInfo>
99                </py:with>     
100    </ows:ServiceContact>
101  </ows:ServiceProvider>       
102       
103  <!--! These fields are represented in ows_common as service constraints -->
104 
105  <ows:OperationsMetadata py:with="sm=c.capabilities; om=sm.operationsMetadata">
106    <py:if test="om is not None">
107      <?python
108        ops = ['GetCapabilities', 'DescribeFeature', 'GetFeature']
109        eops = [x for x in om.operationDict.keys() if x not in ops]
110      ?>
111      <py:for each="opName in ops" py:if="opName in om.operationDict.keys()">
112          <ows:Operation name="${opName}">
113                <ows:DCP>
114                        <ows:HTTP>
115                                <ows:Get  xlink:type="simple" xlink:href="${om.operationDict[opName].get.href}"/>
116                        </ows:HTTP>
117                </ows:DCP>
118          </ows:Operation>
119      </py:for> 
120      <ows:ExtendedCapabilities>     
121      <Request>
122        <py:for each="opName in eops">
123          <span py:content="markupOperation(opName, om.operationDict[opName])" py:strip="True"/>
124        </py:for>
125        <py:for each="opName in eops">
126          <?python exceptions = om.operationDict[opName].parameters.get('ExceptionFormat') ?>
127          <Exception py:if="exceptions is not None">
128            <Format py:for="e in exceptions.possibleValues.allowedValues"
129                    py:content="e"/>
130          </Exception>
131        </py:for>
132      </Request>
133      </ows:ExtendedCapabilities>
134    </py:if>
135    </ows:OperationsMetadata>
136   
137    <FeatureTypeList py:if="c.capabilities.contents is not None">
138      <FeatureType py:for="ds in c.capabilities.contents.datasetSummaries"
139             py:replace="markupLayer(ds)">
140      </FeatureType>
141    </FeatureTypeList> 
142        <!-- TODO, Filter_Capabilities should be configurable -->
143                <fes:Filter_Capabilities>
144                <fes:Spatial_Capabilities>
145                        <fes:GeometryOperands>
146                                <fes:GeometryOperand>gml:Envelope</fes:GeometryOperand>
147                        </fes:GeometryOperands>
148                        <fes:SpatialOperators>
149                                <fes:SpatialOperator name="BBOX"/>
150                        </fes:SpatialOperators>
151                </fes:Spatial_Capabilities>
152                <fes:Scalar_Capabilities>
153                        <fes:LogicalOperators></fes:LogicalOperators>
154                        <fes:ComparisonOperators><fes:ComparisonOperator>Between</fes:ComparisonOperator></fes:ComparisonOperators>
155                </fes:Scalar_Capabilities>
156               
157                <fes:Id_Capabilities>
158                        <fes:FID/>             
159                </fes:Id_Capabilities>
160        </fes:Filter_Capabilities>             
161</WFS_Capabilities>
Note: See TracBrowser for help on using the repository browser.