Configuration
A note to the SensorID
The SensorID is unique for each sensor instance installed/registered at an SPS. While registering (or later) our implementation allows to define your own alias of the sensor to have a better remindable name for the sensor. Our implementation automatically generates an ID for each new sensor instance, thus facilitating plug-and-play of sensors. The xml example files shipping with the SPS framework aliases the sensor CITE_Test-Plugin, so you can refer to this instance with the external representation of the sensor or its internal sensorID
- urn:ogc:object:feature:Sensor:IFGI:CITE_Test-Plugin or its one-to-one internal SensorID
- SID1195425696358333276211349795 which are both unique and mean the same instance of sensor. So do not wonder when you see this big number in some of our examples here.
SensorML document
Although the SensorML document is essential to describe a sensor, we hold it rather simple. The plugin only simulates its state, we do not need to know the exact model of the plugin. By contrast, the parameter definition described above lets you know what values of what parameters are needed to task the sensor.
Nevertheless, the SensorML is required so here it is (bare bone):
<SensorML xmlns:sml="http://www.opengis.net/sensorML/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<member>
<ContactList>
<ResponsibleParty>
<individualName>52North</individualName>
</ResponsibleParty>
<ResponsibleParty>
<individualName>ifgi</individualName>
</ResponsibleParty>
</ContactList>
</member>
</SensorML>
To register the plugin to the SPS it needs a configuration file, in which the sensorML document is embedded. In addition to this, the configuration describes the taskable parameters (and their constraints), given in
SweCommon! types. In the table above listed parameters you should find here again (Currently the maximum mission duration is not taken over):
<n52sps:SensorConfiguration>
<testconfig:TestPluginConfiguration
xmlns:swe="http://www.opengis.net/swe/1.0"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:gml="http://www.opengis.net/gml"
xmlns:ows="http://www.opengis.net/ows"
xmlns:sps="http://www.opengis.net/sps/1.0"
xmlns:n52sps="http://www.52north.org/sps/v1"
xmlns:testconfig="http://www.52north.org/sps/plugin/testconfig"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.52north.org/sps/plugin/testconfig ./testpluginConfiguration.xsd">
<testconfig:InstanceConfig>
<testconfig:Phenomenon>
urn:ogc:feature:phenomenon:AOI
</testconfig:Phenomenon>
<testconfig:DefaultDataServices>
<n52sps:Service>
<n52sps:ServiceType>SOS</n52sps:ServiceType>
<n52sps:ServiceURL>
http://mars.uni-muenster.de:8080/OWS5SOS/sos
</n52sps:ServiceURL>
</n52sps:Service>
</testconfig:DefaultDataServices>
<testconfig:SensorDescription>
<n52sps:SensorML>
<SensorML
xmlns:sml="http://www.opengis.net/sensorML/1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<member>
<ContactList>
<ResponsibleParty>
<individualName>52North</individualName>
</ResponsibleParty>
<ResponsibleParty>
<individualName>ifgi</individualName>
</ResponsibleParty>
</ContactList>
</member>
</SensorML>
</n52sps:SensorML>
</testconfig:SensorDescription>
<testconfig:AreaOfService>
<ows:WGS84BoundingBox>
<!-- lon/lat order -->
<ows:LowerCorner>-180.0 -90.0</ows:LowerCorner>
<ows:UpperCorner>180.0 90.0</ows:UpperCorner>
</ows:WGS84BoundingBox>
</testconfig:AreaOfService>
<testconfig:TaskAccess>
<testconfig:DataServices>
<n52sps:TaskService>
<n52sps:ServiceType>SOS</n52sps:ServiceType>
<n52sps:ServiceURL>
http://mars.uni-muenster.de:8080/OWS5SOS/sos
</n52sps:ServiceURL>
</n52sps:TaskService>
</testconfig:DataServices>
</testconfig:TaskAccess>
</testconfig:InstanceConfig>
<testconfig:InputDescription>
<sps:InputDescriptor parameterID="measurementFrequency"
use="optional" updateable="true">
<sps:definition>
<sps:commonData>
<swe:Quantity>
<swe:uom code="Hz"
xlink:href="urn:x-ogc:def:uom:OGC:Hz" />
</swe:Quantity>
</sps:commonData>
</sps:definition>
</sps:InputDescriptor>
<sps:InputDescriptor parameterID="measurementLocation"
use="required" updateable="false">
<sps:definition>
<sps:commonData>
<swe:Position
referenceFrame="urn:ogc:def:crs:OGC:2:84"
definition="urn:ogc:def:phenomenon:measurement_location">
<swe:location>
<swe:Vector>
<swe:coordinate
name="Geodetic longitude">
<swe:Quantity
axisID="Long">
<swe:uom code="deg" />
<swe:constraint>
<swe:AllowedValues>
<swe:interval>
-180 180
</swe:interval>
</swe:AllowedValues>
</swe:constraint>
</swe:Quantity>
</swe:coordinate>
<swe:coordinate
name="Geodetic latitude">
<swe:Quantity
axisID="Lat">
<swe:uom code="deg" />
<swe:constraint>
<swe:AllowedValues>
<swe:interval>
-90 90
</swe:interval>
</swe:AllowedValues>
</swe:constraint>
</swe:Quantity>
</swe:coordinate>
</swe:Vector>
</swe:location>
</swe:Position>
</sps:commonData>
</sps:definition>
</sps:InputDescriptor>
<sps:InputDescriptor parameterID="measurementCount"
use="optional" updateable="false">
<sps:definition>
<sps:commonData>
<swe:Count>
<swe:constraint>
<swe:AllowedValues>
<swe:max>10</swe:max>
</swe:AllowedValues>
</swe:constraint>
</swe:Count>
</sps:commonData>
</sps:definition>
</sps:InputDescriptor>
<sps:InputDescriptor parameterID="measurementPurpose"
use="optional" updateable="false">
<sps:definition>
<sps:commonData>
<swe:Text />
</sps:commonData>
</sps:definition>
</sps:InputDescriptor>
<sps:InputDescriptor parameterID="measurementPriority"
use="required" updateable="false">
<sps:definition>
<sps:commonData>
<swe:Category>
<swe:constraint>
<swe:AllowedTokens>
<swe:valueList>
low medium high
</swe:valueList>
</swe:AllowedTokens>
</swe:constraint>
</swe:Category>
</sps:commonData>
</sps:definition>
</sps:InputDescriptor>
<sps:InputDescriptor parameterID="shallMeasure"
use="required" updateable="true">
<sps:definition>
<sps:commonData>
<swe:Boolean />
</sps:commonData>
</sps:definition>
</sps:InputDescriptor>
<sps:InputDescriptor parameterID="maxMissionDuration"
use="optional" updateable="false">
<sps:definition>
<sps:commonData>
<swe:Time>
<swe:constraint>
<swe:AllowedTimes>
<swe:interval>
1990-01-01 2009-01-01
</swe:interval>
</swe:AllowedTimes>
</swe:constraint>
</swe:Time>
</sps:commonData>
</sps:definition>
</sps:InputDescriptor>
</testconfig:InputDescription>
</testconfig:TestPluginConfiguration>
</n52sps:SensorConfiguration>
Some draft test requests
For testing your SPS you can use the TEAM engine of the OGC OWS-5 project or you copy/paste the requests in the spsTestClient which comes with the SPS. The URL to retrieve the client is dependent to the name you gave your webapplication, but it should look like
http://{your.url.here}:{port}/{sps webappname}/SPS/spsTestClient.html.
describeResultAccess
<?xml version="1.0" encoding="UTF-8"?>
<DescribeResultAccess xmlns="http://www.opengis.net/sps/1.0"
service="SPS" version="1.0.0">
<!-- <v1:SensorID>SID1195425696358333276211349795</v1:SensorID> -->
<sensorID>
urn:ogc:object:feature:Sensor:IFGI:CITE_Test-Plugin
</sensorID>
</DescribeResultAccess>
describeTasking
<?xml version="1.0" encoding="UTF-8"?>
<DescribeTasking xmlns="http://www.opengis.net/sps/1.0" service="SPS" version="1.0.0">
<sensorID>urn:ogc:object:feature:Sensor:IFGI:CITE_Test-Plugin</sensorID>
</DescribeTasking>
getFeasibility
Note, that the WNS part is not tested here. The current implemenation deals with an optional WNS registration, to make life easier for people who don�t need such a feature. The whole
notificationTarget
will be untested here.
<?xml version="1.0" encoding="UTF-8"?>
<GetFeasibility xmlns="http://www.opengis.net/sps/1.0"
xmlns:gml="http://www.opengis.net/gml"
xmlns:swe="http://www.opengis.net/swe/1.0" service="SPS"
version="1.0.0">
<notificationTarget>
<notificationID>1234</notificationID>
<notificationURL>
http://mars.uni-muenster.de:8080/WNS/wns
</notificationURL>
</notificationTarget>
<sensorID>
<!-- SID1195425696358333276211349795-->
urn:ogc:object:feature:Sensor:IFGI:CITE_Test-Plugin
</sensorID>
<parameters>
<!-- REQUIRED PARAMETERS -->
<InputParameter parameterID="measurementFrequency">
<value>
<swe:Quantity>
<swe:value>1000</swe:value>
</swe:Quantity>
</value>
</InputParameter>
<InputParameter parameterID="measurementLocation">
<value>
<swe:Position
referenceFrame="urn:ogc:def:crs:OGC:2:84"
definition="urn:ogc:def:phenomenon:measurement_location">
<swe:location>
<swe:Vector>
<swe:coordinate name="Geodetic longitude">
<swe:Quantity axisID="Long">
<swe:uom code="deg" />
<swe:value>7.30</swe:value>
</swe:Quantity>
<swe:coordinate name="Geodetic latitude">
<swe:Quantity axisID="Lat">
<swe:uom code="deg" />
<swe:value>52</swe:value>
</swe:Quantity>
</swe:coordinate>
</swe:coordinate>
</swe:Vector>
</swe:location>
</swe:Position>
</value>
</InputParameter>
<InputParameter parameterID="measurementCount">
<value>
<swe:Count>
<swe:value>5</swe:value>
</swe:Count>
</value>
</InputParameter>
<InputParameter parameterID="measurementPurpose">
<value>
<swe:Time>
The Measurement is a simulation if the sensor and
SPS behaves correctly on requests/responses
</swe:Time>
</value>
</InputParameter>
<InputParameter parameterID="measurementPriority">
<value>
<swe:Category>
<swe:value>
<!-- allowed: noPriority low medium high -->
low
</swe:value>
</swe:Category>
</value>
</InputParameter>
<InputParameter parameterID="shallMeasure">
<value>
<swe:Boolean>
<swe:value>true</swe:value>
</swe:Boolean>
</value>
</InputParameter>
</parameters>
<timeFrame>
<gml:TimeInstant>
<gml:timePosition>2008-10-05T12:00:00Z</gml:timePosition>
</gml:TimeInstant>
</timeFrame>
</GetFeasibility>
Submit with FeasibilityID
With a responding FeasibilityID you will be able to do a Submit without putting the whole parameter set in your request again. If the FID is still cached it will do the same as a fresh Submit.
<?xml version="1.0" encoding="UTF-8"?>
<Submit xmlns="http://www.opengis.net/sps/1.0"
xmlns:gml="http://www.opengis.net/gml" service="SPS" version="1.0.0">
<notificationTarget>
<notificationID>1234</notificationID>
<notificationURL>http://mars.uni-muenster.de:8080/WNS/wns</notificationURL>
</notificationTarget>
<feasibilityID>FID119541527495631149082710512</feasibilityID>
</Submit>
Submit
Doing a Submit without checking the sensors feasibility before.
Note, that the WNS part is not tested here. The current implemenation deals with an optional WNS registration, to make life easier for people who don�t need such a feature. The whole
notificationTarget
will be untested here.
<?xml version="1.0" encoding="UTF-8"?>
<Submit xmlns="http://www.opengis.net/sps/1.0"
xmlns:gml="http://www.opengis.net/gml"
xmlns:swe="http://www.opengis.net/swe/1.0" service="SPS"
version="1.0.0">
<notificationTarget>
<notificationID>1234</notificationID>
<notificationURL>
http://mars.uni-muenster.de:8080/WNS/wns
</notificationURL>
</notificationTarget>
<sensorParam>
<sensorID>
<!-- SID1195425696358333276211349795-->
urn:ogc:object:feature:Sensor:IFGI:CITE_Test-Plugin
</sensorID>
<parameters>
<!-- REQUIRED PARAMETERS -->
<InputParameter parameterID="measurementFrequency">
<value>
<swe:Quantity>
<swe:value>1000</swe:value>
</swe:Quantity>
</value>
</InputParameter>
<InputParameter parameterID="measurementLocation">
<value>
<swe:Position
referenceFrame="urn:ogc:def:crs:OGC:2:84"
definition="urn:ogc:def:phenomenon:measurement_location">
<swe:location>
<swe:Vector>
<swe:coordinate
name="Geodetic longitude">
<swe:Quantity axisID="Long">
<swe:uom code="deg" />
<swe:value>7.30</swe:value>
</swe:Quantity>
</swe:coordinate>
<swe:coordinate
name="Geodetic latitude">
<swe:Quantity axisID="Lat">
<swe:uom code="deg" />
<swe:value>52</swe:value>
</swe:Quantity>
</swe:coordinate>
</swe:Vector>
</swe:location>
</swe:Position>
</value>
</InputParameter>
<InputParameter parameterID="measurementCount">
<value>
<swe:Count>
<swe:value>5</swe:value>
</swe:Count>
</value>
</InputParameter>
<InputParameter parameterID="measurementPurpose">
<value>
<swe:Time>
The Measurement is a simulation if the sensor
and SPS behaves correctly on requests/responses
</swe:Time>
</value>
</InputParameter>
<InputParameter parameterID="measurementPriority">
<value>
<swe:Category>
<swe:value>
<!-- allowed: noPriority low medium high -->
low
</swe:value>
</swe:Category>
</value>
</InputParameter>
<InputParameter parameterID="shallMeasure">
<value>
<swe:Boolean>
<swe:value>true</swe:value>
</swe:Boolean>
</value>
</InputParameter>
</parameters>
</sensorParam>
<timeFrame>
<gml:TimeInstant>
<gml:timePosition>2009-10-05T12:00:00Z</gml:timePosition>
</gml:TimeInstant>
</timeFrame>
</Submit>
Cancel
To cancel a task, use its TaskID (this may result in an Exception with code
TaskIDExpired if that ID is no longer known to the SPS).
<?xml version="1.0" encoding="UTF-8"?>
<Cancel xmlns="http://www.opengis.net/sps/1.0" service="SPS" version="1.0.0">
<taskID>TID119541620962032083739655179</taskID>
</Cancel>
Update
Since the sensor can only handle one task at once, the sensor doesn�t support the Update feature. As this is not tested in this testbed, we do not provide any example requests.
--
HenningBredel - 03 Mar 2008