[owslib] 01/03: New upstream version 0.13.0

Johan Van de Wauw johanvdw-guest at moszumanska.debian.org
Sun Sep 25 08:41:06 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 96ab2c5c22dc65c17f5a814208367dce99d77b6b
Author: Johan Van de Wauw <johan at vandewauw.be>
Date:   Sun Sep 25 10:17:34 2016 +0200

    New upstream version 0.13.0
---
 VERSION.txt                                        |    2 +-
 owslib/__init__.py                                 |    2 +-
 owslib/{ => map}/__init__.py                       |    4 +-
 owslib/map/common.py                               |   84 +
 owslib/{wms.py => map/wms111.py}                   |  366 ++---
 owslib/map/wms130.py                               |  746 +++++++++
 owslib/namespaces.py                               |    2 +-
 owslib/ows.py                                      |    6 +-
 owslib/util.py                                     |  142 +-
 owslib/wms.py                                      |  724 +--------
 tests/doctests/ows_interfaces.txt                  |    2 +-
 tests/doctests/sos_10_ndbc_getobservation.txt      |    4 +-
 tests/doctests/wms_MesonetCapabilities.txt         |    2 +
 ...ilities.txt => wms_MesonetCapabilities_130.txt} |   24 +-
 tests/doctests/wms_MesonetCapabilities_130_bom.txt |   44 +
 tests/doctests/wms_getfeatureinfo.txt              |    2 +
 ...tfeatureinfo.txt => wms_getfeatureinfo_130.txt} |    3 +-
 tests/doctests/wms_getmap.txt                      |   49 +
 .../wms_nationalatlas_getcapabilities_130.txt      |  105 ++
 tests/doctests/wms_nccs_nasa_getcapabilities.txt   |   78 +
 .../wms-aasggeothermal-orwellheads-130.xml         |  123 ++
 tests/resources/wms_mesonet-caps-130.xml           |  149 ++
 tests/resources/wms_mesonet-caps-130_bom.xml       |  149 ++
 .../wms_nationalatlas_getcapabilities_111.xml      |  330 ++++
 .../wms_nationalatlas_getcapabilities_130.xml      | 1120 +++++++++++++
 tests/resources/wms_nccs_nasa_getcap_130.xml       | 1714 ++++++++++++++++++++
 26 files changed, 4989 insertions(+), 987 deletions(-)

diff --git a/VERSION.txt b/VERSION.txt
index ac454c6..54d1a4f 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1 +1 @@
-0.12.0
+0.13.0
diff --git a/owslib/__init__.py b/owslib/__init__.py
index e90f0ff..623145e 100644
--- a/owslib/__init__.py
+++ b/owslib/__init__.py
@@ -1,3 +1,3 @@
 from __future__ import (absolute_import, division, print_function)
 
-__version__ = '0.12.0'
+__version__ = '0.13.0'
diff --git a/owslib/__init__.py b/owslib/map/__init__.py
similarity index 69%
copy from owslib/__init__.py
copy to owslib/map/__init__.py
index e90f0ff..4bf49dc 100644
--- a/owslib/__init__.py
+++ b/owslib/map/__init__.py
@@ -1,3 +1,3 @@
-from __future__ import (absolute_import, division, print_function)
+# -*- coding: ISO-8859-15 -*-
 
-__version__ = '0.12.0'
+from __future__ import (absolute_import, division, print_function)
diff --git a/owslib/map/common.py b/owslib/map/common.py
new file mode 100644
index 0000000..7de5d6e
--- /dev/null
+++ b/owslib/map/common.py
@@ -0,0 +1,84 @@
+from __future__ import (absolute_import, division, print_function)
+
+import cgi
+try:                    # Python 3
+    from urllib.parse import urlencode
+except ImportError:     # Python 2
+    from urllib import urlencode
+
+from owslib.etree import etree
+from owslib.util import openURL, strip_bom
+
+
+class WMSCapabilitiesReader(object):
+    """Read and parse capabilities document into a lxml.etree infoset
+    """
+
+    def __init__(self, version='1.1.1', url=None, un=None, pw=None, headers=None):
+        """Initialize"""
+        self.version = version
+        self._infoset = None
+        self.url = url
+        self.username = un
+        self.password = pw
+        self.headers = headers
+        self.request = None
+
+        #if self.username and self.password:
+            ## Provide login information in order to use the WMS server
+            ## Create an OpenerDirector with support for Basic HTTP 
+            ## Authentication...
+            #passman = HTTPPasswordMgrWithDefaultRealm()
+            #passman.add_password(None, self.url, self.username, self.password)
+            #auth_handler = HTTPBasicAuthHandler(passman)
+            #opener = build_opener(auth_handler)
+            #self._open = opener.open
+
+    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', 'WMS'))
+        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, service_url, timeout=30):
+        """Get and parse a WMS capabilities document, returning an
+        elementtree instance
+
+        service_url is the base url, to which is appended the service,
+        version, and request parameters
+        """
+        self.request = self.capabilities_url(service_url)
+
+        # now split it up again to use the generic openURL function...
+        spliturl = self.request.split('?')
+        u = openURL(spliturl[0], spliturl[1], method='Get',
+                    username=self.username,
+                    password=self.password,
+                    timeout=timeout,
+                    headers=self.headers)
+
+        raw_text = strip_bom(u.read())
+        return etree.fromstring(raw_text)
+
+    def readString(self, st):
+        """Parse a WMS capabilities document, returning an elementtree instance.
+
+        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))
+        raw_text = strip_bom(st)
+        return etree.fromstring(raw_text)
diff --git a/owslib/wms.py b/owslib/map/wms111.py
similarity index 72%
copy from owslib/wms.py
copy to owslib/map/wms111.py
index e7ab2b4..da7149b 100644
--- a/owslib/wms.py
+++ b/owslib/map/wms111.py
@@ -27,47 +27,40 @@ import warnings
 
 import six
 
-from .etree import etree
-from .util import openURL, testXMLValue, extract_xml_list, xmltag_split, OrderedDict
-from .fgdc import Metadata
-from .iso import MD_Metadata
-
-
-class ServiceException(Exception):
-    """WMS ServiceException
-
-    Attributes:
-        message -- short error message
-        xml  -- full xml error message from server
-    """
-
-    def __init__(self, message, xml):
-        self.message = message
-        self.xml = xml
-        
-    def __str__(self):
-        return repr(self.message)
+from owslib.etree import etree
+from owslib.util import (openURL, testXMLValue, extract_xml_list,
+                         xmltag_split, OrderedDict, ServiceException,
+                         bind_url)
+from owslib.fgdc import Metadata
+from owslib.iso import MD_Metadata
+from owslib.map.common import WMSCapabilitiesReader
 
 
 class CapabilitiesError(Exception):
     pass
 
 
-class WebMapService(object):
+class WebMapService_1_1_1(object):
     """Abstraction for OGC Web Map Service (WMS).
 
     Implements IWebMapService.
     """
-    
-    def __getitem__(self,name):
-        ''' check contents dictionary to allow dict like access to service layers'''
+
+    def __getitem__(self, name):
+        ''' check contents dictionary to allow dict
+        like access to service layers
+        '''
         if name in self.__getattribute__('contents'):
             return self.__getattribute__('contents')[name]
         else:
             raise KeyError("No content named %s" % name)
 
-    
-    def __init__(self, url, version='1.1.1', xml=None, username=None, password=None, parse_remote_metadata=False, timeout=30, headers=None):
+    def __init__(self, url, version='1.1.1', xml=None,
+                 username=None,
+                 password=None,
+                 parse_remote_metadata=False,
+                 headers=None,
+                 timeout=30):
         """Initialize."""
         self.url = url
         self.username = username
@@ -78,55 +71,54 @@ class WebMapService(object):
         self._capabilities = None
 
         # Authentication handled by Reader
-        reader = WMSCapabilitiesReader(self.version, url=self.url, un=self.username, pw=self.password, headers=self.headers)
+        reader = WMSCapabilitiesReader(self.version, url=self.url,
+                                       un=self.username, pw=self.password,
+                                       headers=headers)
         if xml:  # read from stored xml
             self._capabilities = reader.readString(xml)
         else:  # read from server
             self._capabilities = reader.read(self.url, timeout=self.timeout)
 
-        # avoid building capabilities metadata if the response is a ServiceExceptionReport
-        se = self._capabilities.find('ServiceException') 
-        if se is not None: 
-            err_message = str(se.text).strip() 
-            raise ServiceException(err_message, xml) 
+        self.request = reader.request
+
+        # avoid building capabilities metadata if the
+        # response is a ServiceExceptionReport
+        se = self._capabilities.find('ServiceException')
+        if se is not None:
+            err_message = str(se.text).strip()
+            raise ServiceException(err_message)
 
         # build metadata objects
         self._buildMetadata(parse_remote_metadata)
 
-    def _getcapproperty(self):
-        if not self._capabilities:
-            reader = WMSCapabilitiesReader(
-                self.version, url=self.url, un=self.username, pw=self.password, headers=self.headers
-                )
-            self._capabilities = ServiceMetadata(reader.read(self.url))
-        return self._capabilities
-
     def _buildMetadata(self, parse_remote_metadata=False):
-        ''' set up capabilities metadata objects '''
-        
-        #serviceIdentification metadata
-        serviceelem=self._capabilities.find('Service')
-        self.identification=ServiceIdentification(serviceelem, self.version)   
-        
-        #serviceProvider metadata
-        self.provider=ServiceProvider(serviceelem)   
-            
-        #serviceOperations metadata 
-        self.operations=[]
+        """Set up capabilities metadata objects."""
+
+        # serviceIdentification metadata
+        serviceelem = self._capabilities.find('Service')
+        self.identification = ServiceIdentification(serviceelem, self.version)
+
+        # serviceProvider metadata
+        self.provider = ServiceProvider(serviceelem)
+
+        # serviceOperations metadata
+        self.operations = []
         for elem in self._capabilities.find('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.
+
+        # serviceContents metadata: our assumption is that services use a
+        # top-level layer as a metadata organizer, nothing more.
         self.contents = OrderedDict()
         caps = self._capabilities.find('Capability')
-        
-        #recursively gather content metadata for all layer elements.
-        #To the WebMapService.contents store only metadata of named layers.
+
+        # recursively gather content metadata for all layer elements.
+        # To the WebMapService.contents store only metadata of named layers.
         def gather_layers(parent_elem, parent_metadata):
             layers = []
             for index, elem in enumerate(parent_elem.findall('Layer')):
-                cm = ContentMetadata(elem, parent=parent_metadata, index=index+1, parse_remote_metadata=parse_remote_metadata)
+                cm = ContentMetadata(elem, parent=parent_metadata,
+                                     index=index + 1,
+                                     parse_remote_metadata=parse_remote_metadata)
                 if cm.id:
                     if cm.id in self.contents:
                         warnings.warn('Content metadata for layer "%s" already exists. Using child layer' % cm.id)
@@ -135,40 +127,40 @@ class WebMapService(object):
                 cm.children = gather_layers(elem, cm)
             return layers
         gather_layers(caps, None)
-        
-        #exceptions
-        self.exceptions = [f.text for f \
-                in self._capabilities.findall('Capability/Exception/Format')]
-            
+
+        # exceptions
+        self.exceptions = [f.text for f
+                           in self._capabilities.findall('Capability/Exception/Format')]
+
     def items(self):
         '''supports dict-like items() access'''
-        items=[]
+        items = []
         for item in self.contents:
-            items.append((item,self.contents[item]))
+            items.append((item, self.contents[item]))
         return items
-    
+
     def getcapabilities(self):
-        """Request and return capabilities document from the WMS as a 
+        """Request and return capabilities document from the WMS as a
         file-like object.
         NOTE: this is effectively redundant now"""
-        
+
         reader = WMSCapabilitiesReader(
-            self.version, url=self.url, un=self.username, pw=self.password, headers=self.headers
-            )
+            self.version, url=self.url, un=self.username, pw=self.password
+        )
         u = self._open(reader.capabilities_url(self.url))
         # check for service exceptions, and return
         if u.info()['Content-Type'] == 'application/vnd.ogc.se_xml':
             se_xml = u.read()
             se_tree = etree.fromstring(se_xml)
             err_message = str(se_tree.find('ServiceException').text).strip()
-            raise ServiceException(err_message, se_xml)
+            raise ServiceException(err_message)
         return u
 
     def __build_getmap_request(self, layers=None, styles=None, srs=None, bbox=None,
                format=None, size=None, time=None, transparent=False,
                bgcolor=None, exceptions=None, **kwargs):
 
-        request = {'version': self.version, 'request': 'GetMap'}
+        request = {'service': 'WMS', 'version': self.version, 'request': 'GetMap'}
 
         # check layers and styles
         assert len(layers) > 0
@@ -207,7 +199,7 @@ class WebMapService(object):
                **kwargs
                ):
         """Request and return an image from the WMS as a file-like object.
-        
+
         Parameters
         ----------
         layers : list
@@ -231,62 +223,92 @@ class WebMapService(object):
             Optional. HTTP DCP method name: Get or Post.
         **kwargs : extra arguments
             anything else e.g. vendor specific parameters
-        
+
         Example
         -------
-            >>> wms = WebMapService('http://giswebservices.massgis.state.ma.us/geoserver/wms', version='1.1.1')
-            >>> img = wms.getmap(layers=['massgis:GISDATA.SHORELINES_ARC'],\
+            wms = WebMapService('http://giswebservices.massgis.state.ma.us/geoserver/wms', version='1.1.1')
+            img = wms.getmap(layers=['massgis:GISDATA.SHORELINES_ARC'],\
                                  styles=[''],\
                                  srs='EPSG:4326',\
                                  bbox=(-70.8, 42, -70, 42.8),\
                                  size=(300, 300),\
                                  format='image/jpeg',\
                                  transparent=True)
-            >>> out = open('example.jpg', 'wb')
-            >>> bytes_written = out.write(img.read())
-            >>> out.close()
+            out = open('example.jpg', 'wb')
+            bytes_written = out.write(img.read())
+            out.close()
 
-        """        
+        """
         try:
             base_url = next((m.get('url') for m in self.getOperationByName('GetMap').methods if m.get('type').lower() == method.lower()))
         except StopIteration:
             base_url = self.url
+        request = {'version': self.version, 'request': 'GetMap'}
+
+        request = self.__build_getmap_request(
+            layers=layers,
+            styles=styles,
+            srs=srs,
+            bbox=bbox,
+            format=format,
+            size=size,
+            time=time,
+            transparent=transparent,
+            bgcolor=bgcolor,
+            exceptions=exceptions,
+            **kwargs)
 
-        request = self.__build_getmap_request(layers=layers, styles=styles, srs=srs, bbox=bbox,
-               format=format, size=size, time=time, transparent=transparent,
-               bgcolor=bgcolor, exceptions=exceptions, **kwargs)
-        
         data = urlencode(request)
-        
-        u = openURL(base_url, data, method, username=self.username, password=self.password, timeout=timeout or self.timeout, headers=self.headers)
+
+        self.request = bind_url(base_url) + data
+
+        u = openURL(base_url, data, method, username=self.username, password=self.password, timeout=timeout or self.timeout)
 
         # check for service exceptions, and return
-        if u.info()['Content-Type'] == 'application/vnd.ogc.se_xml':
+        if u.info()['Content-Type'].split(';')[0] in ['application/vnd.ogc.se_xml']:
             se_xml = u.read()
             se_tree = etree.fromstring(se_xml)
             err_message = six.text_type(se_tree.find('ServiceException').text).strip()
-            raise ServiceException(err_message, se_xml)
+            raise ServiceException(err_message)
         return u
 
-
-    def getfeatureinfo(self, layers=None, styles=None, srs=None, bbox=None,
-               format=None, size=None, time=None, transparent=False,
-               bgcolor='#FFFFFF',
-               exceptions='application/vnd.ogc.se_xml',
-               query_layers = None, xy=None, info_format=None, feature_count=20,
-               method='Get',
-               timeout=None,
-               **kwargs
-               ):
+    def getfeatureinfo(self,
+                       layers=None,
+                       styles=None,
+                       srs=None,
+                       bbox=None,
+                       format=None,
+                       size=None,
+                       time=None,
+                       transparent=False,
+                       bgcolor='#FFFFFF',
+                       exceptions='application/vnd.ogc.se_xml',
+                       query_layers=None,
+                       xy=None,
+                       info_format=None,
+                       feature_count=20,
+                       method='Get',
+                       timeout=None,
+                       **kwargs
+                       ):
         try:
             base_url = next((m.get('url') for m in self.getOperationByName('GetFeatureInfo').methods if m.get('type').lower() == method.lower()))
         except StopIteration:
             base_url = self.url
 
         # GetMap-Request
-        request = self.__build_getmap_request(layers=layers, styles=styles, srs=srs, bbox=bbox,
-               format=format, size=size, time=time, transparent=transparent,
-               bgcolor=bgcolor, exceptions=exceptions, kwargs=kwargs)
+        request = self.__build_getmap_request(
+            layers=layers,
+            styles=styles,
+            srs=srs,
+            bbox=bbox,
+            format=format,
+            size=size,
+            time=time,
+            transparent=transparent,
+            bgcolor=bgcolor,
+            exceptions=exceptions,
+            kwargs=kwargs)
 
         # extend to GetFeatureInfo-Request
         request['request'] = 'GetFeatureInfo'
@@ -304,14 +326,16 @@ class WebMapService(object):
 
         data = urlencode(request)
 
-        u = openURL(base_url, data, method, username=self.username, password=self.password, timeout=timeout or self.timeout, headers=self.headers)
+        self.request = bind_url(base_url) + data
+
+        u = openURL(base_url, data, method, username=self.username, password=self.password, timeout=timeout or self.timeout)
 
         # check for service exceptions, and return
         if u.info()['Content-Type'] == 'application/vnd.ogc.se_xml':
             se_xml = u.read()
             se_tree = etree.fromstring(se_xml)
             err_message = six.text_type(se_tree.find('ServiceException').text).strip()
-            raise ServiceException(err_message, se_xml)
+            raise ServiceException(err_message)
         return u
 
     def getServiceXML(self):
@@ -326,10 +350,10 @@ class WebMapService(object):
             if item.name == name:
                 return item
         raise KeyError("No operation named %s" % name)
-    
+
 class ServiceIdentification(object):
     ''' Implements IServiceIdentificationMetadata '''
-    
+
     def __init__(self, infoset, version):
         self._root=infoset
         self.type = testXMLValue(self._root.find('Name'))
@@ -358,7 +382,7 @@ class ServiceProvider(object):
             self.contact = ContactMetadata(contact)
         else:
             self.contact = None
-            
+
     def getContentByName(self, name):
         """Return a named content item."""
         for item in self.contents:
@@ -372,7 +396,7 @@ class ServiceProvider(object):
             if item.name == name:
                 return item
         raise KeyError("No operation named %s" % name)
-        
+
 class ContentMetadata:
     """
     Abstraction for WMS layer metadata.
@@ -382,7 +406,7 @@ class ContentMetadata:
     def __init__(self, elem, parent=None, children=None, index=0, parse_remote_metadata=False, timeout=30):
         if elem.tag != 'Layer':
             raise ValueError('%s should be a Layer' % (elem,))
-        
+
         self.parent = parent
         if parent:
             self.index = "%s.%d" % (parent.index, index)
@@ -390,7 +414,7 @@ class ContentMetadata:
             self.index = str(index)
 
         self._children = children
-        
+
         self.id = self.name = testXMLValue(elem.find('Name'))
 
         # layer attributes
@@ -408,30 +432,30 @@ class ContentMetadata:
             self.title = title.strip()
 
         self.abstract = testXMLValue(elem.find('Abstract'))
-        
+
         # bboxes
         b = elem.find('BoundingBox')
         self.boundingBox = None
         if b is not None:
-            try: #sometimes the SRS attribute is (wrongly) not provided
-                srs=b.attrib['SRS']
+            try:  # sometimes the SRS attribute is (wrongly) not provided
+                srs = b.attrib['SRS']
             except KeyError:
-                srs=None
+                srs = None
             self.boundingBox = (
                 float(b.attrib['minx']),
                 float(b.attrib['miny']),
                 float(b.attrib['maxx']),
                 float(b.attrib['maxy']),
                 srs,
-                )
+            )
         elif self.parent:
             if hasattr(self.parent, 'boundingBox'):
                 self.boundingBox = self.parent.boundingBox
 
-        # ScaleHint 
-        sh = elem.find('ScaleHint') 
-        self.scaleHint = None 
-        if sh is not None: 
+        # ScaleHint
+        sh = elem.find('ScaleHint')
+        self.scaleHint = None
+        if sh is not None:
             if 'min' in sh.attrib and 'max' in sh.attrib:
                 self.scaleHint = {'min': sh.attrib['min'], 'max': sh.attrib['max']} 
 
@@ -461,15 +485,15 @@ class ContentMetadata:
             self.boundingBoxWGS84 = self.parent.boundingBoxWGS84
         else:
             self.boundingBoxWGS84 = None
-            
-        #SRS options
+
+        # SRS options
         self.crsOptions = []
-            
-        #Copy any parent SRS options (they are inheritable properties)
+
+        # Copy any parent SRS options (they are inheritable properties)
         if self.parent:
             self.crsOptions = list(self.parent.crsOptions)
 
-        #Look for SRS option attached to this layer
+        # Look for SRS option attached to this layer
         if elem.find('SRS') is not None:
             ## some servers found in the wild use a single SRS
             ## tag containing a whitespace separated list of SRIDs
@@ -478,7 +502,7 @@ class ContentMetadata:
                 if srslist:
                     for srs in srslist.split():
                         self.crsOptions.append(srs)
-                        
+
         #Get rid of duplicate entries
         self.crsOptions = list(set(self.crsOptions))
 
@@ -490,15 +514,15 @@ class ContentMetadata:
             # Comment by Jachym:
             # Do not set it to None, but to [], which will make the code
             # work further. Fixed by anthonybaxter
-            self.crsOptions=[]
-            
+            self.crsOptions = []
+
         #Styles
         self.styles = {}
-        
+
         #Copy any parent styles (they are inheritable properties)
         if self.parent:
             self.styles = self.parent.styles.copy()
- 
+
         #Get the styles for this layer (items with the same name are replaced)
         for s in elem.findall('Style'):
             name = s.find('Name')
@@ -524,14 +548,14 @@ class ContentMetadata:
                     self.timepositions=extent.text.split(',')
                     self.defaulttimeposition = extent.attrib.get("default")
                     break
-                
+
         # Elevations - available vertical levels
         self.elevations=None
         for extent in elem.findall('Extent'):
-            if extent.attrib.get("name").lower() =='elevation':
+            if extent.attrib.get("name").lower() == 'elevation':
                 if extent.text:
-                    self.elevations=extent.text.split(',')
-                    break                
+                    self.elevations = extent.text.split(',')
+                    break
 
         # MetadataURLs
         self.metadataUrls = []
@@ -564,7 +588,7 @@ class ContentMetadata:
                 'url': m.find('OnlineResource').attrib['{http://www.w3.org/1999/xlink}href']
             }
             self.dataUrls.append(dataUrl)
-                
+
         self.layers = []
         for child in elem.findall('Layer'):
             self.layers.append(ContentMetadata(child, self))
@@ -586,7 +610,7 @@ class ContentMetadata:
 
 class OperationMetadata:
     """Abstraction for WMS OperationMetadata.
-    
+
     Implements IOperationMetadata.
     """
     def __init__(self, elem):
@@ -606,14 +630,14 @@ class ContactMetadata:
     def __init__(self, elem):
         name = elem.find('ContactPersonPrimary/ContactPerson')
         if name is not None:
-            self.name=name.text
+            self.name = name.text
         else:
-            self.name=None
+            self.name = None
         email = elem.find('ContactElectronicMailAddress')
         if email is not None:
-            self.email=email.text
+            self.email = email.text
         else:
-            self.email=None
+            self.email = None
         self.address = self.city = self.region = None
         self.postcode = self.country = None
 
@@ -641,69 +665,3 @@ class ContactMetadata:
         position = elem.find('ContactPosition')
         if position is not None: self.position = position.text
         else: self.position = None
-
-      
-class WMSCapabilitiesReader:
-    """Read and parse capabilities document into a lxml.etree infoset
-    """
-
-    def __init__(self, version='1.1.1', url=None, un=None, pw=None, headers=None):
-        """Initialize"""
-        self.version = version
-        self._infoset = None
-        self.url = url
-        self.username = un
-        self.password = pw
-        self.headers = headers
-
-        #if self.username and self.password:
-            ## Provide login information in order to use the WMS server
-            ## Create an OpenerDirector with support for Basic HTTP 
-            ## Authentication...
-            #passman = HTTPPasswordMgrWithDefaultRealm()
-            #passman.add_password(None, self.url, self.username, self.password)
-            #auth_handler = HTTPBasicAuthHandler(passman)
-            #opener = build_opener(auth_handler)
-            #self._open = opener.open
-
-    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', 'WMS'))
-        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, service_url, timeout=30):
-        """Get and parse a WMS capabilities document, returning an
-        elementtree instance
-
-        service_url is the base url, to which is appended the service,
-        version, and request parameters
-        """
-        getcaprequest = self.capabilities_url(service_url)
-
-        #now split it up again to use the generic openURL function...
-        spliturl=getcaprequest.split('?')
-        u = openURL(spliturl[0], spliturl[1], method='Get', username=self.username, password=self.password, timeout=timeout, headers=self.headers)
-        return etree.fromstring(u.read())
-
-    def readString(self, st):
-        """Parse a WMS capabilities document, returning an elementtree instance
-
-        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/map/wms130.py b/owslib/map/wms130.py
new file mode 100644
index 0000000..01cc959
--- /dev/null
+++ b/owslib/map/wms130.py
@@ -0,0 +1,746 @@
+# -*- coding: iso-8859-15 -*-
+# =============================================================================
+# Copyright (c) 2004, 2006 Sean C. Gillies
+# Copyright (c) 2005 Nuxeo SARL <http://nuxeo.com>
+#
+# Authors : Sean Gillies <sgillies at frii.com>
+#           Julien Anguenot <ja at nuxeo.com>
+#
+# Contact email: sgillies at frii.com
+# =============================================================================
+
+"""
+API For Web Map Service version 1.3.0.
+"""
+
+from __future__ import (absolute_import, division, print_function)
+
+try:                    # Python 3
+    from urllib.parse import urlencode
+except ImportError:     # Python 2
+    from urllib import urlencode
+
+import warnings
+import six
+from owslib.etree import etree
+from owslib.util import (openURL, ServiceException, testXMLValue,
+                         extract_xml_list, xmltag_split, OrderedDict, nspath,
+                         bind_url)
+from owslib.util import nspath
+from owslib.fgdc import Metadata
+from owslib.iso import MD_Metadata
+from owslib.crs import Crs
+from owslib.namespaces import Namespaces
+from owslib.map.common import WMSCapabilitiesReader
+
+from owslib.util import log
+
+n = Namespaces()
+WMS_NAMESPACE = n.get_namespace("wms")
+OGC_NAMESPACE = n.get_namespace('ogc')
+
+
+class WebMapService_1_3_0(object):
+
+    def __getitem__(self, name):
+        ''' check contents dictionary to allow dict
+        like access to service layers
+        '''
+        if name in self.__getattribute__('contents'):
+            return self.__getattribute__('contents')[name]
+        else:
+            raise KeyError("No content named %s" % name)
+
+    def __init__(self, url, version='1.3.0', xml=None, username=None,
+                 password=None, parse_remote_metadata=False, timeout=30,
+                 headers=None):
+        """initialize"""
+        self.url = url
+        self.username = username
+        self.password = password
+        self.version = version
+        self.timeout = timeout
+        self.headers = headers
+        self._capabilities = None
+
+        # Authentication handled by Reader
+        reader = WMSCapabilitiesReader(self.version, url=self.url,
+                                       un=self.username, pw=self.password,
+                                       headers=headers)
+        if xml:  # read from stored xml
+            self._capabilities = reader.readString(xml)
+        else:  # read from server
+            self._capabilities = reader.read(self.url, timeout=self.timeout)
+
+        self.request = reader.request
+
+        # avoid building capabilities metadata if the
+        # response is a ServiceExceptionReport
+        se = self._capabilities.find('ServiceException')
+        if se is not None:
+            err_message = str(se.text).strip()
+            raise ServiceException(err_message)
+
+        # build metadata objects
+        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',
+                                              ns=WMS_NAMESPACE))
+        self.identification = ServiceIdentification(serviceelem, self.version)
+
+        # serviceProvider metadata
+        self.provider = ServiceProvider(serviceelem)
+
+        # serviceOperations metadata
+        self.operations = []
+        for elem in self._capabilities.find(nspath('Capability/Request',
+                                            ns=WMS_NAMESPACE))[:]:
+            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 = OrderedDict()
+        caps = self._capabilities.find(nspath('Capability', WMS_NAMESPACE))
+
+        # recursively gather content metadata for all layer elements.
+        # To the WebMapService.contents store only metadata of named layers.
+        def gather_layers(parent_elem, parent_metadata):
+            layers = []
+            for index, elem in enumerate(parent_elem.findall(nspath('Layer', WMS_NAMESPACE))):
+                cm = ContentMetadata(elem, parent=parent_metadata, index=index+1,
+                                     parse_remote_metadata=parse_remote_metadata)
+                if cm.id:
+                    if cm.id in self.contents:
+                        warnings.warn('Content metadata for layer "%s" already exists. Using child layer' % cm.id)
+                    layers.append(cm)
+                    self.contents[cm.id] = cm
+                cm.children = gather_layers(elem, cm)
+            return layers
+        gather_layers(caps, None)
+
+        # exceptions
+        self.exceptions = [f.text for f
+                           in self._capabilities.findall(nspath('Capability/Exception/Format',
+                                                         WMS_NAMESPACE))]
+
+    def items(self):
+        '''supports dict-like items() access'''
+        items = []
+        for item in self.contents:
+            items.append((item, self.contents[item]))
+        return items
+
+    def getServiceXML(self):
+        xml = None
+        if self._capabilities is not None:
+            xml = etree.tostring(self._capabilities)
+        return xml
+
+    def getOperationByName(self, name):
+        """Return a named content item."""
+        for item in self.operations:
+            if item.name == name:
+                return item
+        raise KeyError("No operation named %s" % name)
+
+    def __build_getmap_request(self, layers=None, styles=None, srs=None, bbox=None,
+               format=None, size=None, time=None, dimensions={},
+               elevation=None, transparent=False,
+               bgcolor=None, exceptions=None, **kwargs):
+
+        request = {'service': 'WMS', 'version': self.version, 'request': 'GetMap'}
+
+        # check layers and styles
+        assert len(layers) > 0
+        request['layers'] = ','.join(layers)
+        if styles:
+            assert len(styles) == len(layers)
+            request['styles'] = ','.join(styles)
+        else:
+            request['styles'] = ''
+
+        # size
+        request['width'] = str(size[0])
+        request['height'] = str(size[1])
+
+        # remap srs to crs for the actual request
+        if srs.upper() == 'EPSG:0':
+            # if it's esri's unknown spatial ref code, bail
+            raise Exception('Undefined spatial reference (%s).' % srs)
+
+        sref = Crs(srs)
+        if sref.axisorder == 'yx':
+            # remap the given bbox
+            bbox = (bbox[1], bbox[0], bbox[3], bbox[2])
+
+        # remapping the srs to crs for the request
+        request['crs'] = str(srs)
+        request['bbox'] = ','.join([repr(x) for x in bbox])
+        request['format'] = str(format)
+        request['transparent'] = str(transparent).upper()
+        request['bgcolor'] = '0x' + bgcolor[1:7]
+        request['exceptions'] = str(exceptions)
+
+        if time is not None:
+            request['time'] = str(time)
+
+        if elevation is not None:
+            request['elevation'] = str(elevation)
+
+        # any other specified dimension, prefixed with "dim_"
+        for k, v in six.iteritems(dimensions):
+            request['dim_' + k] = str(v)
+
+        if kwargs:
+            for kw in kwargs:
+                request[kw]=kwargs[kw]
+        return request
+
+    def getmap(self, layers=None,
+               styles=None,
+               srs=None,
+               bbox=None,
+               format=None,
+               size=None,
+               time=None,
+               elevation=None,
+               dimensions={},
+               transparent=False,
+               bgcolor='#FFFFFF',
+               exceptions='XML',
+               method='Get',
+               timeout=None,
+               **kwargs
+               ):
+        """Request and return an image from the WMS as a file-like object.
+
+        Parameters
+        ----------
+        layers : list
+            List of content layer names.
+        styles : list
+            Optional list of named styles, must be the same length as the
+            layers list.
+        srs : string
+            A spatial reference system identifier.
+            Note: this is an invalid query parameter key for 1.3.0 but is being
+                  retained for standardization with 1.1.1.
+            Note: throws exception if the spatial ref is ESRI's "no reference"
+                  code (EPSG:0)
+        bbox : tuple
+            (left, bottom, right, top) in srs units (note, this order does not
+                change depending on axis order of the crs).
+
+            CRS:84: (long, lat)
+            EPSG:4326: (lat, long)
+        format : string
+            Output image format such as 'image/jpeg'.
+        size : tuple
+            (width, height) in pixels.
+
+        time : string or list or range
+            Optional. Time value of the specified layer as ISO-8601 (per value)
+        elevation : string or list or range
+            Optional. Elevation value of the specified layer.
+        dimensions: dict (dimension : string or list or range)
+            Optional. Any other Dimension option, as specified in the GetCapabilities
+
+        transparent : bool
+            Optional. Transparent background if True.
+        bgcolor : string
+            Optional. Image background color.
+        method : string
+            Optional. HTTP DCP method name: Get or Post.
+        **kwargs : extra arguments
+            anything else e.g. vendor specific parameters
+
+        Example
+        -------
+            wms = WebMapService('http://webservices.nationalatlas.gov/wms/1million',\
+                                    version='1.3.0')
+            img = wms.getmap(layers=['airports1m'],\
+                                 styles=['default'],\
+                                 srs='EPSG:4326',\
+                                 bbox=(-176.646, 17.7016, -64.8017, 71.2854),\
+                                 size=(300, 300),\
+                                 format='image/jpeg',\
+                                 transparent=True)
+            out = open('example.jpg.jpg', 'wb')
+            out.write(img.read())
+            out.close()
+
+        """
+
+        try:
+            base_url = next((m.get('url') for m in
+                            self.getOperationByName('GetMap').methods if
+                            m.get('type').lower() == method.lower()))
+        except StopIteration:
+            base_url = self.url
+
+        request = self.__build_getmap_request(
+            layers=layers,
+            styles=styles,
+            srs=srs,
+            bbox=bbox,
+            dimensions=dimensions,
+            elevation=elevation,
+            format=format,
+            size=size,
+            time=time,
+            transparent=transparent,
+            bgcolor=bgcolor,
+            exceptions=exceptions,
+            **kwargs)
+
+        data = urlencode(request)
+
+        self.request = bind_url(base_url) + data
+
+        u = openURL(base_url,
+                    data,
+                    method,
+                    username=self.username,
+                    password=self.password,
+                    timeout=timeout or self.timeout)
+
+        # need to handle casing in the header keys
+        headers = {}
+        for k, v in six.iteritems(u.info()):
+            headers[k.lower()] = v
+
+        # handle the potential charset def
+        if headers['content-type'].split(';')[0] in ['application/vnd.ogc.se_xml', 'text/xml']:
+            se_xml = u.read()
+            se_tree = etree.fromstring(se_xml)
+            err_message = six.text_type(se_tree.find(nspath('ServiceException', OGC_NAMESPACE)).text).strip()
+            raise ServiceException(err_message)
+        return u
+
+    def getfeatureinfo(self, layers=None,
+                       styles=None,
+                       srs=None,
+                       bbox=None,
+                       format=None,
+                       size=None,
+                       time=None,
+                       elevation=None,
+                       dimensions={},
+                       transparent=False,
+                       bgcolor='#FFFFFF',
+                       exceptions='XML',
+                       query_layers=None,
+                       xy=None,
+                       info_format=None,
+                       feature_count=20,
+                       method='Get',
+                       timeout=None,
+                       **kwargs
+                       ):
+        try:
+            base_url = next((m.get('url') for m in self.getOperationByName('GetFeatureInfo').methods if m.get('type').lower() == method.lower()))
+        except StopIteration:
+            base_url = self.url
+
+        # GetMap-Request
+        request = self.__build_getmap_request(
+            layers=layers,
+            styles=styles,
+            srs=srs,
+            bbox=bbox,
+            dimensions=dimensions,
+            elevation=elevation,
+            format=format,
+            size=size,
+            time=time,
+            transparent=transparent,
+            bgcolor=bgcolor,
+            exceptions=exceptions,
+            kwargs=kwargs)
+
+        # extend to GetFeatureInfo-Request
+        request['request'] = 'GetFeatureInfo'
+
+        if not query_layers:
+            __str_query_layers = ','.join(layers)
+        else:
+            __str_query_layers = ','.join(query_layers)
+
+        request['query_layers'] = __str_query_layers
+        request['i'] = str(xy[0])
+        request['j'] = str(xy[1])
+        request['info_format'] = info_format
+        request['feature_count'] = str(feature_count)
+
+        data = urlencode(request)
+ 
+        self.request = bind_url(base_url) + data
+
+        u = openURL(base_url, data, method, username=self.username, password=self.password, timeout=timeout or self.timeout)
+
+        # check for service exceptions, and return
+        if u.info()['Content-Type'] == 'XML':
+            se_xml = u.read()
+            se_tree = etree.fromstring(se_xml)
+            err_message = six.text_type(se_tree.find('ServiceException').text).strip()
+            raise ServiceException(err_message)
+        return u
+
+class ServiceIdentification(object):
+    def __init__(self, infoset, version):
+        self._root = infoset
+        self.type = testXMLValue(self._root.find(nspath('Name', WMS_NAMESPACE)))
+        self.version = version
+        self.title = testXMLValue(self._root.find(nspath('Title', WMS_NAMESPACE)))
+        self.abstract = testXMLValue(self._root.find(nspath('Abstract', WMS_NAMESPACE)))
+        self.keywords = extract_xml_list(self._root.findall(nspath('KeywordList/Keyword', WMS_NAMESPACE)))
+        self.accessconstraints = testXMLValue(self._root.find(nspath('AccessConstraints', WMS_NAMESPACE)))
+        self.fees = testXMLValue(self._root.find(nspath('Fees', WMS_NAMESPACE)))
+
+
+class ServiceProvider(object):
+    def __init__(self, infoset):
+        self._root = infoset
+        name = self._root.find(nspath('ContactInformation/ContactPersonPrimary/ContactOrganization', WMS_NAMESPACE))
+        if name is not None:
+            self.name = name.text
+        else:
+            self.name = None
+        self.url = self._root.find(nspath('OnlineResource', WMS_NAMESPACE)).attrib.get('{http://www.w3.org/1999/xlink}href', '')
+        # contact metadata
+        contact = self._root.find(nspath('ContactInformation', WMS_NAMESPACE))
+        # sometimes there is a contact block that is empty, so make
+        # sure there are children to parse
+        if contact is not None and contact[:] != []:
+            self.contact = ContactMetadata(contact)
+        else:
+            self.contact = None
+
+
+class ContentMetadata(object):
+    def __init__(self, elem, parent=None, children=None, index=0, parse_remote_metadata=False, timeout=30):
+        if xmltag_split(elem.tag) != 'Layer':
+            raise ValueError('%s should be a Layer' % (elem,))
+
+        self.parent = parent
+        if parent:
+            self.index = "%s.%d" % (parent.index, index)
+        else:
+            self.index = str(index)
+
+        self._children = children
+
+        self.id = self.name = testXMLValue(elem.find(nspath('Name', WMS_NAMESPACE)))
+
+        # layer attributes
+        self.queryable = int(elem.attrib.get('queryable', 0))
+        self.cascaded = int(elem.attrib.get('cascaded', 0))
+        self.opaque = int(elem.attrib.get('opaque', 0))
+        self.noSubsets = int(elem.attrib.get('noSubsets', 0))
+        self.fixedWidth = int(elem.attrib.get('fixedWidth', 0))
+        self.fixedHeight = int(elem.attrib.get('fixedHeight', 0))
+
+        # title is mandatory property
+        self.title = None
+        title = testXMLValue(elem.find(nspath('Title', WMS_NAMESPACE)))
+        if title is not None:
+            self.title = title.strip()
+
+        self.abstract = testXMLValue(elem.find(nspath('Abstract', WMS_NAMESPACE)))
+
+        # TODO: what is the preferred response to esri's handling of custom projections
+        #       in the spatial ref definitions? see http://resources.arcgis.com/en/help/main/10.1/index.html#//00sq000000m1000000
+        #       and an example (20150812) http://maps.ngdc.noaa.gov/arcgis/services/firedetects/MapServer/WMSServer?request=GetCapabilities&service=WMS
+
+        # bboxes
+        b = elem.find(nspath('EX_GeographicBoundingBox', WMS_NAMESPACE))
+        self.boundingBoxWGS84 = None
+        if b is not None:
+            minx = b.find(nspath('westBoundLongitude', WMS_NAMESPACE))
+            miny = b.find(nspath('southBoundLatitude', WMS_NAMESPACE))
+            maxx = b.find(nspath('eastBoundLongitude', WMS_NAMESPACE))
+            maxy = b.find(nspath('northBoundLatitude', WMS_NAMESPACE))
+            box = tuple(map(float, [minx.text if minx is not None else None,
+                            miny.text if miny is not None else None,
+                            maxx.text if maxx is not None else None,
+                            maxy.text if maxy is not None else None]))
+
+            self.boundingBoxWGS84 = tuple(box)
+        elif self.parent:
+            if hasattr(self.parent, 'boundingBoxWGS84'):
+                self.boundingBoxWGS84 = self.parent.boundingBoxWGS84
+
+        # make a bbox list (of tuples)
+        crs_list = []
+        for bb in elem.findall(nspath('BoundingBox', WMS_NAMESPACE)):
+            srs_str = bb.attrib.get('CRS', None)
+            srs = Crs(srs_str)
+
+            box = tuple(map(float, [bb.attrib['minx'],
+                        bb.attrib['miny'],
+                        bb.attrib['maxx'],
+                        bb.attrib['maxy']]
+            ))
+            minx, miny, maxx, maxy = box[0], box[1], box[2], box[3]
+
+            # handle the ordering so that it always
+            # returns (minx, miny, maxx, maxy)
+            if srs and srs.axisorder == 'yx':
+                # reverse things
+                minx, miny, maxx, maxy = box[1], box[0], box[3], box[2]
+
+            crs_list.append((
+                minx, miny, maxx, maxy,
+                srs_str,
+            ))
+        self.crs_list = crs_list
+        # and maintain the original boundingBox attribute (first in list)
+        # or the wgs84 bbox (to handle cases of incomplete parentage)
+        self.boundingBox = crs_list[0] if crs_list else self.boundingBoxWGS84
+
+        # ScaleHint
+        sh = elem.find(nspath('ScaleHint', WMS_NAMESPACE))
+        self.scaleHint = None
+        if sh is not None:
+            if 'min' in sh.attrib and 'max' in sh.attrib:
+                self.scaleHint = {'min': sh.attrib['min'], 'max': sh.attrib['max']}
+
+        attribution = elem.find(nspath('Attribution', WMS_NAMESPACE))
+        if attribution is not None:
+            self.attribution = dict()
+            title = attribution.find(nspath('Title', WMS_NAMESPACE))
+            url = attribution.find(nspath('OnlineResource', WMS_NAMESPACE))
+            logo = attribution.find(nspath('LogoURL', WMS_NAMESPACE))
+            if title is not None:
+                self.attribution['title'] = title.text
+            if url is not None:
+                self.attribution['url'] = url.attrib['{http://www.w3.org/1999/xlink}href']
+            if logo is not None:
+                self.attribution['logo_size'] = (int(logo.attrib['width']), int(logo.attrib['height']))
+                self.attribution['logo_url'] = logo.find(nspath('OnlineResource', WMS_NAMESPACE)).attrib['{http://www.w3.org/1999/xlink}href']
+
+        # TODO: get this from the bbox attributes instead (deal with parents)
+        # SRS options
+        self.crsOptions = []
+
+        # Copy any parent SRS options (they are inheritable properties)
+        if self.parent:
+            self.crsOptions = list(self.parent.crsOptions)
+
+        # Look for SRS option attached to this layer
+        if elem.find(nspath('CRS', WMS_NAMESPACE)) is not None:
+            # some servers found in the wild use a single SRS
+            # tag containing a whitespace separated list of SRIDs
+            # instead of several SRS tags. hence the inner loop
+            for srslist in map(lambda x: x.text, elem.findall(nspath('CRS', WMS_NAMESPACE))):
+                if srslist:
+                    for srs in srslist.split():
+                        self.crsOptions.append(srs)
+
+        # Get rid of duplicate entries
+        self.crsOptions = list(set(self.crsOptions))
+
+        # Set self.crsOptions to None if the layer (and parents) had no SRS options
+        if len(self.crsOptions) == 0:
+            # raise ValueError('%s no SRS available!?' % (elem,))
+            # Comment by D Lowe.
+            # Do not raise ValueError as it is possible that a layer is purely a parent layer and does not have SRS specified. Instead set crsOptions to None
+            # Comment by Jachym:
+            # Do not set it to None, but to [], which will make the code
+            # work further. Fixed by anthonybaxter
+            self.crsOptions = []
+
+        # Styles
+        self.styles = {}
+
+        # Copy any parent styles (they are inheritable properties)
+        if self.parent:
+            self.styles = self.parent.styles.copy()
+
+        # Get the styles for this layer (items with the same name are replaced)
+        for s in elem.findall(nspath('Style', WMS_NAMESPACE)):
+            name = s.find(nspath('Name', WMS_NAMESPACE))
+            title = s.find(nspath('Title', WMS_NAMESPACE))
+            if name is None or title is None:
+                raise ValueError('%s missing name or title' % (s,))
+            style = {'title': title.text}
+            # legend url
+            legend = s.find(nspath('LegendURL/OnlineResource', WMS_NAMESPACE))
+            if legend is not None:
+                style['legend'] = legend.attrib['{http://www.w3.org/1999/xlink}href']
+
+            lgd = s.find(nspath('LegendURL', WMS_NAMESPACE))
+            if lgd is not None:
+                if 'width' in lgd.attrib.keys():
+                    style['legend_width'] = lgd.attrib.get('width')
+                if 'height' in lgd.attrib.keys():
+                    style['legend_height'] = lgd.attrib.get('height')
+
+                lgd_format = lgd.find(nspath('Format', WMS_NAMESPACE))
+                if lgd_format is not None:
+                    style['legend_format'] = lgd_format.text.strip()
+            self.styles[name.text] = style
+
+        # keywords
+        self.keywords = [f.text for f in elem.findall(nspath('KeywordList/Keyword', WMS_NAMESPACE))]
+
+        # extents replaced by dimensions of name
+        # comment by Soren Scott
+        # <Dimension name="elevation" units="meters" default="500" multipleValues="1"
+        #    nearestValue="0" current="true" unitSymbol="m">500, 490, 480</Dimension>
+        # it can be repeated with the same name so ? this assumes a single one to match 1.1.1
+
+        self.timepositions = None
+        self.defaulttimeposition = None
+        time_dimension = None
+        for dim in elem.findall(nspath('Dimension', WMS_NAMESPACE)):
+            if dim.attrib.get('name') is not None:
+                time_dimension = dim
+        if time_dimension is not None:
+            self.timepositions = time_dimension.text.split(',') if time_dimension.text else None
+            self.defaulttimeposition = time_dimension.attrib.get('default', None)
+
+        # Elevations - available vertical levels
+        self.elevations = None
+        elev_dimension = None
+        for dim in elem.findall(nspath('Dimension', WMS_NAMESPACE)):
+            if dim.attrib.get('elevation') is not None:
+                elev_dimension = dim
+        if elev_dimension is not None:
+            self.elevations = [e.strip() for e in elev_dimension.text.split(',')] if elev_dimension.text else None
+
+        # and now capture the dimensions as more generic things (and custom things)
+        self.dimensions = {}
+        for dim in elem.findall(nspath('Dimension', WMS_NAMESPACE)):
+            dim_name = dim.attrib.get('name')
+            dim_data = {}
+            for k, v in six.iteritems(dim.attrib):
+                if k != 'name':
+                    dim_data[k] = v
+            # single values and ranges are not differentiated here
+            dim_data['values'] = dim.text.strip().split(',') if dim.text.strip() else None
+            self.dimensions[dim_name] = dim_data
+
+        # MetadataURLs
+        self.metadataUrls = []
+        for m in elem.findall(nspath('MetadataURL', WMS_NAMESPACE)):
+            metadataUrl = {
+                'type': testXMLValue(m.attrib['type'], attrib=True),
+                'format': testXMLValue(m.find(nspath('Format', WMS_NAMESPACE))),
+                'url': testXMLValue(m.find(nspath('OnlineResource', WMS_NAMESPACE)).attrib['{http://www.w3.org/1999/xlink}href'], attrib=True)
+            }
+
+            if metadataUrl['url'] is not None and parse_remote_metadata:  # download URL
+                try:
+                    content = openURL(metadataUrl['url'], timeout=timeout)
+                    doc = etree.parse(content)
+                    if metadataUrl['type'] is not None:
+                        if metadataUrl['type'] == 'FGDC':
+                            metadataUrl['metadata'] = Metadata(doc)
+                        if metadataUrl['type'] == 'TC211':
+                            metadataUrl['metadata'] = MD_Metadata(doc)
+                except Exception:
+                    metadataUrl['metadata'] = None
+
+            self.metadataUrls.append(metadataUrl)
+
+        # DataURLs
+        self.dataUrls = []
+        for m in elem.findall(nspath('DataURL', WMS_NAMESPACE)):
+            dataUrl = {
+                'format': m.find(nspath('Format', WMS_NAMESPACE)).text.strip(),
+                'url': m.find(nspath('OnlineResource', WMS_NAMESPACE)).attrib['{http://www.w3.org/1999/xlink}href']
+            }
+            self.dataUrls.append(dataUrl)
+
+        # FeatureListURLs
+        self.featureListUrls = []
+        for m in elem.findall(nspath('FeatureListURL', WMS_NAMESPACE)):
+            featureUrl = {
+                'format': m.find(nspath('Format', WMS_NAMESPACE)).text.strip(),
+                'url': m.find(nspath('OnlineResource', WMS_NAMESPACE)).attrib['{http://www.w3.org/1999/xlink}href']
+            }
+            self.featureListUrls.append(featureUrl)
+
+        self.layers = []
+        for child in elem.findall(nspath('Layer', WMS_NAMESPACE)):
+            self.layers.append(ContentMetadata(child, self))
+
+    @property
+    def children(self):
+        return self._children
+
+    @children.setter
+    def children(self, value):
+        if self._children is None:
+            self._children = value
+        else:
+            self._children.extend(value)
+
+    def __str__(self):
+        return 'Layer Name: %s Title: %s' % (self.name, self.title)
+
+class OperationMetadata(object):
+    def __init__(self, elem):
+        """."""
+        self.name = xmltag_split(elem.tag)
+        # formatOptions
+        self.formatOptions = [f.text for f in elem.findall(nspath('Format', WMS_NAMESPACE))]
+        self.methods = []
+        for verb in elem.findall(nspath('DCPType/HTTP/*', WMS_NAMESPACE)):
+            url = verb.find(nspath('OnlineResource', WMS_NAMESPACE)).attrib['{http://www.w3.org/1999/xlink}href']
+            self.methods.append({'type': xmltag_split(verb.tag), 'url': url})
+
+
+class ContactMetadata(object):
+    def __init__(self, elem):
+        name = elem.find(nspath('ContactPersonPrimary/ContactPerson', WMS_NAMESPACE))
+        if name is not None:
+            self.name = name.text
+        else:
+            self.name = None
+        email = elem.find('ContactElectronicMailAddress')
+        if email is not None:
+            self.email = email.text
+        else:
+            self.email = None
+        self.address = self.city = self.region = None
+        self.postcode = self.country = None
+
+        address = elem.find(nspath('ContactAddress', WMS_NAMESPACE))
+        if address is not None:
+            street = address.find(nspath('Address', WMS_NAMESPACE))
+            if street is not None:
+                self.address = street.text
+
+            city = address.find(nspath('City', WMS_NAMESPACE))
+            if city is not None:
+                self.city = city.text
+
+            region = address.find(nspath('StateOrProvince', WMS_NAMESPACE))
+            if region is not None:
+                self.region = region.text
+
+            postcode = address.find(nspath('PostCode', WMS_NAMESPACE))
+            if postcode is not None:
+                self.postcode = postcode.text
+
+            country = address.find(nspath('Country', WMS_NAMESPACE))
+            if country is not None:
+                self.country = country.text
+
+        organization = elem.find(nspath('ContactPersonPrimary/ContactOrganization', WMS_NAMESPACE))
+        if organization is not None:
+            self.organization = organization.text
+        else:
+            self.organization = None
+
+        position = elem.find(nspath('ContactPosition', WMS_NAMESPACE))
+        if position is not None:
+            self.position = position.text
+        else:
+            self.position = None
diff --git a/owslib/namespaces.py b/owslib/namespaces.py
index d87cd09..fa0484f 100644
--- a/owslib/namespaces.py
+++ b/owslib/namespaces.py
@@ -49,10 +49,10 @@ 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',
+        'wms'   :   'http://www.opengis.net/wms',
         'wps'   :   'http://www.opengis.net/wps/1.0.0',
         'wps100':   'http://www.opengis.net/wps/1.0.0',
         'xlink' :   'http://www.w3.org/1999/xlink',
diff --git a/owslib/ows.py b/owslib/ows.py
index eb4cf9d..d5a155d 100644
--- a/owslib/ows.py
+++ b/owslib/ows.py
@@ -69,9 +69,13 @@ class ServiceIdentification(object):
         val = self._root.find(util.nspath('ServiceTypeVersion', namespace))
         self.version = util.testXMLValue(val)
 
+        self.versions = []
+        for v in self._root.findall(util.nspath('ServiceTypeVersion', namespace)):
+            self.versions.append(util.testXMLValue(v))
+        
         self.profiles = []
         for p in self._root.findall(util.nspath('Profile', namespace)):
-            self.profiles.append(util.testXMLValue(val))
+            self.profiles.append(util.testXMLValue(p))
 
 class ServiceProvider(object):
     """Initialize an OWS Common ServiceProvider construct"""
diff --git a/owslib/util.py b/owslib/util.py
index 63e7d66..0eb6813 100644
--- a/owslib/util.py
+++ b/owslib/util.py
@@ -33,51 +33,41 @@ from copy import deepcopy
 import warnings
 import six
 import requests
+import codecs
 
 """
 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
-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())))
+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())))
 
 
 # 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
@@ -86,10 +76,9 @@ 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
@@ -105,7 +94,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()
@@ -114,7 +103,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])
@@ -124,11 +113,10 @@ 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.
@@ -149,8 +137,7 @@ class ResponseWrapper(object):
 
     # @TODO: __getattribute__ for poking at response
 
-
-def openURL(url_base, data=None, method=None, cookies=None, username=None, password=None, timeout=30, headers=None):
+def openURL(url_base, data=None, method='Get', cookies=None, username=None, password=None, timeout=30, headers=None):
     """
     Function to open URLs.
 
@@ -158,7 +145,6 @@ def openURL(url_base, data=None, method=None, cookies=None, username=None, passw
     Also handles cookies and simple user password authentication.
     """
     headers = headers if headers is not None else {}
-    method = method or 'Get'
     rkwargs = {}
 
     rkwargs['timeout'] = timeout
@@ -175,7 +161,7 @@ def openURL(url_base, data=None, method=None, cookies=None, username=None, passw
 
     if method.lower() == 'post':
         try:
-            etree.fromstring(data)
+            xml = etree.fromstring(data)
             headers['Content-Type'] = 'text/xml'
         except (ParseError, UnicodeEncodeError):
             pass
@@ -184,7 +170,7 @@ def openURL(url_base, data=None, method=None, cookies=None, username=None, passw
 
     elif method.lower() == 'get':
         rkwargs['params'] = data
-
+        
     else:
         raise ValueError("Unknown method ('%s'), expected 'get' or 'post'" % method)
 
@@ -199,32 +185,39 @@ def openURL(url_base, data=None, method=None, cookies=None, username=None, passw
     if req.status_code in [400, 401]:
         raise ServiceException(req.text)
 
-    if req.status_code in [404]:    # add more if needed
+    if req.status_code in [404, 500, 502, 503, 504]:    # add more if needed
         req.raise_for_status()
 
     # 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.
+    if 'Content-Type' in req.headers and req.headers['Content-Type'] in ['text/xml', 'application/xml', 'application/vnd.ogc.se_xml']:
+        #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')
-        if serviceException is None:
-            serviceException = se_tree.find('ServiceException')
-        if serviceException is not None:
-            raise ServiceException(str(serviceException.text).strip())
 
-    return ResponseWrapper(req)
+        # to handle the variety of namespaces and terms across services
+        # and versions, especially for "legacy" responses like WMS 1.3.0
+        possible_errors = [
+            '{http://www.opengis.net/ows}Exception',
+            '{http://www.opengis.net/ows/1.1}Exception',
+            '{http://www.opengis.net/ogc}ServiceException',
+            'ServiceException'
+        ]
+
+        for possible_error in possible_errors:
+            serviceException = se_tree.find(possible_error)
+            if serviceException is not None:
+                # and we need to deal with some message nesting
+                raise ServiceException('\n'.join([str(t).strip() for t in serviceException.itertext() if str(t).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
     ----------
 
@@ -243,7 +236,6 @@ def nspath(path, ns=OWS_NAMESPACE):
         components.append(component)
     return '/'.join(components)
 
-
 def nspath_eval(xpath, namespaces):
     ''' Return an etree friendly xpath '''
     out = []
@@ -252,7 +244,6 @@ 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':
@@ -336,14 +327,13 @@ 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):
     """
 
@@ -361,11 +351,10 @@ 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
     ----------
@@ -399,7 +388,6 @@ 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
@@ -428,10 +416,8 @@ def element_to_string(element, encoding=None, xml_declaration=False):
                 output = etree.tostring(element)
     else:
         if xml_declaration:
-            output = '<?xml version="1.0" encoding="{}" standalone="no"?>\n{}'.format(
-                encoding,
-                etree.tostring(element, encoding=encoding)
-            )
+            output = '<?xml version="1.0" encoding="%s" standalone="no"?>\n%s' % (encoding,
+                   etree.tostring(element, encoding=encoding))
         else:
             output = etree.tostring(element)
 
@@ -453,7 +439,6 @@ 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):
     """
 
@@ -473,7 +458,6 @@ 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:
@@ -481,38 +465,34 @@ 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. '''
 
@@ -525,7 +505,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):
@@ -562,7 +542,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
@@ -570,27 +550,49 @@ a newline. This will extract out all of the keywords correctly.
         return []
 
 
+def strip_bom(raw_text):
+    """ return the raw (assumed) xml response without the BOM
+    """
+    boms = [
+        codecs.BOM,
+        codecs.BOM_BE,
+        codecs.BOM_LE,
+        codecs.BOM_UTF8,
+        codecs.BOM_UTF16,
+        codecs.BOM_UTF16_LE,
+        codecs.BOM_UTF16_BE,
+        codecs.BOM_UTF32,
+        codecs.BOM_UTF32_LE,
+        codecs.BOM_UTF32_BE
+    ]
+
+    if not isinstance(raw_text, str):
+        for bom in boms:
+            if raw_text.startswith(bom):
+                return raw_text.replace(bom, '')
+    return raw_text
+
+
 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:
@@ -625,7 +627,6 @@ 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
@@ -639,6 +640,7 @@ 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/wms.py b/owslib/wms.py
index e7ab2b4..10c6394 100644
--- a/owslib/wms.py
+++ b/owslib/wms.py
@@ -16,694 +16,38 @@ Currently supports only version 1.1.1 of the WMS protocol.
 """
 
 from __future__ import (absolute_import, division, print_function)
+from .map import wms111, wms130
+
+
+def WebMapService(url,
+                  version='1.1.1',
+                  xml=None,
+                  username=None,
+                  password=None,
+                  parse_remote_metadata=False,
+                  timeout=30,
+                  headers=None):
+
+    '''wms factory function, returns a version specific WebMapService object
+
+    @type url: string
+    @param url: url of WFS capabilities document
+    @type xml: string
+    @param xml: elementtree 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
+    @return: initialized WebFeatureService_2_0_0 object
+    '''
+    if version in ['1.1.1']:
+        return wms111.WebMapService_1_1_1(url, version=version, xml=xml,
+                                          parse_remote_metadata=parse_remote_metadata,
+                                          username=username, password=password,
+                                          timeout=timeout, headers=headers)
+    elif version in ['1.3.0']:
+        return wms130.WebMapService_1_3_0(url, version=version, xml=xml,
+                                          parse_remote_metadata=parse_remote_metadata,
+                                          username=username, password=password,
+                                          timeout=timeout, headers=headers)
+    raise NotImplementedError('The WMS version (%s) you requested is not implemented. Please use 1.1.1 or 1.3.0.' % version)
 
-import cgi
-try:                    # Python 3
-    from urllib.parse import urlencode
-except ImportError:     # Python 2
-    from urllib import urlencode
-
-import warnings
-
-import six
-
-from .etree import etree
-from .util import openURL, testXMLValue, extract_xml_list, xmltag_split, OrderedDict
-from .fgdc import Metadata
-from .iso import MD_Metadata
-
-
-class ServiceException(Exception):
-    """WMS ServiceException
-
-    Attributes:
-        message -- short error message
-        xml  -- full xml error message from server
-    """
-
-    def __init__(self, message, xml):
-        self.message = message
-        self.xml = xml
-        
-    def __str__(self):
-        return repr(self.message)
-
-
-class CapabilitiesError(Exception):
-    pass
-
-
-class WebMapService(object):
-    """Abstraction for OGC Web Map Service (WMS).
-
-    Implements IWebMapService.
-    """
-    
-    def __getitem__(self,name):
-        ''' check contents dictionary to allow dict like access to service layers'''
-        if name in self.__getattribute__('contents'):
-            return self.__getattribute__('contents')[name]
-        else:
-            raise KeyError("No content named %s" % name)
-
-    
-    def __init__(self, url, version='1.1.1', xml=None, username=None, password=None, parse_remote_metadata=False, timeout=30, headers=None):
-        """Initialize."""
-        self.url = url
-        self.username = username
-        self.password = password
-        self.version = version
-        self.timeout = timeout
-        self.headers = headers
-        self._capabilities = None
-
-        # Authentication handled by Reader
-        reader = WMSCapabilitiesReader(self.version, url=self.url, un=self.username, pw=self.password, headers=self.headers)
-        if xml:  # read from stored xml
-            self._capabilities = reader.readString(xml)
-        else:  # read from server
-            self._capabilities = reader.read(self.url, timeout=self.timeout)
-
-        # avoid building capabilities metadata if the response is a ServiceExceptionReport
-        se = self._capabilities.find('ServiceException') 
-        if se is not None: 
-            err_message = str(se.text).strip() 
-            raise ServiceException(err_message, xml) 
-
-        # build metadata objects
-        self._buildMetadata(parse_remote_metadata)
-
-    def _getcapproperty(self):
-        if not self._capabilities:
-            reader = WMSCapabilitiesReader(
-                self.version, url=self.url, un=self.username, pw=self.password, headers=self.headers
-                )
-            self._capabilities = ServiceMetadata(reader.read(self.url))
-        return self._capabilities
-
-    def _buildMetadata(self, parse_remote_metadata=False):
-        ''' set up capabilities metadata objects '''
-        
-        #serviceIdentification metadata
-        serviceelem=self._capabilities.find('Service')
-        self.identification=ServiceIdentification(serviceelem, self.version)   
-        
-        #serviceProvider metadata
-        self.provider=ServiceProvider(serviceelem)   
-            
-        #serviceOperations metadata 
-        self.operations=[]
-        for elem in self._capabilities.find('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 = OrderedDict()
-        caps = self._capabilities.find('Capability')
-        
-        #recursively gather content metadata for all layer elements.
-        #To the WebMapService.contents store only metadata of named layers.
-        def gather_layers(parent_elem, parent_metadata):
-            layers = []
-            for index, elem in enumerate(parent_elem.findall('Layer')):
-                cm = ContentMetadata(elem, parent=parent_metadata, index=index+1, parse_remote_metadata=parse_remote_metadata)
-                if cm.id:
-                    if cm.id in self.contents:
-                        warnings.warn('Content metadata for layer "%s" already exists. Using child layer' % cm.id)
-                    layers.append(cm)
-                    self.contents[cm.id] = cm
-                cm.children = gather_layers(elem, cm)
-            return layers
-        gather_layers(caps, None)
-        
-        #exceptions
-        self.exceptions = [f.text for f \
-                in self._capabilities.findall('Capability/Exception/Format')]
-            
-    def items(self):
-        '''supports dict-like items() access'''
-        items=[]
-        for item in self.contents:
-            items.append((item,self.contents[item]))
-        return items
-    
-    def getcapabilities(self):
-        """Request and return capabilities document from the WMS as a 
-        file-like object.
-        NOTE: this is effectively redundant now"""
-        
-        reader = WMSCapabilitiesReader(
-            self.version, url=self.url, un=self.username, pw=self.password, headers=self.headers
-            )
-        u = self._open(reader.capabilities_url(self.url))
-        # check for service exceptions, and return
-        if u.info()['Content-Type'] == 'application/vnd.ogc.se_xml':
-            se_xml = u.read()
-            se_tree = etree.fromstring(se_xml)
-            err_message = str(se_tree.find('ServiceException').text).strip()
-            raise ServiceException(err_message, se_xml)
-        return u
-
-    def __build_getmap_request(self, layers=None, styles=None, srs=None, bbox=None,
-               format=None, size=None, time=None, transparent=False,
-               bgcolor=None, exceptions=None, **kwargs):
-
-        request = {'version': self.version, 'request': 'GetMap'}
-
-        # check layers and styles
-        assert len(layers) > 0
-        request['layers'] = ','.join(layers)
-        if styles:
-            assert len(styles) == len(layers)
-            request['styles'] = ','.join(styles)
-        else:
-            request['styles'] = ''
-
-        # size
-        request['width'] = str(size[0])
-        request['height'] = str(size[1])
-
-        request['srs'] = str(srs)
-        request['bbox'] = ','.join([repr(x) for x in bbox])
-        request['format'] = str(format)
-        request['transparent'] = str(transparent).upper()
-        request['bgcolor'] = '0x' + bgcolor[1:7]
-        request['exceptions'] = str(exceptions)
-
-        if time is not None:
-            request['time'] = str(time)
-
-        if kwargs:
-            for kw in kwargs:
-                request[kw]=kwargs[kw]
-        return request
-
-    def getmap(self, layers=None, styles=None, srs=None, bbox=None,
-               format=None, size=None, time=None, transparent=False,
-               bgcolor='#FFFFFF',
-               exceptions='application/vnd.ogc.se_xml',
-               method='Get',
-               timeout=None,
-               **kwargs
-               ):
-        """Request and return an image from the WMS as a file-like object.
-        
-        Parameters
-        ----------
-        layers : list
-            List of content layer names.
-        styles : list
-            Optional list of named styles, must be the same length as the
-            layers list.
-        srs : string
-            A spatial reference system identifier.
-        bbox : tuple
-            (left, bottom, right, top) in srs units.
-        format : string
-            Output image format such as 'image/jpeg'.
-        size : tuple
-            (width, height) in pixels.
-        transparent : bool
-            Optional. Transparent background if True.
-        bgcolor : string
-            Optional. Image background color.
-        method : string
-            Optional. HTTP DCP method name: Get or Post.
-        **kwargs : extra arguments
-            anything else e.g. vendor specific parameters
-        
-        Example
-        -------
-            >>> wms = WebMapService('http://giswebservices.massgis.state.ma.us/geoserver/wms', version='1.1.1')
-            >>> img = wms.getmap(layers=['massgis:GISDATA.SHORELINES_ARC'],\
-                                 styles=[''],\
-                                 srs='EPSG:4326',\
-                                 bbox=(-70.8, 42, -70, 42.8),\
-                                 size=(300, 300),\
-                                 format='image/jpeg',\
-                                 transparent=True)
-            >>> out = open('example.jpg', 'wb')
-            >>> bytes_written = out.write(img.read())
-            >>> out.close()
-
-        """        
-        try:
-            base_url = next((m.get('url') for m in self.getOperationByName('GetMap').methods if m.get('type').lower() == method.lower()))
-        except StopIteration:
-            base_url = self.url
-
-        request = self.__build_getmap_request(layers=layers, styles=styles, srs=srs, bbox=bbox,
-               format=format, size=size, time=time, transparent=transparent,
-               bgcolor=bgcolor, exceptions=exceptions, **kwargs)
-        
-        data = urlencode(request)
-        
-        u = openURL(base_url, data, method, username=self.username, password=self.password, timeout=timeout or self.timeout, headers=self.headers)
-
-        # check for service exceptions, and return
-        if u.info()['Content-Type'] == 'application/vnd.ogc.se_xml':
-            se_xml = u.read()
-            se_tree = etree.fromstring(se_xml)
-            err_message = six.text_type(se_tree.find('ServiceException').text).strip()
-            raise ServiceException(err_message, se_xml)
-        return u
-
-
-    def getfeatureinfo(self, layers=None, styles=None, srs=None, bbox=None,
-               format=None, size=None, time=None, transparent=False,
-               bgcolor='#FFFFFF',
-               exceptions='application/vnd.ogc.se_xml',
-               query_layers = None, xy=None, info_format=None, feature_count=20,
-               method='Get',
-               timeout=None,
-               **kwargs
-               ):
-        try:
-            base_url = next((m.get('url') for m in self.getOperationByName('GetFeatureInfo').methods if m.get('type').lower() == method.lower()))
-        except StopIteration:
-            base_url = self.url
-
-        # GetMap-Request
-        request = self.__build_getmap_request(layers=layers, styles=styles, srs=srs, bbox=bbox,
-               format=format, size=size, time=time, transparent=transparent,
-               bgcolor=bgcolor, exceptions=exceptions, kwargs=kwargs)
-
-        # extend to GetFeatureInfo-Request
-        request['request'] = 'GetFeatureInfo'
-
-        if not query_layers:
-            __str_query_layers = ','.join(layers)
-        else:
-            __str_query_layers = ','.join(query_layers)
-
-        request['query_layers'] = __str_query_layers
-        request['x'] = str(xy[0])
-        request['y'] = str(xy[1])
-        request['info_format'] = info_format
-        request['feature_count'] = str(feature_count)
-
-        data = urlencode(request)
-
-        u = openURL(base_url, data, method, username=self.username, password=self.password, timeout=timeout or self.timeout, headers=self.headers)
-
-        # check for service exceptions, and return
-        if u.info()['Content-Type'] == 'application/vnd.ogc.se_xml':
-            se_xml = u.read()
-            se_tree = etree.fromstring(se_xml)
-            err_message = six.text_type(se_tree.find('ServiceException').text).strip()
-            raise ServiceException(err_message, se_xml)
-        return u
-
-    def getServiceXML(self):
-        xml = None
-        if self._capabilities is not None:
-            xml = etree.tostring(self._capabilities)
-        return xml
-
-    def getOperationByName(self, name): 
-        """Return a named content item."""
-        for item in self.operations:
-            if item.name == name:
-                return item
-        raise KeyError("No operation named %s" % name)
-    
-class ServiceIdentification(object):
-    ''' Implements IServiceIdentificationMetadata '''
-    
-    def __init__(self, infoset, version):
-        self._root=infoset
-        self.type = testXMLValue(self._root.find('Name'))
-        self.version = version
-        self.title = testXMLValue(self._root.find('Title'))
-        self.abstract = testXMLValue(self._root.find('Abstract'))
-        self.keywords = extract_xml_list(self._root.findall('KeywordList/Keyword'))
-        self.accessconstraints = testXMLValue(self._root.find('AccessConstraints'))
-        self.fees = testXMLValue(self._root.find('Fees'))
-
-class ServiceProvider(object):
-    ''' Implements IServiceProviderMetatdata '''
-    def __init__(self, infoset):
-        self._root=infoset
-        name=self._root.find('ContactInformation/ContactPersonPrimary/ContactOrganization')
-        if name is not None:
-            self.name=name.text
-        else:
-            self.name=None
-        self.url=self._root.find('OnlineResource').attrib.get('{http://www.w3.org/1999/xlink}href', '')
-        #contact metadata
-        contact = self._root.find('ContactInformation')
-        ## sometimes there is a contact block that is empty, so make
-        ## sure there are children to parse
-        if contact is not None and contact[:] != []:
-            self.contact = ContactMetadata(contact)
-        else:
-            self.contact = None
-            
-    def getContentByName(self, name):
-        """Return a named content item."""
-        for item in self.contents:
-            if item.name == name:
-                return item
-        raise KeyError("No content named %s" % name)
-
-    def getOperationByName(self, name):
-        """Return a named content item."""
-        for item in self.operations:
-            if item.name == name:
-                return item
-        raise KeyError("No operation named %s" % name)
-        
-class ContentMetadata:
-    """
-    Abstraction for WMS layer metadata.
-
-    Implements IContentMetadata.
-    """
-    def __init__(self, elem, parent=None, children=None, index=0, parse_remote_metadata=False, timeout=30):
-        if elem.tag != 'Layer':
-            raise ValueError('%s should be a Layer' % (elem,))
-        
-        self.parent = parent
-        if parent:
-            self.index = "%s.%d" % (parent.index, index)
-        else:
-            self.index = str(index)
-
-        self._children = children
-        
-        self.id = self.name = testXMLValue(elem.find('Name'))
-
-        # layer attributes
-        self.queryable = int(elem.attrib.get('queryable', 0))
-        self.cascaded = int(elem.attrib.get('cascaded', 0))
-        self.opaque = int(elem.attrib.get('opaque', 0))
-        self.noSubsets = int(elem.attrib.get('noSubsets', 0))
-        self.fixedWidth = int(elem.attrib.get('fixedWidth', 0))
-        self.fixedHeight = int(elem.attrib.get('fixedHeight', 0))
-
-        # title is mandatory property
-        self.title = None
-        title = testXMLValue(elem.find('Title'))
-        if title is not None:
-            self.title = title.strip()
-
-        self.abstract = testXMLValue(elem.find('Abstract'))
-        
-        # bboxes
-        b = elem.find('BoundingBox')
-        self.boundingBox = None
-        if b is not None:
-            try: #sometimes the SRS attribute is (wrongly) not provided
-                srs=b.attrib['SRS']
-            except KeyError:
-                srs=None
-            self.boundingBox = (
-                float(b.attrib['minx']),
-                float(b.attrib['miny']),
-                float(b.attrib['maxx']),
-                float(b.attrib['maxy']),
-                srs,
-                )
-        elif self.parent:
-            if hasattr(self.parent, 'boundingBox'):
-                self.boundingBox = self.parent.boundingBox
-
-        # ScaleHint 
-        sh = elem.find('ScaleHint') 
-        self.scaleHint = None 
-        if sh is not None: 
-            if 'min' in sh.attrib and 'max' in sh.attrib:
-                self.scaleHint = {'min': sh.attrib['min'], 'max': sh.attrib['max']} 
-
-        attribution = elem.find('Attribution')
-        if attribution is not None:
-            self.attribution = dict()
-            title = attribution.find('Title')
-            url = attribution.find('OnlineResource')
-            logo = attribution.find('LogoURL')
-            if title is not None: 
-                self.attribution['title'] = title.text
-            if url is not None:
-                self.attribution['url'] = url.attrib['{http://www.w3.org/1999/xlink}href']
-            if logo is not None: 
-                self.attribution['logo_size'] = (int(logo.attrib['width']), int(logo.attrib['height']))
-                self.attribution['logo_url'] = logo.find('OnlineResource').attrib['{http://www.w3.org/1999/xlink}href']
-
-        b = elem.find('LatLonBoundingBox')
-        if b is not None:
-            self.boundingBoxWGS84 = (
-                float(b.attrib['minx']),
-                float(b.attrib['miny']),
-                float(b.attrib['maxx']),
-                float(b.attrib['maxy']),
-            )
-        elif self.parent:
-            self.boundingBoxWGS84 = self.parent.boundingBoxWGS84
-        else:
-            self.boundingBoxWGS84 = None
-            
-        #SRS options
-        self.crsOptions = []
-            
-        #Copy any parent SRS options (they are inheritable properties)
-        if self.parent:
-            self.crsOptions = list(self.parent.crsOptions)
-
-        #Look for SRS option attached to this layer
-        if elem.find('SRS') is not None:
-            ## some servers found in the wild use a single SRS
-            ## tag containing a whitespace separated list of SRIDs
-            ## instead of several SRS tags. hence the inner loop
-            for srslist in [x.text for x in elem.findall('SRS')]:
-                if srslist:
-                    for srs in srslist.split():
-                        self.crsOptions.append(srs)
-                        
-        #Get rid of duplicate entries
-        self.crsOptions = list(set(self.crsOptions))
-
-        #Set self.crsOptions to None if the layer (and parents) had no SRS options
-        if len(self.crsOptions) == 0:
-            #raise ValueError('%s no SRS available!?' % (elem,))
-            #Comment by D Lowe.
-            #Do not raise ValueError as it is possible that a layer is purely a parent layer and does not have SRS specified. Instead set crsOptions to None
-            # Comment by Jachym:
-            # Do not set it to None, but to [], which will make the code
-            # work further. Fixed by anthonybaxter
-            self.crsOptions=[]
-            
-        #Styles
-        self.styles = {}
-        
-        #Copy any parent styles (they are inheritable properties)
-        if self.parent:
-            self.styles = self.parent.styles.copy()
- 
-        #Get the styles for this layer (items with the same name are replaced)
-        for s in elem.findall('Style'):
-            name = s.find('Name')
-            title = s.find('Title')
-            if name is None or title is None:
-                raise ValueError('%s missing name or title' % (s,))
-            style = { 'title' : title.text }
-            # legend url
-            legend = s.find('LegendURL/OnlineResource')
-            if legend is not None:
-                style['legend'] = legend.attrib['{http://www.w3.org/1999/xlink}href']
-            self.styles[name.text] = style
-
-        # keywords
-        self.keywords = [f.text for f in elem.findall('KeywordList/Keyword')]
-
-        # timepositions - times for which data is available.
-        self.timepositions=None
-        self.defaulttimeposition = None
-        for extent in elem.findall('Extent'):
-            if extent.attrib.get("name").lower() =='time':
-                if extent.text:
-                    self.timepositions=extent.text.split(',')
-                    self.defaulttimeposition = extent.attrib.get("default")
-                    break
-                
-        # Elevations - available vertical levels
-        self.elevations=None
-        for extent in elem.findall('Extent'):
-            if extent.attrib.get("name").lower() =='elevation':
-                if extent.text:
-                    self.elevations=extent.text.split(',')
-                    break                
-
-        # MetadataURLs
-        self.metadataUrls = []
-        for m in elem.findall('MetadataURL'):
-            metadataUrl = {
-                'type': testXMLValue(m.attrib['type'], attrib=True),
-                'format': testXMLValue(m.find('Format')),
-                'url': testXMLValue(m.find('OnlineResource').attrib['{http://www.w3.org/1999/xlink}href'], attrib=True)
-            }
-
-            if metadataUrl['url'] is not None and parse_remote_metadata:  # download URL
-                try:
-                    content = openURL(metadataUrl['url'], timeout=timeout)
-                    doc = etree.parse(content)
-                    if metadataUrl['type'] is not None:
-                        if metadataUrl['type'] == 'FGDC':
-                            metadataUrl['metadata'] = Metadata(doc)
-                        if metadataUrl['type'] == 'TC211':
-                            metadataUrl['metadata'] = MD_Metadata(doc)
-                except Exception:
-                    metadataUrl['metadata'] = None
-
-            self.metadataUrls.append(metadataUrl)
-
-        # DataURLs
-        self.dataUrls = []
-        for m in elem.findall('DataURL'):
-            dataUrl = {
-                'format': m.find('Format').text.strip(),
-                'url': m.find('OnlineResource').attrib['{http://www.w3.org/1999/xlink}href']
-            }
-            self.dataUrls.append(dataUrl)
-                
-        self.layers = []
-        for child in elem.findall('Layer'):
-            self.layers.append(ContentMetadata(child, self))
-
-    @property
-    def children(self):
-        return self._children
-
-    @children.setter
-    def children(self, value):
-        if self._children is None:
-            self._children = value
-        else:
-            self._children.extend(value)
-
-    def __str__(self):
-        return 'Layer Name: %s Title: %s' % (self.name, self.title)
-
-
-class OperationMetadata:
-    """Abstraction for WMS OperationMetadata.
-    
-    Implements IOperationMetadata.
-    """
-    def __init__(self, elem):
-        """."""
-        self.name = xmltag_split(elem.tag)
-        # formatOptions
-        self.formatOptions = [f.text for f in elem.findall('Format')]
-        self.methods = []
-        for verb in elem.findall('DCPType/HTTP/*'):
-            url = verb.find('OnlineResource').attrib['{http://www.w3.org/1999/xlink}href']
-            self.methods.append({'type' : xmltag_split(verb.tag), 'url': url})
-
-
-class ContactMetadata:
-    """Abstraction for contact details advertised in GetCapabilities.
-    """
-    def __init__(self, elem):
-        name = elem.find('ContactPersonPrimary/ContactPerson')
-        if name is not None:
-            self.name=name.text
-        else:
-            self.name=None
-        email = elem.find('ContactElectronicMailAddress')
-        if email is not None:
-            self.email=email.text
-        else:
-            self.email=None
-        self.address = self.city = self.region = None
-        self.postcode = self.country = None
-
-        address = elem.find('ContactAddress')
-        if address is not None:
-            street = address.find('Address')
-            if street is not None: self.address = street.text
-
-            city = address.find('City')
-            if city is not None: self.city = city.text
-
-            region = address.find('StateOrProvince')
-            if region is not None: self.region = region.text
-
-            postcode = address.find('PostCode')
-            if postcode is not None: self.postcode = postcode.text
-
-            country = address.find('Country')
-            if country is not None: self.country = country.text
-
-        organization = elem.find('ContactPersonPrimary/ContactOrganization')
-        if organization is not None: self.organization = organization.text
-        else:self.organization = None
-
-        position = elem.find('ContactPosition')
-        if position is not None: self.position = position.text
-        else: self.position = None
-
-      
-class WMSCapabilitiesReader:
-    """Read and parse capabilities document into a lxml.etree infoset
-    """
-
-    def __init__(self, version='1.1.1', url=None, un=None, pw=None, headers=None):
-        """Initialize"""
-        self.version = version
-        self._infoset = None
-        self.url = url
-        self.username = un
-        self.password = pw
-        self.headers = headers
-
-        #if self.username and self.password:
-            ## Provide login information in order to use the WMS server
-            ## Create an OpenerDirector with support for Basic HTTP 
-            ## Authentication...
-            #passman = HTTPPasswordMgrWithDefaultRealm()
-            #passman.add_password(None, self.url, self.username, self.password)
-            #auth_handler = HTTPBasicAuthHandler(passman)
-            #opener = build_opener(auth_handler)
-            #self._open = opener.open
-
-    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', 'WMS'))
-        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, service_url, timeout=30):
-        """Get and parse a WMS capabilities document, returning an
-        elementtree instance
-
-        service_url is the base url, to which is appended the service,
-        version, and request parameters
-        """
-        getcaprequest = self.capabilities_url(service_url)
-
-        #now split it up again to use the generic openURL function...
-        spliturl=getcaprequest.split('?')
-        u = openURL(spliturl[0], spliturl[1], method='Get', username=self.username, password=self.password, timeout=timeout, headers=self.headers)
-        return etree.fromstring(u.read())
-
-    def readString(self, st):
-        """Parse a WMS capabilities document, returning an elementtree instance
-
-        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/tests/doctests/ows_interfaces.txt b/tests/doctests/ows_interfaces.txt
index b909bac..58d6ed7 100644
--- a/tests/doctests/ows_interfaces.txt
+++ b/tests/doctests/ows_interfaces.txt
@@ -26,7 +26,7 @@
     >>> for service in services:
     ...     type(service)
     <class 'owslib.csw.CatalogueServiceWeb'>
-    <class 'owslib.wms.WebMapService'>
+    <class 'owslib.map.wms111.WebMapService_1_1_1'>
     <class 'owslib.coverage.wcs100.WebCoverageService_1_0_0'>
     <class 'owslib.feature.wfs100.WebFeatureService_1_0_0'>
 
diff --git a/tests/doctests/sos_10_ndbc_getobservation.txt b/tests/doctests/sos_10_ndbc_getobservation.txt
index fe949fa..f280468 100644
--- a/tests/doctests/sos_10_ndbc_getobservation.txt
+++ b/tests/doctests/sos_10_ndbc_getobservation.txt
@@ -28,7 +28,7 @@ GetObservation
     >>> response = ndbc.get_observation(offerings=offerings, responseFormat=responseFormat, observedProperties=observedProperties, eventTime=eventTime)     #doctest: +IGNORE_EXCEPTION_DETAIL
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
-    ExceptionReport: 'This is not a valid eventTime!'
+    ServiceException: 'This is not a valid eventTime!'
 
     # NDBC only supports one offering and one observedProperty at a time
 
@@ -51,7 +51,7 @@ DescribeSensor
     >>> response = ndbc.describe_sensor(procedure=procedure, outputFormat=outputFormat)     #doctest: +IGNORE_EXCEPTION_DETAIL
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
-    ExceptionReport: 'foobar'
+    ServiceException: 'foobar'
 
     # Valid request
 
diff --git a/tests/doctests/wms_MesonetCapabilities.txt b/tests/doctests/wms_MesonetCapabilities.txt
index 7a93526..3f81987 100644
--- a/tests/doctests/wms_MesonetCapabilities.txt
+++ b/tests/doctests/wms_MesonetCapabilities.txt
@@ -11,6 +11,8 @@ http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?
 
     >>> xml = open(resource_file('wms_mesonet-caps.xml'), 'rb').read()
     >>> wms = WebMapService('url', version='1.1.1', xml=xml)
+    >>> wms.request is None
+    True
     
 Test capabilities
 -----------------
diff --git a/tests/doctests/wms_MesonetCapabilities.txt b/tests/doctests/wms_MesonetCapabilities_130.txt
similarity index 79%
copy from tests/doctests/wms_MesonetCapabilities.txt
copy to tests/doctests/wms_MesonetCapabilities_130.txt
index 7a93526..5a3b401 100644
--- a/tests/doctests/wms_MesonetCapabilities.txt
+++ b/tests/doctests/wms_MesonetCapabilities_130.txt
@@ -3,22 +3,22 @@ Imports
 
     >>> from __future__ import (absolute_import, division, print_function)
     >>> from owslib.wms import WebMapService
-    >>> from tests.utils import resource_file
+    >>> from tests.utils import resource_file, cast_tuple_int_list, cast_tuple_int_list_srs
     >>> from operator import itemgetter
 
-Fake a request to a WMS Server using saved doc from 
+Fake a request to a WMS Server (1.3.0) using saved doc from 
 http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?
 
-    >>> xml = open(resource_file('wms_mesonet-caps.xml'), 'rb').read()
-    >>> wms = WebMapService('url', version='1.1.1', xml=xml)
+    >>> xml = open(resource_file('wms_mesonet-caps-130.xml'), 'rb').read()
+    >>> wms = WebMapService('url', version='1.3.0', xml=xml)
     
 Test capabilities
 -----------------
 
     >>> wms.identification.type
-    'OGC:WMS'
+    'WMS'
     >>> wms.identification.version
-    '1.1.1'
+    '1.3.0'
     >>> wms.identification.title
     'IEM WMS Service'
     >>> wms.identification.abstract
@@ -45,11 +45,11 @@ Test single item accessor
     >>> wms['time_idx'].keywords
     []
     
-    >>> wms['time_idx'].boundingBox
-    (-126.0, 24.0, -66.0, 50.0, 'EPSG:4326')
+    >>> cast_tuple_int_list_srs(wms['time_idx'].boundingBox)
+    [-126, 24, -66, 50, 'EPSG:4326']
 
-    >>> wms['time_idx'].boundingBoxWGS84
-    (-126.0, 24.0, -66.0, 50.0)
+    >>> cast_tuple_int_list(wms['time_idx'].boundingBoxWGS84)
+    [-126, 24, -66, 50]
     
     >>> sorted(wms['time_idx'].crsOptions)
     ['EPSG:102100', 'EPSG:3857', 'EPSG:4326', 'EPSG:900913']
@@ -58,7 +58,7 @@ Test single item accessor
     {}
 
     >>> wms['time_idx'].timepositions
-    ['1995-01-01/2013-12-31/PT5M']
+    ['1995-01-01/2015-12-31/PT5M']
 
     >>> wms['time_idx'].defaulttimeposition
     '2006-06-23T03:10:00Z'
@@ -89,4 +89,4 @@ Test operations
 Test exceptions
 
     >>> wms.exceptions
-    ['application/vnd.ogc.se_xml', 'application/vnd.ogc.se_inimage', 'application/vnd.ogc.se_blank']
+    ['XML', 'INIMAGE', 'BLANK']
diff --git a/tests/doctests/wms_MesonetCapabilities_130_bom.txt b/tests/doctests/wms_MesonetCapabilities_130_bom.txt
new file mode 100644
index 0000000..3802828
--- /dev/null
+++ b/tests/doctests/wms_MesonetCapabilities_130_bom.txt
@@ -0,0 +1,44 @@
+
+Imports
+
+    >>> from __future__ import (absolute_import, division, print_function)
+    >>> from owslib.wms import WebMapService
+    >>> from tests.utils import resource_file, cast_tuple_int_list, cast_tuple_int_list_srs
+    >>> from operator import itemgetter
+
+Fake a request to a WMS Server (1.3.0) using saved doc from 
+http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?
+and modified to start with BOM
+
+    >>> xml = open(resource_file('wms_mesonet-caps-130.xml'), 'rb').read()
+    >>> wms = WebMapService('url', version='1.3.0', xml=xml)
+    
+Test capabilities
+-----------------
+
+    >>> wms.identification.type
+    'WMS'
+    >>> wms.identification.version
+    '1.3.0'
+    >>> wms.identification.title
+    'IEM WMS Service'
+    >>> wms.identification.abstract
+    'IEM generated CONUS composite of NWS WSR-88D level III base reflectivity.'
+    >>> wms.identification.keywords
+    []
+    >>> wms.identification.accessconstraints
+    'None'
+
+Test available content layers
+
+    >>> sorted(wms.contents.keys())
+    ['nexrad-n0r-wmst', 'nexrad_base_reflect', 'time_idx']
+
+    >>> sorted([wms[layer].id for layer in wms.contents])
+    ['nexrad-n0r-wmst', 'nexrad_base_reflect', 'time_idx']
+
+ 
+Test single item accessor
+    
+    >>> wms['time_idx'].title
+    'NEXRAD BASE REFLECT'
\ No newline at end of file
diff --git a/tests/doctests/wms_getfeatureinfo.txt b/tests/doctests/wms_getfeatureinfo.txt
index a3be31a..1418652 100644
--- a/tests/doctests/wms_getfeatureinfo.txt
+++ b/tests/doctests/wms_getfeatureinfo.txt
@@ -16,6 +16,8 @@ True
 True
 
 >>> res3 = wms.getfeatureinfo(layers=['bvv:lkr_ex','bvv:gmd_ex'], srs='EPSG:31468', bbox=(4500000,5500000,4500500,5500500), size=(500,500), format='image/jpeg', query_layers=['bvv:lkr_ex'], info_format="text/html", xy=(250,250))
+>>> wms.request
+'http://geoserv.weichand.de:8080/geoserver/wms?SERVICE=WMS&layers=bvv%3Alkr_ex%2Cbvv%3Agmd_ex&styles=&feature_count=20&y=250&query_layers=bvv%3Alkr_ex&service=WMS&srs=EPSG%3A31468&format=image%2Fjpeg&request=GetFeatureInfo&bgcolor=0xFFFFFF&height=500&width=500&version=1.1.1&bbox=4500000%2C5500000%2C4500500%2C5500500&kwargs=%7B%7D&exceptions=application%2Fvnd.ogc.se_xml&x=250&info_format=text%2Fhtml&transparent=FALSE'
 >>> html_string3 = res3.read().decode("utf-8")
 >>> ('lkr_ex' in html_string3)
 True
diff --git a/tests/doctests/wms_getfeatureinfo.txt b/tests/doctests/wms_getfeatureinfo_130.txt
similarity index 97%
copy from tests/doctests/wms_getfeatureinfo.txt
copy to tests/doctests/wms_getfeatureinfo_130.txt
index a3be31a..a8a496e 100644
--- a/tests/doctests/wms_getfeatureinfo.txt
+++ b/tests/doctests/wms_getfeatureinfo_130.txt
@@ -1,5 +1,5 @@
 >>> from owslib.wms import WebMapService
->>> wms = WebMapService('http://geoserv.weichand.de:8080/geoserver/wms')
+>>> wms = WebMapService('http://geoserv.weichand.de:8080/geoserver/wms', version='1.3.0')
 
 >>> res1 = wms.getfeatureinfo(layers=['bvv:lkr_ex'], srs='EPSG:31468', bbox=(4500000,5500000,4500500,5500500), size=(500,500), format='image/jpeg', info_format="text/html", xy=(250,250))
 >>> html_string1 = res1.read().decode("utf-8")
@@ -21,4 +21,3 @@ True
 True
 >>> ('gmd_ex' in html_string3)
 False
-
diff --git a/tests/doctests/wms_getmap.txt b/tests/doctests/wms_getmap.txt
new file mode 100644
index 0000000..8a9a563
--- /dev/null
+++ b/tests/doctests/wms_getmap.txt
@@ -0,0 +1,49 @@
+Imports
+
+    >>> from __future__ import (absolute_import, division, print_function)
+    >>> from owslib.wms import WebMapService
+    >>> from owslib.util import ServiceException
+
+GetMap Tests against live services (pulled from the docstrings)
+(images aren't saved)
+
+MESONET
+GetMap 1.1.1
+    >>> url = 'http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi'
+    >>> wms = WebMapService(url, version='1.1.1')
+    >>> wms.request
+    'http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?service=WMS&request=GetCapabilities&version=1.1.1'
+    >>> rsp = wms.getmap(layers=['nexrad_base_reflect'], styles=['default'], srs='EPSG:4326', bbox=(-126, 24, -66, 50), size=(250, 250), format='image/jpeg', transparent=True)
+    >>> type(rsp)
+    <class '...ResponseWrapper'>
+
+
+GetMap 1.1.1 ServiceException for an invalid CRS
+
+    >>> try:
+    ...     rsp = wms.getmap(layers=['nexrad_base_reflect'], styles=['default'], srs='EPSG:4328', bbox=(-126, 24, -66, 50), size=(250, 250), format='image/jpeg', transparent=True)
+    ... except ServiceException as e:
+    ...     assert "msWMSLoadGetMapParams(): WMS server error. Invalid SRS given : SRS must be valid for all requested layers." in str(e)
+
+GetMap 1.3.0
+
+    >>> url = 'http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi'
+    >>> wms = WebMapService(url, version='1.3.0')
+    >>> rsp = wms.getmap(layers=['nexrad_base_reflect'], styles=['default'], srs='EPSG:4326', bbox=(-126, 24, -66, 50), size=(250, 250), format='image/jpeg', transparent=True)
+    >>> type(rsp)
+    <class '...ResponseWrapper'>
+
+GetMap 1.3.0 ServiceException for an invalid CRS
+    >>> try:
+    ...     rsp = wms.getmap(layers=['nexrad_base_reflect'], styles=['default'], srs='EPSG:4328', bbox=(-126, 24, -66, 50), size=(250, 250), format='image/jpeg', transparent=True)
+    ... except ServiceException as e:
+    ...     assert "msWMSLoadGetMapParams(): WMS server error. Invalid CRS given : CRS must be valid for all requested layers." in str(e)
+
+National Map
+    >>> url = 'http://services.nationalmap.gov/arcgis/services/SmallScale100Meter/SmallScaleTreeCanopyWMS/MapServer/WMSServer'
+    >>> wms = WebMapService(url, version='1.3.0')
+    >>> rsp = wms.getmap(layers=['3'], styles=['default'], srs='CRS:84', bbox=(-176.646, 17.7016, -64.8017, 71.2854), size=(500, 300), format='image/png', transparent=True)
+    >>> type(rsp)
+    <class '...ResponseWrapper'>
+    >>> wms.request
+    'http://services.nationalmap.gov/arcgis/services/SmallScale100Meter/SmallScaleTreeCanopyWMS/MapServer/WmsServer?layers=3&styles=default&service=WMS&crs=CRS%3A84&format=image%2Fpng&request=GetMap&bgcolor=0xFFFFFF&height=300&width=500&version=1.3.0&bbox=-176.646%2C17.7016%2C-64.8017%2C71.2854&exceptions=XML&transparent=TRUE'
diff --git a/tests/doctests/wms_nationalatlas_getcapabilities_130.txt b/tests/doctests/wms_nationalatlas_getcapabilities_130.txt
new file mode 100644
index 0000000..4a12602
--- /dev/null
+++ b/tests/doctests/wms_nationalatlas_getcapabilities_130.txt
@@ -0,0 +1,105 @@
+Imports
+
+    >>> from __future__ import (absolute_import, division, print_function)
+    >>> from owslib.wms import WebMapService
+    >>> from tests.utils import resource_file, cast_tuple_int_list, cast_tuple_int_list_srs
+    >>> from operator import itemgetter
+
+Fake a request to a WMS Server (1.3.0) using saved doc from 
+http://webservices.nationalatlas.gov/wms?
+
+    >>> xml = open(resource_file('wms_nationalatlas_getcapabilities_130.xml'), 'rb').read()
+    >>> wms = WebMapService('url', version='1.3.0', xml=xml)
+    
+Test capabilities
+-----------------
+
+    >>> wms.identification.type
+    'WMS'
+    >>> wms.identification.version
+    '1.3.0'
+    >>> wms.identification.title
+    '1 Million Scale WMS Layers from the National Atlas of the United States'
+    >>> wms.identification.abstract
+    'Test Data for 1 Million Scale'
+    >>> wms.identification.keywords
+    ['United States', 'National Atlas']
+    >>> wms.identification.accessconstraints
+    'none'
+
+Test available content layers
+
+    >>> len(wms.contents.keys())
+    20
+
+    >>> 'elevation' in [wms[layer].id for layer in wms.contents]
+    True
+
+Test single item accessor
+    
+    >>> wms['elevation'].title
+    '1 Million Scale - Elevation 100 Meter Resolution'
+
+    >>> wms['elevation'].keywords
+    []
+    
+    >>> cast_tuple_int_list_srs(wms['elevation'].boundingBox)
+    [-179, 17, 180, 71, 'CRS:84']
+
+    >>> cast_tuple_int_list(wms['elevation'].boundingBoxWGS84)
+    [-179, 17, 180, 71]
+
+    >>> [crs for crs in wms['elevation'].crs_list if crs[4] == 'EPSG:3785'] is not []
+    True
+
+    >>> epsg3785 = [crs for crs in wms['elevation'].crs_list if crs[4] == 'EPSG:3785'][0]
+    >>> cast_tuple_int_list_srs(epsg3785)
+    [-20037300, 1927710, 20037500, 11736700, 'EPSG:3785']
+    
+    >>> sorted(wms['elevation'].crsOptions)
+    ['CRS:84', 'EPSG:102100', 'EPSG:102113', 'EPSG:2163', 'EPSG:3785', 'EPSG:3857', 'EPSG:4267', 'EPSG:4269', 'EPSG:4326', 'EPSG:54004', 'EPSG:54008', 'EPSG:900913']
+
+    >>> len(wms['elevation'].styles) == 1
+    True
+
+    >>> 'elevi0100g' in wms['elevation'].styles
+    True
+
+    >>> wms['elevation'].styles['elevi0100g']['legend_format']
+    'image/gif'
+
+    >>> wms['elevation'].timepositions is None
+    True
+
+    >>> wms['elevation'].defaulttimeposition is None
+    True
+
+    >>> wms['elevation'].parent is not None
+    True
+
+Expect a KeyError for invalid names
+
+    >>> wms['utterly bogus'].title
+    Traceback (most recent call last):
+    ...
+    KeyError: 'No content named utterly bogus'
+
+Test operations
+
+    >>> [op.name for op in wms.operations]
+    ['GetCapabilities', 'GetMap', 'GetFeatureInfo', 'DescribeLayer', 'GetLegendGraphic', 'GetStyles']
+
+    >>> x = sorted(wms.getOperationByName('GetMap').methods, key=itemgetter('type'))
+    >>> x == [{'type': 'Get', 'url': 'http://webservices.nationalatlas.gov/wms?'}, {'type': 'Post', 'url': 'http://webservices.nationalatlas.gov/wms?'}]
+    True
+
+    >>> wms.getOperationByName('GetMap').formatOptions
+    ['image/png', 'image/jpeg', 'image/gif', 'image/png; mode=8bit', 'image/tiff']
+
+Test exceptions
+
+    >>> wms.exceptions
+    ['XML', 'INIMAGE', 'BLANK']
+
+
+    
\ No newline at end of file
diff --git a/tests/doctests/wms_nccs_nasa_getcapabilities.txt b/tests/doctests/wms_nccs_nasa_getcapabilities.txt
new file mode 100644
index 0000000..8020ae6
--- /dev/null
+++ b/tests/doctests/wms_nccs_nasa_getcapabilities.txt
@@ -0,0 +1,78 @@
+Imports
+
+    >>> from __future__ import (absolute_import, division, print_function)
+    >>> from owslib.wms import WebMapService
+    >>> from tests.utils import resource_file, cast_tuple_int_list, cast_tuple_int_list_srs
+    >>> from operator import itemgetter
+
+Fake a request to a WMS Server (1.3.0) using saved doc from 
+http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll
+
+    >>> xml = open(resource_file('wms_nccs_nasa_getcap_130.xml'), 'rb').read()
+    >>> wms = WebMapService('url', version='1.3.0', xml=xml)
+
+
+Test capabilities
+-----------------
+
+    >>> wms.identification.type
+    'WMS'
+    >>> wms.identification.version
+    '1.3.0'
+    >>> wms.identification.title
+    'Data Catalog'
+    >>> wms.identification.abstract
+    'Scientific Data'
+    >>> wms.identification.keywords
+    ['meteorology', 'atmosphere', 'climate', 'ocean', 'earth science']
+    >>> wms.identification.accessconstraints
+    'none'
+
+Test available content layers
+
+    >>> len(wms.contents.keys())
+    7
+
+    >>> 'T' in [wms[layer].id for layer in wms.contents]
+    True
+
+Test single item accessor
+    
+    >>> wms['T'].title
+    'potential_temperature'
+
+    >>> wms['T'].keywords
+    []
+    
+    >>> cast_tuple_int_list_srs(wms['T'].boundingBox)
+    [-180, -90, 179, 90, 'CRS:84']
+
+    >>> cast_tuple_int_list(wms['T'].boundingBoxWGS84)
+    [-180, -90, 179, 90]
+
+    >>> [crs for crs in wms['T'].crs_list if crs[4] == 'EPSG:3785'] is not []
+    True
+    
+    >>> sorted(wms['T'].crsOptions)
+    ['CRS:84', 'EPSG:27700', 'EPSG:32661', 'EPSG:32761', 'EPSG:3408', 'EPSG:3409', 'EPSG:3857', 'EPSG:41001', 'EPSG:4326']
+
+    >>> len(wms['T'].styles) == 10
+    True
+
+    >>> 'boxfill/rainbow' in wms['T'].styles
+    True
+
+    >>> wms['T'].styles['boxfill/rainbow']['legend_format']
+    'image/png'
+
+    >>> len(wms['T'].elevations)
+    40
+
+    >>> len(wms['T'].timepositions)
+    271
+
+    >>> wms['T'].defaulttimeposition
+    '2015-07-01T12:00:00Z'
+
+    >>> wms['T'].parent is not None
+    True
\ No newline at end of file
diff --git a/tests/resources/wms-aasggeothermal-orwellheads-130.xml b/tests/resources/wms-aasggeothermal-orwellheads-130.xml
new file mode 100644
index 0000000..b3a4da1
--- /dev/null
+++ b/tests/resources/wms-aasggeothermal-orwellheads-130.xml
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WMS_Capabilities version="1.3.0"
+  xmlns="http://www.opengis.net/wms"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:esri_wms="http://www.esri.com/wms"
+  xsi:schemaLocation="http://www.opengis.net/wms http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd http://www.esri.com/wms http://services.azgs.az.gov/arcgis/services/aasggeothermal/ORWellHeaders/MapServer/WmsServer?version=1.3.0%26service=WMS%26request=GetSchemaExtension">
+  <Service>
+    <Name><![CDATA[WMS]]></Name>
+    <Title><![CDATA[aasggeothermal_ORWellHeaders]]></Title>
+    <Abstract><![CDATA[WellHeaders in the state of Oregon]]></Abstract>
+    <KeywordList><Keyword><![CDATA[Well Headers, Well Log Depth, Geothermal, Oregon]]></Keyword></KeywordList>
+    <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://services.azgs.az.gov/arcgis/services/aasggeothermal/ORWellHeaders/MapServer/WmsServer?"/>
+    <ContactInformation>
+      <ContactPersonPrimary>
+        <ContactPerson><![CDATA[Geoinformatics]]></ContactPerson>
+        <ContactOrganization><![CDATA[Arizona Geological Survey]]></ContactOrganization>
+      </ContactPersonPrimary>
+      <ContactPosition><![CDATA[Geoinformatics Manager]]></ContactPosition>
+      <ContactAddress>
+        <AddressType><![CDATA[Postal]]></AddressType>
+        <Address><![CDATA[416 W. Congress St., Suite 100]]></Address>
+        <City><![CDATA[Tucson]]></City>
+        <StateOrProvince><![CDATA[AZ]]></StateOrProvince>
+        <PostCode><![CDATA[85701]]></PostCode>
+        <Country><![CDATA[US]]></Country>
+      </ContactAddress>
+      <ContactVoiceTelephone><![CDATA[520-770-3500]]></ContactVoiceTelephone>
+      <ContactFacsimileTelephone><![CDATA[]]></ContactFacsimileTelephone>
+      <ContactElectronicMailAddress><![CDATA[metadata at usgin.org]]></ContactElectronicMailAddress>
+    </ContactInformation>
+    <Fees><![CDATA[none]]></Fees>
+    <AccessConstraints><![CDATA[]]></AccessConstraints>
+    <MaxWidth>4000</MaxWidth>
+    <MaxHeight>4096</MaxHeight>
+  </Service>
+  <Capability>
+    <Request>
+      <GetCapabilities>
+        <Format>application/vnd.ogc.wms_xml</Format>
+        <Format>text/xml</Format>
+        <DCPType>
+          <HTTP><Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://services.azgs.az.gov/arcgis/services/aasggeothermal/ORWellHeaders/MapServer/WmsServer?"/></Get></HTTP>
+        </DCPType>
+      </GetCapabilities>
+      <GetMap>
+        <Format>image/bmp</Format>
+        <Format>image/jpeg</Format>
+        <Format>image/tiff</Format>
+        <Format>image/png</Format>
+        <Format>image/png8</Format>
+        <Format>image/png24</Format>
+        <Format>image/png32</Format>
+        <Format>image/gif</Format>
+        <Format>image/svg+xml</Format>
+        <DCPType>
+          <HTTP><Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://services.azgs.az.gov/arcgis/services/aasggeothermal/ORWellHeaders/MapServer/WmsServer?"/></Get></HTTP>
+        </DCPType>
+      </GetMap>
+      <GetFeatureInfo>
+        <Format>application/vnd.esri.wms_raw_xml</Format>
+        <Format>application/vnd.esri.wms_featureinfo_xml</Format>
+        <Format>application/vnd.ogc.wms_xml</Format>
+        <Format>text/xml</Format>
+        <Format>text/html</Format>
+        <Format>text/plain</Format>
+        <DCPType>
+          <HTTP><Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://services.azgs.az.gov/arcgis/services/aasggeothermal/ORWellHeaders/MapServer/WmsServer?"/></Get></HTTP>
+        </DCPType>
+      </GetFeatureInfo>
+      <esri_wms:GetStyles>
+        <Format>application/vnd.ogc.sld+xml</Format>
+        <DCPType>
+          <HTTP><Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://services.azgs.az.gov/arcgis/services/aasggeothermal/ORWellHeaders/MapServer/WmsServer?"/></Get></HTTP>
+        </DCPType>
+      </esri_wms:GetStyles>
+    </Request>
+    <Exception>
+      <Format>application/vnd.ogc.se_xml</Format>
+      <Format>application/vnd.ogc.se_inimage</Format>
+      <Format>application/vnd.ogc.se_blank</Format>
+      <Format>text/xml</Format>
+      <Format>XML</Format>
+    </Exception>
+    <Layer>
+      <Title><![CDATA[ORWellHeaders]]></Title>
+<CRS>CRS:84</CRS>
+<CRS>EPSG:4326</CRS>
+<CRS>EPSG:3857</CRS>
+ <!-- alias 3857 -->
+<CRS>EPSG:102100</CRS>
+<EX_GeographicBoundingBox><westBoundLongitude>-124.399896</westBoundLongitude><eastBoundLongitude>-116.779783</eastBoundLongitude><southBoundLatitude>41.999877</southBoundLatitude><northBoundLatitude>46.162222</northBoundLatitude></EX_GeographicBoundingBox>
+<BoundingBox CRS="CRS:84" minx="-124.399896" miny="41.999877" maxx="-116.779783" maxy="46.162222"/>
+<BoundingBox CRS="EPSG:4326" minx="41.999877" miny="-124.399896" maxx="46.162222" maxy="-116.779783"/>
+<BoundingBox CRS="EPSG:3857" minx="-13848133.077456" miny="5160961.019264" maxx="-12999865.978509" maxy="5806383.628162"/>
+      <Layer queryable="1">
+        <Name>Wellheader</Name>
+        <Title><![CDATA[Wellheader]]></Title>
+        <Abstract><![CDATA[Wellheader]]></Abstract>
+<CRS>CRS:84</CRS>
+<CRS>EPSG:4326</CRS>
+<CRS>EPSG:3857</CRS>
+ <!-- alias 3857 -->
+<CRS>EPSG:102100</CRS>
+<EX_GeographicBoundingBox><westBoundLongitude>-124.399896</westBoundLongitude><eastBoundLongitude>-116.779783</eastBoundLongitude><southBoundLatitude>41.999877</southBoundLatitude><northBoundLatitude>46.162222</northBoundLatitude></EX_GeographicBoundingBox>
+<BoundingBox CRS="CRS:84" minx="-124.399896" miny="41.999877" maxx="-116.779783" maxy="46.162222"/>
+<BoundingBox CRS="EPSG:4326" minx="41.999877" miny="-124.399896" maxx="46.162222" maxy="-116.779783"/>
+<BoundingBox CRS="EPSG:3857" minx="-13848133.077456" miny="5160961.019264" maxx="-12999865.978509" maxy="5806383.628162"/>
+        <FeatureListURL>
+            <Format>text/xml</Format>
+            <OnlineResource xlink:href="http://services.azgs.az.gov/arcgis/services/aasggeothermal/ORWellHeaders/MapServer/WmsServer?" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink"/>
+        </FeatureListURL>
+        <Style>
+          <Name>default</Name>
+          <Title>Wellheader</Title>
+          <LegendURL width="20" height="20">
+            <Format>image/png</Format>
+            <OnlineResource xlink:href="http://services.azgs.az.gov/arcgis/services/aasggeothermal/ORWellHeaders/MapServer/WmsServer?request=GetLegendGraphic%26version=1.3.0%26format=image/png%26layer=Wellheader" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" />
+          </LegendURL>
+        </Style>
+      </Layer>
+    </Layer>
+  </Capability>
+</WMS_Capabilities>
diff --git a/tests/resources/wms_mesonet-caps-130.xml b/tests/resources/wms_mesonet-caps-130.xml
new file mode 100644
index 0000000..de8f02c
--- /dev/null
+++ b/tests/resources/wms_mesonet-caps-130.xml
@@ -0,0 +1,149 @@
+<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>
+<WMS_Capabilities version="1.3.0"  xmlns="http://www.opengis.net/wms"   xmlns:sld="http://www.opengis.net/sld"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:ms="http://mapserver.gis.umn.edu/mapserver"   xsi:schemaLocation="http://www.opengis.net/wms http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd  http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/sld_capabilities.xsd  http://mapserver.gis.umn.edu/mapserver http://mesonet.agron.iastate.edu/cgi-b [...]
+
+<!-- MapServer version 6.4.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG SUPPORTS=PROJ SUPPORTS=GD SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=CAIRO SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=FASTCGI SUPPORTS=GEOS INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE -->
+
+<Service>
+  <Name>WMS</Name>
+  <Title>IEM WMS Service</Title>
+  <Abstract>IEM generated CONUS composite of NWS WSR-88D level III base reflectivity.</Abstract>
+  <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/>
+  <ContactInformation>
+    <ContactPersonPrimary>
+      <ContactPerson>Daryl Herzmann</ContactPerson>
+      <ContactOrganization>Iowa State University</ContactOrganization>
+    </ContactPersonPrimary>
+  </ContactInformation>
+  <AccessConstraints>None</AccessConstraints>
+  <MaxWidth>2048</MaxWidth>
+  <MaxHeight>2048</MaxHeight>
+</Service>
+
+<Capability>
+  <Request>
+    <GetCapabilities>
+      <Format>text/xml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetCapabilities>
+    <GetMap>
+      <Format>image/png</Format>
+      <Format>image/jpeg</Format>
+      <Format>image/gif</Format>
+      <Format>image/png; mode=8bit</Format>
+      <Format>application/x-pdf</Format>
+      <Format>image/svg+xml</Format>
+      <Format>image/tiff</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetMap>
+    <GetFeatureInfo>
+      <Format>text/plain</Format>
+      <Format>application/vnd.ogc.gml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetFeatureInfo>
+    <sld:DescribeLayer>
+      <Format>text/xml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Post>
+        </HTTP>
+      </DCPType>
+    </sld:DescribeLayer>
+    <sld:GetLegendGraphic>
+      <Format>image/png</Format>
+      <Format>image/jpeg</Format>
+      <Format>image/gif</Format>
+      <Format>image/png; mode=8bit</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Post>
+        </HTTP>
+      </DCPType>
+    </sld:GetLegendGraphic>
+    <ms:GetStyles>
+      <Format>text/xml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Post>
+        </HTTP>
+      </DCPType>
+    </ms:GetStyles>
+  </Request>
+  <Exception>
+    <Format>XML</Format>
+    <Format>INIMAGE</Format>
+    <Format>BLANK</Format>
+  </Exception>
+  <sld:UserDefinedSymbolization SupportSLD="1" UserLayer="0" UserStyle="1" RemoteWFS="0" InlineFeature="0" RemoteWCS="0"/>
+  <Layer>
+    <Name>nexrad_base_reflect</Name>
+    <Title>IEM WMS Service</Title>
+    <Abstract>IEM generated CONUS composite of NWS WSR-88D level III base reflectivity.</Abstract>
+    <CRS>EPSG:4326</CRS>
+    <CRS>EPSG:900913</CRS>
+    <CRS>EPSG:102100</CRS>
+    <CRS>EPSG:3857</CRS>
+    <EX_GeographicBoundingBox>
+        <westBoundLongitude>-126</westBoundLongitude>
+        <eastBoundLongitude>-66</eastBoundLongitude>
+        <southBoundLatitude>24</southBoundLatitude>
+        <northBoundLatitude>50</northBoundLatitude>
+    </EX_GeographicBoundingBox>
+    <BoundingBox CRS="EPSG:4326"
+                minx="24" miny="-126" maxx="50" maxy="-66" />
+    <MinScaleDenominator>90000</MinScaleDenominator>
+    <MaxScaleDenominator>4.65e+06</MaxScaleDenominator>
+    <Layer queryable="0" opaque="0" cascaded="0">
+        <Name>time_idx</Name>
+        <Title>NEXRAD BASE REFLECT</Title>
+        <CRS>EPSG:4326</CRS>
+        <CRS>EPSG:900913</CRS>
+        <CRS>EPSG:102100</CRS>
+        <CRS>EPSG:3857</CRS>
+        <EX_GeographicBoundingBox>
+            <westBoundLongitude>-126</westBoundLongitude>
+            <eastBoundLongitude>-66</eastBoundLongitude>
+            <southBoundLatitude>24</southBoundLatitude>
+            <northBoundLatitude>50</northBoundLatitude>
+        </EX_GeographicBoundingBox>
+        <BoundingBox CRS="EPSG:4326"
+                    minx="24" miny="-126" maxx="50" maxy="-66" />
+        <Dimension name="time" units="ISO8601" default="2006-06-23T03:10:00Z" nearestValue="0">1995-01-01/2015-12-31/PT5M</Dimension>
+    </Layer>
+    <Layer queryable="0" opaque="0" cascaded="0">
+        <Name>nexrad-n0r-wmst</Name>
+        <Title>NEXRAD BASE REFLECT</Title>
+        <CRS>EPSG:4326</CRS>
+        <CRS>EPSG:900913</CRS>
+        <CRS>EPSG:102100</CRS>
+        <CRS>EPSG:3857</CRS>
+        <EX_GeographicBoundingBox>
+            <westBoundLongitude>-126</westBoundLongitude>
+            <eastBoundLongitude>-66</eastBoundLongitude>
+            <southBoundLatitude>24</southBoundLatitude>
+            <northBoundLatitude>50</northBoundLatitude>
+        </EX_GeographicBoundingBox>
+        <BoundingBox CRS="EPSG:4326"
+                    minx="24" miny="-126" maxx="50" maxy="-66" />
+        <Dimension name="time" units="ISO8601" default="2006-06-23T03:10:00Z" nearestValue="0">1995-01-01/2015-12-31/PT5M</Dimension>
+    </Layer>
+  </Layer>
+</Capability>
+</WMS_Capabilities>
diff --git a/tests/resources/wms_mesonet-caps-130_bom.xml b/tests/resources/wms_mesonet-caps-130_bom.xml
new file mode 100644
index 0000000..39f9d62
--- /dev/null
+++ b/tests/resources/wms_mesonet-caps-130_bom.xml
@@ -0,0 +1,149 @@
+��<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>
+<WMS_Capabilities version="1.3.0"  xmlns="http://www.opengis.net/wms"   xmlns:sld="http://www.opengis.net/sld"   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:ms="http://mapserver.gis.umn.edu/mapserver"   xsi:schemaLocation="http://www.opengis.net/wms http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd  http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/sld_capabilities.xsd  http://mapserver.gis.umn.edu/mapserver http://mesonet.agron.iastate.edu/cgi-b [...]
+
+<!-- MapServer version 6.4.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG SUPPORTS=PROJ SUPPORTS=GD SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=CAIRO SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=FASTCGI SUPPORTS=GEOS INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE -->
+
+<Service>
+  <Name>WMS</Name>
+  <Title>IEM WMS Service</Title>
+  <Abstract>IEM generated CONUS composite of NWS WSR-88D level III base reflectivity.</Abstract>
+  <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/>
+  <ContactInformation>
+    <ContactPersonPrimary>
+      <ContactPerson>Daryl Herzmann</ContactPerson>
+      <ContactOrganization>Iowa State University</ContactOrganization>
+    </ContactPersonPrimary>
+  </ContactInformation>
+  <AccessConstraints>None</AccessConstraints>
+  <MaxWidth>2048</MaxWidth>
+  <MaxHeight>2048</MaxHeight>
+</Service>
+
+<Capability>
+  <Request>
+    <GetCapabilities>
+      <Format>text/xml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetCapabilities>
+    <GetMap>
+      <Format>image/png</Format>
+      <Format>image/jpeg</Format>
+      <Format>image/gif</Format>
+      <Format>image/png; mode=8bit</Format>
+      <Format>application/x-pdf</Format>
+      <Format>image/svg+xml</Format>
+      <Format>image/tiff</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetMap>
+    <GetFeatureInfo>
+      <Format>text/plain</Format>
+      <Format>application/vnd.ogc.gml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetFeatureInfo>
+    <sld:DescribeLayer>
+      <Format>text/xml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Post>
+        </HTTP>
+      </DCPType>
+    </sld:DescribeLayer>
+    <sld:GetLegendGraphic>
+      <Format>image/png</Format>
+      <Format>image/jpeg</Format>
+      <Format>image/gif</Format>
+      <Format>image/png; mode=8bit</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Post>
+        </HTTP>
+      </DCPType>
+    </sld:GetLegendGraphic>
+    <ms:GetStyles>
+      <Format>text/xml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r-t.cgi?"/></Post>
+        </HTTP>
+      </DCPType>
+    </ms:GetStyles>
+  </Request>
+  <Exception>
+    <Format>XML</Format>
+    <Format>INIMAGE</Format>
+    <Format>BLANK</Format>
+  </Exception>
+  <sld:UserDefinedSymbolization SupportSLD="1" UserLayer="0" UserStyle="1" RemoteWFS="0" InlineFeature="0" RemoteWCS="0"/>
+  <Layer>
+    <Name>nexrad_base_reflect</Name>
+    <Title>IEM WMS Service</Title>
+    <Abstract>IEM generated CONUS composite of NWS WSR-88D level III base reflectivity.</Abstract>
+    <CRS>EPSG:4326</CRS>
+    <CRS>EPSG:900913</CRS>
+    <CRS>EPSG:102100</CRS>
+    <CRS>EPSG:3857</CRS>
+    <EX_GeographicBoundingBox>
+        <westBoundLongitude>-126</westBoundLongitude>
+        <eastBoundLongitude>-66</eastBoundLongitude>
+        <southBoundLatitude>24</southBoundLatitude>
+        <northBoundLatitude>50</northBoundLatitude>
+    </EX_GeographicBoundingBox>
+    <BoundingBox CRS="EPSG:4326"
+                minx="24" miny="-126" maxx="50" maxy="-66" />
+    <MinScaleDenominator>90000</MinScaleDenominator>
+    <MaxScaleDenominator>4.65e+06</MaxScaleDenominator>
+    <Layer queryable="0" opaque="0" cascaded="0">
+        <Name>time_idx</Name>
+        <Title>NEXRAD BASE REFLECT</Title>
+        <CRS>EPSG:4326</CRS>
+        <CRS>EPSG:900913</CRS>
+        <CRS>EPSG:102100</CRS>
+        <CRS>EPSG:3857</CRS>
+        <EX_GeographicBoundingBox>
+            <westBoundLongitude>-126</westBoundLongitude>
+            <eastBoundLongitude>-66</eastBoundLongitude>
+            <southBoundLatitude>24</southBoundLatitude>
+            <northBoundLatitude>50</northBoundLatitude>
+        </EX_GeographicBoundingBox>
+        <BoundingBox CRS="EPSG:4326"
+                    minx="24" miny="-126" maxx="50" maxy="-66" />
+        <Dimension name="time" units="ISO8601" default="2006-06-23T03:10:00Z" nearestValue="0">1995-01-01/2015-12-31/PT5M</Dimension>
+    </Layer>
+    <Layer queryable="0" opaque="0" cascaded="0">
+        <Name>nexrad-n0r-wmst</Name>
+        <Title>NEXRAD BASE REFLECT</Title>
+        <CRS>EPSG:4326</CRS>
+        <CRS>EPSG:900913</CRS>
+        <CRS>EPSG:102100</CRS>
+        <CRS>EPSG:3857</CRS>
+        <EX_GeographicBoundingBox>
+            <westBoundLongitude>-126</westBoundLongitude>
+            <eastBoundLongitude>-66</eastBoundLongitude>
+            <southBoundLatitude>24</southBoundLatitude>
+            <northBoundLatitude>50</northBoundLatitude>
+        </EX_GeographicBoundingBox>
+        <BoundingBox CRS="EPSG:4326"
+                    minx="24" miny="-126" maxx="50" maxy="-66" />
+        <Dimension name="time" units="ISO8601" default="2006-06-23T03:10:00Z" nearestValue="0">1995-01-01/2015-12-31/PT5M</Dimension>
+    </Layer>
+  </Layer>
+</Capability>
+</WMS_Capabilities>
diff --git a/tests/resources/wms_nationalatlas_getcapabilities_111.xml b/tests/resources/wms_nationalatlas_getcapabilities_111.xml
new file mode 100644
index 0000000..e0c9447
--- /dev/null
+++ b/tests/resources/wms_nationalatlas_getcapabilities_111.xml
@@ -0,0 +1,330 @@
+<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>
+<!DOCTYPE WMT_MS_Capabilities SYSTEM "http://schemas.opengis.net/wms/1.1.1/WMS_MS_Capabilities.dtd"
+ [
+ <!ELEMENT VendorSpecificCapabilities EMPTY>
+ ]>  <!-- end of DOCTYPE declaration -->
+
+<WMT_MS_Capabilities version="1.1.1">
+
+<!-- MapServer version 6.0.0 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=ICONV SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=THREADS SUPPORTS=GEOS INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE -->
+
+<Service>
+  <Name>OGC:WMS</Name>
+  <Title>1 Million Scale WMS Layers from the National Atlas of the United States</Title>
+  <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webservices.nationalatlas.gov/wms?"/>
+  <ContactInformation>
+    <ContactPersonPrimary>
+      <ContactPerson></ContactPerson>
+      <ContactOrganization>National Atlas of the United States</ContactOrganization>
+    </ContactPersonPrimary>
+      <ContactPosition>WMS Support Staff</ContactPosition>
+  <ContactElectronicMailAddress>atlasmail at usgs.gov</ContactElectronicMailAddress>
+  </ContactInformation>
+  <Fees>none</Fees>
+  <AccessConstraints>none</AccessConstraints>
+</Service>
+
+<Capability>
+  <Request>
+    <GetCapabilities>
+      <Format>application/vnd.ogc.wms_xml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webservices.nationalatlas.gov/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webservices.nationalatlas.gov/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetCapabilities>
+    <GetMap>
+      <Format>image/png</Format>
+      <Format>image/jpeg</Format>
+      <Format>image/gif</Format>
+      <Format>image/png; mode=8bit</Format>
+      <Format>image/tiff</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webservices.nationalatlas.gov/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webservices.nationalatlas.gov/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetMap>
+    <GetFeatureInfo>
+      <Format>text/plain</Format>
+      <Format>application/vnd.ogc.gml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webservices.nationalatlas.gov/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webservices.nationalatlas.gov/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetFeatureInfo>
+    <DescribeLayer>
+      <Format>text/xml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webservices.nationalatlas.gov/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webservices.nationalatlas.gov/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </DescribeLayer>
+    <GetLegendGraphic>
+      <Format>image/png</Format>
+      <Format>image/jpeg</Format>
+      <Format>image/gif</Format>
+      <Format>image/png; mode=8bit</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webservices.nationalatlas.gov/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webservices.nationalatlas.gov/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetLegendGraphic>
+    <GetStyles>
+      <Format>text/xml</Format>
+      <DCPType>
+        <HTTP>
+          <Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webservices.nationalatlas.gov/wms?"/></Get>
+          <Post><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://webservices.nationalatlas.gov/wms?"/></Post>
+        </HTTP>
+      </DCPType>
+    </GetStyles>
+  </Request>
+  <Exception>
+    <Format>application/vnd.ogc.se_xml</Format>
+    <Format>application/vnd.ogc.se_inimage</Format>
+    <Format>application/vnd.ogc.se_blank</Format>
+  </Exception>
+  <VendorSpecificCapabilities />
+  <UserDefinedSymbolization SupportSLD="1" UserLayer="0" UserStyle="1" RemoteWFS="0"/>
+  <Layer>
+    <Name>one_million</Name>
+    <Title>1 Million Scale WMS Layers from the National Atlas of the United States</Title>
+    <Abstract>one_million</Abstract>
+    <SRS>CRS:84</SRS>
+    <SRS>EPSG:4326</SRS>
+    <SRS>EPSG:2163</SRS>
+    <SRS>EPSG:102100</SRS>
+    <SRS>EPSG:4269</SRS>
+    <SRS>EPSG:4267</SRS>
+    <SRS>EPSG:54004</SRS>
+    <SRS>EPSG:54008</SRS>
+    <SRS>EPSG:3785</SRS>
+    <SRS>EPSG:3857</SRS>
+    <SRS>EPSG:102113</SRS>
+    <SRS>EPSG:900913</SRS>
+    <LatLonBoundingBox minx="-179.133" miny="18.9155" maxx="179.788" maxy="71.398" />
+    <BoundingBox SRS="CRS:84"
+                minx="-179.133" miny="18.9155" maxx="179.788" maxy="71.398" />
+    <BoundingBox SRS="EPSG:4326"
+                minx="-179.133" miny="18.9155" maxx="179.788" maxy="71.398" />
+    <BoundingBox SRS="EPSG:2163"
+                minx="-8.01362e+06" miny="-2.87546e+06" maxx="8.01713e+06" maxy="1.08097e+07" />
+    <BoundingBox SRS="EPSG:102100"
+                minx="-1.9941e+07" miny="2.14499e+06" maxx="2.00139e+07" maxy="1.15398e+07" />
+    <BoundingBox SRS="EPSG:4269"
+                minx="-179.133" miny="18.9155" maxx="179.788" maxy="71.398" />
+    <BoundingBox SRS="EPSG:4267"
+                minx="-179.133" miny="18.9155" maxx="179.788" maxy="71.398" />
+    <BoundingBox SRS="EPSG:54004"
+                minx="-1.9941e+07" miny="2.13115e+06" maxx="2.00139e+07" maxy="1.14992e+07" />
+    <BoundingBox SRS="EPSG:54008"
+                minx="-1.88708e+07" miny="2.09231e+06" maxx="1.89398e+07" maxy="7.92496e+06" />
+    <BoundingBox SRS="EPSG:3785"
+                minx="-1.9941e+07" miny="2.14499e+06" maxx="2.00139e+07" maxy="1.15398e+07" />
+    <BoundingBox SRS="EPSG:3857"
+                minx="-1.9941e+07" miny="2.14499e+06" maxx="2.00139e+07" maxy="1.15398e+07" />
+    <BoundingBox SRS="EPSG:102113"
+                minx="-1.9941e+07" miny="2.14499e+06" maxx="2.00139e+07" maxy="1.15398e+07" />
+    <BoundingBox SRS="EPSG:900913"
+                minx="-1.9941e+07" miny="2.14499e+06" maxx="2.00139e+07" maxy="1.15398e+07" />
+    <Attribution>
+        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://nationalatlas.gov/infodocs/wms_intro.html"/>
+    </Attribution>
+    <Layer queryable="1" opaque="0" cascaded="0">
+        <Name>airports1m</Name>
+        <Title>1 Million Scale - Airports</Title>
+        <LatLonBoundingBox minx="-176.646" miny="17.7016" maxx="-64.8017" maxy="71.2854" />
+        <BoundingBox SRS="CRS:84"
+                    minx="-176.646" miny="17.7016" maxx="-64.8017" maxy="71.2854" />
+        <BoundingBox SRS="EPSG:4326"
+                    minx="-176.646" miny="17.7016" maxx="-64.8017" maxy="71.2854" />
+        <BoundingBox SRS="EPSG:2163"
+                    minx="-7.13345e+06" miny="-3.00665e+06" maxx="3.72355e+06" maxy="4.23839e+06" />
+        <BoundingBox SRS="EPSG:102100"
+                    minx="-1.96641e+07" miny="2.00265e+06" maxx="-7.21369e+06" maxy="1.15006e+07" />
+        <BoundingBox SRS="EPSG:4269"
+                    minx="-176.646" miny="17.7016" maxx="-64.8017" maxy="71.2854" />
+        <BoundingBox SRS="EPSG:4267"
+                    minx="-176.646" miny="17.7016" maxx="-64.8017" maxy="71.2854" />
+        <BoundingBox SRS="EPSG:54004"
+                    minx="-1.96641e+07" miny="1.98966e+06" maxx="-7.21369e+06" maxy="1.14601e+07" />
+        <BoundingBox SRS="EPSG:54008"
+                    minx="-1.87389e+07" miny="1.95795e+06" maxx="-2.32152e+06" maxy="7.9124e+06" />
+        <BoundingBox SRS="EPSG:3785"
+                    minx="-1.96641e+07" miny="2.00265e+06" maxx="-7.21369e+06" maxy="1.15006e+07" />
+        <BoundingBox SRS="EPSG:3857"
+                    minx="-1.96641e+07" miny="2.00265e+06" maxx="-7.21369e+06" maxy="1.15006e+07" />
+        <BoundingBox SRS="EPSG:102113"
+                    minx="-1.96641e+07" miny="2.00265e+06" maxx="-7.21369e+06" maxy="1.15006e+07" />
+        <BoundingBox SRS="EPSG:900913"
+                    minx="-1.96641e+07" miny="2.00265e+06" maxx="-7.21369e+06" maxy="1.15006e+07" />
+        <Style>
+          <Name>default</Name>
+          <Title>default</Title>
+          <LegendURL width="71" height="21">
+             <Format>image/png</Format>
+             <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://webservices.nationalatlas.gov/wms?version=1.1.1&service=WMS&request=GetLegendGraphic&layer=airports1m&format=image/png&STYLE=default"/>
+          </LegendURL>
+        </Style>
+    </Layer>
+    <Layer queryable="1" opaque="0" cascaded="0">
+        <Name>amtrak1m</Name>
+        <Title>1 Million Scale - Railroad and Bus Passenger Stations</Title>
+        <LatLonBoundingBox minx="-124.212" miny="25.8498" maxx="-68.6706" maxy="48.7205" />
+        <BoundingBox SRS="CRS:84"
+                    minx="-124.212" miny="25.8498" maxx="-68.6706" maxy="48.7205" />
+        <BoundingBox SRS="EPSG:4326"
+                    minx="-124.212" miny="25.8498" maxx="-68.6706" maxy="48.7205" />
+        <BoundingBox SRS="EPSG:2163"
+                    minx="-2.41969e+06" miny="-2.11947e+06" maxx="3.09811e+06" maxy="862008" />
+        <BoundingBox SRS="EPSG:102100"
+                    minx="-1.38272e+07" miny="2.9805e+06" maxx="-7.64438e+06" maxy="6.22757e+06" />
+        <BoundingBox SRS="EPSG:4269"
+                    minx="-124.212" miny="25.8498" maxx="-68.6706" maxy="48.7205" />
+        <BoundingBox SRS="EPSG:4267"
+                    minx="-124.212" miny="25.8498" maxx="-68.6706" maxy="48.7205" />
+        <BoundingBox SRS="EPSG:54004"
+                    minx="-1.38272e+07" miny="2.96187e+06" maxx="-7.64438e+06" maxy="6.19544e+06" />
+        <BoundingBox SRS="EPSG:54008"
+                    minx="-1.24516e+07" miny="2.8602e+06" maxx="-5.05281e+06" maxy="5.39854e+06" />
+        <BoundingBox SRS="EPSG:3785"
+                    minx="-1.38272e+07" miny="2.9805e+06" maxx="-7.64438e+06" maxy="6.22757e+06" />
+        <BoundingBox SRS="EPSG:3857"
+                    minx="-1.38272e+07" miny="2.9805e+06" maxx="-7.64438e+06" maxy="6.22757e+06" />
+        <BoundingBox SRS="EPSG:102113"
+                    minx="-1.38272e+07" miny="2.9805e+06" maxx="-7.64438e+06" maxy="6.22757e+06" />
+        <BoundingBox SRS="EPSG:900913"
+                    minx="-1.38272e+07" miny="2.9805e+06" maxx="-7.64438e+06" maxy="6.22757e+06" />
+        <Style>
+          <Name>default</Name>
+          <Title>default</Title>
+          <LegendURL width="71" height="21">
+             <Format>image/png</Format>
+             <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://webservices.nationalatlas.gov/wms?version=1.1.1&service=WMS&request=GetLegendGraphic&layer=amtrak1m&format=image/png&STYLE=default"/>
+          </LegendURL>
+        </Style>
+    </Layer>
+    <Layer queryable="1" opaque="0" cascaded="0">
+        <Name>coast1m</Name>
+        <Title>1 Million Scale - Coastlines</Title>
+        <LatLonBoundingBox minx="-179.147" miny="17.6744" maxx="179.778" maxy="71.3892" />
+        <BoundingBox SRS="CRS:84"
+                    minx="-179.147" miny="17.6744" maxx="179.778" maxy="71.3892" />
+        <BoundingBox SRS="EPSG:4326"
+                    minx="-179.147" miny="17.6744" maxx="179.778" maxy="71.3892" />
+        <BoundingBox SRS="EPSG:2163"
+                    minx="-8.13616e+06" miny="-3.00973e+06" maxx="8.13829e+06" maxy="1.0882e+07" />
+        <BoundingBox SRS="EPSG:102100"
+                    minx="-1.99426e+07" miny="1.99947e+06" maxx="2.00128e+07" maxy="1.15367e+07" />
+        <BoundingBox SRS="EPSG:4269"
+                    minx="-179.147" miny="17.6744" maxx="179.778" maxy="71.3892" />
+        <BoundingBox SRS="EPSG:4267"
+                    minx="-179.147" miny="17.6744" maxx="179.778" maxy="71.3892" />
+        <BoundingBox SRS="EPSG:54004"
+                    minx="-1.99426e+07" miny="1.98651e+06" maxx="2.00128e+07" maxy="1.14961e+07" />
+        <BoundingBox SRS="EPSG:54008"
+                    minx="-1.90071e+07" miny="1.95494e+06" maxx="1.90741e+07" maxy="7.92398e+06" />
+        <BoundingBox SRS="EPSG:3785"
+                    minx="-1.99426e+07" miny="1.99947e+06" maxx="2.00128e+07" maxy="1.15367e+07" />
+        <BoundingBox SRS="EPSG:3857"
+                    minx="-1.99426e+07" miny="1.99947e+06" maxx="2.00128e+07" maxy="1.15367e+07" />
+        <BoundingBox SRS="EPSG:102113"
+                    minx="-1.99426e+07" miny="1.99947e+06" maxx="2.00128e+07" maxy="1.15367e+07" />
+        <BoundingBox SRS="EPSG:900913"
+                    minx="-1.99426e+07" miny="1.99947e+06" maxx="2.00128e+07" maxy="1.15367e+07" />
+        <Style>
+          <Name>default</Name>
+          <Title>default</Title>
+          <LegendURL width="71" height="21">
+             <Format>image/png</Format>
+             <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://webservices.nationalatlas.gov/wms?version=1.1.1&service=WMS&request=GetLegendGraphic&layer=coast1m&format=image/png&STYLE=default"/>
+          </LegendURL>
+        </Style>
+    </Layer>
+    <Layer queryable="1" opaque="0" cascaded="0">
+        <Name>cdl</Name>
+        <Title>1 Million Scale - 113th Congressional Districts</Title>
+        <LatLonBoundingBox minx="-179.147" miny="17.6744" maxx="179.778" maxy="71.3892" />
+        <BoundingBox SRS="CRS:84"
+                    minx="-179.147" miny="17.6744" maxx="179.778" maxy="71.3892" />
+        <BoundingBox SRS="EPSG:4326"
+                    minx="-179.147" miny="17.6744" maxx="179.778" maxy="71.3892" />
+        <BoundingBox SRS="EPSG:2163"
+                    minx="-8.13616e+06" miny="-3.00973e+06" maxx="8.13829e+06" maxy="1.0882e+07" />
+        <BoundingBox SRS="EPSG:102100"
+                    minx="-1.99426e+07" miny="1.99947e+06" maxx="2.00128e+07" maxy="1.15367e+07" />
+        <BoundingBox SRS="EPSG:4269"
+                    minx="-179.147" miny="17.6744" maxx="179.778" maxy="71.3892" />
+        <BoundingBox SRS="EPSG:4267"
+                    minx="-179.147" miny="17.6744" maxx="179.778" maxy="71.3892" />
+        <BoundingBox SRS="EPSG:54004"
+                    minx="-1.99426e+07" miny="1.98651e+06" maxx="2.00128e+07" maxy="1.14961e+07" />
+        <BoundingBox SRS="EPSG:54008"
+                    minx="-1.90071e+07" miny="1.95494e+06" maxx="1.90741e+07" maxy="7.92398e+06" />
+        <BoundingBox SRS="EPSG:3785"
+                    minx="-1.99426e+07" miny="1.99947e+06" maxx="2.00128e+07" maxy="1.15367e+07" />
+        <BoundingBox SRS="EPSG:3857"
+                    minx="-1.99426e+07" miny="1.99947e+06" maxx="2.00128e+07" maxy="1.15367e+07" />
+        <BoundingBox SRS="EPSG:102113"
+                    minx="-1.99426e+07" miny="1.99947e+06" maxx="2.00128e+07" maxy="1.15367e+07" />
+        <BoundingBox SRS="EPSG:900913"
+                    minx="-1.99426e+07" miny="1.99947e+06" maxx="2.00128e+07" maxy="1.15367e+07" />
+        <Style>
+          <Name>default</Name>
+          <Title>default</Title>
+          <LegendURL width="71" height="21">
+             <Format>image/png</Format>
+             <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://webservices.nationalatlas.gov/wms?version=1.1.1&service=WMS&request=GetLegendGraphic&layer=cdl&format=image/png&STYLE=default"/>
+          </LegendURL>
+        </Style>
+    </Layer>
+    <Layer queryable="1" opaque="0" cascaded="0">
+        <Name>cdp</Name>
+        <Title>1 Million Scale - 113th Congressional Districts by Party</Title>
+        <LatLonBoundingBox minx="-179.147" miny="17.6744" maxx="179.778" maxy="71.3892" />
+        <BoundingBox SRS="CRS:84"
+                    minx="-179.147" miny="17.6744" maxx="179.778" maxy="71.3892" />
+        <BoundingBox SRS="EPSG:4326"
+                    minx="-179.147" miny="17.6744" maxx="179.778" maxy="71.3892" />
+        <BoundingBox SRS="EPSG:2163"
+                    minx="-8.13616e+06" miny="-3.00973e+06" maxx="8.13829e+06" maxy="1.0882e+07" />
+        <BoundingBox SRS="EPSG:102100"
+                    minx="-1.99426e+07" miny="1.99947e+06" maxx="2.00128e+07" maxy="1.15367e+07" />
+        <BoundingBox SRS="EPSG:4269"
+                    minx="-179.147" miny="17.6744" maxx="179.778" maxy="71.3892" />
+        <BoundingBox SRS="EPSG:4267"
+                    minx="-179.147" miny="17.6744" maxx="179.778" maxy="71.3892" />
+        <BoundingBox SRS="EPSG:54004"
+                    minx="-1.99426e+07" miny="1.98651e+06" maxx="2.00128e+07" maxy="1.14961e+07" />
+        <BoundingBox SRS="EPSG:54008"
+                    minx="-1.90071e+07" miny="1.95494e+06" maxx="1.90741e+07" maxy="7.92398e+06" />
+        <BoundingBox SRS="EPSG:3785"
+                    minx="-1.99426e+07" miny="1.99947e+06" maxx="2.00128e+07" maxy="1.15367e+07" />
+        <BoundingBox SRS="EPSG:3857"
+                    minx="-1.99426e+07" miny="1.99947e+06" maxx="2.00128e+07" maxy="1.15367e+07" />
+        <BoundingBox SRS="EPSG:102113"
+                    minx="-1.99426e+07" miny="1.99947e+06" maxx="2.00128e+07" maxy="1.15367e+07" />
+        <BoundingBox SRS="EPSG:900913"
+                    minx="-1.99426e+07" miny="1.99947e+06" maxx="2.00128e+07" maxy="1.15367e+07" />
+        <Style>
+          <Name>default</Name>
+          <Title>default</Title>
+          <LegendURL width="71" height="21">
+             <Format>image/png</Format>
+             <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="http://webservices.nationalatlas.gov/wms?version=1.1.1&service=WMS&request=GetLegendGraphic&layer=cdp&format=image/png&STYLE=default"/>
+          </LegendURL>
+        </Style>
+    </Layer>
+  </Layer>
+</Capability>
+</WMT_MS_Capabilities>
diff --git a/tests/resources/wms_nationalatlas_getcapabilities_130.xml b/tests/resources/wms_nationalatlas_getcapabilities_130.xml
new file mode 100644
index 0000000..6113f6f
--- /dev/null
+++ b/tests/resources/wms_nationalatlas_getcapabilities_130.xml
@@ -0,0 +1,1120 @@
+<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>
+<WMS_Capabilities version="1.3.0" xmlns="http://www.opengis.net/wms"
+    xmlns:sld="http://www.opengis.net/sld" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:ms="http://mapserver.gis.umn.edu/mapserver"
+    xsi:schemaLocation="http://www.opengis.net/wms http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd  http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/sld_capabilities.xsd  http://mapserver.gis.umn.edu/mapserver http://webservices.nationalatlas.gov/wms?service=WMS&version=1.3.0&request=GetSchemaExtension">
+
+    <!-- MapServer version 6.0.0 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=ICONV SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=THREADS SUPPORTS=GEOS INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE -->
+
+    <Service>
+        <Name>WMS</Name>
+        <Title>1 Million Scale WMS Layers from the National Atlas of the United States</Title>
+        <Abstract>Test Data for 1 Million Scale</Abstract>
+        <KeywordList>
+            <Keyword>United States</Keyword>
+            <Keyword>National Atlas</Keyword>
+        </KeywordList>
+        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+            xlink:href="http://webservices.nationalatlas.gov/wms?"/>
+        <ContactInformation>
+            <ContactPersonPrimary>
+                <ContactPerson/>
+                <ContactOrganization>National Atlas of the United States</ContactOrganization>
+            </ContactPersonPrimary><ContactPosition>WMS Support Staff</ContactPosition>
+            <ContactElectronicMailAddress>atlasmail at usgs.gov</ContactElectronicMailAddress>
+        </ContactInformation>
+        <Fees>none</Fees>
+        <AccessConstraints>none</AccessConstraints>
+        <MaxWidth>2048</MaxWidth>
+        <MaxHeight>2048</MaxHeight>
+    </Service>
+
+    <Capability>
+        <Request>
+            <GetCapabilities>
+                <Format>text/xml</Format>
+                <DCPType>
+                    <HTTP>
+                        <Get>
+                            <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://webservices.nationalatlas.gov/wms?"/>
+                        </Get>
+                        <Post>
+                            <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://webservices.nationalatlas.gov/wms?"/>
+                        </Post>
+                    </HTTP>
+                </DCPType>
+            </GetCapabilities>
+            <GetMap>
+                <Format>image/png</Format>
+                <Format>image/jpeg</Format>
+                <Format>image/gif</Format>
+                <Format>image/png; mode=8bit</Format>
+                <Format>image/tiff</Format>
+                <DCPType>
+                    <HTTP>
+                        <Get>
+                            <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://webservices.nationalatlas.gov/wms?"/>
+                        </Get>
+                        <Post>
+                            <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://webservices.nationalatlas.gov/wms?"/>
+                        </Post>
+                    </HTTP>
+                </DCPType>
+            </GetMap>
+            <GetFeatureInfo>
+                <Format>text/plain</Format>
+                <Format>application/vnd.ogc.gml</Format>
+                <DCPType>
+                    <HTTP>
+                        <Get>
+                            <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://webservices.nationalatlas.gov/wms?"/>
+                        </Get>
+                        <Post>
+                            <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://webservices.nationalatlas.gov/wms?"/>
+                        </Post>
+                    </HTTP>
+                </DCPType>
+            </GetFeatureInfo>
+            <sld:DescribeLayer>
+                <Format>text/xml</Format>
+                <DCPType>
+                    <HTTP>
+                        <Get>
+                            <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://webservices.nationalatlas.gov/wms?"/>
+                        </Get>
+                        <Post>
+                            <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://webservices.nationalatlas.gov/wms?"/>
+                        </Post>
+                    </HTTP>
+                </DCPType>
+            </sld:DescribeLayer>
+            <sld:GetLegendGraphic>
+                <Format>image/png</Format>
+                <Format>image/jpeg</Format>
+                <Format>image/gif</Format>
+                <Format>image/png; mode=8bit</Format>
+                <DCPType>
+                    <HTTP>
+                        <Get>
+                            <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://webservices.nationalatlas.gov/wms?"/>
+                        </Get>
+                        <Post>
+                            <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://webservices.nationalatlas.gov/wms?"/>
+                        </Post>
+                    </HTTP>
+                </DCPType>
+            </sld:GetLegendGraphic>
+            <ms:GetStyles>
+                <Format>text/xml</Format>
+                <DCPType>
+                    <HTTP>
+                        <Get>
+                            <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://webservices.nationalatlas.gov/wms?"/>
+                        </Get>
+                        <Post>
+                            <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                                xlink:href="http://webservices.nationalatlas.gov/wms?"/>
+                        </Post>
+                    </HTTP>
+                </DCPType>
+            </ms:GetStyles>
+        </Request>
+        <Exception>
+            <Format>XML</Format>
+            <Format>INIMAGE</Format>
+            <Format>BLANK</Format>
+        </Exception>
+        <sld:UserDefinedSymbolization SupportSLD="1" UserLayer="0" UserStyle="1" RemoteWFS="0"
+            InlineFeature="0" RemoteWCS="0"/>
+        <Layer>
+            <Name>one_million</Name>
+            <Title>1 Million Scale WMS Layers from the National Atlas of the United States</Title>
+            <Abstract>one_million</Abstract>
+            <CRS>CRS:84</CRS>
+            <CRS>EPSG:4326</CRS>
+            <CRS>EPSG:2163</CRS>
+            <CRS>EPSG:102100</CRS>
+            <CRS>EPSG:4269</CRS>
+            <CRS>EPSG:4267</CRS>
+            <CRS>EPSG:54004</CRS>
+            <CRS>EPSG:54008</CRS>
+            <CRS>EPSG:3785</CRS>
+            <CRS>EPSG:3857</CRS>
+            <CRS>EPSG:102113</CRS>
+            <CRS>EPSG:900913</CRS>
+            <EX_GeographicBoundingBox>
+                <westBoundLongitude>-179.133</westBoundLongitude>
+                <eastBoundLongitude>179.788</eastBoundLongitude>
+                <southBoundLatitude>18.9155</southBoundLatitude>
+                <northBoundLatitude>71.398</northBoundLatitude>
+            </EX_GeographicBoundingBox>
+            <BoundingBox CRS="CRS:84" minx="-179.133" miny="18.9155" maxx="179.788" maxy="71.398"/>
+            <BoundingBox CRS="EPSG:4326" minx="18.9155" miny="-179.133" maxx="71.398" maxy="179.788"/>
+            <BoundingBox CRS="EPSG:2163" minx="-8.01362e+06" miny="-2.87546e+06" maxx="8.01713e+06"
+                maxy="1.08097e+07"/>
+            <BoundingBox CRS="EPSG:102100" minx="-1.9941e+07" miny="2.14499e+06" maxx="2.00139e+07"
+                maxy="1.15398e+07"/>
+            <BoundingBox CRS="EPSG:4269" minx="18.9155" miny="-179.133" maxx="71.398" maxy="179.788"/>
+            <BoundingBox CRS="EPSG:4267" minx="18.9155" miny="-179.133" maxx="71.398" maxy="179.788"/>
+            <BoundingBox CRS="EPSG:54004" minx="-1.9941e+07" miny="2.13115e+06" maxx="2.00139e+07"
+                maxy="1.14992e+07"/>
+            <BoundingBox CRS="EPSG:54008" minx="-1.88708e+07" miny="2.09231e+06" maxx="1.89398e+07"
+                maxy="7.92496e+06"/>
+            <BoundingBox CRS="EPSG:3785" minx="-1.9941e+07" miny="2.14499e+06" maxx="2.00139e+07"
+                maxy="1.15398e+07"/>
+            <BoundingBox CRS="EPSG:3857" minx="-1.9941e+07" miny="2.14499e+06" maxx="2.00139e+07"
+                maxy="1.15398e+07"/>
+            <BoundingBox CRS="EPSG:102113" minx="-1.9941e+07" miny="2.14499e+06" maxx="2.00139e+07"
+                maxy="1.15398e+07"/>
+            <BoundingBox CRS="EPSG:900913" minx="-1.9941e+07" miny="2.14499e+06" maxx="2.00139e+07"
+                maxy="1.15398e+07"/>
+            <Attribution>
+                <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                    xlink:href="http://nationalatlas.gov/infodocs/wms_intro.html"/>
+            </Attribution>
+            <Layer queryable="1" opaque="0" cascaded="0">
+                <Name>airports1m</Name>
+                <Title>1 Million Scale - Airports</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-176.646</westBoundLongitude>
+                    <eastBoundLongitude>-64.8017</eastBoundLongitude>
+                    <southBoundLatitude>17.7016</southBoundLatitude>
+                    <northBoundLatitude>71.2854</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-176.646" miny="17.7016" maxx="-64.8017"
+                    maxy="71.2854"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.7016" miny="-176.646" maxx="71.2854"
+                    maxy="-64.8017"/>
+                <BoundingBox CRS="EPSG:2163" minx="-7.13345e+06" miny="-3.00665e+06"
+                    maxx="3.72355e+06" maxy="4.23839e+06"/>
+                <BoundingBox CRS="EPSG:102100" minx="-1.96641e+07" miny="2.00265e+06"
+                    maxx="-7.21369e+06" maxy="1.15006e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.7016" miny="-176.646" maxx="71.2854"
+                    maxy="-64.8017"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.7016" miny="-176.646" maxx="71.2854"
+                    maxy="-64.8017"/>
+                <BoundingBox CRS="EPSG:54004" minx="-1.96641e+07" miny="1.98966e+06"
+                    maxx="-7.21369e+06" maxy="1.14601e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.87389e+07" miny="1.95795e+06"
+                    maxx="-2.32152e+06" maxy="7.9124e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-1.96641e+07" miny="2.00265e+06"
+                    maxx="-7.21369e+06" maxy="1.15006e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-1.96641e+07" miny="2.00265e+06"
+                    maxx="-7.21369e+06" maxy="1.15006e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-1.96641e+07" miny="2.00265e+06"
+                    maxx="-7.21369e+06" maxy="1.15006e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-1.96641e+07" miny="2.00265e+06"
+                    maxx="-7.21369e+06" maxy="1.15006e+07"/>
+                <Style>
+                    <Name>default</Name>
+                    <Title>default</Title>
+                    <LegendURL width="71" height="21">
+                        <Format>image/png</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://webservices.nationalatlas.gov/wms?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=airports1m&format=image/png&STYLE=default"
+                        />
+                    </LegendURL>
+                </Style>
+            </Layer>
+            <Layer queryable="1" opaque="0" cascaded="0">
+                <Name>amtrak1m</Name>
+                <Title>1 Million Scale - Railroad and Bus Passenger Stations</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-124.212</westBoundLongitude>
+                    <eastBoundLongitude>-68.6706</eastBoundLongitude>
+                    <southBoundLatitude>25.8498</southBoundLatitude>
+                    <northBoundLatitude>48.7205</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-124.212" miny="25.8498" maxx="-68.6706"
+                    maxy="48.7205"/>
+                <BoundingBox CRS="EPSG:4326" minx="25.8498" miny="-124.212" maxx="48.7205"
+                    maxy="-68.6706"/>
+                <BoundingBox CRS="EPSG:2163" minx="-2.41969e+06" miny="-2.11947e+06"
+                    maxx="3.09811e+06" maxy="862008"/>
+                <BoundingBox CRS="EPSG:102100" minx="-1.38272e+07" miny="2.9805e+06"
+                    maxx="-7.64438e+06" maxy="6.22757e+06"/>
+                <BoundingBox CRS="EPSG:4269" minx="25.8498" miny="-124.212" maxx="48.7205"
+                    maxy="-68.6706"/>
+                <BoundingBox CRS="EPSG:4267" minx="25.8498" miny="-124.212" maxx="48.7205"
+                    maxy="-68.6706"/>
+                <BoundingBox CRS="EPSG:54004" minx="-1.38272e+07" miny="2.96187e+06"
+                    maxx="-7.64438e+06" maxy="6.19544e+06"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.24516e+07" miny="2.8602e+06"
+                    maxx="-5.05281e+06" maxy="5.39854e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-1.38272e+07" miny="2.9805e+06"
+                    maxx="-7.64438e+06" maxy="6.22757e+06"/>
+                <BoundingBox CRS="EPSG:3857" minx="-1.38272e+07" miny="2.9805e+06"
+                    maxx="-7.64438e+06" maxy="6.22757e+06"/>
+                <BoundingBox CRS="EPSG:102113" minx="-1.38272e+07" miny="2.9805e+06"
+                    maxx="-7.64438e+06" maxy="6.22757e+06"/>
+                <BoundingBox CRS="EPSG:900913" minx="-1.38272e+07" miny="2.9805e+06"
+                    maxx="-7.64438e+06" maxy="6.22757e+06"/>
+                <Style>
+                    <Name>default</Name>
+                    <Title>default</Title>
+                    <LegendURL width="71" height="21">
+                        <Format>image/png</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://webservices.nationalatlas.gov/wms?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=amtrak1m&format=image/png&STYLE=default"
+                        />
+                    </LegendURL>
+                </Style>
+            </Layer>
+            <Layer queryable="1" opaque="0" cascaded="0">
+                <Name>coast1m</Name>
+                <Title>1 Million Scale - Coastlines</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.147</westBoundLongitude>
+                    <eastBoundLongitude>179.778</eastBoundLongitude>
+                    <southBoundLatitude>17.6744</southBoundLatitude>
+                    <northBoundLatitude>71.3892</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.147" miny="17.6744" maxx="179.778"
+                    maxy="71.3892"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.6744" miny="-179.147" maxx="71.3892"
+                    maxy="179.778"/>
+                <BoundingBox CRS="EPSG:2163" minx="-8.13616e+06" miny="-3.00973e+06"
+                    maxx="8.13829e+06" maxy="1.0882e+07"/>
+                <BoundingBox CRS="EPSG:102100" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.6744" miny="-179.147" maxx="71.3892"
+                    maxy="179.778"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.6744" miny="-179.147" maxx="71.3892"
+                    maxy="179.778"/>
+                <BoundingBox CRS="EPSG:54004" minx="-1.99426e+07" miny="1.98651e+06"
+                    maxx="2.00128e+07" maxy="1.14961e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.90071e+07" miny="1.95494e+06"
+                    maxx="1.90741e+07" maxy="7.92398e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+
+                <Dimension name="elevation" units="meters" default="500" multipleValues="1" nearestValue="0" current="true" unitSymbol="m">500, 490, 480</Dimension>
+                <Dimension name="time" units="ISO8601" default="2006-06-23T03:10:00Z" nearestValue="0">1995-01-01/2013-12-31/PT5M</Dimension>
+                <MetadataURL type="FGDC">
+                    <Format>text/xml</Format>
+                    <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="9250AA67-F3AC-6C12-0CB9-0662231AA181_fgdc.xml"/>
+                </MetadataURL>
+                <Style>
+                    <Name>default</Name>
+                    <Title>default</Title>
+                    <LegendURL width="71" height="21">
+                        <Format>image/png</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://webservices.nationalatlas.gov/wms?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=coast1m&format=image/png&STYLE=default"
+                        />
+                    </LegendURL>
+                </Style>
+            </Layer>
+            <Layer queryable="1" opaque="0" cascaded="0">
+                <Name>cdl</Name>
+                <Title>1 Million Scale - 113th Congressional Districts</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.147</westBoundLongitude>
+                    <eastBoundLongitude>179.778</eastBoundLongitude>
+                    <southBoundLatitude>17.6744</southBoundLatitude>
+                    <northBoundLatitude>71.3892</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.147" miny="17.6744" maxx="179.778"
+                    maxy="71.3892"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.6744" miny="-179.147" maxx="71.3892"
+                    maxy="179.778"/>
+                <BoundingBox CRS="EPSG:2163" minx="-8.13616e+06" miny="-3.00973e+06"
+                    maxx="8.13829e+06" maxy="1.0882e+07"/>
+                <BoundingBox CRS="EPSG:102100" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.6744" miny="-179.147" maxx="71.3892"
+                    maxy="179.778"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.6744" miny="-179.147" maxx="71.3892"
+                    maxy="179.778"/>
+                <BoundingBox CRS="EPSG:54004" minx="-1.99426e+07" miny="1.98651e+06"
+                    maxx="2.00128e+07" maxy="1.14961e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.90071e+07" miny="1.95494e+06"
+                    maxx="1.90741e+07" maxy="7.92398e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <Style>
+                    <Name>default</Name>
+                    <Title>default</Title>
+                    <LegendURL width="71" height="21">
+                        <Format>image/png</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://webservices.nationalatlas.gov/wms?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=cdl&format=image/png&STYLE=default"
+                        />
+                    </LegendURL>
+                </Style>
+            </Layer>
+            <Layer queryable="1" opaque="0" cascaded="0">
+                <Name>cdp</Name>
+                <Title>1 Million Scale - 113th Congressional Districts by Party</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.147</westBoundLongitude>
+                    <eastBoundLongitude>179.778</eastBoundLongitude>
+                    <southBoundLatitude>17.6744</southBoundLatitude>
+                    <northBoundLatitude>71.3892</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.147" miny="17.6744" maxx="179.778"
+                    maxy="71.3892"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.6744" miny="-179.147" maxx="71.3892"
+                    maxy="179.778"/>
+                <BoundingBox CRS="EPSG:2163" minx="-8.13616e+06" miny="-3.00973e+06"
+                    maxx="8.13829e+06" maxy="1.0882e+07"/>
+                <BoundingBox CRS="EPSG:102100" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.6744" miny="-179.147" maxx="71.3892"
+                    maxy="179.778"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.6744" miny="-179.147" maxx="71.3892"
+                    maxy="179.778"/>
+                <BoundingBox CRS="EPSG:54004" minx="-1.99426e+07" miny="1.98651e+06"
+                    maxx="2.00128e+07" maxy="1.14961e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.90071e+07" miny="1.95494e+06"
+                    maxx="1.90741e+07" maxy="7.92398e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <Style>
+                    <Name>default</Name>
+                    <Title>default</Title>
+                    <LegendURL width="71" height="21">
+                        <Format>image/png</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://webservices.nationalatlas.gov/wms?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=cdp&format=image/png&STYLE=default"
+                        />
+                    </LegendURL>
+                </Style>
+            </Layer>
+            <Layer queryable="0" opaque="0" cascaded="0">
+                <Name>elevation</Name>
+                <Title>1 Million Scale - Elevation 100 Meter Resolution</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.998</westBoundLongitude>
+                    <eastBoundLongitude>180</eastBoundLongitude>
+                    <southBoundLatitude>17.0592</southBoundLatitude>
+                    <northBoundLatitude>71.9541</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.998" miny="17.0592" maxx="180" maxy="71.9541"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.0592" miny="-179.998" maxx="71.9541"
+                    maxy="180"/>
+                <BoundingBox CRS="EPSG:2163" minx="-8.19679e+06" miny="-3.07581e+06"
+                    maxx="8.19748e+06" maxy="1.09171e+07"/>
+                <BoundingBox CRS="EPSG:102100" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17367e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.0592" miny="-179.998" maxx="71.9541"
+                    maxy="180"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.0592" miny="-179.998" maxx="71.9541"
+                    maxy="180"/>
+                <BoundingBox CRS="EPSG:54004" minx="-2.00373e+07" miny="1.91518e+06"
+                    maxx="2.00375e+07" maxy="1.1696e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.91612e+07" miny="1.88685e+06"
+                    maxx="1.91614e+07" maxy="7.98701e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17367e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17367e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17367e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17367e+07"/>
+                <Style>
+                    <Name>elevi0100g</Name>
+                    <Title>elevi0100g</Title>
+                    <LegendURL width="190" height="526">
+                        <Format>image/gif</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://nationalatlas.gov/images/elevi0100g.gif"/>
+                    </LegendURL>
+                </Style>
+            </Layer>
+            <Layer queryable="0" opaque="0" cascaded="0">
+                <Name>elsli0100g</Name>
+                <Title>1 Million Scale - Color-Sliced Elevation 100 Meter Resolution</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.998</westBoundLongitude>
+                    <eastBoundLongitude>180</eastBoundLongitude>
+                    <southBoundLatitude>17.0592</southBoundLatitude>
+                    <northBoundLatitude>71.954</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.998" miny="17.0592" maxx="180" maxy="71.954"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:2163" minx="-8.19679e+06" miny="-3.07581e+06"
+                    maxx="8.19748e+06" maxy="1.09171e+07"/>
+                <BoundingBox CRS="EPSG:102100" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:54004" minx="-2.00373e+07" miny="1.91518e+06"
+                    maxx="2.00375e+07" maxy="1.1696e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.91612e+07" miny="1.88685e+06"
+                    maxx="1.91614e+07" maxy="7.987e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <Style>
+                    <Name>default</Name>
+                    <Title>default</Title>
+                    <LegendURL width="71" height="21">
+                        <Format>image/png</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://webservices.nationalatlas.gov/wms?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=elsli0100g&format=image/png&STYLE=default"
+                        />
+                    </LegendURL>
+                </Style>
+            </Layer>
+            <Layer queryable="0" opaque="0" cascaded="0">
+                <Name>impervious</Name>
+                <Title>1 Million Scale - Impervious Surface 100 Meter Resolution</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.998</westBoundLongitude>
+                    <eastBoundLongitude>-62.6641</eastBoundLongitude>
+                    <southBoundLatitude>17.06</southBoundLatitude>
+                    <northBoundLatitude>71.954</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.998" miny="17.06" maxx="-62.6641" maxy="71.954"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.06" miny="-179.998" maxx="71.954"
+                    maxy="-62.6641"/>
+                <BoundingBox CRS="EPSG:2163" minx="-7.36962e+06" miny="-3.07607e+06"
+                    maxx="3.95469e+06" maxy="4.36977e+06"/>
+                <BoundingBox CRS="EPSG:102100" minx="-2.00373e+07" miny="1.92781e+06"
+                    maxx="-6.97574e+06" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.06" miny="-179.998" maxx="71.954"
+                    maxy="-62.6641"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.06" miny="-179.998" maxx="71.954"
+                    maxy="-62.6641"/>
+                <BoundingBox CRS="EPSG:54004" minx="-2.00373e+07" miny="1.91528e+06"
+                    maxx="-6.97574e+06" maxy="1.1696e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.91612e+07" miny="1.88695e+06"
+                    maxx="-2.16752e+06" maxy="7.987e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-2.00373e+07" miny="1.92781e+06"
+                    maxx="-6.97574e+06" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-2.00373e+07" miny="1.92781e+06"
+                    maxx="-6.97574e+06" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-2.00373e+07" miny="1.92781e+06"
+                    maxx="-6.97574e+06" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-2.00373e+07" miny="1.92781e+06"
+                    maxx="-6.97574e+06" maxy="1.17366e+07"/>
+                <Style>
+                    <Name>impei0100a</Name>
+                    <Title>impei0100a</Title>
+                    <LegendURL width="144" height="430">
+                        <Format>image/gif</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://nationalatlas.gov/images/impei0100a.gif"/>
+                    </LegendURL>
+                </Style>
+            </Layer>
+            <Layer queryable="0" opaque="0" cascaded="0">
+                <Name>landcov100m</Name>
+                <Title>1 Million Scale - Land Cover 100 Meter Resolution</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.998</westBoundLongitude>
+                    <eastBoundLongitude>180</eastBoundLongitude>
+                    <southBoundLatitude>17.06</southBoundLatitude>
+                    <northBoundLatitude>71.954</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.998" miny="17.06" maxx="180" maxy="71.954"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.06" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:2163" minx="-8.19671e+06" miny="-3.07572e+06"
+                    maxx="8.1974e+06" maxy="1.09171e+07"/>
+                <BoundingBox CRS="EPSG:102100" minx="-2.00373e+07" miny="1.92781e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.06" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.06" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:54004" minx="-2.00373e+07" miny="1.91528e+06"
+                    maxx="2.00375e+07" maxy="1.1696e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.91612e+07" miny="1.88695e+06"
+                    maxx="1.91613e+07" maxy="7.987e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-2.00373e+07" miny="1.92781e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-2.00373e+07" miny="1.92781e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-2.00373e+07" miny="1.92781e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-2.00373e+07" miny="1.92781e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <Style>
+                    <Name>default</Name>
+                    <Title>default</Title>
+                    <LegendURL width="71" height="21">
+                        <Format>image/png</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://webservices.nationalatlas.gov/wms?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=landcov100m&format=image/png&STYLE=default"
+                        />
+                    </LegendURL>
+                </Style>
+            </Layer>
+            <Layer queryable="0" opaque="0" cascaded="0">
+                <Name>landwatermask</Name>
+                <Title>1 Million Scale - Land/Water Mask 100 Meter Resolution</Title>
+                <Abstract>This Land/Water Mask is a 100-meter resolution image of the conterminous United States, Alaska, Hawaii, Puerto Rico and the U.S. Virgin Islands, with separate values for oceans and for land areas of the United States, Canada, Mexico, the Bahamas and Cuba, Russia, and the British Virgin Islands.</Abstract>
+                <KeywordList>
+                    <Keyword>Land Surface</Keyword>
+                    <Keyword> Oceans</Keyword>
+                    <Keyword> imageryBaseMapsEarthCover</Keyword>
+                    <Keyword> Mask</Keyword>
+                    <Keyword> Land/water</Keyword>
+                    <Keyword> United States</Keyword>
+                    <Keyword> US</Keyword>
+                    <Keyword> USA</Keyword>
+                    <Keyword> Alabama</Keyword>
+                    <Keyword> Arizona</Keyword>
+                    <Keyword> Arkansas</Keyword>
+                    <Keyword> California</Keyword>
+                    <Keyword> Colorado</Keyword>
+                    <Keyword> Connecticut</Keyword>
+                    <Keyword> Delaware</Keyword>
+                    <Keyword> District of Columbia</Keyword>
+                    <Keyword> Florida</Keyword>
+                    <Keyword> Georgia</Keyword>
+                    <Keyword> Idaho</Keyword>
+                    <Keyword> Illinois</Keyword>
+                    <Keyword> Indiana</Keyword>
+                    <Keyword> Iowa</Keyword>
+                    <Keyword> Kansas</Keyword>
+                    <Keyword> Kentucky</Keyword>
+                    <Keyword> Louisiana</Keyword>
+                    <Keyword> Maine</Keyword>
+                    <Keyword> Maryland</Keyword>
+                    <Keyword> Massachusetts</Keyword>
+                    <Keyword> Michigan</Keyword>
+                    <Keyword> Minnesota</Keyword>
+                    <Keyword> Mississippi</Keyword>
+                    <Keyword> Missouri</Keyword>
+                    <Keyword> Montana</Keyword>
+                    <Keyword> Nebraska</Keyword>
+                    <Keyword> Nevada</Keyword>
+                    <Keyword> New Hampshire</Keyword>
+                    <Keyword> New Jersey</Keyword>
+                    <Keyword> New Mexico</Keyword>
+                    <Keyword> New York</Keyword>
+                    <Keyword> North Carolina</Keyword>
+                    <Keyword> North Dakota</Keyword>
+                    <Keyword> Ohio</Keyword>
+                    <Keyword> Oklahoma</Keyword>
+                    <Keyword> Oregon</Keyword>
+                    <Keyword> Pennsylvania</Keyword>
+                    <Keyword> Rhode Island</Keyword>
+                    <Keyword> South Carolina</Keyword>
+                    <Keyword> South Dakota</Keyword>
+                    <Keyword> Tennessee</Keyword>
+                    <Keyword> Texas</Keyword>
+                    <Keyword> Utah</Keyword>
+                    <Keyword> Vermont</Keyword>
+                    <Keyword> Virginia</Keyword>
+                    <Keyword> Washington</Keyword>
+                    <Keyword> West Virginia</Keyword>
+                    <Keyword> Wisconsin</Keyword>
+                    <Keyword> Wyoming</Keyword>
+                    <Keyword> Alaska</Keyword>
+                    <Keyword> Hawaii</Keyword>
+                    <Keyword> Puerto Rico</Keyword>
+                    <Keyword> Virgin Islands</Keyword>
+                    <Keyword> U.S. Virgin Islands</Keyword>
+                </KeywordList>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.998</westBoundLongitude>
+                    <eastBoundLongitude>180</eastBoundLongitude>
+                    <southBoundLatitude>17.0592</southBoundLatitude>
+                    <northBoundLatitude>71.954</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.998" miny="17.0592" maxx="180" maxy="71.954"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:2163" minx="-8.19679e+06" miny="-3.07581e+06"
+                    maxx="8.19748e+06" maxy="1.09171e+07"/>
+                <BoundingBox CRS="EPSG:102100" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:54004" minx="-2.00373e+07" miny="1.91518e+06"
+                    maxx="2.00375e+07" maxy="1.1696e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.91612e+07" miny="1.88685e+06"
+                    maxx="1.91614e+07" maxy="7.987e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <MetadataURL type="FGDC">
+                    <Format>text/xml</Format>
+                    <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
+                        xlink:href="http://nationalatlas.gov/metadata/mask48i0100a.xml"/>
+                </MetadataURL>
+                <Style>
+                    <Name>default</Name>
+                    <Title>default</Title>
+                    <LegendURL width="71" height="21">
+                        <Format>image/png</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://webservices.nationalatlas.gov/wms?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=landwatermask&format=image/png&STYLE=default"
+                        />
+                    </LegendURL>
+                </Style>
+            </Layer>
+            <Layer queryable="1" opaque="0" cascaded="0">
+                <Name>national1m</Name>
+                <Title>1 Million Scale - National Boundary</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.147</westBoundLongitude>
+                    <eastBoundLongitude>179.778</eastBoundLongitude>
+                    <southBoundLatitude>17.6744</southBoundLatitude>
+                    <northBoundLatitude>71.3892</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.147" miny="17.6744" maxx="179.778"
+                    maxy="71.3892"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.6744" miny="-179.147" maxx="71.3892"
+                    maxy="179.778"/>
+                <BoundingBox CRS="EPSG:2163" minx="-8.13616e+06" miny="-3.00973e+06"
+                    maxx="8.13829e+06" maxy="1.0882e+07"/>
+                <BoundingBox CRS="EPSG:102100" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.6744" miny="-179.147" maxx="71.3892"
+                    maxy="179.778"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.6744" miny="-179.147" maxx="71.3892"
+                    maxy="179.778"/>
+                <BoundingBox CRS="EPSG:54004" minx="-1.99426e+07" miny="1.98651e+06"
+                    maxx="2.00128e+07" maxy="1.14961e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.90071e+07" miny="1.95494e+06"
+                    maxx="1.90741e+07" maxy="7.92398e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <Style>
+                    <Name>default</Name>
+                    <Title>default</Title>
+                    <LegendURL width="71" height="21">
+                        <Format>image/png</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://webservices.nationalatlas.gov/wms?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=national1m&format=image/png&STYLE=default"
+                        />
+                    </LegendURL>
+                </Style>
+            </Layer>
+            <Layer queryable="0" opaque="0" cascaded="0">
+                <Name>naturalearth</Name>
+                <Title>1 Million Scale - Natural Earth Shaded Relief 100 Meter Resolution</Title>
+                <Abstract>This map layer contains a natural-earth image of the conterminous United States, Alaska, Hawaii, Puerto Rico and the U.S. Virgin Islands.  The image is land cover in natural colors combined with shaded relief, which produces a naturalistic rendition of the Earth's surface.</Abstract>
+                <KeywordList>
+                    <Keyword>Elevation</Keyword>
+                    <Keyword> Land cover</Keyword>
+                    <Keyword> Land cover characteristics</Keyword>
+                    <Keyword> Satellite image</Keyword>
+                    <Keyword> Topographic</Keyword>
+                    <Keyword> Topography</Keyword>
+                    <Keyword> Natural earth</Keyword>
+                    <Keyword> United States</Keyword>
+                    <Keyword> US</Keyword>
+                    <Keyword> USA</Keyword>
+                    <Keyword> Alabama</Keyword>
+                    <Keyword> Arizona</Keyword>
+                    <Keyword> Arkansas</Keyword>
+                    <Keyword> California</Keyword>
+                    <Keyword> Colorado</Keyword>
+                    <Keyword> Connecticut</Keyword>
+                    <Keyword> Delaware</Keyword>
+                    <Keyword> District of Columbia</Keyword>
+                    <Keyword> Florida</Keyword>
+                    <Keyword> Georgia</Keyword>
+                    <Keyword> Idaho</Keyword>
+                    <Keyword> Illinois</Keyword>
+                    <Keyword> Indiana</Keyword>
+                    <Keyword> Iowa</Keyword>
+                    <Keyword> Kansas</Keyword>
+                    <Keyword> Kentucky</Keyword>
+                    <Keyword> Louisiana</Keyword>
+                    <Keyword> Maine</Keyword>
+                    <Keyword> Maryland</Keyword>
+                    <Keyword> Massachusetts</Keyword>
+                    <Keyword> Michigan</Keyword>
+                    <Keyword> Minnesota</Keyword>
+                    <Keyword> Mississippi</Keyword>
+                    <Keyword> Missouri</Keyword>
+                    <Keyword> Montana</Keyword>
+                    <Keyword> Nebraska</Keyword>
+                    <Keyword> Nevada</Keyword>
+                    <Keyword> New Hampshire</Keyword>
+                    <Keyword> New Jersey</Keyword>
+                    <Keyword> New Mexico</Keyword>
+                    <Keyword> New York</Keyword>
+                    <Keyword> North Carolina</Keyword>
+                    <Keyword> North Dakota</Keyword>
+                    <Keyword> Ohio</Keyword>
+                    <Keyword> Oklahoma</Keyword>
+                    <Keyword> Oregon</Keyword>
+                    <Keyword> Pennsylvania</Keyword>
+                    <Keyword> Rhode Island</Keyword>
+                    <Keyword> South Carolina</Keyword>
+                    <Keyword> South Dakota</Keyword>
+                    <Keyword> Tennessee</Keyword>
+                    <Keyword> Texas</Keyword>
+                    <Keyword> Utah</Keyword>
+                    <Keyword> Vermont</Keyword>
+                    <Keyword> Virginia</Keyword>
+                    <Keyword> Washington</Keyword>
+                    <Keyword> West Virginia</Keyword>
+                    <Keyword> Wisconsin</Keyword>
+                    <Keyword> Wyoming</Keyword>
+                    <Keyword> Alaska</Keyword>
+                    <Keyword> Hawaii</Keyword>
+                    <Keyword> Puerto Rico</Keyword>
+                    <Keyword> Virgin Islands</Keyword>
+                    <Keyword> U.S. Virgin Islands</Keyword>
+                </KeywordList>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.998</westBoundLongitude>
+                    <eastBoundLongitude>180</eastBoundLongitude>
+                    <southBoundLatitude>17.0592</southBoundLatitude>
+                    <northBoundLatitude>71.954</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.998" miny="17.0592" maxx="180" maxy="71.954"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:2163" minx="-8.19679e+06" miny="-3.07581e+06"
+                    maxx="8.19748e+06" maxy="1.09171e+07"/>
+                <BoundingBox CRS="EPSG:102100" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:54004" minx="-2.00373e+07" miny="1.91518e+06"
+                    maxx="2.00375e+07" maxy="1.1696e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.91612e+07" miny="1.88685e+06"
+                    maxx="1.91614e+07" maxy="7.987e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <MetadataURL type="FGDC">
+                    <Format>text/xml</Format>
+                    <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple"
+                        xlink:href="http://nationalatlas.gov/metadata/nate48i0100a.xml"/>
+                </MetadataURL>
+                <Style>
+                    <Name>natei0100g</Name>
+                    <Title>natei0100g</Title>
+                    <LegendURL width="275" height="645">
+                        <Format>image/jpeg</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://nationalatlas.gov/images/natei0100g.jpg"/>
+                    </LegendURL>
+                </Style>
+            </Layer>
+            <Layer queryable="1" opaque="0" cascaded="0">
+                <Name>ports1m</Name>
+                <Title>1 Million Scale - Ports</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-166.532</westBoundLongitude>
+                    <eastBoundLongitude>-64.7707</eastBoundLongitude>
+                    <southBoundLatitude>17.706</southBoundLatitude>
+                    <northBoundLatitude>66.8998</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-166.532" miny="17.706" maxx="-64.7707"
+                    maxy="66.8998"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.706" miny="-166.532" maxx="66.8998"
+                    maxy="-64.7707"/>
+                <BoundingBox CRS="EPSG:2163" minx="-6.4645e+06" miny="-3.00625e+06"
+                    maxx="3.7265e+06" maxy="3.66602e+06"/>
+                <BoundingBox CRS="EPSG:102100" minx="-1.85383e+07" miny="2.00317e+06"
+                    maxx="-7.21024e+06" maxy="1.01276e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.706" miny="-166.532" maxx="66.8998"
+                    maxy="-64.7707"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.706" miny="-166.532" maxx="66.8998"
+                    maxy="-64.7707"/>
+                <BoundingBox CRS="EPSG:54004" minx="-1.85383e+07" miny="1.99018e+06"
+                    maxx="-7.21024e+06" maxy="1.00882e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.76656e+07" miny="1.95845e+06"
+                    maxx="-2.83691e+06" maxy="7.42318e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-1.85383e+07" miny="2.00317e+06"
+                    maxx="-7.21024e+06" maxy="1.01276e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-1.85383e+07" miny="2.00317e+06"
+                    maxx="-7.21024e+06" maxy="1.01276e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-1.85383e+07" miny="2.00317e+06"
+                    maxx="-7.21024e+06" maxy="1.01276e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-1.85383e+07" miny="2.00317e+06"
+                    maxx="-7.21024e+06" maxy="1.01276e+07"/>
+                <Style>
+                    <Name>default</Name>
+                    <Title>default</Title>
+                    <LegendURL width="71" height="21">
+                        <Format>image/png</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://webservices.nationalatlas.gov/wms?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=ports1m&format=image/png&STYLE=default"
+                        />
+                    </LegendURL>
+                </Style>
+            </Layer>
+            <Layer queryable="0" opaque="0" cascaded="0">
+                <Name>satvi0100g</Name>
+                <Title>1 Million Scale - Satellite View 100 Meter Resolution</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.998</westBoundLongitude>
+                    <eastBoundLongitude>180</eastBoundLongitude>
+                    <southBoundLatitude>17.0592</southBoundLatitude>
+                    <northBoundLatitude>71.954</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.998" miny="17.0592" maxx="180" maxy="71.954"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:2163" minx="-8.19679e+06" miny="-3.07581e+06"
+                    maxx="8.19748e+06" maxy="1.09171e+07"/>
+                <BoundingBox CRS="EPSG:102100" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:54004" minx="-2.00373e+07" miny="1.91518e+06"
+                    maxx="2.00375e+07" maxy="1.1696e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.91612e+07" miny="1.88685e+06"
+                    maxx="1.91614e+07" maxy="7.987e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+            </Layer>
+            <Layer queryable="0" opaque="0" cascaded="0">
+                <Name>srcoi0100g</Name>
+                <Title>1 Million Scale - Color Shaded Relief 100 Meter Resolution</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.998</westBoundLongitude>
+                    <eastBoundLongitude>180</eastBoundLongitude>
+                    <southBoundLatitude>17.0592</southBoundLatitude>
+                    <northBoundLatitude>71.954</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.998" miny="17.0592" maxx="180" maxy="71.954"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:2163" minx="-8.19679e+06" miny="-3.07581e+06"
+                    maxx="8.19748e+06" maxy="1.09171e+07"/>
+                <BoundingBox CRS="EPSG:102100" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:54004" minx="-2.00373e+07" miny="1.91518e+06"
+                    maxx="2.00375e+07" maxy="1.1696e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.91612e+07" miny="1.88685e+06"
+                    maxx="1.91614e+07" maxy="7.987e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <Style>
+                    <Name>default</Name>
+                    <Title>default</Title>
+                    <LegendURL width="71" height="21">
+                        <Format>image/png</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://webservices.nationalatlas.gov/wms?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=srcoi0100g&format=image/png&STYLE=default"
+                        />
+                    </LegendURL>
+                </Style>
+            </Layer>
+            <Layer queryable="0" opaque="0" cascaded="0">
+                <Name>srgri0100g</Name>
+                <Title>1 Million Scale - Gray Shaded Relief 100 Meter Resolution</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.998</westBoundLongitude>
+                    <eastBoundLongitude>180</eastBoundLongitude>
+                    <southBoundLatitude>17.0592</southBoundLatitude>
+                    <northBoundLatitude>71.954</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.998" miny="17.0592" maxx="180" maxy="71.954"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:2163" minx="-8.19679e+06" miny="-3.07581e+06"
+                    maxx="8.19748e+06" maxy="1.09171e+07"/>
+                <BoundingBox CRS="EPSG:102100" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:54004" minx="-2.00373e+07" miny="1.91518e+06"
+                    maxx="2.00375e+07" maxy="1.1696e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.91612e+07" miny="1.88685e+06"
+                    maxx="1.91614e+07" maxy="7.987e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+            </Layer>
+            <Layer queryable="1" opaque="0" cascaded="0">
+                <Name>states1m</Name>
+                <Title>1 Million Scale - States</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.147</westBoundLongitude>
+                    <eastBoundLongitude>179.778</eastBoundLongitude>
+                    <southBoundLatitude>17.6744</southBoundLatitude>
+                    <northBoundLatitude>71.3892</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.147" miny="17.6744" maxx="179.778"
+                    maxy="71.3892"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.6744" miny="-179.147" maxx="71.3892"
+                    maxy="179.778"/>
+                <BoundingBox CRS="EPSG:2163" minx="-8.13616e+06" miny="-3.00973e+06"
+                    maxx="8.13829e+06" maxy="1.0882e+07"/>
+                <BoundingBox CRS="EPSG:102100" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.6744" miny="-179.147" maxx="71.3892"
+                    maxy="179.778"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.6744" miny="-179.147" maxx="71.3892"
+                    maxy="179.778"/>
+                <BoundingBox CRS="EPSG:54004" minx="-1.99426e+07" miny="1.98651e+06"
+                    maxx="2.00128e+07" maxy="1.14961e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.90071e+07" miny="1.95494e+06"
+                    maxx="1.90741e+07" maxy="7.92398e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-1.99426e+07" miny="1.99947e+06"
+                    maxx="2.00128e+07" maxy="1.15367e+07"/>
+                <Style>
+                    <Name>default</Name>
+                    <Title>default</Title>
+                    <LegendURL width="71" height="21">
+                        <Format>image/png</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://webservices.nationalatlas.gov/wms?version=1.3.0&service=WMS&request=GetLegendGraphic&sld_version=1.1.0&layer=states1m&format=image/png&STYLE=default"
+                        />
+                    </LegendURL>
+                </Style>
+            </Layer>
+            <Layer queryable="0" opaque="0" cascaded="0">
+                <Name>svsri0100g</Name>
+                <Title>1 Million Scale - Satellite View with Shaded Relief 100 Meter Resolution</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.998</westBoundLongitude>
+                    <eastBoundLongitude>180</eastBoundLongitude>
+                    <southBoundLatitude>17.0592</southBoundLatitude>
+                    <northBoundLatitude>71.954</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.998" miny="17.0592" maxx="180" maxy="71.954"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:2163" minx="-8.19679e+06" miny="-3.07581e+06"
+                    maxx="8.19748e+06" maxy="1.09171e+07"/>
+                <BoundingBox CRS="EPSG:102100" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.0592" miny="-179.998" maxx="71.954" maxy="180"/>
+                <BoundingBox CRS="EPSG:54004" minx="-2.00373e+07" miny="1.91518e+06"
+                    maxx="2.00375e+07" maxy="1.1696e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.91612e+07" miny="1.88685e+06"
+                    maxx="1.91614e+07" maxy="7.987e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-2.00373e+07" miny="1.92771e+06"
+                    maxx="2.00375e+07" maxy="1.17366e+07"/>
+            </Layer>
+            <Layer queryable="0" opaque="0" cascaded="0">
+                <Name>treecanopy</Name>
+                <Title>1 Million Scale - Tree Canopy 100 Meter Resolution</Title>
+                <EX_GeographicBoundingBox>
+                    <westBoundLongitude>-179.998</westBoundLongitude>
+                    <eastBoundLongitude>-62.6641</eastBoundLongitude>
+                    <southBoundLatitude>17.06</southBoundLatitude>
+                    <northBoundLatitude>71.954</northBoundLatitude>
+                </EX_GeographicBoundingBox>
+                <BoundingBox CRS="CRS:84" minx="-179.998" miny="17.06" maxx="-62.6641" maxy="71.954"/>
+                <BoundingBox CRS="EPSG:4326" minx="17.06" miny="-179.998" maxx="71.954"
+                    maxy="-62.6641"/>
+                <BoundingBox CRS="EPSG:2163" minx="-7.36962e+06" miny="-3.07607e+06"
+                    maxx="3.95469e+06" maxy="4.36977e+06"/>
+                <BoundingBox CRS="EPSG:102100" minx="-2.00373e+07" miny="1.92781e+06"
+                    maxx="-6.97574e+06" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:4269" minx="17.06" miny="-179.998" maxx="71.954"
+                    maxy="-62.6641"/>
+                <BoundingBox CRS="EPSG:4267" minx="17.06" miny="-179.998" maxx="71.954"
+                    maxy="-62.6641"/>
+                <BoundingBox CRS="EPSG:54004" minx="-2.00373e+07" miny="1.91528e+06"
+                    maxx="-6.97574e+06" maxy="1.1696e+07"/>
+                <BoundingBox CRS="EPSG:54008" minx="-1.91612e+07" miny="1.88695e+06"
+                    maxx="-2.16752e+06" maxy="7.987e+06"/>
+                <BoundingBox CRS="EPSG:3785" minx="-2.00373e+07" miny="1.92781e+06"
+                    maxx="-6.97574e+06" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:3857" minx="-2.00373e+07" miny="1.92781e+06"
+                    maxx="-6.97574e+06" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:102113" minx="-2.00373e+07" miny="1.92781e+06"
+                    maxx="-6.97574e+06" maxy="1.17366e+07"/>
+                <BoundingBox CRS="EPSG:900913" minx="-2.00373e+07" miny="1.92781e+06"
+                    maxx="-6.97574e+06" maxy="1.17366e+07"/>
+                <Style>
+                    <Name>treei0100a</Name>
+                    <Title>treei0100a</Title>
+                    <LegendURL width="109" height="430">
+                        <Format>image/gif</Format>
+                        <OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink"
+                            xlink:type="simple"
+                            xlink:href="http://nationalatlas.gov/images/treei0100a.gif"/>
+                    </LegendURL>
+                </Style>
+            </Layer>
+        </Layer>
+    </Capability>
+</WMS_Capabilities>
diff --git a/tests/resources/wms_nccs_nasa_getcap_130.xml b/tests/resources/wms_nccs_nasa_getcap_130.xml
new file mode 100644
index 0000000..0d0bfea
--- /dev/null
+++ b/tests/resources/wms_nccs_nasa_getcap_130.xml
@@ -0,0 +1,1714 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<WMS_Capabilities
+        version="1.3.0"
+        updateSequence="2015-08-12T21:21:32.525Z"
+        xmlns="http://www.opengis.net/wms"
+        xmlns:xlink="http://www.w3.org/1999/xlink"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:schemaLocation="http://www.opengis.net/wms http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd">
+        
+    <Service>
+        <Name>WMS</Name>
+        <Title>Data Catalog</Title>
+        <Abstract>Scientific Data</Abstract>
+        <KeywordList>
+            
+            
+            <Keyword>meteorology</Keyword>
+            
+            <Keyword>atmosphere</Keyword>
+            
+            <Keyword>climate</Keyword>
+            
+            <Keyword>ocean</Keyword>
+            
+            <Keyword>earth science</Keyword>
+            
+        </KeywordList>
+        <OnlineResource xlink:type="simple" xlink:href="http://www.nccs.nasa.gov"/>
+        <ContactInformation>
+            <ContactPersonPrimary>
+                <ContactPerson>Support</ContactPerson>
+                <ContactOrganization>NCCS Data Services Group</ContactOrganization>
+            </ContactPersonPrimary>
+            <ContactVoiceTelephone></ContactVoiceTelephone>
+            <ContactElectronicMailAddress>support at nccs.nasa.gov</ContactElectronicMailAddress>
+        </ContactInformation>
+        <Fees>none</Fees>
+        <AccessConstraints>none</AccessConstraints>
+        <LayerLimit>1</LayerLimit>
+        <MaxWidth>2048</MaxWidth>
+        <MaxHeight>2048</MaxHeight>
+    </Service>
+    <Capability>
+        <Request>
+            <GetCapabilities>
+                <Format>text/xml</Format>
+                <DCPType><HTTP><Get><OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll"/></Get></HTTP></DCPType>
+            </GetCapabilities>
+            <GetMap>
+                
+                <Format>image/png</Format>
+                
+                <Format>image/png;mode=32bit</Format>
+                
+                <Format>image/gif</Format>
+                
+                <Format>image/jpeg</Format>
+                
+                <Format>application/vnd.google-earth.kmz</Format>
+                
+                <DCPType><HTTP><Get><OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll"/></Get></HTTP></DCPType>
+            </GetMap>
+            <GetFeatureInfo>
+                
+                <Format>image/png</Format>
+                
+                <Format>text/xml</Format>
+                
+                <DCPType><HTTP><Get><OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll"/></Get></HTTP></DCPType>
+            </GetFeatureInfo>
+        </Request>
+        <Exception>
+            <Format>XML</Format>
+        </Exception>
+        <Layer>
+            <Title>Data Catalog</Title>
+            
+            <CRS>EPSG:4326</CRS>
+            
+            <CRS>CRS:84</CRS>
+            
+            <CRS>EPSG:41001</CRS>
+            
+            <CRS>EPSG:27700</CRS>
+            
+            <CRS>EPSG:3408</CRS>
+            
+            <CRS>EPSG:3409</CRS>
+            
+            <CRS>EPSG:3857</CRS>
+            
+            <CRS>EPSG:32661</CRS>
+            
+            <CRS>EPSG:32761</CRS>
+            
+            
+            
+            <Layer>
+                <Title>Seasonal OCN_ANA_3D_ll</Title>
+                
+                <Layer queryable="1">
+                    <Name>T</Name>
+                    <Title>potential_temperature</Title>
+                    <Abstract>potential_temperature</Abstract>
+                    
+                    <EX_GeographicBoundingBox>
+                        <westBoundLongitude>-180.0</westBoundLongitude>
+                        <eastBoundLongitude>179.0</eastBoundLongitude>
+                        <southBoundLatitude>-90.0</southBoundLatitude>
+                        <northBoundLatitude>90.0</northBoundLatitude>
+                    </EX_GeographicBoundingBox>
+                    <BoundingBox CRS="CRS:84" minx="-180.0" maxx="179.0" miny="-90.0" maxy="90.0"/>
+                    
+                    <Dimension name="elevation" units="layer" default="-1.0">
+                        
+                        -1.0,-2.0,-3.0,-4.0,-5.0,-6.0,-7.0,-8.0,-9.0,-10.0,-11.0,-12.0,-13.0,-14.0,-15.0,-16.0,-17.0,-18.0,-19.0,-20.0,-21.0,-22.0,-23.0,-24.0,-25.0,-26.0,-27.0,-28.0,-29.0,-30.0,-31.0,-32.0,-33.0,-34.0,-35.0,-36.0,-37.0,-38.0,-39.0,-40.0
+                    </Dimension>
+                    
+                    
+                    
+                        <Dimension name="time" units="ISO8601" multipleValues="true" current="true" default="2015-07-01T12:00:00Z">
+                            
+                                
+                                
+                                    
+                                        
+                                        
+                                            
+                                            1993-01-01T12:00:00Z,1993-02-01T12:00:00Z,1993-03-01T12:00:00Z,1993-04-01T12:00:00Z,1993-05-01T12:00:00Z,1993-06-01T12:00:00Z,1993-07-01T12:00:00Z,1993-08-01T12:00:00Z,1993-09-01T12:00:00Z,1993-10-01T12:00:00Z,1993-11-01T12:00:00Z,1993-12-01T12:00:00Z,1994-01-01T12:00:00Z,1994-02-01T12:00:00Z,1994-03-01T12:00:00Z,1994-04-01T12:00:00Z,1994-05-01T12:00:00Z,1994-06-01T12:00:00Z,1994-07-01T12:00:00Z,1994-08-01T12:00:00Z,1994-09-01T12:00:00Z,1994-10 [...]
+                                        
+                                    
+                                
+                            
+                        </Dimension>
+                    
+                    
+                    
+                    
+                    
+                    <Style>
+                        <Name>boxfill/alg2</Name>
+                        <Title>boxfill/alg2</Title>
+                        <Abstract>boxfill style, using the alg2 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=T&PALETTE=alg2"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/rainbow</Name>
+                        <Title>boxfill/rainbow</Title>
+                        <Abstract>boxfill style, using the rainbow palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=T&PALETTE=rainbow"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/ncview</Name>
+                        <Title>boxfill/ncview</Title>
+                        <Abstract>boxfill style, using the ncview palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=T&PALETTE=ncview"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/occam</Name>
+                        <Title>boxfill/occam</Title>
+                        <Abstract>boxfill style, using the occam palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=T&PALETTE=occam"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/greyscale</Name>
+                        <Title>boxfill/greyscale</Title>
+                        <Abstract>boxfill style, using the greyscale palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=T&PALETTE=greyscale"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/redblue</Name>
+                        <Title>boxfill/redblue</Title>
+                        <Abstract>boxfill style, using the redblue palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=T&PALETTE=redblue"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/alg</Name>
+                        <Title>boxfill/alg</Title>
+                        <Abstract>boxfill style, using the alg palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=T&PALETTE=alg"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/occam_pastel-30</Name>
+                        <Title>boxfill/occam_pastel-30</Title>
+                        <Abstract>boxfill style, using the occam_pastel-30 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=T&PALETTE=occam_pastel-30"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/ferret</Name>
+                        <Title>boxfill/ferret</Title>
+                        <Abstract>boxfill style, using the ferret palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=T&PALETTE=ferret"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/sst_36</Name>
+                        <Title>boxfill/sst_36</Title>
+                        <Abstract>boxfill style, using the sst_36 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=T&PALETTE=sst_36"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    
+                </Layer>
+                
+                <Layer queryable="1">
+                    <Name>S</Name>
+                    <Title>salinity</Title>
+                    <Abstract>salinity</Abstract>
+                    
+                    <EX_GeographicBoundingBox>
+                        <westBoundLongitude>-180.0</westBoundLongitude>
+                        <eastBoundLongitude>179.0</eastBoundLongitude>
+                        <southBoundLatitude>-90.0</southBoundLatitude>
+                        <northBoundLatitude>90.0</northBoundLatitude>
+                    </EX_GeographicBoundingBox>
+                    <BoundingBox CRS="CRS:84" minx="-180.0" maxx="179.0" miny="-90.0" maxy="90.0"/>
+                    
+                    <Dimension name="elevation" units="layer" default="-1.0">
+                        
+                        -1.0,-2.0,-3.0,-4.0,-5.0,-6.0,-7.0,-8.0,-9.0,-10.0,-11.0,-12.0,-13.0,-14.0,-15.0,-16.0,-17.0,-18.0,-19.0,-20.0,-21.0,-22.0,-23.0,-24.0,-25.0,-26.0,-27.0,-28.0,-29.0,-30.0,-31.0,-32.0,-33.0,-34.0,-35.0,-36.0,-37.0,-38.0,-39.0,-40.0
+                    </Dimension>
+                    
+                    
+                    
+                        <Dimension name="time" units="ISO8601" multipleValues="true" current="true" default="2015-07-01T12:00:00Z">
+                            
+                                
+                                
+                                    
+                                        
+                                        
+                                            
+                                            1993-01-01T12:00:00Z,1993-02-01T12:00:00Z,1993-03-01T12:00:00Z,1993-04-01T12:00:00Z,1993-05-01T12:00:00Z,1993-06-01T12:00:00Z,1993-07-01T12:00:00Z,1993-08-01T12:00:00Z,1993-09-01T12:00:00Z,1993-10-01T12:00:00Z,1993-11-01T12:00:00Z,1993-12-01T12:00:00Z,1994-01-01T12:00:00Z,1994-02-01T12:00:00Z,1994-03-01T12:00:00Z,1994-04-01T12:00:00Z,1994-05-01T12:00:00Z,1994-06-01T12:00:00Z,1994-07-01T12:00:00Z,1994-08-01T12:00:00Z,1994-09-01T12:00:00Z,1994-10 [...]
+                                        
+                                    
+                                
+                            
+                        </Dimension>
+                    
+                    
+                    
+                    
+                    
+                    <Style>
+                        <Name>boxfill/alg2</Name>
+                        <Title>boxfill/alg2</Title>
+                        <Abstract>boxfill style, using the alg2 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=S&PALETTE=alg2"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/rainbow</Name>
+                        <Title>boxfill/rainbow</Title>
+                        <Abstract>boxfill style, using the rainbow palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=S&PALETTE=rainbow"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/ncview</Name>
+                        <Title>boxfill/ncview</Title>
+                        <Abstract>boxfill style, using the ncview palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=S&PALETTE=ncview"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/occam</Name>
+                        <Title>boxfill/occam</Title>
+                        <Abstract>boxfill style, using the occam palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=S&PALETTE=occam"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/greyscale</Name>
+                        <Title>boxfill/greyscale</Title>
+                        <Abstract>boxfill style, using the greyscale palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=S&PALETTE=greyscale"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/redblue</Name>
+                        <Title>boxfill/redblue</Title>
+                        <Abstract>boxfill style, using the redblue palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=S&PALETTE=redblue"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/alg</Name>
+                        <Title>boxfill/alg</Title>
+                        <Abstract>boxfill style, using the alg palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=S&PALETTE=alg"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/occam_pastel-30</Name>
+                        <Title>boxfill/occam_pastel-30</Title>
+                        <Abstract>boxfill style, using the occam_pastel-30 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=S&PALETTE=occam_pastel-30"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/ferret</Name>
+                        <Title>boxfill/ferret</Title>
+                        <Abstract>boxfill style, using the ferret palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=S&PALETTE=ferret"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/sst_36</Name>
+                        <Title>boxfill/sst_36</Title>
+                        <Abstract>boxfill style, using the sst_36 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=S&PALETTE=sst_36"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    
+                </Layer>
+                
+                <Layer queryable="1">
+                    <Name>U</Name>
+                    <Title>eastward_current</Title>
+                    <Abstract>eastward_current</Abstract>
+                    
+                    <EX_GeographicBoundingBox>
+                        <westBoundLongitude>-180.0</westBoundLongitude>
+                        <eastBoundLongitude>179.0</eastBoundLongitude>
+                        <southBoundLatitude>-90.0</southBoundLatitude>
+                        <northBoundLatitude>90.0</northBoundLatitude>
+                    </EX_GeographicBoundingBox>
+                    <BoundingBox CRS="CRS:84" minx="-180.0" maxx="179.0" miny="-90.0" maxy="90.0"/>
+                    
+                    <Dimension name="elevation" units="layer" default="-1.0">
+                        
+                        -1.0,-2.0,-3.0,-4.0,-5.0,-6.0,-7.0,-8.0,-9.0,-10.0,-11.0,-12.0,-13.0,-14.0,-15.0,-16.0,-17.0,-18.0,-19.0,-20.0,-21.0,-22.0,-23.0,-24.0,-25.0,-26.0,-27.0,-28.0,-29.0,-30.0,-31.0,-32.0,-33.0,-34.0,-35.0,-36.0,-37.0,-38.0,-39.0,-40.0
+                    </Dimension>
+                    
+                    
+                    
+                        <Dimension name="time" units="ISO8601" multipleValues="true" current="true" default="2015-07-01T12:00:00Z">
+                            
+                                
+                                
+                                    
+                                        
+                                        
+                                            
+                                            1993-01-01T12:00:00Z,1993-02-01T12:00:00Z,1993-03-01T12:00:00Z,1993-04-01T12:00:00Z,1993-05-01T12:00:00Z,1993-06-01T12:00:00Z,1993-07-01T12:00:00Z,1993-08-01T12:00:00Z,1993-09-01T12:00:00Z,1993-10-01T12:00:00Z,1993-11-01T12:00:00Z,1993-12-01T12:00:00Z,1994-01-01T12:00:00Z,1994-02-01T12:00:00Z,1994-03-01T12:00:00Z,1994-04-01T12:00:00Z,1994-05-01T12:00:00Z,1994-06-01T12:00:00Z,1994-07-01T12:00:00Z,1994-08-01T12:00:00Z,1994-09-01T12:00:00Z,1994-10 [...]
+                                        
+                                    
+                                
+                            
+                        </Dimension>
+                    
+                    
+                    
+                    
+                    
+                    <Style>
+                        <Name>boxfill/alg2</Name>
+                        <Title>boxfill/alg2</Title>
+                        <Abstract>boxfill style, using the alg2 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=U&PALETTE=alg2"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/rainbow</Name>
+                        <Title>boxfill/rainbow</Title>
+                        <Abstract>boxfill style, using the rainbow palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=U&PALETTE=rainbow"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/ncview</Name>
+                        <Title>boxfill/ncview</Title>
+                        <Abstract>boxfill style, using the ncview palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=U&PALETTE=ncview"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/occam</Name>
+                        <Title>boxfill/occam</Title>
+                        <Abstract>boxfill style, using the occam palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=U&PALETTE=occam"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/greyscale</Name>
+                        <Title>boxfill/greyscale</Title>
+                        <Abstract>boxfill style, using the greyscale palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=U&PALETTE=greyscale"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/redblue</Name>
+                        <Title>boxfill/redblue</Title>
+                        <Abstract>boxfill style, using the redblue palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=U&PALETTE=redblue"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/alg</Name>
+                        <Title>boxfill/alg</Title>
+                        <Abstract>boxfill style, using the alg palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=U&PALETTE=alg"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/occam_pastel-30</Name>
+                        <Title>boxfill/occam_pastel-30</Title>
+                        <Abstract>boxfill style, using the occam_pastel-30 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=U&PALETTE=occam_pastel-30"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/ferret</Name>
+                        <Title>boxfill/ferret</Title>
+                        <Abstract>boxfill style, using the ferret palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=U&PALETTE=ferret"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/sst_36</Name>
+                        <Title>boxfill/sst_36</Title>
+                        <Abstract>boxfill style, using the sst_36 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=U&PALETTE=sst_36"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    
+                </Layer>
+                
+                <Layer queryable="1">
+                    <Name>V</Name>
+                    <Title>northward_current</Title>
+                    <Abstract>northward_current</Abstract>
+                    
+                    <EX_GeographicBoundingBox>
+                        <westBoundLongitude>-180.0</westBoundLongitude>
+                        <eastBoundLongitude>179.0</eastBoundLongitude>
+                        <southBoundLatitude>-90.0</southBoundLatitude>
+                        <northBoundLatitude>90.0</northBoundLatitude>
+                    </EX_GeographicBoundingBox>
+                    <BoundingBox CRS="CRS:84" minx="-180.0" maxx="179.0" miny="-90.0" maxy="90.0"/>
+                    
+                    <Dimension name="elevation" units="layer" default="-1.0">
+                        
+                        -1.0,-2.0,-3.0,-4.0,-5.0,-6.0,-7.0,-8.0,-9.0,-10.0,-11.0,-12.0,-13.0,-14.0,-15.0,-16.0,-17.0,-18.0,-19.0,-20.0,-21.0,-22.0,-23.0,-24.0,-25.0,-26.0,-27.0,-28.0,-29.0,-30.0,-31.0,-32.0,-33.0,-34.0,-35.0,-36.0,-37.0,-38.0,-39.0,-40.0
+                    </Dimension>
+                    
+                    
+                    
+                        <Dimension name="time" units="ISO8601" multipleValues="true" current="true" default="2015-07-01T12:00:00Z">
+                            
+                                
+                                
+                                    
+                                        
+                                        
+                                            
+                                            1993-01-01T12:00:00Z,1993-02-01T12:00:00Z,1993-03-01T12:00:00Z,1993-04-01T12:00:00Z,1993-05-01T12:00:00Z,1993-06-01T12:00:00Z,1993-07-01T12:00:00Z,1993-08-01T12:00:00Z,1993-09-01T12:00:00Z,1993-10-01T12:00:00Z,1993-11-01T12:00:00Z,1993-12-01T12:00:00Z,1994-01-01T12:00:00Z,1994-02-01T12:00:00Z,1994-03-01T12:00:00Z,1994-04-01T12:00:00Z,1994-05-01T12:00:00Z,1994-06-01T12:00:00Z,1994-07-01T12:00:00Z,1994-08-01T12:00:00Z,1994-09-01T12:00:00Z,1994-10 [...]
+                                        
+                                    
+                                
+                            
+                        </Dimension>
+                    
+                    
+                    
+                    
+                    
+                    <Style>
+                        <Name>boxfill/alg2</Name>
+                        <Title>boxfill/alg2</Title>
+                        <Abstract>boxfill style, using the alg2 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=V&PALETTE=alg2"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/rainbow</Name>
+                        <Title>boxfill/rainbow</Title>
+                        <Abstract>boxfill style, using the rainbow palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=V&PALETTE=rainbow"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/ncview</Name>
+                        <Title>boxfill/ncview</Title>
+                        <Abstract>boxfill style, using the ncview palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=V&PALETTE=ncview"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/occam</Name>
+                        <Title>boxfill/occam</Title>
+                        <Abstract>boxfill style, using the occam palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=V&PALETTE=occam"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/greyscale</Name>
+                        <Title>boxfill/greyscale</Title>
+                        <Abstract>boxfill style, using the greyscale palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=V&PALETTE=greyscale"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/redblue</Name>
+                        <Title>boxfill/redblue</Title>
+                        <Abstract>boxfill style, using the redblue palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=V&PALETTE=redblue"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/alg</Name>
+                        <Title>boxfill/alg</Title>
+                        <Abstract>boxfill style, using the alg palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=V&PALETTE=alg"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/occam_pastel-30</Name>
+                        <Title>boxfill/occam_pastel-30</Title>
+                        <Abstract>boxfill style, using the occam_pastel-30 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=V&PALETTE=occam_pastel-30"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/ferret</Name>
+                        <Title>boxfill/ferret</Title>
+                        <Abstract>boxfill style, using the ferret palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=V&PALETTE=ferret"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/sst_36</Name>
+                        <Title>boxfill/sst_36</Title>
+                        <Abstract>boxfill style, using the sst_36 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=V&PALETTE=sst_36"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    
+                </Layer>
+                
+                <Layer queryable="1">
+                    <Name>RHO</Name>
+                    <Title>density</Title>
+                    <Abstract>density</Abstract>
+                    
+                    <EX_GeographicBoundingBox>
+                        <westBoundLongitude>-180.0</westBoundLongitude>
+                        <eastBoundLongitude>179.0</eastBoundLongitude>
+                        <southBoundLatitude>-90.0</southBoundLatitude>
+                        <northBoundLatitude>90.0</northBoundLatitude>
+                    </EX_GeographicBoundingBox>
+                    <BoundingBox CRS="CRS:84" minx="-180.0" maxx="179.0" miny="-90.0" maxy="90.0"/>
+                    
+                    <Dimension name="elevation" units="layer" default="-1.0">
+                        
+                        -1.0,-2.0,-3.0,-4.0,-5.0,-6.0,-7.0,-8.0,-9.0,-10.0,-11.0,-12.0,-13.0,-14.0,-15.0,-16.0,-17.0,-18.0,-19.0,-20.0,-21.0,-22.0,-23.0,-24.0,-25.0,-26.0,-27.0,-28.0,-29.0,-30.0,-31.0,-32.0,-33.0,-34.0,-35.0,-36.0,-37.0,-38.0,-39.0,-40.0
+                    </Dimension>
+                    
+                    
+                    
+                        <Dimension name="time" units="ISO8601" multipleValues="true" current="true" default="2015-07-01T12:00:00Z">
+                            
+                                
+                                
+                                    
+                                        
+                                        
+                                            
+                                            1993-01-01T12:00:00Z,1993-02-01T12:00:00Z,1993-03-01T12:00:00Z,1993-04-01T12:00:00Z,1993-05-01T12:00:00Z,1993-06-01T12:00:00Z,1993-07-01T12:00:00Z,1993-08-01T12:00:00Z,1993-09-01T12:00:00Z,1993-10-01T12:00:00Z,1993-11-01T12:00:00Z,1993-12-01T12:00:00Z,1994-01-01T12:00:00Z,1994-02-01T12:00:00Z,1994-03-01T12:00:00Z,1994-04-01T12:00:00Z,1994-05-01T12:00:00Z,1994-06-01T12:00:00Z,1994-07-01T12:00:00Z,1994-08-01T12:00:00Z,1994-09-01T12:00:00Z,1994-10 [...]
+                                        
+                                    
+                                
+                            
+                        </Dimension>
+                    
+                    
+                    
+                    
+                    
+                    <Style>
+                        <Name>boxfill/alg2</Name>
+                        <Title>boxfill/alg2</Title>
+                        <Abstract>boxfill style, using the alg2 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=RHO&PALETTE=alg2"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/rainbow</Name>
+                        <Title>boxfill/rainbow</Title>
+                        <Abstract>boxfill style, using the rainbow palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=RHO&PALETTE=rainbow"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/ncview</Name>
+                        <Title>boxfill/ncview</Title>
+                        <Abstract>boxfill style, using the ncview palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=RHO&PALETTE=ncview"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/occam</Name>
+                        <Title>boxfill/occam</Title>
+                        <Abstract>boxfill style, using the occam palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=RHO&PALETTE=occam"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/greyscale</Name>
+                        <Title>boxfill/greyscale</Title>
+                        <Abstract>boxfill style, using the greyscale palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=RHO&PALETTE=greyscale"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/redblue</Name>
+                        <Title>boxfill/redblue</Title>
+                        <Abstract>boxfill style, using the redblue palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=RHO&PALETTE=redblue"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/alg</Name>
+                        <Title>boxfill/alg</Title>
+                        <Abstract>boxfill style, using the alg palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=RHO&PALETTE=alg"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/occam_pastel-30</Name>
+                        <Title>boxfill/occam_pastel-30</Title>
+                        <Abstract>boxfill style, using the occam_pastel-30 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=RHO&PALETTE=occam_pastel-30"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/ferret</Name>
+                        <Title>boxfill/ferret</Title>
+                        <Abstract>boxfill style, using the ferret palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=RHO&PALETTE=ferret"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/sst_36</Name>
+                        <Title>boxfill/sst_36</Title>
+                        <Abstract>boxfill style, using the sst_36 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=RHO&PALETTE=sst_36"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    
+                </Layer>
+                
+                <Layer queryable="1">
+                    <Name>WMO</Name>
+                    <Title>upward_mass_transport</Title>
+                    <Abstract>upward_mass_transport</Abstract>
+                    
+                    <EX_GeographicBoundingBox>
+                        <westBoundLongitude>-180.0</westBoundLongitude>
+                        <eastBoundLongitude>179.0</eastBoundLongitude>
+                        <southBoundLatitude>-90.0</southBoundLatitude>
+                        <northBoundLatitude>90.0</northBoundLatitude>
+                    </EX_GeographicBoundingBox>
+                    <BoundingBox CRS="CRS:84" minx="-180.0" maxx="179.0" miny="-90.0" maxy="90.0"/>
+                    
+                    <Dimension name="elevation" units="layer" default="-1.0">
+                        
+                        -1.0,-2.0,-3.0,-4.0,-5.0,-6.0,-7.0,-8.0,-9.0,-10.0,-11.0,-12.0,-13.0,-14.0,-15.0,-16.0,-17.0,-18.0,-19.0,-20.0,-21.0,-22.0,-23.0,-24.0,-25.0,-26.0,-27.0,-28.0,-29.0,-30.0,-31.0,-32.0,-33.0,-34.0,-35.0,-36.0,-37.0,-38.0,-39.0,-40.0
+                    </Dimension>
+                    
+                    
+                    
+                        <Dimension name="time" units="ISO8601" multipleValues="true" current="true" default="2015-07-01T12:00:00Z">
+                            
+                                
+                                
+                                    
+                                        
+                                        
+                                            
+                                            1993-01-01T12:00:00Z,1993-02-01T12:00:00Z,1993-03-01T12:00:00Z,1993-04-01T12:00:00Z,1993-05-01T12:00:00Z,1993-06-01T12:00:00Z,1993-07-01T12:00:00Z,1993-08-01T12:00:00Z,1993-09-01T12:00:00Z,1993-10-01T12:00:00Z,1993-11-01T12:00:00Z,1993-12-01T12:00:00Z,1994-01-01T12:00:00Z,1994-02-01T12:00:00Z,1994-03-01T12:00:00Z,1994-04-01T12:00:00Z,1994-05-01T12:00:00Z,1994-06-01T12:00:00Z,1994-07-01T12:00:00Z,1994-08-01T12:00:00Z,1994-09-01T12:00:00Z,1994-10 [...]
+                                        
+                                    
+                                
+                            
+                        </Dimension>
+                    
+                    
+                    
+                    
+                    
+                    <Style>
+                        <Name>boxfill/alg2</Name>
+                        <Title>boxfill/alg2</Title>
+                        <Abstract>boxfill style, using the alg2 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=WMO&PALETTE=alg2"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/rainbow</Name>
+                        <Title>boxfill/rainbow</Title>
+                        <Abstract>boxfill style, using the rainbow palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=WMO&PALETTE=rainbow"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/ncview</Name>
+                        <Title>boxfill/ncview</Title>
+                        <Abstract>boxfill style, using the ncview palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=WMO&PALETTE=ncview"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/occam</Name>
+                        <Title>boxfill/occam</Title>
+                        <Abstract>boxfill style, using the occam palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=WMO&PALETTE=occam"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/greyscale</Name>
+                        <Title>boxfill/greyscale</Title>
+                        <Abstract>boxfill style, using the greyscale palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=WMO&PALETTE=greyscale"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/redblue</Name>
+                        <Title>boxfill/redblue</Title>
+                        <Abstract>boxfill style, using the redblue palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=WMO&PALETTE=redblue"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/alg</Name>
+                        <Title>boxfill/alg</Title>
+                        <Abstract>boxfill style, using the alg palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=WMO&PALETTE=alg"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/occam_pastel-30</Name>
+                        <Title>boxfill/occam_pastel-30</Title>
+                        <Abstract>boxfill style, using the occam_pastel-30 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=WMO&PALETTE=occam_pastel-30"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/ferret</Name>
+                        <Title>boxfill/ferret</Title>
+                        <Abstract>boxfill style, using the ferret palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=WMO&PALETTE=ferret"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/sst_36</Name>
+                        <Title>boxfill/sst_36</Title>
+                        <Abstract>boxfill style, using the sst_36 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=WMO&PALETTE=sst_36"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    
+                </Layer>
+                
+                <Layer queryable="1">
+                    <Name>current</Name>
+                    <Title>current</Title>
+                    <Abstract>Automatically-generated vector field, composed of the fields eastward_current and northward_current</Abstract>
+                    
+                    <EX_GeographicBoundingBox>
+                        <westBoundLongitude>-180.0</westBoundLongitude>
+                        <eastBoundLongitude>179.0</eastBoundLongitude>
+                        <southBoundLatitude>-90.0</southBoundLatitude>
+                        <northBoundLatitude>90.0</northBoundLatitude>
+                    </EX_GeographicBoundingBox>
+                    <BoundingBox CRS="CRS:84" minx="-180.0" maxx="179.0" miny="-90.0" maxy="90.0"/>
+                    
+                    <Dimension name="elevation" units="layer" default="-1.0">
+                        
+                        -1.0,-2.0,-3.0,-4.0,-5.0,-6.0,-7.0,-8.0,-9.0,-10.0,-11.0,-12.0,-13.0,-14.0,-15.0,-16.0,-17.0,-18.0,-19.0,-20.0,-21.0,-22.0,-23.0,-24.0,-25.0,-26.0,-27.0,-28.0,-29.0,-30.0,-31.0,-32.0,-33.0,-34.0,-35.0,-36.0,-37.0,-38.0,-39.0,-40.0
+                    </Dimension>
+                    
+                    
+                    
+                        <Dimension name="time" units="ISO8601" multipleValues="true" current="true" default="2015-07-01T12:00:00Z">
+                            
+                                
+                                
+                                    
+                                        
+                                        
+                                            
+                                            1993-01-01T12:00:00Z,1993-02-01T12:00:00Z,1993-03-01T12:00:00Z,1993-04-01T12:00:00Z,1993-05-01T12:00:00Z,1993-06-01T12:00:00Z,1993-07-01T12:00:00Z,1993-08-01T12:00:00Z,1993-09-01T12:00:00Z,1993-10-01T12:00:00Z,1993-11-01T12:00:00Z,1993-12-01T12:00:00Z,1994-01-01T12:00:00Z,1994-02-01T12:00:00Z,1994-03-01T12:00:00Z,1994-04-01T12:00:00Z,1994-05-01T12:00:00Z,1994-06-01T12:00:00Z,1994-07-01T12:00:00Z,1994-08-01T12:00:00Z,1994-09-01T12:00:00Z,1994-10 [...]
+                                        
+                                    
+                                
+                            
+                        </Dimension>
+                    
+                    
+                    
+                        
+                    
+                    
+                    
+                    <Style>
+                        <Name>barb/alg2</Name>
+                        <Title>barb/alg2</Title>
+                        <Abstract>barb style, using the alg2 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=alg2"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>barb/rainbow</Name>
+                        <Title>barb/rainbow</Title>
+                        <Abstract>barb style, using the rainbow palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=rainbow"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>barb/ncview</Name>
+                        <Title>barb/ncview</Title>
+                        <Abstract>barb style, using the ncview palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=ncview"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>barb/occam</Name>
+                        <Title>barb/occam</Title>
+                        <Abstract>barb style, using the occam palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=occam"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>barb/greyscale</Name>
+                        <Title>barb/greyscale</Title>
+                        <Abstract>barb style, using the greyscale palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=greyscale"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>barb/redblue</Name>
+                        <Title>barb/redblue</Title>
+                        <Abstract>barb style, using the redblue palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=redblue"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>barb/alg</Name>
+                        <Title>barb/alg</Title>
+                        <Abstract>barb style, using the alg palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=alg"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>barb/occam_pastel-30</Name>
+                        <Title>barb/occam_pastel-30</Title>
+                        <Abstract>barb style, using the occam_pastel-30 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=occam_pastel-30"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>barb/ferret</Name>
+                        <Title>barb/ferret</Title>
+                        <Abstract>barb style, using the ferret palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=ferret"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>barb/sst_36</Name>
+                        <Title>barb/sst_36</Title>
+                        <Abstract>barb style, using the sst_36 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=sst_36"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    
+                    
+                    <Style>
+                        <Name>fancyvec/alg2</Name>
+                        <Title>fancyvec/alg2</Title>
+                        <Abstract>fancyvec style, using the alg2 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=alg2"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>fancyvec/rainbow</Name>
+                        <Title>fancyvec/rainbow</Title>
+                        <Abstract>fancyvec style, using the rainbow palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=rainbow"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>fancyvec/ncview</Name>
+                        <Title>fancyvec/ncview</Title>
+                        <Abstract>fancyvec style, using the ncview palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=ncview"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>fancyvec/occam</Name>
+                        <Title>fancyvec/occam</Title>
+                        <Abstract>fancyvec style, using the occam palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=occam"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>fancyvec/greyscale</Name>
+                        <Title>fancyvec/greyscale</Title>
+                        <Abstract>fancyvec style, using the greyscale palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=greyscale"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>fancyvec/redblue</Name>
+                        <Title>fancyvec/redblue</Title>
+                        <Abstract>fancyvec style, using the redblue palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=redblue"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>fancyvec/alg</Name>
+                        <Title>fancyvec/alg</Title>
+                        <Abstract>fancyvec style, using the alg palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=alg"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>fancyvec/occam_pastel-30</Name>
+                        <Title>fancyvec/occam_pastel-30</Title>
+                        <Abstract>fancyvec style, using the occam_pastel-30 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=occam_pastel-30"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>fancyvec/ferret</Name>
+                        <Title>fancyvec/ferret</Title>
+                        <Abstract>fancyvec style, using the ferret palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=ferret"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>fancyvec/sst_36</Name>
+                        <Title>fancyvec/sst_36</Title>
+                        <Abstract>fancyvec style, using the sst_36 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=sst_36"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    
+                    
+                    <Style>
+                        <Name>trivec/alg2</Name>
+                        <Title>trivec/alg2</Title>
+                        <Abstract>trivec style, using the alg2 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=alg2"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>trivec/rainbow</Name>
+                        <Title>trivec/rainbow</Title>
+                        <Abstract>trivec style, using the rainbow palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=rainbow"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>trivec/ncview</Name>
+                        <Title>trivec/ncview</Title>
+                        <Abstract>trivec style, using the ncview palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=ncview"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>trivec/occam</Name>
+                        <Title>trivec/occam</Title>
+                        <Abstract>trivec style, using the occam palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=occam"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>trivec/greyscale</Name>
+                        <Title>trivec/greyscale</Title>
+                        <Abstract>trivec style, using the greyscale palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=greyscale"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>trivec/redblue</Name>
+                        <Title>trivec/redblue</Title>
+                        <Abstract>trivec style, using the redblue palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=redblue"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>trivec/alg</Name>
+                        <Title>trivec/alg</Title>
+                        <Abstract>trivec style, using the alg palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=alg"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>trivec/occam_pastel-30</Name>
+                        <Title>trivec/occam_pastel-30</Title>
+                        <Abstract>trivec style, using the occam_pastel-30 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=occam_pastel-30"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>trivec/ferret</Name>
+                        <Title>trivec/ferret</Title>
+                        <Abstract>trivec style, using the ferret palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=ferret"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>trivec/sst_36</Name>
+                        <Title>trivec/sst_36</Title>
+                        <Abstract>trivec style, using the sst_36 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=sst_36"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    
+                    
+                    <Style>
+                        <Name>stumpvec/alg2</Name>
+                        <Title>stumpvec/alg2</Title>
+                        <Abstract>stumpvec style, using the alg2 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=alg2"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>stumpvec/rainbow</Name>
+                        <Title>stumpvec/rainbow</Title>
+                        <Abstract>stumpvec style, using the rainbow palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=rainbow"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>stumpvec/ncview</Name>
+                        <Title>stumpvec/ncview</Title>
+                        <Abstract>stumpvec style, using the ncview palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=ncview"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>stumpvec/occam</Name>
+                        <Title>stumpvec/occam</Title>
+                        <Abstract>stumpvec style, using the occam palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=occam"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>stumpvec/greyscale</Name>
+                        <Title>stumpvec/greyscale</Title>
+                        <Abstract>stumpvec style, using the greyscale palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=greyscale"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>stumpvec/redblue</Name>
+                        <Title>stumpvec/redblue</Title>
+                        <Abstract>stumpvec style, using the redblue palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=redblue"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>stumpvec/alg</Name>
+                        <Title>stumpvec/alg</Title>
+                        <Abstract>stumpvec style, using the alg palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=alg"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>stumpvec/occam_pastel-30</Name>
+                        <Title>stumpvec/occam_pastel-30</Title>
+                        <Abstract>stumpvec style, using the occam_pastel-30 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=occam_pastel-30"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>stumpvec/ferret</Name>
+                        <Title>stumpvec/ferret</Title>
+                        <Abstract>stumpvec style, using the ferret palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=ferret"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>stumpvec/sst_36</Name>
+                        <Title>stumpvec/sst_36</Title>
+                        <Abstract>stumpvec style, using the sst_36 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=sst_36"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    
+                    
+                    <Style>
+                        <Name>linevec/alg2</Name>
+                        <Title>linevec/alg2</Title>
+                        <Abstract>linevec style, using the alg2 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=alg2"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>linevec/rainbow</Name>
+                        <Title>linevec/rainbow</Title>
+                        <Abstract>linevec style, using the rainbow palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=rainbow"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>linevec/ncview</Name>
+                        <Title>linevec/ncview</Title>
+                        <Abstract>linevec style, using the ncview palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=ncview"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>linevec/occam</Name>
+                        <Title>linevec/occam</Title>
+                        <Abstract>linevec style, using the occam palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=occam"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>linevec/greyscale</Name>
+                        <Title>linevec/greyscale</Title>
+                        <Abstract>linevec style, using the greyscale palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=greyscale"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>linevec/redblue</Name>
+                        <Title>linevec/redblue</Title>
+                        <Abstract>linevec style, using the redblue palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=redblue"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>linevec/alg</Name>
+                        <Title>linevec/alg</Title>
+                        <Abstract>linevec style, using the alg palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=alg"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>linevec/occam_pastel-30</Name>
+                        <Title>linevec/occam_pastel-30</Title>
+                        <Abstract>linevec style, using the occam_pastel-30 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=occam_pastel-30"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>linevec/ferret</Name>
+                        <Title>linevec/ferret</Title>
+                        <Abstract>linevec style, using the ferret palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=ferret"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>linevec/sst_36</Name>
+                        <Title>linevec/sst_36</Title>
+                        <Abstract>linevec style, using the sst_36 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=sst_36"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    
+                    
+                    <Style>
+                        <Name>vector/alg2</Name>
+                        <Title>vector/alg2</Title>
+                        <Abstract>vector style, using the alg2 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=alg2"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>vector/rainbow</Name>
+                        <Title>vector/rainbow</Title>
+                        <Abstract>vector style, using the rainbow palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=rainbow"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>vector/ncview</Name>
+                        <Title>vector/ncview</Title>
+                        <Abstract>vector style, using the ncview palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=ncview"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>vector/occam</Name>
+                        <Title>vector/occam</Title>
+                        <Abstract>vector style, using the occam palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=occam"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>vector/greyscale</Name>
+                        <Title>vector/greyscale</Title>
+                        <Abstract>vector style, using the greyscale palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=greyscale"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>vector/redblue</Name>
+                        <Title>vector/redblue</Title>
+                        <Abstract>vector style, using the redblue palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=redblue"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>vector/alg</Name>
+                        <Title>vector/alg</Title>
+                        <Abstract>vector style, using the alg palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=alg"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>vector/occam_pastel-30</Name>
+                        <Title>vector/occam_pastel-30</Title>
+                        <Abstract>vector style, using the occam_pastel-30 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=occam_pastel-30"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>vector/ferret</Name>
+                        <Title>vector/ferret</Title>
+                        <Abstract>vector style, using the ferret palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=ferret"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>vector/sst_36</Name>
+                        <Title>vector/sst_36</Title>
+                        <Abstract>vector style, using the sst_36 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=sst_36"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    
+                    
+                    <Style>
+                        <Name>boxfill/alg2</Name>
+                        <Title>boxfill/alg2</Title>
+                        <Abstract>boxfill style, using the alg2 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=alg2"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/rainbow</Name>
+                        <Title>boxfill/rainbow</Title>
+                        <Abstract>boxfill style, using the rainbow palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=rainbow"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/ncview</Name>
+                        <Title>boxfill/ncview</Title>
+                        <Abstract>boxfill style, using the ncview palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=ncview"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/occam</Name>
+                        <Title>boxfill/occam</Title>
+                        <Abstract>boxfill style, using the occam palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=occam"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/greyscale</Name>
+                        <Title>boxfill/greyscale</Title>
+                        <Abstract>boxfill style, using the greyscale palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=greyscale"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/redblue</Name>
+                        <Title>boxfill/redblue</Title>
+                        <Abstract>boxfill style, using the redblue palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=redblue"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/alg</Name>
+                        <Title>boxfill/alg</Title>
+                        <Abstract>boxfill style, using the alg palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=alg"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/occam_pastel-30</Name>
+                        <Title>boxfill/occam_pastel-30</Title>
+                        <Abstract>boxfill style, using the occam_pastel-30 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=occam_pastel-30"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/ferret</Name>
+                        <Title>boxfill/ferret</Title>
+                        <Abstract>boxfill style, using the ferret palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=ferret"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    <Style>
+                        <Name>boxfill/sst_36</Name>
+                        <Title>boxfill/sst_36</Title>
+                        <Abstract>boxfill style, using the sst_36 palette</Abstract>
+                        <LegendURL width="110" height="264">
+                            <Format>image/png</Format>
+                            <OnlineResource xlink:type="simple" xlink:href="http://dataserver.nccs.nasa.gov/thredds/wms/seasonal/ocn_ana_3D_ll?REQUEST=GetLegendGraphic&LAYER=current&PALETTE=sst_36"/>
+                        </LegendURL>
+                    </Style>
+                    
+                    
+                </Layer>
+                 
+            </Layer>
+             
+             
+        </Layer>
+    </Capability>
+</WMS_Capabilities>
\ No newline at end of file

-- 
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