[owslib] 01/03: Imported Upstream version 0.12.0

Johan Van de Wauw johanvdw-guest at moszumanska.debian.org
Tue Sep 13 19:08:29 UTC 2016


This is an automated email from the git hooks/post-receive script.

johanvdw-guest pushed a commit to branch master
in repository owslib.

commit bc95d6e9c019d7791f0786ffebb28a400114a32d
Author: Johan Van de Wauw <johan at vandewauw.be>
Date:   Tue Sep 13 21:00:30 2016 +0200

    Imported Upstream version 0.12.0
---
 VERSION.txt                                        |    2 +-
 docs/en/index.rst                                  |   30 +-
 owslib/__init__.py                                 |    2 +-
 owslib/csw.py                                      |    6 +
 owslib/feature/common.py                           |   66 +
 owslib/feature/wfs100.py                           |  152 +-
 owslib/feature/wfs110.py                           |   84 +-
 owslib/feature/wfs200.py                           |  172 +-
 owslib/namespaces.py                               |    1 +
 owslib/ows.py                                      |   13 +
 owslib/swe/observation/om.py                       |  109 +
 owslib/swe/observation/sos200.py                   |  127 +-
 owslib/swe/observation/waterml2.py                 |  152 +
 owslib/util.py                                     |   98 +-
 owslib/wfs.py                                      |   25 +-
 requirements-dev.txt                               |    1 +
 tests/doctests/csw_pycsw.txt                       |    2 +
 tests/doctests/sos_20_52N_demo.txt                 |   67 +
 tests/doctests/sos_20_bom_gov_au.txt               |   46 +
 tests/doctests/sos_20_timeseries_decoder_ioos.txt  |   57 +
 tests/resources/sos_52n_get_observation_ioos.xml   |  318 ++
 .../sos_52n_get_observation_ioos_wml2.xml          | 3216 ++++++++++++++++++++
 .../sos_52n_getobservation_wml2_response.xml       |   72 +
 tox.ini                                            |    2 +-
 24 files changed, 4469 insertions(+), 351 deletions(-)

diff --git a/VERSION.txt b/VERSION.txt
index bc859cb..ac454c6 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1 +1 @@
-0.11.2
+0.12.0
diff --git a/docs/en/index.rst b/docs/en/index.rst
index 4543ee0..8413c7b 100644
--- a/docs/en/index.rst
+++ b/docs/en/index.rst
@@ -64,7 +64,7 @@ Standards Support
 +-------------------+---------------------+
 | `WMTS`_           | 1.0.0               |
 +-------------------+---------------------+
-| `WaterML`_        | 1.0, 1.1            |
+| `WaterML`_        | 1.0, 1.1, 2.0       |
 +-------------------+---------------------+
 
 Installation
@@ -97,13 +97,13 @@ Anaconda:
 
 .. note::
 
-   The OWSLib conda packages are **not official** and provided on different conda channels: http://anaconda.org/search?q=type%3Aconda+owslib
+   The OWSLib conda packages are provided by the community, not OSGEO, and therefore there may be 
+   multiple packages available.  To search all conda channels: http://anaconda.org/search?q=type%3Aconda+owslib
+   However usually conda-forge will be the most up-to-date. 
 
 .. code-block:: bash
 
-  $ conda install -c birdhouse owslib
-  # or
-  $ conda install -c ioos owslib
+  $ conda install -c conda-forge owslib
 
 openSUSE:
 
@@ -319,8 +319,8 @@ Search for bird data:
   >>> csw.results
   {'matches': 101, 'nextrecord': 21, 'returned': 20}
   >>> for rec in csw.records:
-  ...     print csw.records[rec].title
-  ...
+  ...     print(csw.records[rec].title)
+  ... 
   ALLSPECIES
   NatureServe Canada References
   Bird Studies Canada - BirdMap WMS
@@ -601,8 +601,8 @@ You can also submit a pre-made request encoded as WPS XML:
 	Output URL=http://cida.usgs.gov/climate/gdp/process/RetrieveResultServlet?id=5103866488472745994OUTPUT.f80e2a78-96a9-4343-9777-be60fac5b256
 
 
-SOS
----
+SOS 1.0
+-------
 
 GetCapabilities
 
@@ -612,6 +612,16 @@ GetObservation
 
 .. include:: ../../tests/doctests/sos_10_ndbc_getobservation.txt
 
+SOS 2.0
+-------
+Examples of service metadata and GetObservation
+
+.. include:: ../../tests/doctests/sos_20_52n_geoviqua.txt
+
+Using the GetObservation response decoder for O&M and WaterML2.0 results
+
+.. include:: ../../tests/doctests/sos_20_timeseries_decoder_ioos.txt
+
 SensorML
 --------
 .. include:: ../../tests/doctests/sml_ndbc_station.txt
@@ -782,6 +792,8 @@ Credits
 .. _`OGC WMC`: http://www.opengeospatial.org/standards/wmc
 .. _`OGC WPS`: http://www.opengeospatial.org/standards/wps
 .. _`OGC SOS`: http://www.opengeospatial.org/standards/sos
+.. _`OGC O&M`: http://www.opengeospatial.org/standards/om
+.. _`OGC WaterML2.0`: http://www.opengeospatial.org/standards/waterml
 .. _`OGC SensorML`: http://www.opengeospatial.org/standards/sensorml
 .. _`OGC CSW`: http://www.opengeospatial.org/standards/cat
 .. _`OGC WMTS`: http://www.opengeospatial.org/standards/wmts
diff --git a/owslib/__init__.py b/owslib/__init__.py
index 3a3f1dd..e90f0ff 100644
--- a/owslib/__init__.py
+++ b/owslib/__init__.py
@@ -1,3 +1,3 @@
 from __future__ import (absolute_import, division, print_function)
 
-__version__ = '0.11.2'
+__version__ = '0.12.0'
diff --git a/owslib/csw.py b/owslib/csw.py
index ff6f9df..4117963 100644
--- a/owslib/csw.py
+++ b/owslib/csw.py
@@ -104,6 +104,12 @@ class CatalogueServiceWeb(object):
                 self.operations = []
                 for elem in self._exml.findall(util.nspath_eval('ows:OperationsMetadata/ows:Operation', namespaces)):
                     self.operations.append(ows.OperationsMetadata(elem, self.owscommon.namespace))
+                self.constraints = {}
+                for elem in self._exml.findall(util.nspath_eval('ows:OperationsMetadata/ows:Constraint', namespaces)):
+                    self.constraints[elem.attrib['name']] = ows.Constraint(elem, self.owscommon.namespace)
+                self.parameters = {}
+                for elem in self._exml.findall(util.nspath_eval('ows:OperationsMetadata/ows:Parameter', namespaces)):
+                    self.parameters[elem.attrib['name']] = ows.Parameter(elem, self.owscommon.namespace)
         
                 # FilterCapabilities
                 val = self._exml.find(util.nspath_eval('ogc:Filter_Capabilities', namespaces))
diff --git a/owslib/feature/common.py b/owslib/feature/common.py
new file mode 100644
index 0000000..b082b57
--- /dev/null
+++ b/owslib/feature/common.py
@@ -0,0 +1,66 @@
+import cgi
+from owslib.etree import etree
+from owslib.util import openURL
+
+try:
+    from urllib import urlencode
+except ImportError:
+    from urllib.parse import urlencode
+
+
+
+class WFSCapabilitiesReader(object):
+    """Read and parse capabilities document into a lxml.etree infoset
+    """
+
+    def __init__(self, version='1.0', username=None, password=None):
+        """Initialize"""
+        self.version = version
+        self.username = username
+        self.password = password
+        self._infoset = None
+
+    def capabilities_url(self, service_url):
+        """Return a capabilities url
+        """
+        qs = []
+        if service_url.find('?') != -1:
+            qs = cgi.parse_qsl(service_url.split('?')[1])
+
+        params = [x[0] for x in qs]
+
+        if 'service' not in params:
+            qs.append(('service', 'WFS'))
+        if 'request' not in params:
+            qs.append(('request', 'GetCapabilities'))
+        if 'version' not in params:
+            qs.append(('version', self.version))
+
+        urlqs = urlencode(tuple(qs))
+        return service_url.split('?')[0] + '?' + urlqs
+
+    def read(self, url, timeout=30):
+        """Get and parse a WFS capabilities document, returning an
+        instance of WFSCapabilitiesInfoset
+
+        Parameters
+        ----------
+        url : string
+            The URL to the WFS capabilities document.
+        timeout : number
+            A timeout value (in seconds) for the request.
+        """
+        request = self.capabilities_url(url)
+        u = openURL(request, timeout=timeout,
+                    username=self.username, password=self.password)
+        return etree.fromstring(u.read())
+
+    def readString(self, st):
+        """Parse a WFS capabilities document, returning an
+        instance of WFSCapabilitiesInfoset
+
+        string should be an XML capabilities document
+        """
+        if not isinstance(st, str) and not isinstance(st, bytes):
+            raise ValueError("String must be of type string or bytes, not %s" % type(st))
+        return etree.fromstring(st)
diff --git a/owslib/feature/wfs100.py b/owslib/feature/wfs100.py
index 13ebedb..851c414 100644
--- a/owslib/feature/wfs100.py
+++ b/owslib/feature/wfs100.py
@@ -8,7 +8,6 @@
 
 from __future__ import (absolute_import, division, print_function)
 
-import cgi
 from six import PY2
 from six.moves import cStringIO as StringIO
 try:
@@ -23,6 +22,7 @@ from owslib.crs import Crs
 from owslib.namespaces import Namespaces
 from owslib.util import log
 from owslib.feature.schema import get_schema
+from owslib.feature.common import WFSCapabilitiesReader
 
 import pyproj
 
@@ -35,7 +35,7 @@ OGC_NAMESPACE = n.get_namespace("ogc")
 def nspath(path, ns=WFS_NAMESPACE):
     """
     Prefix the given path with the given namespace identifier.
-    
+
     Parameters
     ----------
     path : string
@@ -57,9 +57,10 @@ class WebFeatureService_1_0_0(object):
 
     Implements IWebFeatureService.
     """
-    def __new__(self,url, version, xml, parse_remote_metadata=False, timeout=30):
-        """ overridden __new__ method 
-        
+    def __new__(self,url, version, xml, parse_remote_metadata=False, timeout=30,
+                username=None, password=None):
+        """ overridden __new__ method
+
         @type url: string
         @param url: url of WFS capabilities document
         @type xml: string
@@ -67,69 +68,77 @@ class WebFeatureService_1_0_0(object):
         @type parse_remote_metadata: boolean
         @param parse_remote_metadata: whether to fully process MetadataURL elements
         @param timeout: time (in seconds) after which requests should timeout
+        @param username: service authentication username
+        @param password: service authentication password
         @return: initialized WebFeatureService_1_0_0 object
         """
         obj=object.__new__(self)
-        obj.__init__(url, version, xml, parse_remote_metadata, timeout)
+        obj.__init__(url, version, xml, parse_remote_metadata, timeout,
+                     username=username, password=password)
         return obj
-    
+
     def __getitem__(self,name):
         ''' check contents dictionary to allow dict like access to service layers'''
         if name in self.__getattribute__('contents').keys():
             return self.__getattribute__('contents')[name]
         else:
             raise KeyError("No content named %s" % name)
-    
-    
-    def __init__(self, url, version, xml=None, parse_remote_metadata=False, timeout=30):
+
+
+    def __init__(self, url, version, xml=None, parse_remote_metadata=False, timeout=30,
+                 username=None, password=None):
         """Initialize."""
         self.url = url
         self.version = version
         self.timeout = timeout
+        self.username = username
+        self.password = password
         self._capabilities = None
-        reader = WFSCapabilitiesReader(self.version)
+        reader = WFSCapabilitiesReader(self.version, self.username, self.password)
         if xml:
             self._capabilities = reader.readString(xml)
         else:
             self._capabilities = reader.read(self.url)
         self._buildMetadata(parse_remote_metadata)
-    
+
+
     def _buildMetadata(self, parse_remote_metadata=False):
         '''set up capabilities metadata objects: '''
-        
+
         #serviceIdentification metadata
         serviceelem=self._capabilities.find(nspath('Service'))
-        self.identification=ServiceIdentification(serviceelem, self.version)  
-    
+        self.identification=ServiceIdentification(serviceelem, self.version)
+
         #serviceProvider metadata
-        self.provider=ServiceProvider(serviceelem)   
-        
-        #serviceOperations metadata 
+        self.provider=ServiceProvider(serviceelem)
+
+        #serviceOperations metadata
         self.operations=[]
         for elem in self._capabilities.find(nspath('Capability/Request'))[:]:
             self.operations.append(OperationMetadata(elem))
-                   
-        #serviceContents metadata: our assumption is that services use a top-level 
-        #layer as a metadata organizer, nothing more. 
-        
-        self.contents={} 
+
+        #serviceContents metadata: our assumption is that services use a top-level
+        #layer as a metadata organizer, nothing more.
+
+        self.contents={}
         featuretypelist=self._capabilities.find(nspath('FeatureTypeList'))
         features = self._capabilities.findall(nspath('FeatureTypeList/FeatureType'))
         for feature in features:
             cm=ContentMetadata(feature, featuretypelist, parse_remote_metadata)
-            self.contents[cm.id]=cm       
-        
+            self.contents[cm.id]=cm
+
         #exceptions
         self.exceptions = [f.text for f \
                 in self._capabilities.findall('Capability/Exception/Format')]
-      
+
     def getcapabilities(self):
-        """Request and return capabilities document from the WFS as a 
+        """Request and return capabilities document from the WFS as a
         file-like object.
         NOTE: this is effectively redundant now"""
         reader = WFSCapabilitiesReader(self.version)
-        return openURL(reader.capabilities_url(self.url), timeout=self.timeout)
-    
+        return openURL(reader.capabilities_url(self.url), timeout=self.timeout,
+                       username=self.username, password=self.password)
+
     def items(self):
         '''supports dict-like items() access'''
         items=[]
@@ -153,12 +162,12 @@ class WebFeatureService_1_0_0(object):
                    srsname=None, outputFormat=None, method='{http://www.opengis.net/wfs}Get',
                    startindex=None):
         """Request and return feature data as a file-like object.
-        
+
         Parameters
         ----------
         typename : list
             List of typenames (string)
-        filter : string 
+        filter : string
             XML-encoded OGC filter expression.
         bbox : tuple
             (left, bottom, right, top) in the feature type's coordinates.
@@ -179,7 +188,7 @@ class WebFeatureService_1_0_0(object):
         startindex: int (optional)
             Start position to return feature set (paging in combination with maxfeatures)
 
-            
+
         There are 3 different modes of use
 
         1) typename and bbox (simple spatial query)
@@ -199,13 +208,13 @@ class WebFeatureService_1_0_0(object):
             request['bbox'] = ','.join([repr(x) for x in bbox])
         elif filter and typename:
             request['filter'] = str(filter)
-        
+
         if srsname:
             request['srsname'] = str(srsname)
-            
+
         assert len(typename) > 0
         request['typename'] = ','.join(typename)
-        
+
         if propertyname is not None:
             if not isinstance(propertyname, list):
                 propertyname = [propertyname]
@@ -220,9 +229,10 @@ class WebFeatureService_1_0_0(object):
 
         data = urlencode(request)
         log.debug("Making request: %s?%s" % (base_url, data))
-        u = openURL(base_url, data, method, timeout=self.timeout)
-        
-        
+        u = openURL(base_url, data, method, timeout=self.timeout,
+                    username=self.username, password=self.password)
+
+
         # check for service exceptions, rewrap, and return
         # We're going to assume that anything with a content-length > 32k
         # is data. We'll check anything smaller.
@@ -268,12 +278,12 @@ class WebFeatureService_1_0_0(object):
         """
 
         return get_schema(self.url, typename, self.version)
-    
+
 
 
 class ServiceIdentification(object):
     ''' Implements IServiceIdentificationMetadata '''
-    
+
     def __init__(self, infoset, version):
         self._root=infoset
         self.type = testXMLValue(self._root.find(nspath('Name')))
@@ -294,7 +304,7 @@ class ServiceProvider(object):
 
 class ContentMetadata:
     """Abstraction for WFS metadata.
-    
+
     Implements IMetadata.
     """
 
@@ -314,7 +324,7 @@ class ContentMetadata:
             self.boundingBox = (float(b.attrib['minx']),float(b.attrib['miny']),
                     float(b.attrib['maxx']), float(b.attrib['maxy']), Crs(srs.text))
 
-        # transform wgs84 bbox from given default bboxt 
+        # transform wgs84 bbox from given default bboxt
         self.boundingBoxWGS84 = None
 
         if b is not None and srs is not None:
@@ -340,7 +350,7 @@ class ContentMetadata:
         self.verbOptions + [op.tag for op \
             in elem.findall(nspath('Operations/*')) \
             if op.tag not in self.verbOptions]
-        
+
         #others not used but needed for iContentMetadata harmonisation
         self.styles=None
         self.timepositions=None
@@ -372,7 +382,7 @@ class ContentMetadata:
 
 class OperationMetadata:
     """Abstraction for WFS metadata.
-    
+
     Implements IMetadata.
     """
     def __init__(self, elem):
@@ -384,57 +394,3 @@ class OperationMetadata:
         for verb in elem.findall(nspath('DCPType/HTTP/*')):
             url = verb.attrib['onlineResource']
             self.methods.append({'type' : xmltag_split(verb.tag), 'url': url})
-
-
-class WFSCapabilitiesReader(object):
-    """Read and parse capabilities document into a lxml.etree infoset
-    """
-
-    def __init__(self, version='1.0'):
-        """Initialize"""
-        self.version = version
-        self._infoset = None
-
-    def capabilities_url(self, service_url):
-        """Return a capabilities url
-        """
-        qs = []
-        if service_url.find('?') != -1:
-            qs = cgi.parse_qsl(service_url.split('?')[1])
-
-        params = [x[0] for x in qs]
-
-        if 'service' not in params:
-            qs.append(('service', 'WFS'))
-        if 'request' not in params:
-            qs.append(('request', 'GetCapabilities'))
-        if 'version' not in params:
-            qs.append(('version', self.version))
-
-        urlqs = urlencode(tuple(qs))
-        return service_url.split('?')[0] + '?' + urlqs
-
-    def read(self, url, timeout=30):
-        """Get and parse a WFS capabilities document, returning an
-        instance of WFSCapabilitiesInfoset
-
-        Parameters
-        ----------
-        url : string
-            The URL to the WFS capabilities document.
-        timeout : number
-            A timeout value (in seconds) for the request.
-        """
-        request = self.capabilities_url(url)
-        u = openURL(request, timeout=timeout)
-        return etree.fromstring(u.read())
-
-    def readString(self, st):
-        """Parse a WFS capabilities document, returning an
-        instance of WFSCapabilitiesInfoset
-
-        string should be an XML capabilities document
-        """
-        if not isinstance(st, str) and not isinstance(st, bytes):
-            raise ValueError("String must be of type string or bytes, not %s" % type(st))
-        return etree.fromstring(st)
diff --git a/owslib/feature/wfs110.py b/owslib/feature/wfs110.py
index 5dd9e4e..963ce11 100644
--- a/owslib/feature/wfs110.py
+++ b/owslib/feature/wfs110.py
@@ -1,4 +1,4 @@
-# -*- coding: ISO-8859-15 -*-
+# -*- coding: utf-8 -*-
 # =============================================================================
 # Copyright (c) 2011 Tom Kralidis
 #
@@ -9,7 +9,6 @@
 
 from __future__ import (absolute_import, division, print_function)
 
-import cgi
 from six import PY2
 from six.moves import cStringIO as StringIO
 try:
@@ -24,9 +23,11 @@ from owslib.ows import *
 from owslib.fes import *
 from owslib.crs import Crs
 from owslib.feature import WebFeatureService_
+from owslib.feature.common import WFSCapabilitiesReader
 from owslib.namespaces import Namespaces
 from owslib.util import log
 
+
 def get_namespaces():
     n = Namespaces()
     return n.get_namespaces(["gml","ogc","ows","wfs"])
@@ -37,7 +38,8 @@ class WebFeatureService_1_1_0(WebFeatureService_):
 
     Implements IWebFeatureService.
     """
-    def __new__(self,url, version, xml, parse_remote_metadata=False, timeout=30):
+    def __new__(self,url, version, xml, parse_remote_metadata=False, timeout=30,
+                username=None, password=None):
         """ overridden __new__ method
 
         @type url: string
@@ -47,10 +49,13 @@ class WebFeatureService_1_1_0(WebFeatureService_):
         @type parse_remote_metadata: boolean
         @param parse_remote_metadata: whether to fully process MetadataURL elements
         @param timeout: time (in seconds) after which requests should timeout
+        @param username: service authentication username
+        @param password: service authentication password
         @return: initialized WebFeatureService_1_1_0 object
         """
         obj=object.__new__(self)
-        obj.__init__(url, version, xml, parse_remote_metadata, timeout)
+        obj.__init__(url, version, xml, parse_remote_metadata, timeout,
+                     username=username, password=password)
         return obj
 
     def __getitem__(self,name):
@@ -61,11 +66,14 @@ class WebFeatureService_1_1_0(WebFeatureService_):
             raise KeyError("No content named %s" % name)
 
 
-    def __init__(self, url, version, xml=None, parse_remote_metadata=False, timeout=30):
+    def __init__(self, url, version, xml=None, parse_remote_metadata=False, timeout=30,
+                 username=None, password=None):
         """Initialize."""
         self.url = url
         self.version = version
         self.timeout = timeout
+        self.username = username
+        self.password = password
         self._capabilities = None
         self.owscommon = OwsCommon('1.0.0')
         reader = WFSCapabilitiesReader(self.version)
@@ -88,6 +96,12 @@ class WebFeatureService_1_1_0(WebFeatureService_):
         self.operations=[]
         for elem in self._capabilities.findall(util.nspath_eval('ows:OperationsMetadata/ows:Operation', namespaces)):
             self.operations.append(OperationsMetadata(elem, self.owscommon.namespace))
+        self.constraints = {}
+        for elem in self._capabilities.findall(util.nspath_eval('ows:OperationsMetadata/ows:Constraint', namespaces)):
+            self.constraints[elem.attrib['name']] = Constraint(elem, self.owscommon.namespace)
+        self.parameters = {}
+        for elem in self._capabilities.findall(util.nspath_eval('ows:OperationsMetadata/ows:Parameter', namespaces)):
+            self.parameters[elem.attrib['name']] = Parameter(elem, self.owscommon.namespace)
 
         # FilterCapabilities
         val = self._capabilities.find(util.nspath_eval('ogc:Filter_Capabilities', namespaces))
@@ -111,7 +125,8 @@ class WebFeatureService_1_1_0(WebFeatureService_):
         file-like object.
         NOTE: this is effectively redundant now"""
         reader = WFSCapabilitiesReader(self.version)
-        return openURL(reader.capabilities_url(self.url), timeout=self.timeout)
+        return openURL(reader.capabilities_url(self.url), timeout=self.timeout,
+                       username=self.username, password=self.password)
 
     def items(self):
         '''supports dict-like items() access'''
@@ -222,7 +237,8 @@ class WebFeatureService_1_1_0(WebFeatureService_):
 
         data = urlencode(request)
         log.debug("Making request: %s?%s" % (base_url, data))
-        u = openURL(base_url, data, method, timeout=self.timeout)
+        u = openURL(base_url, data, method, timeout=self.timeout,
+                    username=self.username, password=self.password)
 
         # check for service exceptions, rewrap, and return
         # We're going to assume that anything with a content-length > 32k
@@ -324,57 +340,3 @@ class ContentMetadata:
         self.styles=None
         self.timepositions=None
         self.defaulttimeposition=None
-
-class WFSCapabilitiesReader(object):
-    """Read and parse capabilities document into a lxml.etree infoset
-    """
-
-    def __init__(self, version='1.0'):
-        """Initialize"""
-        self.version = version
-        self._infoset = None
-
-    def capabilities_url(self, service_url):
-        """Return a capabilities url
-        """
-        qs = []
-        if service_url.find('?') != -1:
-            qs = cgi.parse_qsl(service_url.split('?')[1])
-
-        params = [x[0] for x in qs]
-
-        if 'service' not in params:
-            qs.append(('service', 'WFS'))
-        if 'request' not in params:
-            qs.append(('request', 'GetCapabilities'))
-        if 'version' not in params:
-            qs.append(('version', self.version))
-
-        urlqs = urlencode(tuple(qs))
-        return service_url.split('?')[0] + '?' + urlqs
-
-    def read(self, url, timeout=30):
-        """Get and parse a WFS capabilities document, returning an
-        instance of WFSCapabilitiesInfoset
-
-        Parameters
-        ----------
-        url : string
-            The URL to the WFS capabilities document.
-        timeout : number
-            A timeout value (in seconds) for the request.
-        """
-        request = self.capabilities_url(url)
-        u = openURL(request, timeout=timeout)
-        return etree.fromstring(u.read())
-
-    def readString(self, st):
-        """Parse a WFS capabilities document, returning an
-        instance of WFSCapabilitiesInfoset
-
-        string should be an XML capabilities document
-        """
-        if not isinstance(st, str) and not isinstance(st, bytes):
-            raise ValueError("String must be of type string or bytes, not %s" % type(st))
-        return etree.fromstring(st)
-
diff --git a/owslib/feature/wfs200.py b/owslib/feature/wfs200.py
index afc0fef..9112355 100644
--- a/owslib/feature/wfs200.py
+++ b/owslib/feature/wfs200.py
@@ -14,10 +14,10 @@ from owslib.etree import etree
 from owslib.util import nspath, testXMLValue, openURL
 from owslib.crs import Crs
 from owslib.feature import WebFeatureService_
+from owslib.feature.common import WFSCapabilitiesReader
 from owslib.namespaces import Namespaces
 
 #other imports
-import cgi
 from six import PY2
 from six.moves import cStringIO as StringIO
 try:
@@ -45,9 +45,10 @@ class WebFeatureService_2_0_0(WebFeatureService_):
 
     Implements IWebFeatureService.
     """
-    def __new__(self,url, version, xml, parse_remote_metadata=False, timeout=30):
-        """ overridden __new__ method 
-        
+    def __new__(self,url, version, xml, parse_remote_metadata=False, timeout=30,
+                username=None, password=None):
+        """ overridden __new__ method
+
         @type url: string
         @param url: url of WFS capabilities document
         @type xml: string
@@ -55,27 +56,33 @@ class WebFeatureService_2_0_0(WebFeatureService_):
         @type parse_remote_metadata: boolean
         @param parse_remote_metadata: whether to fully process MetadataURL elements
         @param timeout: time (in seconds) after which requests should timeout
+        @param username: service authentication username
+        @param password: service authentication password
         @return: initialized WebFeatureService_2_0_0 object
         """
         obj=object.__new__(self)
-        obj.__init__(url, version, xml, parse_remote_metadata, timeout)
+        obj.__init__(url, version, xml, parse_remote_metadata, timeout,
+                     username=username, password=password)
         return obj
-    
+
     def __getitem__(self,name):
         ''' check contents dictionary to allow dict like access to service layers'''
         if name in self.__getattribute__('contents').keys():
             return self.__getattribute__('contents')[name]
         else:
             raise KeyError("No content named %s" % name)
-    
-    
-    def __init__(self, url,  version, xml=None, parse_remote_metadata=False, timeout=30):
+
+
+    def __init__(self, url,  version, xml=None, parse_remote_metadata=False, timeout=30,
+                 username=None, password=None):
         """Initialize."""
         if log.isEnabledFor(logging.DEBUG):
             log.debug('building WFS %s'%url)
         self.url = url
         self.version = version
         self.timeout = timeout
+        self.username = username
+        self.password = password
         self._capabilities = None
         reader = WFSCapabilitiesReader(self.version)
         if xml:
@@ -83,56 +90,63 @@ class WebFeatureService_2_0_0(WebFeatureService_):
         else:
             self._capabilities = reader.read(self.url)
         self._buildMetadata(parse_remote_metadata)
-    
+
     def _buildMetadata(self, parse_remote_metadata=False):
         '''set up capabilities metadata objects: '''
-        
+
         #serviceIdentification metadata
         serviceidentelem=self._capabilities.find(nspath('ServiceIdentification'))
-        self.identification=ServiceIdentification(serviceidentelem)  
+        self.identification=ServiceIdentification(serviceidentelem)
         #need to add to keywords list from featuretypelist information:
         featuretypelistelem=self._capabilities.find(nspath('FeatureTypeList', ns=WFS_NAMESPACE))
         featuretypeelems=featuretypelistelem.findall(nspath('FeatureType', ns=WFS_NAMESPACE))
-        for f in featuretypeelems:  
+        for f in featuretypeelems:
             kwds=f.findall(nspath('Keywords/Keyword',ns=OWS_NAMESPACE))
             if kwds is not None:
                 for kwd in kwds[:]:
                     if kwd.text not in self.identification.keywords:
                         self.identification.keywords.append(kwd.text)
-	
-   
+
+
         #TODO: update serviceProvider metadata, miss it out for now
         serviceproviderelem=self._capabilities.find(nspath('ServiceProvider'))
-        self.provider=ServiceProvider(serviceproviderelem)   
-        
-        #serviceOperations metadata 
+        self.provider=ServiceProvider(serviceproviderelem)
+
+        #serviceOperations metadata
         self.operations=[]
-        
+
         for elem in self._capabilities.find(nspath('OperationsMetadata'))[:]:
             if elem.tag !=nspath('ExtendedCapabilities'):
                 self.operations.append(OperationsMetadata(elem))
-                   
-        #serviceContents metadata: our assumption is that services use a top-level 
-        #layer as a metadata organizer, nothing more. 
-        
-        self.contents={} 
+        self.constraints = {}
+        for elem in self._capabilities.findall(nspath('OperationsMetadata/Constraint', ns=WFS_NAMESPACE)):
+            self.constraints[elem.attrib['name']] = Constraint(elem, self.owscommon.namespace)
+        self.parameters = {}
+        for elem in self._capabilities.findall(nspath('OperationsMetadata/Parameter', ns=WFS_NAMESPACE)):
+            self.parameters[elem.attrib['name']] = Parameter(elem, self.owscommon.namespace)
+
+        #serviceContents metadata: our assumption is that services use a top-level
+        #layer as a metadata organizer, nothing more.
+
+        self.contents={}
         featuretypelist=self._capabilities.find(nspath('FeatureTypeList',ns=WFS_NAMESPACE))
         features = self._capabilities.findall(nspath('FeatureTypeList/FeatureType', ns=WFS_NAMESPACE))
         for feature in features:
             cm=ContentMetadata(feature, featuretypelist, parse_remote_metadata)
-            self.contents[cm.id]=cm       
-        
+            self.contents[cm.id]=cm
+
         #exceptions
         self.exceptions = [f.text for f \
                 in self._capabilities.findall('Capability/Exception/Format')]
-      
+
     def getcapabilities(self):
-        """Request and return capabilities document from the WFS as a 
+        """Request and return capabilities document from the WFS as a
         file-like object.
         NOTE: this is effectively redundant now"""
         reader = WFSCapabilitiesReader(self.version)
-        return openURL(reader.capabilities_url(self.url), timeout=self.timeout)
-    
+        return openURL(reader.capabilities_url(self.url), timeout=self.timeout,
+                       username=self.username, password=self.password)
+
     def items(self):
         '''supports dict-like items() access'''
         items=[]
@@ -160,7 +174,7 @@ class WebFeatureService_2_0_0(WebFeatureService_):
         ----------
         typename : list
             List of typenames (string)
-        filter : string 
+        filter : string
             XML-encoded OGC filter expression.
         bbox : tuple
             (left, bottom, right, top) in the feature type's coordinates == (minx, miny, maxx, maxy)
@@ -201,7 +215,8 @@ class WebFeatureService_2_0_0(WebFeatureService_):
 
 
         # If method is 'Post', data will be None here
-        u = openURL(url, data, method, timeout=self.timeout)
+        u = openURL(url, data, method, timeout=self.timeout,
+                    username=self.username, password=self.password)
 
         # check for service exceptions, rewrap, and return
         # We're going to assume that anything with a content-length > 32k
@@ -244,9 +259,9 @@ class WebFeatureService_2_0_0(WebFeatureService_):
         request = {'service': 'WFS', 'version': self.version, 'request': 'GetPropertyValue'}
         if query:
             request['query'] = str(query)
-        if valuereference: 
+        if valuereference:
             request['valueReference'] = str(valuereference)
-        if storedquery_id: 
+        if storedquery_id:
             request['storedQuery_id'] = str(storedquery_id)
         if typename:
             request['typename']=str(typename)
@@ -254,17 +269,18 @@ class WebFeatureService_2_0_0(WebFeatureService_):
             for kw in kwargs.keys():
                 request[kw]=str(kwargs[kw])
         encoded_request=urlencode(request)
-        u = openURL(base_url + encoded_request)
+        u = openURL(base_url + encoded_request, timeout=self.timeout,
+                    username=self.username, password=self.password)
         return u.read()
-        
-        
+
+
     def _getStoredQueries(self):
         ''' gets descriptions of the stored queries available on the server '''
         sqs=[]
         #This method makes two calls to the WFS - one ListStoredQueries, and one DescribeStoredQueries. The information is then
         #aggregated in 'StoredQuery' objects
         method=nspath('Get')
-        
+
         #first make the ListStoredQueries response and save the results in a dictionary if form {storedqueryid:(title, returnfeaturetype)}
         try:
             base_url = next((m.get('url') for m in self.getOperationByName('ListStoredQueries').methods if m.get('type').lower() == method.lower()))
@@ -273,9 +289,10 @@ class WebFeatureService_2_0_0(WebFeatureService_):
 
         request = {'service': 'WFS', 'version': self.version, 'request': 'ListStoredQueries'}
         encoded_request = urlencode(request)
-        u = openURL(base_url, data=encoded_request, timeout=self.timeout)
+        u = openURL(base_url, data=encoded_request, timeout=self.timeout,
+                    username=self.username, password=self.password)
         tree=etree.fromstring(u.read())
-        tempdict={}       
+        tempdict={}
         for sqelem in tree[:]:
             title=rft=id=None
             id=sqelem.get('id')
@@ -285,17 +302,18 @@ class WebFeatureService_2_0_0(WebFeatureService_):
                 elif elem.tag==nspath('ReturnFeatureType', WFS_NAMESPACE):
                     rft=elem.text
             tempdict[id]=(title,rft)        #store in temporary dictionary
-        
-        #then make the DescribeStoredQueries request and get the rest of the information about the stored queries 
+
+        #then make the DescribeStoredQueries request and get the rest of the information about the stored queries
         try:
             base_url = next((m.get('url') for m in self.getOperationByName('DescribeStoredQueries').methods if m.get('type').lower() == method.lower()))
         except StopIteration:
             base_url = self.url
         request = {'service': 'WFS', 'version': self.version, 'request': 'DescribeStoredQueries'}
         encoded_request = urlencode(request)
-        u = openURL(base_url, data=encoded_request, timeout=self.timeout)
+        u = openURL(base_url, data=encoded_request, timeout=self.timeout,
+                    username=self.username, password=self.password)
         tree=etree.fromstring(u.read())
-        tempdict2={} 
+        tempdict2={}
         for sqelem in tree[:]:
             params=[] #list to store parameters for the stored query description
             id =sqelem.get('id')
@@ -307,7 +325,7 @@ class WebFeatureService_2_0_0(WebFeatureService_):
                     newparam=Parameter(elem.get('name'), elem.get('type'))
                     params.append(newparam)
             tempdict2[id]=(abstract, params) #store in another temporary dictionary
-        
+
         #now group the results into StoredQuery objects:
         for key in tempdict.keys():
             sqs.append(StoredQuery(key, tempdict[key][0], tempdict[key][1], tempdict2[key][0], tempdict2[key][1]))
@@ -329,16 +347,16 @@ class StoredQuery(object):
         self.returnfeaturetype=returntype
         self.abstract=abstract
         self.parameters=parameters
-        
+
 class Parameter(object):
     def __init__(self, name, type):
         self.name=name
         self.type=type
-        
-    
+
+
 class ContentMetadata:
     """Abstraction for WFS metadata.
-    
+
     Implements IMetadata.
     """
 
@@ -383,7 +401,7 @@ class ContentMetadata:
         self.verbOptions + [op.tag for op \
             in elem.findall(nspath('Operations/*',ns=WFS_NAMESPACE)) \
             if op.tag not in self.verbOptions]
-        
+
         #others not used but needed for iContentMetadata harmonisation
         self.styles=None
         self.timepositions=None
@@ -410,57 +428,3 @@ class ContentMetadata:
                     metadataUrl['metadata'] = None
 
             self.metadataUrls.append(metadataUrl)
-
-
-class WFSCapabilitiesReader(object):
-    """Read and parse capabilities document into a lxml.etree infoset
-    """
-
-    def __init__(self, version='2.0.0'):
-        """Initialize"""
-        self.version = version
-        self._infoset = None
-
-    def capabilities_url(self, service_url):
-        """Return a capabilities url
-        """
-        qs = []
-        if service_url.find('?') != -1:
-            qs = cgi.parse_qsl(service_url.split('?')[1])
-
-        params = [x[0] for x in qs]
-
-        if 'service' not in params:
-            qs.append(('service', 'WFS'))
-        if 'request' not in params:
-            qs.append(('request', 'GetCapabilities'))
-        if 'version' not in params:
-            qs.append(('version', self.version))
-
-        urlqs = urlencode(tuple(qs))
-        return service_url.split('?')[0] + '?' + urlqs
-
-    def read(self, url, timeout=30):
-        """Get and parse a WFS capabilities document, returning an
-        instance of WFSCapabilitiesInfoset
-
-        Parameters
-        ----------
-        url : string
-            The URL to the WFS capabilities document.
-        timeout : number
-            A timeout value (in seconds) for the request.
-        """
-        request = self.capabilities_url(url)
-        u = openURL(request, timeout=timeout)
-        return etree.fromstring(u.read())
-
-    def readString(self, st):
-        """Parse a WFS capabilities document, returning an
-        instance of WFSCapabilitiesInfoset
-
-        string should be an XML capabilities document
-        """
-        if not isinstance(st, str) and not isinstance(st, bytes):
-            raise ValueError("String must be of type string or bytes, not %s" % type(st))
-        return etree.fromstring(st)
diff --git a/owslib/namespaces.py b/owslib/namespaces.py
index 830f4fa..d87cd09 100644
--- a/owslib/namespaces.py
+++ b/owslib/namespaces.py
@@ -49,6 +49,7 @@ class Namespaces(object):
         'swe20' :   'http://www.opengis.net/swe/2.0',
         'swes'  :   'http://www.opengis.net/swes/2.0',
         'tml'   :   'ttp://www.opengis.net/tml',
+        'wml2'  :   'http://www.opengis.net/waterml/2.0',
         'wfs'   :   'http://www.opengis.net/wfs',
         'wfs20' :   'http://www.opengis.net/wfs/2.0',
         'wcs'   :   'http://www.opengis.net/wcs',
diff --git a/owslib/ows.py b/owslib/ows.py
index f92ffcb..eb4cf9d 100644
--- a/owslib/ows.py
+++ b/owslib/ows.py
@@ -161,6 +161,19 @@ class Constraint(object):
             return "Constraint: %s" % self.name
 
 
+class Parameter(object):
+    def __init__(self, elem, namespace=DEFAULT_OWS_NAMESPACE):
+        self.name    = elem.attrib.get('name')
+        self.values  = [i.text for i in elem.findall(util.nspath('Value', namespace))]
+        self.values += [i.text for i in elem.findall(util.nspath('AllowedValues/Value', namespace))]
+
+    def __repr__(self):
+        if self.values:
+            return "Parameter: %s - %s" % (self.name, self.values)
+        else:
+            return "Parameter: %s" % self.name
+
+
 class OperationsMetadata(object):
     """Initialize an OWS OperationMetadata construct"""
     def __init__(self, elem, namespace=DEFAULT_OWS_NAMESPACE):
diff --git a/owslib/swe/observation/om.py b/owslib/swe/observation/om.py
new file mode 100644
index 0000000..1196bde
--- /dev/null
+++ b/owslib/swe/observation/om.py
@@ -0,0 +1,109 @@
+# -*- coding: ISO-8859-15 -*-
+# =============================================================================
+# Copyright (c) 2014 Pete Taylor
+#
+# Authors : Pete Taylor <peterataylor at gmail.com>
+#
+# Contact email: peterataylor at gmail.com
+# =============================================================================
+
+from owslib.util import nspath_eval, extract_time
+from owslib.namespaces import Namespaces
+from owslib.util import testXMLAttribute, testXMLValue
+
+def get_namespaces():
+    ns = Namespaces()
+    return ns.get_namespaces(["swe20", "xlink", "sos20", "om20", "gml32",
+        "xsi"])
+namespaces = get_namespaces()
+
+def nspv(path):
+    return nspath_eval(path, namespaces)
+
+class TimePeriod(object):
+    ''' Basic class for gml TimePeriod '''
+    def __init__(self, start, end):
+        self.start = start
+        self.end = end
+    def __str__(self):
+        return ("start: " + str(self.start) + " " +
+                "end: " + str(self.end))
+
+class OM_Observation(object):
+    ''' The base OM_Observation type, of which there may be many
+    specialisations, e.g. MesaurementObservation, SWE Observation, WML2 etc.
+    Currently assumes that many properties are xlink only (not inline).
+    '''
+    def __init__(self, element):
+        self.type = testXMLAttribute(element.find(nspv(
+            "om20:type")), nspv("xlink:href"))
+
+        self.featureOfInterest = testXMLAttribute(element.find(nspv(
+            "om20:featureOfInterest")), nspv("xlink:href"))
+
+        self.observedProperty = testXMLAttribute(element.find(nspv(
+            "om20:observedProperty")), nspv("xlink:href"))
+
+        self.procedure = testXMLAttribute(element.find(nspv(
+            "om20:procedure")), nspv("xlink:href"))
+
+        ''' Determine if phenom time is instant or a period. This
+            depend on the type of observation -- this could be split out '''
+        instant_element = element.find(nspv(
+            "om20:phenomenonTime/gml32:TimeInstant"))
+
+        if instant_element is not None:
+            self.phenomenonTime = extract_time(instant_element)
+        else:
+            start = extract_time(element.find(nspv(
+                "om20:phenomenonTime/gml32:TimePeriod/gml32:beginPosition")))
+            end = extract_time(element.find(nspv(
+                "om20:phenomenonTime/gml32:TimePeriod/gml32:endPosition")))
+            self.phenomenonTime = TimePeriod(start, end)
+
+        self.resultTime = extract_time(element.find(nspv(
+            "om20:resultTime/gml32:TimeInstant/gml32:timePosition")))
+
+        self.result = element.find(nspv("om20:result"))
+
+    def get_result(self):
+        ''' This will handle different result types using specialised
+        observation types '''
+        return self.result
+
+class MeasurementObservation(OM_Observation):
+    ''' Specialised observation type that has a measurement (value + uom)
+    as result type
+    '''
+    def __init__(self, element):
+        super(MeasurementObservation, self).__init__(element)
+        self._parse_result()
+
+    def _parse_result(self):
+        ''' Parse the result property, extracting the value
+        and unit of measure '''
+        if self.result is not None:
+            uom = testXMLAttribute(self.result, "uom")
+            value_str = testXMLValue(self.result)
+            try:
+                value = float(value_str)
+            except:
+                raise ValueError("Error parsing measurement value")
+            self.result = Measurement(value, uom)
+
+    def get_result(self):
+        return self.result
+
+class Result(object): 
+    ''' Base class for different OM_Observation result types '''
+    def __init__(self, element):
+        pass
+
+class Measurement(Result): 
+    ''' A single measurement (value + uom) '''
+    def __init__(self, value, uom):
+        super(Measurement, self).__init__(None)
+        self.value = value
+        self.uom = uom
+    def __str__(self):
+        return str(self.value) + "(" + self.uom + ")"
diff --git a/owslib/swe/observation/sos200.py b/owslib/swe/observation/sos200.py
index 4894908..6c86a03 100644
--- a/owslib/swe/observation/sos200.py
+++ b/owslib/swe/observation/sos200.py
@@ -2,20 +2,22 @@ from __future__ import (absolute_import, division, print_function)
 
 import cgi
 from owslib.etree import etree
-from datetime import datetime
-try:                    # Python 3
-    from urllib.parse import urlencode
-except ImportError:     # Python 2
-    from urllib import urlencode
+try:
+    from urllib.parse import urlencode  # Python 3
+except ImportError:
+    from urllib import urlencode  # Python 2
 from owslib import ows
 from owslib.crs import Crs
 from owslib.fes import FilterCapabilities200
-from owslib.util import openURL, testXMLValue, nspath_eval, nspath, extract_time
+from owslib.util import openURL, testXMLValue, testXMLAttribute, nspath_eval, extract_time
 from owslib.namespaces import Namespaces
+from owslib.swe.observation.om import MeasurementObservation
+from owslib.swe.observation.waterml2 import MeasurementTimeseriesObservation
+
 
 def get_namespaces():
     n = Namespaces()
-    ns = n.get_namespaces(["fes","ogc","om","gml32","sa","sml","swe20","swes","xlink"])
+    ns = n.get_namespaces(["fes", "ogc", "xsi", "om20", "gml32", "sa", "sml", "swe20", "swes", "xlink"])
     ns["ows"] = n.get_namespace("ows110")
     ns["sos"] = n.get_namespace("sos20")
     return ns
@@ -29,13 +31,13 @@ class SensorObservationService_2_0_0(object):
         Implements ISensorObservationService.
     """
 
-    def __new__(self,url, version, xml=None, username=None, password=None):
+    def __new__(self, url, version, xml=None, username=None, password=None):
         """overridden __new__ method"""
-        obj=object.__new__(self)
+        obj = object.__new__(self)
         obj.__init__(url, version, xml, username, password)
         return obj
 
-    def __getitem__(self,id):
+    def __getitem__(self, id):
         ''' check contents dictionary to allow dict like access to service observational offerings'''
         if id in self.__getattribute__('contents').keys():
             return self.__getattribute__('contents')[id]
@@ -87,7 +89,7 @@ class SensorObservationService_2_0_0(object):
         self.provider = ows.ServiceProvider(service_provider_element)
 
         # ows:OperationsMetadata metadata
-        self.operations= []
+        self.operations = []
         for elem in self._capabilities.findall(nspath_eval('ows:OperationsMetadata/ows:Operation', namespaces)):
             self.operations.append(ows.OperationsMetadata(elem))
 
@@ -106,10 +108,14 @@ class SensorObservationService_2_0_0(object):
             self.contents[off.id] = off
             self.offerings.append(off)
 
-    def describe_sensor(self, outputFormat=None,
-                              procedure=None,
-                              method='Get',
-                              **kwargs):
+        self.observed_properties = []
+        for op in self._capabilities.findall(nspath_eval('sos:contents/sos:Contents/swes:observableProperty', namespaces)):
+            observed_prop = testXMLValue(op)
+            self.observed_properties.append(observed_prop)
+
+    def describe_sensor(self, outputFormat=None, procedure=None, method=None, **kwargs):
+
+        method = method or 'Get'
 
         try:
             base_url = next((m.get('url') for m in self.getOperationByName('DescribeSensor').methods if m.get('type').lower() == method.lower()))
@@ -126,16 +132,14 @@ class SensorObservationService_2_0_0(object):
 
         url_kwargs = {}
         if 'timeout' in kwargs:
-            url_kwargs['timeout'] = kwargs.pop('timeout') # Client specified timeout value
+            url_kwargs['timeout'] = kwargs.pop('timeout')  # Client specified timeout value
 
         # Optional Fields
         if kwargs:
             for kw in kwargs:
-                request[kw]=kwargs[kw]
-
-        data = urlencode(request)
+                request[kw] = kwargs[kw]
 
-        response = openURL(base_url, data, method, username=self.username, password=self.password, **url_kwargs).read()
+        response = openURL(base_url, request, method, username=self.username, password=self.password, **url_kwargs).read()
         tr = etree.fromstring(response)
 
         if tr.tag == nspath_eval("ows:ExceptionReport", namespaces):
@@ -143,12 +147,14 @@ class SensorObservationService_2_0_0(object):
 
         return response
 
-    def get_observation(self, responseFormat=None,
-                              offerings=None,
-                              observedProperties=None,
-                              eventTime=None,
-                              method='Get',
-                              **kwargs):
+    def get_observation(self,
+                        responseFormat=None,
+                        offerings=None,
+                        observedProperties=None,
+                        eventTime=None,
+                        procedure=None,
+                        method=None,
+                        **kwargs):
         """
         Parameters
         ----------
@@ -160,7 +166,11 @@ class SensorObservationService_2_0_0(object):
             anything else e.g. vendor specific parameters
         """
 
-        base_url = self.get_operation_by_name('GetObservation').methods[method]['url']
+        method = method or 'Get'
+        # Pluck out the get observation URL for HTTP method - methods is an
+        # array of dicts
+        methods = self.get_operation_by_name('GetObservation').methods
+        base_url = [ m['url'] for m in methods if m['type'] == method][0]
 
         request = {'service': 'SOS', 'version': self.version, 'request': 'GetObservation'}
 
@@ -180,18 +190,16 @@ class SensorObservationService_2_0_0(object):
 
         url_kwargs = {}
         if 'timeout' in kwargs:
-            url_kwargs['timeout'] = kwargs.pop('timeout') # Client specified timeout value
+            url_kwargs['timeout'] = kwargs.pop('timeout')  # Client specified timeout value
 
         if procedure is not None:
             request['procedure'] = procedure
 
         if kwargs:
             for kw in kwargs:
-                request[kw]=kwargs[kw]
+                request[kw] = kwargs[kw]
 
-        data = urlencode(request)
-
-        response = openURL(base_url, data, method, username=self.username, password=self.password, **url_kwargs).read()
+        response = openURL(base_url, request, method, username=self.username, password=self.password, **url_kwargs).read()
         try:
             tr = etree.fromstring(response)
             if tr.tag == nspath_eval("ows:ExceptionReport", namespaces):
@@ -212,6 +220,7 @@ class SensorObservationService_2_0_0(object):
                 return item
         raise KeyError("No Operation named %s" % name)
 
+
 class SosObservationOffering(object):
     def __init__(self, element):
         self._root = element
@@ -270,10 +279,11 @@ class SosObservationOffering(object):
 
     def __str__(self):
         return 'Offering id: %s, name: %s' % (self.id, self.name)
-    
+
     def __repr__(self):
         return "<SosObservationOffering '%s'>" % self.name
 
+
 class SosCapabilitiesReader(object):
     def __init__(self, version="2.0.0", url=None, username=None, password=None):
         self.version = version
@@ -310,7 +320,7 @@ class SosCapabilitiesReader(object):
             version, and request parameters
         """
         getcaprequest = self.capabilities_url(service_url)
-        spliturl=getcaprequest.split('?')
+        spliturl = getcaprequest.split('?')
         u = openURL(spliturl[0], spliturl[1], method='Get', username=self.username, password=self.password)
         return etree.fromstring(u.read())
 
@@ -323,3 +333,52 @@ class SosCapabilitiesReader(object):
         if not isinstance(st, str) and not isinstance(st, bytes):
             raise ValueError("String must be of type string or bytes, not %s" % type(st))
         return etree.fromstring(st)
+
+
+class SOSGetObservationResponse(object):
+    """ The base response type from SOS2.0. Container for OM_Observation
+    objects.
+    """
+    def __init__(self, element):
+        obs_data = element.findall(
+            nspath_eval("sos:observationData/om20:OM_Observation", namespaces))
+        self.observations = []
+        decoder = ObservationDecoder()
+        for obs in obs_data:
+            parsed_obs = decoder.decode_observation(obs)
+            self.observations.append(parsed_obs)
+
+    def __iter__(self):
+        for obs in self.observations:
+            yield obs
+
+    def __getitem__(self, index):
+        return self.observations[index]
+
+
+class ObservationDecoder(object):
+    """ Class to handle decoding different Observation types.
+        The decode method inspects the type of om:result element and
+        returns the appropriate observation type, which handles parsing
+        of the result.
+    """
+    def decode_observation(self, element):
+        """ Returns a parsed observation of the appropriate type,
+        by inspecting the result element.
+
+        'element' input is the XML tree of the OM_Observation object
+        """
+        result_element = element.find(nspath_eval("om20:result", namespaces))
+        if len(result_element) == 0:
+            result_type = testXMLAttribute(
+                result_element, nspath_eval("xsi:type", namespaces))
+        else:
+            result_type = list(result_element)[0].tag
+
+        if result_type.find('MeasureType') != -1:
+            return MeasurementObservation(element)
+        elif (result_type ==
+                '{http://www.opengis.net/waterml/2.0}MeasurementTimeseries'):
+            return MeasurementTimeseriesObservation(element)
+        else:
+            raise NotImplementedError('Result type {} not supported'.format(result_type))
diff --git a/owslib/swe/observation/waterml2.py b/owslib/swe/observation/waterml2.py
new file mode 100644
index 0000000..35bd6d0
--- /dev/null
+++ b/owslib/swe/observation/waterml2.py
@@ -0,0 +1,152 @@
+# -*- coding: ISO-8859-15 -*-
+# =============================================================================
+# Copyright (c) 2014 Pete Taylor
+#
+# Authors : Pete Taylor <peterataylor at gmail.com>
+#
+# Contact email: peterataylor at gmail.com
+# =============================================================================
+from owslib.util import nspath_eval
+from owslib.namespaces import Namespaces
+from owslib.util import testXMLAttribute, testXMLValue
+from owslib.swe.common import Quantity
+from dateutil import parser
+from owslib.swe.observation.om import OM_Observation, Result
+
+
+def get_namespaces():
+    ns = Namespaces()
+    return ns.get_namespaces(["swe20", "xlink", "sos20", "om20", "gml32",
+                              "xsi", "wml2"])
+namespaces = get_namespaces()
+
+
+def nspv(path):
+    return nspath_eval(path, namespaces)
+
+
+class MeasurementTimeseriesObservation(OM_Observation):
+    ''' A timeseries observation that has a measurement timeseries as
+    result. An implementation of the WaterML2
+    MeasurementTimeseriesObservation. '''
+    def __init__(self, element):
+        super(MeasurementTimeseriesObservation, self).__init__(element)
+        self._parse_result()
+
+    def _parse_result(self):
+        ''' Parse the result element of the observation type '''
+        if self.result is not None:
+            result = self.result.find(nspv(
+                     "wml2:MeasurementTimeseries"))
+            self.result = MeasurementTimeseries(result)
+
+    def get_result(self):
+        return self.result
+
+
+class Timeseries(Result):
+    ''' Generic time-series class '''
+    def __init__(self, element):
+        super(Timeseries, self).__init__(element)
+
+
+class MeasurementTimeseries(Timeseries):
+    ''' A WaterML2.0 timeseries of measurements, with per-value metadata. '''
+    def __init__(self, element):
+        super(MeasurementTimeseries, self).__init__(element)
+
+        self.defaultTVPMetadata = TVPMeasurementMetadata(element.find(
+            nspv("wml2:defaultPointMetadata/wml2:DefaultTVPMeasurementMetadata")))
+
+        elems = element.findall(nspv("wml2:point"))
+        self.points = []
+        for point in elems:
+            self.points.append(TimeValuePair(point))
+
+    def __iter__(self):
+        for point in self.points:
+            yield point
+
+    def __len__(self):
+        return len(self.points)
+
+    def _parse_metadata(self, element):
+        ''' Parse metadata elements relating to timeseries:
+            TS: baseTime, spacing, commentBlock, parameter
+            MTS: startAnchor, endAnchor, cumulative, accAnchor/Length, maxGap
+        '''
+        pass
+
+
+class TimeValuePair(object):
+    ''' A time-value pair as specified by WaterML2.0
+        Currently no support for tvp metadata.
+    '''
+    def __init__(self, element):
+        date_str = testXMLValue(
+            element.find(nspv("wml2:MeasurementTVP/wml2:time")))
+        try:
+            self.datetime = parser.parse(date_str)
+        except:
+            raise ValueError("Error parsing datetime string: %s" % date_str)
+
+        value_str = testXMLValue(element.find(nspv(
+            "wml2:MeasurementTVP/wml2:value")))
+        try:
+            self.value = float(value_str)
+        except:
+            self.value = float('nan')
+
+    def __str__(self):
+        return str(self.datetime) + "," + str(self.value)
+
+
+class TVPMetadata(object):
+    def __init__(self, element):
+        ''' Base time-value pair metadata. Still to do:
+            - relatedObservation
+        '''
+        self.quality = testXMLAttribute(element.find(nspv(
+            "wml2:quality")), nspv("xlink:href"))
+        self.nilReason = testXMLAttribute(element.find(nspv(
+            "wml2:nilReason")), nspv("xlink:href"))
+        self.comment = testXMLValue(element.find(nspv(
+            "wml2:comment")))
+        self.qualifier = testXMLAttribute(element.find(nspv(
+            "wml2:qualifier")), nspv("xlink:href"))
+        self.processing = testXMLValue(element.find(nspv(
+            "wml2:processing")), nspv("xlink:href"))
+        self.source = testXMLValue(element.find(nspv(
+            "wml2:source")), nspv("xlink:href"))
+
+
+class TVPMeasurementMetadata(TVPMetadata):
+    ''' Measurement specific metadata. Still to do:
+        - aggregationDuration
+    '''
+    def __init__(self, element):
+        super(TVPMeasurementMetadata, self).__init__(element)
+
+        self.uom = testXMLAttribute(element.find(nspv(
+            "wml2:uom")), "code")
+        self.interpolationType = testXMLAttribute(element.find(nspv(
+            "wml2:interpolationType")), nspv("xlink:href"))
+        self.censoredReason = testXMLAttribute(element.find(nspv(
+            "wml2:censoredReason")), "xlink:href")
+
+        accuracy = testXMLValue(element.find(nspv("wml2:accuracy")))
+        if accuracy is not None:
+            self.accuracy = Quantity(element)
+
+
+class MeasurementTimeseriesDomainRange(Timeseries):
+    ''' Class to implement domain range timeseries encoding '''
+    def __init__(self, element):
+        super(MeasurementTimeseriesDomainRange, self, element).__init__()
+
+
+class MonitoringPoint(object):
+    ''' A WaterML2.0 Monitoring Point, which is a specialised O&M SamplingPoint
+    '''
+    def __init__(self, element):
+        pass
diff --git a/owslib/util.py b/owslib/util.py
index b40ac2a..63e7d66 100644
--- a/owslib/util.py
+++ b/owslib/util.py
@@ -38,35 +38,46 @@ import requests
 Utility functions and classes
 """
 
+
 class ServiceException(Exception):
-    #TODO: this should go in ows common module when refactored.  
+    # TODO: this should go in ows common module when refactored.
     pass
 
+
 # http://stackoverflow.com/questions/6256183/combine-two-dictionaries-of-dictionaries-python
-dict_union = lambda d1,d2: dict((x,(dict_union(d1.get(x,{}),d2[x]) if
-  isinstance(d2.get(x),dict) else d2.get(x,d1.get(x)))) for x in
-  set(list(d1.keys())+list(d2.keys())))
+def dict_union(d1, d2):
+    return dict((x, (dict_union(d1.get(x, {}), d2[x]) if
+                isinstance(d2.get(x), dict) else d2.get(x, d1.get(x)))) for x in
+                set(list(d1.keys())+list(d2.keys())))
 
 
 # Infinite DateTimes for Python.  Used in SWE 2.0 and other OGC specs as "INF" and "-INF"
 class InfiniteDateTime(object):
     def __lt__(self, other):
         return False
+
     def __gt__(self, other):
         return True
+
     def timetuple(self):
         return tuple()
+
+
 class NegativeInfiniteDateTime(object):
     def __lt__(self, other):
         return True
+
     def __gt__(self, other):
         return False
+
     def timetuple(self):
         return tuple()
 
 
 first_cap_re = re.compile('(.)([A-Z][a-z]+)')
 all_cap_re = re.compile('([a-z0-9])([A-Z])')
+
+
 def format_string(prop_string):
     """
         Formats a property string to remove spaces and go from CamelCase to pep8
@@ -75,9 +86,10 @@ def format_string(prop_string):
     if prop_string is None:
         return ''
     st_r = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', prop_string)
-    st_r = st_r.replace(' ','')
+    st_r = st_r.replace(' ', '')
     return re.sub('([a-z0-9])([A-Z])', r'\1_\2', st_r).lower()
 
+
 def xml_to_dict(root, prefix=None, depth=1, diction=None):
     """
         Recursively iterates through an xml element to convert each element in the tree to a (key,val). Where key is the element
@@ -93,7 +105,7 @@ def xml_to_dict(root, prefix=None, depth=1, diction=None):
         Return
         =======
         Dictionary of (key,value); where key is the element tag stripped of namespace and cleaned up to be pep8 and
-        value is the inner-text of the element. Note that duplicate elements will be replaced by the last element of the 
+        value is the inner-text of the element. Note that duplicate elements will be replaced by the last element of the
         same tag in the tree.
     """
     ret = diction if diction is not None else dict()
@@ -102,7 +114,7 @@ def xml_to_dict(root, prefix=None, depth=1, diction=None):
         # skip values that are empty or None
         if val is None or val == '':
             if depth > 1:
-                ret = xml_to_dict(child,prefix=prefix,depth=(depth-1),diction=ret)
+                ret = xml_to_dict(child, prefix=prefix, depth=(depth-1), diction=ret)
             continue
 
         key = format_string(child.tag.split('}')[-1])
@@ -112,10 +124,11 @@ def xml_to_dict(root, prefix=None, depth=1, diction=None):
 
         ret[key] = val
         if depth > 1:
-            ret = xml_to_dict(child,prefix=prefix,depth=(depth-1),diction=ret)
+            ret = xml_to_dict(child, prefix=prefix, depth=(depth-1), diction=ret)
 
     return ret
 
+
 class ResponseWrapper(object):
     """
     Return object type from openURL.
@@ -136,7 +149,8 @@ class ResponseWrapper(object):
 
     # @TODO: __getattribute__ for poking at response
 
-def openURL(url_base, data=None, method='Get', cookies=None, username=None, password=None, timeout=30, headers=None):
+
+def openURL(url_base, data=None, method=None, cookies=None, username=None, password=None, timeout=30, headers=None):
     """
     Function to open URLs.
 
@@ -144,6 +158,7 @@ def openURL(url_base, data=None, method='Get', cookies=None, username=None, pass
     Also handles cookies and simple user password authentication.
     """
     headers = headers if headers is not None else {}
+    method = method or 'Get'
     rkwargs = {}
 
     rkwargs['timeout'] = timeout
@@ -160,7 +175,7 @@ def openURL(url_base, data=None, method='Get', cookies=None, username=None, pass
 
     if method.lower() == 'post':
         try:
-            xml = etree.fromstring(data)
+            etree.fromstring(data)
             headers['Content-Type'] = 'text/xml'
         except (ParseError, UnicodeEncodeError):
             pass
@@ -169,7 +184,7 @@ def openURL(url_base, data=None, method='Get', cookies=None, username=None, pass
 
     elif method.lower() == 'get':
         rkwargs['params'] = data
-        
+
     else:
         raise ValueError("Unknown method ('%s'), expected 'get' or 'post'" % method)
 
@@ -189,24 +204,27 @@ def openURL(url_base, data=None, method='Get', cookies=None, username=None, pass
 
     # check for service exceptions without the http header set
     if 'Content-Type' in req.headers and req.headers['Content-Type'] in ['text/xml', 'application/xml']:
-        #just in case 400 headers were not set, going to have to read the xml to see if it's an exception report.
+        # just in case 400 headers were not set, going to have to read the xml to see if it's an exception report.
         se_tree = etree.fromstring(req.content)
-        serviceException=se_tree.find('{http://www.opengis.net/ows}Exception')
+        serviceException = se_tree.find('{http://www.opengis.net/ows}Exception')
         if serviceException is None:
-            serviceException=se_tree.find('ServiceException')
+            serviceException = se_tree.find('ServiceException')
         if serviceException is not None:
             raise ServiceException(str(serviceException.text).strip())
 
     return ResponseWrapper(req)
 
-#default namespace for nspath is OWS common
+
+# default namespace for nspath is OWS common
 OWS_NAMESPACE = 'http://www.opengis.net/ows/1.1'
+
+
 def nspath(path, ns=OWS_NAMESPACE):
 
     """
 
     Prefix the given path with the given namespace identifier.
-    
+
     Parameters
     ----------
 
@@ -225,6 +243,7 @@ def nspath(path, ns=OWS_NAMESPACE):
         components.append(component)
     return '/'.join(components)
 
+
 def nspath_eval(xpath, namespaces):
     ''' Return an etree friendly xpath '''
     out = []
@@ -233,6 +252,7 @@ def nspath_eval(xpath, namespaces):
         out.append('{%s}%s' % (namespaces[namespace], element))
     return '/'.join(out)
 
+
 def cleanup_namespaces(element):
     """ Remove unused namespaces from an element """
     if etree.__name__ == 'lxml.etree':
@@ -316,13 +336,14 @@ def testXMLValue(val, attrib=False):
     if val is not None:
         if attrib:
             return val.strip()
-        elif val.text:  
+        elif val.text:
             return val.text.strip()
         else:
-            return None	
+            return None
     else:
         return None
 
+
 def testXMLAttribute(element, attribute):
     """
 
@@ -340,10 +361,11 @@ def testXMLAttribute(element, attribute):
 
     return None
 
+
 def http_post(url=None, request=None, lang='en-US', timeout=10, username=None, password=None):
     """
 
-    Invoke an HTTP POST request 
+    Invoke an HTTP POST request
 
     Parameters
     ----------
@@ -377,6 +399,7 @@ def http_post(url=None, request=None, lang='en-US', timeout=10, username=None, p
     up = requests.post(url, request, headers=headers, **rkwargs)
     return up.content
 
+
 def element_to_string(element, encoding=None, xml_declaration=False):
     """
     Returns a string from a XML object
@@ -405,8 +428,10 @@ def element_to_string(element, encoding=None, xml_declaration=False):
                 output = etree.tostring(element)
     else:
         if xml_declaration:
-            output = '<?xml version="1.0" encoding="%s" standalone="no"?>\n%s' % (encoding,
-                   etree.tostring(element, encoding=encoding))
+            output = '<?xml version="1.0" encoding="{}" standalone="no"?>\n{}'.format(
+                encoding,
+                etree.tostring(element, encoding=encoding)
+            )
         else:
             output = etree.tostring(element)
 
@@ -428,6 +453,7 @@ def xml2string(xml):
                    The 'xml2string' method will be removed in a future version of OWSLib.")
     return '<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>\n' + xml
 
+
 def xmlvalid(xml, xsd):
     """
 
@@ -447,6 +473,7 @@ def xmlvalid(xml, xsd):
     doc = etree.parse(StringIO(xml))
     return xsd2.validate(doc)
 
+
 def xmltag_split(tag):
     ''' Return XML element bare tag name (without prefix) '''
     try:
@@ -454,34 +481,38 @@ def xmltag_split(tag):
     except:
         return tag
 
+
 def getNamespace(element):
     ''' Utility method to extract the namespace from an XML element tag encoded as {namespace}localname. '''
-    if element.tag[0]=='{':
+    if element.tag[0] == '{':
         return element.tag[1:].split("}")[0]
     else:
         return ""
 
+
 def build_get_url(base_url, params):
     ''' Utility function to build a full HTTP GET URL from the service base URL and a dictionary of HTTP parameters. '''
-    
+
     qs = []
     if base_url.find('?') != -1:
         qs = cgi.parse_qsl(base_url.split('?')[1])
 
     pars = [x[0] for x in qs]
 
-    for key,value in six.iteritems(params):
+    for key, value in six.iteritems(params):
         if key not in pars:
-            qs.append( (key,value) )
+            qs.append( (key, value) )
 
     urlqs = urlencode(tuple(qs))
     return base_url.split('?')[0] + '?' + urlqs
 
+
 def dump(obj, prefix=''):
     '''Utility function to print to standard output a generic object with all its attributes.'''
 
     print("%s %s.%s : %s" % (prefix, obj.__module__, obj.__class__.__name__, obj.__dict__))
 
+
 def getTypedValue(data_type, value):
     '''Utility function to cast a string value to the appropriate XSD type. '''
 
@@ -494,7 +525,7 @@ def getTypedValue(data_type, value):
     elif data_type == 'string':
         return str(value)
     else:
-        return value # no type casting
+        return value  # no type casting
 
 
 def extract_time(element):
@@ -531,7 +562,7 @@ Some people don't have seperate tags for their keywords and seperate them with
 a newline. This will extract out all of the keywords correctly.
 """
     if elements:
-        keywords = [re.split(r'[\n\r]+',f.text) for f in elements if f.text]
+        keywords = [re.split(r'[\n\r]+', f.text) for f in elements if f.text]
         flattened = [item.strip() for sublist in keywords for item in sublist]
         remove_blank = [_f for _f in flattened if _f]
         return remove_blank
@@ -541,24 +572,25 @@ a newline. This will extract out all of the keywords correctly.
 
 def bind_url(url):
     """binds an HTTP GET query string endpiont"""
-    if url.find('?') == -1: # like http://host/wms
+    if url.find('?') == -1:  # like http://host/wms
         binder = '?'
 
     # if like http://host/wms?foo=bar& or http://host/wms?foo=bar
     if url.find('=') != -1:
-        if url.find('&', -1) != -1: # like http://host/wms?foo=bar&
+        if url.find('&', -1) != -1:  # like http://host/wms?foo=bar&
             binder = ''
-        else: # like http://host/wms?foo=bar
+        else:  # like http://host/wms?foo=bar
             binder = '&'
 
     # if like http://host/wms?foo
     if url.find('?') != -1:
-        if url.find('?', -1) != -1: # like http://host/wms?
+        if url.find('?', -1) != -1:  # like http://host/wms?
             binder = ''
-        elif url.find('&', -1) == -1: # like http://host/wms?foo=bar
+        elif url.find('&', -1) == -1:  # like http://host/wms?foo=bar
             binder = '&'
     return '%s%s' % (url, binder)
 
+
 import logging
 # Null logging handler
 try:
@@ -593,6 +625,7 @@ def which_etree():
 
     return which_etree
 
+
 def findall(root, xpath, attribute_name=None, attribute_value=None):
     """Find elements recursively from given root element based on
     xpath and possibly given attribute
@@ -606,7 +639,6 @@ def findall(root, xpath, attribute_name=None, attribute_value=None):
 
     found_elements = []
 
-
     # python 2.6 < does not support complicated XPATH expressions used lower
     if (2, 6) == sys.version_info[0:2] and which_etree() != 'lxml.etree':
 
diff --git a/owslib/wfs.py b/owslib/wfs.py
index cee4352..8550bbb 100644
--- a/owslib/wfs.py
+++ b/owslib/wfs.py
@@ -1,9 +1,9 @@
-# -*- coding: ISO-8859-15 -*-
+# -*- coding: utf-8 -*-
 # =============================================================================
 # Copyright (c) 2004, 2006 Sean C. Gillies
 # Copyright (c) 2009 STFC <http://www.stfc.ac.uk>
 #
-# Authors : 
+# Authors :
 #          Dominic Lowe <dominic.lowe at stfc.ac.uk>
 #
 # Contact email: dominic.lowe at stfc.ac.uk
@@ -19,9 +19,9 @@ from .feature import wfs100, wfs110, wfs200
 
 
 def WebFeatureService(url, version='1.0.0', xml=None, parse_remote_metadata=False,
-                      timeout=30):
+                      timeout=30, username=None, password=None):
     ''' wfs factory function, returns a version specific WebFeatureService object
-    
+
     @type url: string
     @param url: url of WFS capabilities document
     @type xml: string
@@ -29,15 +29,22 @@ def WebFeatureService(url, version='1.0.0', xml=None, parse_remote_metadata=Fals
     @type parse_remote_metadata: boolean
     @param parse_remote_metadata: whether to fully process MetadataURL elements
     @param timeout: time (in seconds) after which requests should timeout
+    @param username: service authentication username
+    @param password: service authentication password
     @return: initialized WebFeatureService_2_0_0 object
     '''
     if version in  ['1.0', '1.0.0']:
-        return wfs100.WebFeatureService_1_0_0(url, version, xml, parse_remote_metadata, 
-                                              timeout=timeout)
+        return wfs100.WebFeatureService_1_0_0(url, version, xml, parse_remote_metadata,
+                                              timeout=timeout,
+                                              username=username,
+                                              password=password)
     elif version in  ['1.1', '1.1.0']:
         return wfs110.WebFeatureService_1_1_0(url, version, xml, parse_remote_metadata,
-                                              timeout=timeout)
+                                              timeout=timeout,
+                                              username=username,
+                                              password=password)
     elif version in ['2.0', '2.0.0']:
         return wfs200.WebFeatureService_2_0_0(url,  version, xml, parse_remote_metadata,
-                                              timeout=timeout)
-
+                                              timeout=timeout,
+                                              username=username,
+                                              password=password)
diff --git a/requirements-dev.txt b/requirements-dev.txt
index a7bde13..6f69e2a 100644
--- a/requirements-dev.txt
+++ b/requirements-dev.txt
@@ -1,3 +1,4 @@
+-r requirements.txt
 pep8
 pytest
 pytest-cov
diff --git a/tests/doctests/csw_pycsw.txt b/tests/doctests/csw_pycsw.txt
index 1e5ea1c..2614fb4 100644
--- a/tests/doctests/csw_pycsw.txt
+++ b/tests/doctests/csw_pycsw.txt
@@ -13,6 +13,8 @@ Properties
     >>> c.identification.title
     'pycsw OGC CITE demo and Reference Implementation'
 
+    >>> c.constraints['MaxRecordDefault'].values[0]
+    '10'
 
 GetRecords
 
diff --git a/tests/doctests/sos_20_52N_demo.txt b/tests/doctests/sos_20_52N_demo.txt
new file mode 100644
index 0000000..07a9f41
--- /dev/null
+++ b/tests/doctests/sos_20_52N_demo.txt
@@ -0,0 +1,67 @@
+# Tests using the 52North demo service
+
+>>> from owslib.sos import SensorObservationService
+>>> service = SensorObservationService('http://sensorweb.demo.52north.org/52n-sos-webapp/sos/kvp',version='2.0.0')
+>>> for content in sorted(service.contents):
+...  print(content)
+...
+http://www.52north.org/test/offering/1
+http://www.52north.org/test/offering/2
+http://www.52north.org/test/offering/3
+http://www.52north.org/test/offering/4
+http://www.52north.org/test/offering/5
+http://www.52north.org/test/offering/6
+http://www.52north.org/test/offering/7
+http://www.52north.org/test/offering/8
+http://www.52north.org/test/offering/developer
+
+>>> id = service.identification
+
+# Check basic service metadata
+>>> id.service
+'OGC:SOS'
+
+>>> id.title
+'52N SOS'
+
+>>> provider=service.provider
+>>> provider.name
+'52North'
+
+>>> len(service.operations)
+16
+
+# Check allowed params for get FOI
+>>> get_foi=service.get_operation_by_name('GetFeatureOfInterest')
+>>> try:
+...     x = unicode('test')
+...     for x in sorted(get_foi.parameters['featureOfInterest']['values']):
+...         print(x.encode('utf8'))
+... except:
+...     for x in sorted(get_foi.parameters['featureOfInterest']['values']):
+...         print(x)
+http://www.52north.org/test/featureOfInterest/1
+http://www.52north.org/test/featureOfInterest/2
+http://www.52north.org/test/featureOfInterest/3
+http://www.52north.org/test/featureOfInterest/4
+http://www.52north.org/test/featureOfInterest/5
+http://www.52north.org/test/featureOfInterest/6
+http://www.52north.org/test/featureOfInterest/7
+http://www.52north.org/test/featureOfInterest/8
+http://www.52north.org/test/featureOfInterest/Heiden
+http://www.52north.org/test/featureOfInterest/Münster/FE101
+http://www.52north.org/test/featureOfInterest/Portland
+http://www.52north.org/test/featureOfInterest/TODO
+http://www.52north.org/test/featureOfInterest/world
+
+# Check allowed params for get observation
+>>> get_obs=service.get_operation_by_name('GetObservation')
+
+get_obs.parameters['responseFormat']['values']
+['http://www.opengis.net/om/2.0']
+
+# Get observation call
+
+# Get latest value using O&M reponse format
+#'<?xml version="1.0" encoding="UTF-8"?>\n<sos:GetObservationResponse xmlns:sos="http://www.opengis.net/sos/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:om="http://www.opengis.net/om/2.0" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/sos/2.0 http://schemas.opengis.net/sos/2.0/sosGetObservation.xsd http://www.opengis.net/gml/3.2 http://schemas.opengis.net/gml/3.2.1/gml.xsd http://www.ope [...]
+>>> latest_response = service.get_observation('http://www.opengis.net/om/2.0', ['http://www.52north.org/test/offering/1'], ['http://www.52north.org/test/observableProperty/1'], eventTime='om:phenomenonTime,latest', timeout=120)
diff --git a/tests/doctests/sos_20_bom_gov_au.txt b/tests/doctests/sos_20_bom_gov_au.txt
new file mode 100644
index 0000000..d1fba36
--- /dev/null
+++ b/tests/doctests/sos_20_bom_gov_au.txt
@@ -0,0 +1,46 @@
+# SOS version 2.0 tests on http://www.bom.gov.au/waterdata/services
+
+# Imports
+>>> from owslib.sos import SensorObservationService
+
+# Setup
+>>> service = SensorObservationService('http://www.bom.gov.au/waterdata/services', version='2.0.0')
+>>> id = service.identification
+
+# Check basic service metadata
+>>> id.service
+'SOS'
+
+>>> id.title
+'KISTERS KiWIS SOS2'
+
+>>> id.keywords
+[]
+
+>>> service.provider.name
+'Provider Name'
+
+>>> service.provider.contact.name
+'Name'
+
+>>> service.provider.contact.position
+
+>>> len(service.operations)
+5
+
+>>> service.get_operation_by_name('GetObservation').methods[0]['url'] = 'http://www.bom.gov.au/waterdata/services'
+>>> response = service.get_observation(featureOfInterest='http://bom.gov.au/waterdata/services/stations/181.1',
+...                                    offerings=['http://bom.gov.au/waterdata/services/tstypes/Pat4_PC_1'],
+...                                    observedProperties=['http://bom.gov.au/waterdata/services/parameters/Water Course Discharge'],
+...                                    eventTime='om:phenomenonTime,2016-01-01T00:00:00+10/2016-03-05T00:00:00+10')
+
+# Process WaterML Response
+>>> from owslib.etree import etree
+>>> from owslib.swe.observation.sos200 import SOSGetObservationResponse
+>>> from owslib.swe.observation.waterml2 import MeasurementTimeseriesObservation
+
+>>> et = etree.fromstring(response)
+>>> parsed_response = SOSGetObservationResponse(et)
+>>> assert len(parsed_response.observations) > 0
+>>> for o in parsed_response.observations:
+...     assert isinstance(o, MeasurementTimeseriesObservation)
diff --git a/tests/doctests/sos_20_timeseries_decoder_ioos.txt b/tests/doctests/sos_20_timeseries_decoder_ioos.txt
new file mode 100644
index 0000000..6d9a35a
--- /dev/null
+++ b/tests/doctests/sos_20_timeseries_decoder_ioos.txt
@@ -0,0 +1,57 @@
+# SOS version 2.0 tests using the 52North installation for IOOS: http://ioossos.axiomalaska.com/
+
+# Imports
+>>> from owslib.sos import SensorObservationService
+>>> from owslib.swe.observation.sos200 import SOSGetObservationResponse
+>>> from owslib.etree import etree
+
+# Setup
+#>>> service = SensorObservationService('http://geoviqua.dev.52north.org/SOS-Q/sos/kvp',version='2.0.0')
+>>> service = SensorObservationService('http://ioossos.axiomalaska.com/52n-sos-ioos-stable/sos/kvp',version='2.0.0')
+
+# http://ioossos.axiomalaska.com/52n-sos-ioos-stable/sos/kvp?service=SOS&request=GetObservation&namespaces=xmlns(om%2Chttp%3A%2F%2Fwww.opengis.net%2Fom%2F2.0)&temporalFilter=om%3AphenomenonTime%2Clatest&version=2.0.0
+
+# Check allowed params for get observation
+>>> get_obs=service.get_operation_by_name('GetObservation')
+
+>>> response = service.get_observation(responseFormat='http://www.opengis.net/om/2.0', offerings=['urn:ioos:station:test:8'], observedProperties=['http://mmisw.org/ont/cf/parameter/sea_water_temperature'], timeout=60)
+
+>>> xml_tree = etree.fromstring(response)
+
+>>> parsed_response = SOSGetObservationResponse(xml_tree)
+
+>>> type(parsed_response)
+<class 'owslib.swe.observation.sos200.SOSGetObservationResponse'>
+
+>>> o=parsed_response.observations[0]
+
+## Value changes each call so can't be tested
+## >>> o.get_result().value
+
+>>> o.get_result().uom
+'urn:ogc:def:uom:udunits:2:Cel'
+
+# This O&M structure of the results splits each point into an O&M object, resulting in 400 results
+>>> len(parsed_response.observations)
+400
+>>> type(parsed_response.observations[0])
+<class 'owslib.swe.observation.om.MeasurementObservation'>
+
+# Get observation for a specific offering (in this case corresponds to a station) and observed property (sea water temperature)
+>>> response = service.get_observation(responseFormat='http://www.opengis.net/waterml/2.0', offerings=['urn:ioos:station:test:8'], observedProperties=['http://mmisw.org/ont/cf/parameter/sea_water_temperature'], timeout=60)
+>>> xml_tree = etree.fromstring(response)
+>>> parsed_response = SOSGetObservationResponse(xml_tree)
+>>> type(parsed_response)
+<class 'owslib.swe.observation.sos200.SOSGetObservationResponse'>
+
+>>> len(parsed_response.observations)
+20
+>>> type(parsed_response.observations[0])
+<class 'owslib.swe.observation.waterml2.MeasurementTimeseriesObservation'>
+>>> type(parsed_response.observations[0].get_result())
+<class 'owslib.swe.observation.waterml2.MeasurementTimeseries'>
+
+>>> measurement_timeseries = parsed_response.observations[0].get_result()
+>>> len(measurement_timeseries)
+20
+
diff --git a/tests/resources/sos_52n_get_observation_ioos.xml b/tests/resources/sos_52n_get_observation_ioos.xml
new file mode 100644
index 0000000..1059fe3
--- /dev/null
+++ b/tests/resources/sos_52n_get_observation_ioos.xml
@@ -0,0 +1,318 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<sos:GetObservationResponse xmlns:sos="http://www.opengis.net/sos/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:om="http://www.opengis.net/om/2.0" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="http://www.opengis.net/sos/2.0 http://schemas.opengis.net/sos/2.0/sosGetObservation.xsd http://www.opengis.net/gml/3.2 http://schemas.opengis.net/gml/3.2.1/gml.xsd http://www.opengis.net/om/2.0 http://schemas.opengis.net [...]
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_A8C1BC58D6D4EAD0409FFF41C49726B8C65AC9C1">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1581">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1581"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-75.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">25.12</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_7A280CB9B3F3C9323CD90C0127720695A016E86D">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1521">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1521"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-60.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">16.37</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_844947E9478EC18A253D9B9F6B42449ACFF9DC46">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1561">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1561"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-70.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">16.49</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_892EFC8F32CAE841373AD2B59064A5D8D5F6A56E">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1281">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1281"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height0.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">20.49</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_22EA2EC80AE83B7C14305E89B33AEB37F1C57873">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1661">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1661"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-95.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">6.35</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_EC200BE05D635934ADA3D694F59F27DCD1A99F7F">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1441">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1441"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-40.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">12.05</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_A8A8853B9DB05CE2C71CB8E98472F09C912A37AD">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1481">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1481"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-50.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">8.82</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_DD07D0456CC863A055EBE092A9F555EBF6F9F425">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1381">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1381"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-25.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">11.5</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_AFB6503D41E3D0E7BF24FB7D4CA765D0F95796D5">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1401">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1401"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-30.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">24.76</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_551F96D71BFB485D0C06D6053B62CA7DC30EC8E4">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1461">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1461"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-45.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">17.74</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_4F9642997647ADF39DDE6F1EBF47A39F30F7BB61">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1261">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1261"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:air_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/air_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">6.03</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_73067292651E2F6EF0FC60E8CCB2FDD6147F75F5">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1301">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1301"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-5.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">20.86</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_BF8738F4C9542266B2E5D25FAC8A171F5643E83B">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1501">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1501"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-55.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">13.63</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_49A558E6DF45E490DFCE159823AF2FE66EABC180">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1621">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1621"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-85.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">8.47</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_25D5BDFFD596A0A3AD7BB53B1310E19D94414B7E">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1361">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1361"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-20.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">8.08</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_99E78EB5B525AA8D0D7823B2DB55B42835FC3CD3">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1321">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1321"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-10.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">30.38</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_25F20DE415EBB4A3983267DB9CAA48142301BDD3">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1421">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1421"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-35.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">13.18</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_9677ED62B69B869240F268FF2E475B574EC43249">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1641">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1641"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-90.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">6.82</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_39E48859E1374DEDC60DB5880638D729CDCC805D">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1541">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1541"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-65.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">18.35</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_EEB115B304F9370C8B95199C1BE4284845180C5C">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1341">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1341"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-15.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">19.34</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_782008D03AFCCEA45503F4A1DF3EAB3126198133">
+      <om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_Measurement"/>
+      <om:phenomenonTime>
+        <gml:TimeInstant gml:id="phenomenonTime_1601">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:phenomenonTime>
+      <om:resultTime xlink:href="#phenomenonTime_1601"/>
+      <om:procedure xlink:href="urn:ioos:sensor:test:3:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:3(height-80.0m)"/>
+      <om:result xmlns:ns="http://www.opengis.net/gml/3.2" uom="urn:ogc:def:uom:udunits:2:Cel" xsi:type="ns:MeasureType">11.58</om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+</sos:GetObservationResponse>
diff --git a/tests/resources/sos_52n_get_observation_ioos_wml2.xml b/tests/resources/sos_52n_get_observation_ioos_wml2.xml
new file mode 100644
index 0000000..02d6ab4
--- /dev/null
+++ b/tests/resources/sos_52n_get_observation_ioos_wml2.xml
@@ -0,0 +1,3216 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<sos:GetObservationResponse xmlns:sos="http://www.opengis.net/sos/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:om="http://www.opengis.net/om/2.0" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:wml2="http://www.opengis.net/waterml/2.0" xsi:schemaLocation="http://www.opengis.net/waterml/2.0 http://schemas.opengis.net/waterml/2.0/waterml2.xsd http://www.opengis.net/sos/2.0 http://schemas.opengis.net/sos/2.0/sosGetObservation.x [...]
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_88D32CAEB4E72DA561497F9DA2703AA911194C12">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_1">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_472A0AAB51B0FD6E5633311E63CBBD67D1BFF945">
+          <gml:timePosition>2014-07-07T08:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-80.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.1">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_1"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>16.02</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>12.1</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>30.7</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>23.61</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>28.21</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>26.93</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>24.6</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>6.19</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>15.18</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>15.58</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>7.33</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>11.64</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>16.41</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>31.85</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>7.18</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>13.33</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>9.13</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>5.17</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>31.29</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>12.6</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_6318BCD8AD56666377988C10D9739AE06EF4B2AC">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3551">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_8D0836CC69774CDC09AD46E92BC812C6972D7C1F">
+          <gml:timePosition>2014-07-07T09:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-40.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3551">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3551"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>17.29</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>21.07</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>14.85</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>5.87</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>6.71</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>20.69</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>23.59</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>20.53</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>17.84</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>10.11</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>17.43</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>11.97</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>13.8</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>21.56</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>26.72</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>10.73</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>23.63</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>29.27</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>21.93</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>13.19</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_AAAEAC5973C2D30A73DABB88E957CA6D8DE890FB">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3748">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_BFD04918FAE95119B52F701A017AEBB4FF3AA2D9">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-90.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3748">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3748"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>19.21</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>27.72</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>6.77</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>14.93</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>7.7</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>16.77</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>12.88</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>11.9</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>16.92</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>21.88</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>14.66</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>27.46</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>21.68</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>22.62</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>16.59</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>30.91</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>31.27</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>17.6</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>18.61</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>7.83</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_64B88BDF29AF652B2F79A434B55F47AB1D3C3839">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3387">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_5C595A31EFA575D1C27431C8E937CDD099426666">
+          <gml:timePosition>2014-07-07T20:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height0.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3387">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3387"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>27.83</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>19.45</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>23.65</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>25.66</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>28.93</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>17.23</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>13.27</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>27.39</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>20.37</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>19.72</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>31.6</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>11.44</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>10.9</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>9.89</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>20.37</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>12.04</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>10.34</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>28.26</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>16.02</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>29.9</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_226E6299B8513D67AADBF1FC49FF6DCE4DC7FD5C">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3689">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_F065A41ECB73F1C7E187AB9BAE245E1730284007">
+          <gml:timePosition>2014-07-07T15:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-75.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3689">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3689"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>28.98</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>28.57</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>18.68</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>9.2</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>18.53</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>27.17</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>7.84</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>20.1</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>26.82</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>11.9</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>17.86</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>19.04</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>10.73</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>25.74</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>25.47</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>19.13</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>15.55</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>20.51</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>31.11</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>9.9</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_53B62B3D2FB33A78A38915BAF8A1579E9D2CD7A1">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3626">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_53676FA1ECE9284BABDE45E65C7E9D8C7DE19559">
+          <gml:timePosition>2014-07-07T16:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-60.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3626">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3626"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>24.69</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>19.84</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>9.28</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>31.31</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>21.24</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>27.43</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>13.33</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>21.53</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>9.77</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>19.13</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>6.43</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>27.81</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>15.89</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>31.14</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>26.5</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>27.83</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>28.75</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>18.53</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>11.78</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>8.32</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_1E8091C0096CC74FE1AE184ACE4FFDB2874D0D7A">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3598">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_1DF40E16F682FC9894421889AE295626AC20190A">
+          <gml:timePosition>2014-07-07T17:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-50.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3598">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3598"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>18.5</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>31.23</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>23.38</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>26.73</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>12.25</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>26.52</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>19.07</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>9.6</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>31.53</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>10.02</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>18.97</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>19.22</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>10.02</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>12.91</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>18.78</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>5.16</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>6.64</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>26.07</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>13.51</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>24.85</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_61D5A59CCDF69D24A678A619372D0FE5B21AF63C">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3562">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_7875E472DDCFE285F1704BB58105E437AE622E26">
+          <gml:timePosition>2014-07-07T03:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-45.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3562">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3562"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>22.1</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>23.03</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>25.29</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>19.8</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>6.16</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>30.26</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>18.62</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>22.15</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>5.21</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>27.8</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>11.12</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>15.33</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>8.56</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>6.2</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>14.12</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>17.22</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>19.38</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>11.82</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>28.2</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>5.37</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_36C02E874B52DB51542B42519A0A4698D8937836">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3502">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_6EE424A18F2F1552A8AF2AC5A3C3888EC8B3ED0D">
+          <gml:timePosition>2014-07-07T10:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-30.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3502">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3502"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>8.42</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>29.5</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>25.59</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>25.67</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>7.33</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>22.03</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>17.81</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>9.57</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>23.75</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>15.99</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>30.87</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>8.51</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>21.36</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>10.3</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>19.65</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>23.82</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>19.1</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>11.35</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>15.89</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>23.61</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_80E4EAE4B348411846060BDE55A55BB281C5EE09">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3734">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_A62974AD4DB48587F77E55203DCCEE3467AF69A6">
+          <gml:timePosition>2014-07-07T05:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-85.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3734">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3734"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>21.57</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>18.44</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>18.51</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>25.67</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>21.28</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>10.18</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>19.54</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>30.95</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>31.93</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>20.07</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>30.61</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>17.44</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>21.51</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>15.05</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>27.24</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>18.05</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>17.87</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>21.47</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>7.11</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>24.13</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_7BC6DA478C32DA64E47D0CECE67146467F63858E">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3663">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_B6527927DB2C1ECB887523B398E242EA162F5414">
+          <gml:timePosition>2014-07-07T08:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-70.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3663">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3663"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>23.49</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>23.9</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>29.34</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>31.41</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>6.78</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>13.3</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>30.09</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>26.95</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>8.05</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>11.48</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>10.08</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>16.21</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>14.11</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>8.33</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>23.32</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>9.01</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>17.02</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>11.4</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>19.17</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>11.62</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_045A3FA5C50D8F18F208B676BE4F36A8D402466D">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3658">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_0E775A2144BBE031B4FF16F6629D5B2D8274FDDD">
+          <gml:timePosition>2014-07-07T08:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-65.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3658">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3658"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>24.01</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>27.08</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>13.63</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>9.36</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>19.41</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>18.93</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>30.37</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>17.17</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>23.97</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>14.91</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>20.07</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>15.28</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>8.84</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>28.72</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>24.88</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>16.35</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>14.72</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>23.2</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>18.53</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>25.08</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_978281924755A3138572409F394CECEB098C06EE">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3405">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_A575E248A26FFFFC018118A60B790295C44429D9">
+          <gml:timePosition>2014-07-07T22:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-5.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3405">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3405"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>23.57</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>22.05</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>7.66</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>30.06</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>18.5</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>25.37</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>12.31</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>12.56</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>15.15</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>24.46</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>13.1</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>9.94</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>30.43</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>14.84</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>14.28</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>16.52</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>10.54</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>9.6</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>12.85</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>12.85</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_9C47F06953BD9FA60EA33B34D4AA08736E999F1D">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3603">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_BEBAD9E7D059FE5493C4E9DB34B19B3EA7F6043C">
+          <gml:timePosition>2014-07-07T16:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-55.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3603">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3603"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>24.86</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>5.66</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>14.37</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>6.63</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>28.4</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>15.26</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>22.82</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>16.72</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>20.94</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>31.97</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>24.83</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>17.77</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>28.44</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>17.97</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>12.75</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>27.94</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>22.06</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>19.03</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>24.45</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>30.68</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_841A1E5ABD392B0E7B1B20312AA16D6BF034D333">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3366">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_F1D75BE33CDB55885EB3674AB7917D7888A67705">
+          <gml:timePosition>2014-07-07T09:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:air_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/air_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3366">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3366"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>24.11</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>6.78</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>25.14</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>18.24</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>9.66</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>14.95</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>26.63</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>11.3</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>13.38</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>27.72</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>24.73</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>28.05</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>22.69</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>20.35</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>29.89</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>17.99</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>14.12</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>17.9</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>8.07</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>23.12</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_40AD0957F66C85C29CA1424999A6A54174A226C6">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3467">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_78F963F80BAD6C720293E0BDEF7F4EA2E4912F93">
+          <gml:timePosition>2014-07-07T11:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-20.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3467">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3467"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>9.51</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>25.8</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>8.94</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>28.45</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>5.63</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>27.63</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>5.66</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>26.87</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>13.58</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>23.86</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>8.17</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>17.62</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>24.65</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>31.44</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>11.75</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>14.89</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>6.75</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>29.57</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>31.56</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>23.48</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_500D79CDB3625211F6B1CF44AF17AD208F4D49C8">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3539">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_C9A08CD4398679B397147F823F709E032C2D1518">
+          <gml:timePosition>2014-07-07T21:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-35.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3539">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3539"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>8.27</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>31.19</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>29.1</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>25.76</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>26.27</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>16.13</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>6.6</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>31.49</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>12.88</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>27.45</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>18.49</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>23.2</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>23.6</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>22.95</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>10.4</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>23.77</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>18.44</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>31.04</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>15.04</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>9.17</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_71CCED7C930B08B661EBAA07E1E46D04151FF640">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3450">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_20954FCD69EA2E842D046A69CD17E0FBD3F5BC83">
+          <gml:timePosition>2014-07-07T19:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-15.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3450">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3450"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>25.59</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>16.33</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>19.27</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>18.93</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>19.69</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>8.89</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>19.63</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>14.75</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>28.14</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>5.51</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>20.53</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>17.34</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>17.74</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>6.22</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>12.68</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>9.69</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>26.4</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>14.55</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>24.41</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>15.51</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_4C57E7F6D2651125FF8BE36224471ECDBE7C42B4">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3429">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_BCED443D7869929D81CC9390F9E28738FF1DE8DB">
+          <gml:timePosition>2014-07-07T12:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-10.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3429">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3429"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>29.92</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>26.48</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>6.49</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>19.43</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>15.16</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>31.95</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>5.42</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>29.29</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>18.57</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>8.46</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>30.95</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>25.0</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>11.16</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>18.52</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>10.48</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>27.07</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>20.67</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>22.8</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>19.01</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>8.63</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_6115A3A79FA908416CCCF0A4C2C48CF4F941B29D">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3493">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_1122F1108A9B16D867C856B2015FDD36FD3E7469">
+          <gml:timePosition>2014-07-07T17:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-25.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3493">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3493"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>25.34</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>19.0</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>12.5</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>12.2</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>5.18</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>27.62</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>16.82</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>26.73</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>26.58</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>16.83</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>19.48</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>28.34</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>11.9</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>14.12</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>27.6</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>24.27</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>26.15</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>30.48</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>8.24</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>21.34</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_1BAA713B3A7A66CE45B3B1D50F433EB368137434">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_3772">
+          <gml:beginPosition>2014-07-07T03:00:00.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-07T22:00:00.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_0994CD75264BCCC0B8E9DEADFD5A4C2BABACF975">
+          <gml:timePosition>2014-07-07T03:00:00.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="urn:ioos:sensor:test:8:sea_water_temperature"/>
+      <om:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/>
+      <om:featureOfInterest xlink:href="urn:ioos:station:test:8(height-95.0m)"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.3772">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_3772"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="urn:ogc:def:uom:udunits:2:Cel"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T03:00:00.000Z</wml2:time>
+              <wml2:value>20.22</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T04:00:00.000Z</wml2:time>
+              <wml2:value>27.24</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T05:00:00.000Z</wml2:time>
+              <wml2:value>17.9</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T06:00:00.000Z</wml2:time>
+              <wml2:value>21.85</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T07:00:00.000Z</wml2:time>
+              <wml2:value>8.65</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T08:00:00.000Z</wml2:time>
+              <wml2:value>18.29</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T09:00:00.000Z</wml2:time>
+              <wml2:value>21.38</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T10:00:00.000Z</wml2:time>
+              <wml2:value>13.54</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T11:00:00.000Z</wml2:time>
+              <wml2:value>16.48</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T12:00:00.000Z</wml2:time>
+              <wml2:value>23.36</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T13:00:00.000Z</wml2:time>
+              <wml2:value>25.78</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T14:00:00.000Z</wml2:time>
+              <wml2:value>21.41</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T15:00:00.000Z</wml2:time>
+              <wml2:value>6.63</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T16:00:00.000Z</wml2:time>
+              <wml2:value>26.72</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T17:00:00.000Z</wml2:time>
+              <wml2:value>17.85</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T18:00:00.000Z</wml2:time>
+              <wml2:value>30.51</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T19:00:00.000Z</wml2:time>
+              <wml2:value>16.42</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T20:00:00.000Z</wml2:time>
+              <wml2:value>26.14</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T21:00:00.000Z</wml2:time>
+              <wml2:value>15.22</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-07T22:00:00.000Z</wml2:time>
+              <wml2:value>26.41</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+</sos:GetObservationResponse>
diff --git a/tests/resources/sos_52n_getobservation_wml2_response.xml b/tests/resources/sos_52n_getobservation_wml2_response.xml
new file mode 100644
index 0000000..44decbf
--- /dev/null
+++ b/tests/resources/sos_52n_getobservation_wml2_response.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<sos:GetObservationResponse xmlns:sos="http://www.opengis.net/sos/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:om="http://www.opengis.net/om/2.0" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:wml2="http://www.opengis.net/waterml/2.0" xsi:schemaLocation="http://www.opengis.net/waterml/2.0 http://schemas.opengis.net/waterml/2.0/waterml2.xsd http://www.opengis.net/sos/2.0 http://schemas.opengis.net/sos/2.0/sosGetObservation.x [...]
+  <sos:observationData>
+    <om:OM_Observation gml:id="o_9556E2084893FEC9C6F407458B91F194C86359D6">
+      <om:phenomenonTime>
+        <gml:TimePeriod gml:id="phenomenonTime_1">
+          <gml:beginPosition>2014-07-01T00:01:42.000Z</gml:beginPosition>
+          <gml:endPosition>2014-07-01T01:16:41.000Z</gml:endPosition>
+        </gml:TimePeriod>
+      </om:phenomenonTime>
+      <om:resultTime>
+        <gml:TimeInstant gml:id="ti_C597E726F2C23BD5C20800061BCDFD0442EF6E44">
+          <gml:timePosition>2014-07-01T00:01:42.000Z</gml:timePosition>
+        </gml:TimeInstant>
+      </om:resultTime>
+      <om:procedure xlink:href="http://geoviqua.dev.52north.org/procedures/WXT520"/>
+      <om:observedProperty xlink:href="http://geoviqua.dev.52north.org/properties/AirTemperature"/>
+      <om:featureOfInterest xlink:href="http://geoviqua.dev.52north.org/stations/Vaisala-WXT520" xlink:title="Vaisala_WXT520"/>
+      <om:result>
+        <wml2:MeasurementTimeseries gml:id="timeseries.1">
+          <wml2:metadata>
+            <wml2:TimeseriesMetadata>
+              <wml2:temporalExtent xlink:href="#phenomenonTime_1"/>
+            </wml2:TimeseriesMetadata>
+          </wml2:metadata>
+          <wml2:defaultPointMetadata>
+            <wml2:DefaultTVPMeasurementMetadata>
+              <wml2:uom code="degC"/>
+              <wml2:interpolationType xlink:href="http://www.opengis.net/def/timeseriesType/WaterML/2.0/continuous" xlink:title="Instantaneous"/>
+            </wml2:DefaultTVPMeasurementMetadata>
+          </wml2:defaultPointMetadata>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-01T00:01:42.000Z</wml2:time>
+              <wml2:value>12.2</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-01T00:16:42.000Z</wml2:time>
+              <wml2:value>12.3</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-01T00:31:42.000Z</wml2:time>
+              <wml2:value>12.0</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-01T00:46:42.000Z</wml2:time>
+              <wml2:value>11.9</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-01T01:01:42.000Z</wml2:time>
+              <wml2:value>12.1</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+          <wml2:point>
+            <wml2:MeasurementTVP>
+              <wml2:time>2014-07-01T01:16:41.000Z</wml2:time>
+              <wml2:value>12.5</wml2:value>
+            </wml2:MeasurementTVP>
+          </wml2:point>
+        </wml2:MeasurementTimeseries>
+      </om:result>
+    </om:OM_Observation>
+  </sos:observationData>
+</sos:GetObservationResponse>
diff --git a/tox.ini b/tox.ini
index 295c229..8dd4d27 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
 [pytest]
-addopts = -vs --color=yes --tb=native --ignore=setup.py --doctest-modules --doctest-glob 'tests/**/*.txt' --cov-report term-missing --cov owslib
+addopts = -v -rxs -s --color=yes --tb=native --ignore=setup.py --doctest-modules --doctest-glob 'tests/**/*.txt' --cov-report term-missing --cov owslib
 norecursedirs = .git docs examples etc cov* *.egg* pytest* .tox
 python_files=check_*.py
 python_functions=check

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/owslib.git



More information about the Pkg-grass-devel mailing list