[owslib] 01/03: Imported Upstream version 0.10.0
Johan Van de Wauw
johanvdw-guest at moszumanska.debian.org
Wed Nov 18 16:24:12 UTC 2015
This is an automated email from the git hooks/post-receive script.
johanvdw-guest pushed a commit to branch master
in repository owslib.
commit 68e6f4a0412c4bcc83282e69a50d7d16796dc716
Author: Johan Van de Wauw <johan at vandewauw.be>
Date: Wed Nov 18 11:36:51 2015 +0100
Imported Upstream version 0.10.0
---
VERSION.txt | 2 +-
docs/en/index.rst | 8 +
owslib/__init__.py | 2 +-
owslib/gm03.py | 1016 +++++++++++++++++++++++++++++++++++++
owslib/namespaces.py | 1 +
owslib/wps.py | 5 +-
tests/doctests/gm03_parse.txt | 62 +++
tests/resources/gm03_example1.xml | 137 +++++
tests/resources/gm03_example2.xml | 144 ++++++
9 files changed, 1374 insertions(+), 3 deletions(-)
diff --git a/VERSION.txt b/VERSION.txt
index 2003b63..78bc1ab 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1 +1 @@
-0.9.2
+0.10.0
diff --git a/docs/en/index.rst b/docs/en/index.rst
index f5137a3..5f6ddc2 100644
--- a/docs/en/index.rst
+++ b/docs/en/index.rst
@@ -60,6 +60,8 @@ Standards Support
+-------------------+---------------------+
| `Dublin Core`_ | 1.1 |
+-------------------+---------------------+
+| `Swiss GM03`_ | 2.3 |
++-------------------+---------------------+
| `WMTS`_ | 1.0.0 |
+-------------------+---------------------+
| `WaterML`_ | 1.0, 1.1 |
@@ -643,6 +645,11 @@ NASA DIF
FGDC
----
+Swiss GM03
+----------
+
+.. include:: ../../tests/doctests/gm03_parse.txt
+
WMTS
----
@@ -789,3 +796,4 @@ Credits
.. _`ohloh`: http://www.ohloh.net/p/OWSLib
.. _`CIA.vc`: http://cia.vc/stats/project/OWSLib
.. _`WaterML`: http://his.cuahsi.org/wofws.html#waterml
+.. _`Swiss GM03`: http://www.geocat.ch/internet/geocat/en/home/documentation/gm03.html
diff --git a/owslib/__init__.py b/owslib/__init__.py
index c57c469..737c2f4 100644
--- a/owslib/__init__.py
+++ b/owslib/__init__.py
@@ -1,3 +1,3 @@
from __future__ import (absolute_import, division, print_function)
-__version__ = '0.9.2'
+__version__ = '0.10.0'
diff --git a/owslib/gm03.py b/owslib/gm03.py
new file mode 100644
index 0000000..365f95a
--- /dev/null
+++ b/owslib/gm03.py
@@ -0,0 +1,1016 @@
+# -*- coding: ISO-8859-15 -*-
+# =============================================================================
+# Copyright (c) 2015 Tom Kralidis
+#
+# Authors : Tom Kralidis <tomkralidis at gmail.com>
+#
+# Contact email: tomkralidis at gmail.com
+# =============================================================================
+
+"""GM03 Core metadata parser http://www.geocat.ch/internet/geocat/en/home/documentation/gm03.html"""
+
+from __future__ import (absolute_import, division, print_function)
+
+from owslib import util
+from owslib.etree import etree
+from owslib.namespaces import Namespaces
+
+
+# default variables
+def get_namespaces():
+ n = Namespaces()
+ ns = n.get_namespaces(["gm03"])
+ ns[None] = n.get_namespace("gm03")
+ return ns
+
+namespaces = get_namespaces()
+
+
+class _GenericObject(object):
+ """GM03 generic object type"""
+ def __init__(self, md):
+ """constructor"""
+
+ self.tid = None
+
+ if md is not None:
+ self.tid = md.attrib.get('TID')
+
+
+class _GenericObjectProperty(object):
+ """GM03 generic object type"""
+ def __init__(self, md):
+ """constructor"""
+
+ self.ref = None
+ self.bid = None
+ self.order_post = None
+
+ if md is not None:
+ self.ref = md.attrib.get('REF')
+ self.bid = md.attrib.get('BID')
+ self.order_pos = md.attrib.get('ORDER_POS')
+
+
+class PT_Group(object):
+ """PT_Group parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ self.language = util.testXMLValue(md.find(util.nspath_eval('gm03:language', namespaces)))
+ self.country = util.testXMLValue(md.find(util.nspath_eval('gm03:country', namespaces)))
+ self.character_set_code = util.testXMLValue(md.find(util.nspath_eval('gm03:characterSetCode', namespaces)))
+ self.plain_text = util.testXMLValue(md.find(util.nspath_eval('gm03:plainText', namespaces)))
+ self.plain_url = util.testXMLValue(md.find(util.nspath_eval('gm03:plainURL', namespaces)))
+
+
+class PT_FreeText(object):
+ """PT_FreeText parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ pt_groups = []
+ for pt_group in md.findall(util.nspath_eval('gm03:GM03_2_1Core.Core.PT_FreeText/gm03:textGroup/gm03:GM03_2_1Core.Core.PT_Group', namespaces)):
+ pt_groups.append(PT_Group(pt_group))
+
+ self.pt_group = pt_groups
+
+
+class PT_FreeURL(object):
+ """PT_FreeURL parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ pt_groups = []
+ for pt_group in md.findall(util.nspath_eval('gm03:GM03_2_1Core.Core.PT_FreeURL/gm03:URLGroup/gm03:GM03_2_1Core.Core.PT_URLGroup', namespaces)):
+ pt_groups.append(PT_Group(pt_group))
+
+ self.pt_group = pt_groups
+
+
+class GM03(object):
+ """TRANSFER parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ if hasattr(md, 'getroot'): # standalone document
+ self.xml = etree.tostring(md.getroot())
+ else: # part of a larger document
+ self.xml = etree.tostring(md)
+
+ self.header = HeaderSection(md)
+ self.data = DataSection(md)
+
+
+class HeaderSection(object):
+ """HEADERSECTION parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ header = None
+ header = md.find(util.nspath_eval('gm03:HEADERSECTION', namespaces))
+
+ if header is None:
+ return None
+
+ self.version = header.attrib.get('VERSION')
+ self.sender = header.attrib.get('SENDER')
+ self.models = []
+
+ for model in header.findall(util.nspath_eval('gm03:MODELS/gm03:MODEL', namespaces)):
+ name = util.testXMLValue(model.find(util.nspath_eval('gm03:NAME', namespaces)))
+ version = util.testXMLValue(model.find(util.nspath_eval('gm03:VERSION', namespaces)))
+ uri = util.testXMLValue(model.find(util.nspath_eval('gm03:URI', namespaces)))
+ model_dict = {
+ 'name': name,
+ 'version': version,
+ 'uri': uri
+ }
+ self.models.append(model_dict)
+
+ self.comment = util.testXMLValue(header.find(util.nspath_eval('gm03:COMMENT', namespaces)))
+
+
+class DataSection(object):
+ """DATASECTION parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ section = None
+ section = md.find(util.nspath_eval('gm03:DATASECTION', namespaces))
+
+ if section is None:
+ return None
+
+ mdata = section.find(util.nspath_eval('gm03:GM03_2_1Core.Core', namespaces))
+ if mdata is not None:
+ self.core = Core(mdata)
+ else:
+ mdata = section.find(util.nspath_eval('gm03:GM03_2_1Comprehensive.Comprehensive', namespaces))
+ if mdata is not None:
+ self.comprehensive = Comprehensive(mdata)
+
+
+class Core(object):
+ """Core parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ self.bid = md.attrib.get('BID')
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.DQ_DataQuality', namespaces))
+ if val is not None:
+ self.data_quality = DQ_DataQuality(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_Authority', namespaces))
+ if val is not None:
+ self.authority = _GenericObject(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_DigitalTransferOptions', namespaces))
+ if val is not None:
+ self.digital_transfer_options = MD_DigitalTransferOptions(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_Distribution', namespaces))
+ if val is not None:
+ self.distribution = _GenericObject(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_ReferenceSystem', namespaces))
+ if val is not None:
+ self.reference_system_identifier = MD_ReferenceSystem(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_Thesaurus', namespaces))
+ if val is not None:
+ self.thesaurus = MD_Thesaurus(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.SC_VerticalDatum', namespaces))
+ if val is not None:
+ self.vertical_datum = SC_VerticalDatum(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.CI_Address', namespaces))
+ if val is not None:
+ self.address = CI_Address(val)
+
+ self.date = []
+ for cid in md.findall(util.nspath_eval('gm03:GM03_2_1Core.Core.CI_Date', namespaces)):
+ self.date.append(CI_Date(val))
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.CI_Telephone', namespaces))
+ if val is not None:
+ self.telephone = CI_Telephone(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.DQ_Scope', namespaces))
+ if val is not None:
+ self.scope = DQ_Scope(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.EX_VerticalExtent', namespaces))
+ if val is not None:
+ self.vertical_extent = EX_VerticalExtent(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_Format', namespaces))
+ if val is not None:
+ self.format = MD_Format(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_Metadata', namespaces))
+ if val is not None:
+ self.metadata = MD_Metadata(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_RepresentativeFraction', namespaces))
+ if val is not None:
+ self.representative_fraction = MD_RepresentativeFraction(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_Resolution', namespaces))
+ if val is not None:
+ self.resolution = MD_Resolution(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.EX_BoundingPolygon', namespaces))
+ if val is not None:
+ self.bounding_polygon = EX_BoundingPolygon(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.EX_GeographicBoundingBox', namespaces))
+ if val is not None:
+ self.geographic_bounding_box = EX_GeographicBoundingBox(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.EX_GeographicDescription', namespaces))
+ if val is not None:
+ self.geographic_description = EX_GeographicDescription(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.EX_TemporalExtent', namespaces))
+ if val is not None:
+ self.temporal_extent = EX_TemporalExtent(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_DistributiondistributionFormat', namespaces))
+ if val is not None:
+ self.distribution_distribution_format = MD_DistributiondistributionFormat(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.referenceSystemInfoMD_Metadata', namespaces))
+ if val is not None:
+ self.reference_system_metadata = referenceSystemInfoMD_Metadata(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.CI_Citation', namespaces))
+ if val is not None:
+ self.citation = CI_Citation(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.CI_Contact', namespaces))
+ if val is not None:
+ self.contact = CI_Contact(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.CI_OnlineResource', namespaces))
+ if val is not None:
+ self.online_resource = CI_OnlineResource(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.CI_ResponsibleParty', namespaces))
+ if val is not None:
+ self.responsible_party = CI_ResponsibleParty(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.EX_Extent', namespaces))
+ if val is not None:
+ self.extent = EX_Extent(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.EX_SpatialTemporalExtent', namespaces))
+ if val is not None:
+ self.spatial_temporal_extent = EX_Extent(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.LI_Lineage', namespaces))
+ if val is not None:
+ self.lineage = LI_Lineage(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_Identifier', namespaces))
+ if val is not None:
+ self.identifier = MD_Identifier(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_Keywords', namespaces))
+ if val is not None:
+ self.keywords = MD_Keywords(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_DataIdentification', namespaces))
+ if val is not None:
+ self.data_identification = MD_Keywords(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.RS_Identifier', namespaces))
+ if val is not None:
+ self.rs_identifier = RS_Identifier(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.CI_ResponsiblePartyparentinfo', namespaces))
+ if val is not None:
+ self.responsible_party_parent_info = CI_ResponsiblePartyparentinfo(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.descriptiveKeywordsMD_Identification', namespaces))
+ if val is not None:
+ self.descriptive_keywords_identification = descriptiveKeywordsMD_Identification(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.EX_ExtentgeographicElement', namespaces))
+ if val is not None:
+ self.extent_geographic_element = EX_ExtentgeographicElement(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.EX_ExtenttemporalElement', namespaces))
+ if val is not None:
+ self.extent_temporal_element = EX_ExtenttemporalElement(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.EX_ExtentverticalElement', namespaces))
+ if val is not None:
+ self.extent_vertical_element = EX_ExtenttemporalElement(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_IdentificationpointOfContact', namespaces))
+ if val is not None:
+ self.identification_point_of_contact = MD_IdentificationpointOfContact(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_Metadatacontact', namespaces))
+ if val is not None:
+ self.identification_point_of_contact = MD_Metadatacontact(val)
+
+ val = md.find(util.nspath_eval('gm03:GM03_2_1Core.Core.spatialExtentEX_SpatialTemporalExtent', namespaces))
+ if val is not None:
+ self.identification_point_of_contact = spatialExtentEX_SpatialTemporalExtent(val)
+
+ @property
+ def elements(self):
+ """helper function to return all properties"""
+
+ dict_elements = vars(self)
+ if 'bid' in dict_elements:
+ del dict_elements['bid']
+ return dict_elements
+
+ def get_element_by_tid(self, tid):
+ """helper function to find values by reference"""
+
+ for key, value in self.elements.items():
+ if hasattr(value, 'tid') and value.tid == tid:
+ return self.elements[key]
+ return None
+
+
+class DQ_DataQuality(_GenericObject):
+ """DQ_DataQuality parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:MD_Metadata', namespaces))
+ self.metadata = _GenericObjectProperty(val)
+
+
+class MD_Authority(_GenericObject):
+ """MD_Authority parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+
+class MD_ReferenceSystem(_GenericObject):
+ """MD_ReferenceSystem parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:referenceSystemIdentifier', namespaces))
+ self.reference_system_identifier = _GenericObjectProperty(val)
+
+
+class MD_DigitalTransferOptions(_GenericObject):
+ """MD_DigitalTransferOptions parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:MD_Distribution', namespaces))
+ self.distribution = _GenericObjectProperty(val)
+
+
+class MD_Thesaurus(_GenericObject):
+ """MD_Thesaurus parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:citation', namespaces))
+ self.citation = _GenericObjectProperty(val)
+
+
+class SC_VerticalDatum(_GenericObject):
+ """SC_VerticalDatum parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:datumID', namespaces))
+ self.datum_id = _GenericObjectProperty(val)
+
+
+class CI_Address(_GenericObject):
+ """CI_Address parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.street_name = util.testXMLValue(md.find(util.nspath_eval('gm03:streetName', namespaces)))
+ self.street_number = util.testXMLValue(md.find(util.nspath_eval('gm03:streetNumber', namespaces)))
+ self.address_line = util.testXMLValue(md.find(util.nspath_eval('gm03:addressLine', namespaces)))
+ self.post_box = util.testXMLValue(md.find(util.nspath_eval('gm03:postBox', namespaces)))
+ self.postal_code = util.testXMLValue(md.find(util.nspath_eval('gm03:postalCode', namespaces)))
+ self.city = util.testXMLValue(md.find(util.nspath_eval('gm03:city', namespaces)))
+ self.administrative_area = util.testXMLValue(md.find(util.nspath_eval('gm03:administrativeArea', namespaces)))
+ self.country = util.testXMLValue(md.find(util.nspath_eval('gm03:country', namespaces)))
+
+
+class CI_Date(_GenericObject):
+ """CI_Date parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.date = util.testXMLValue(md.find(util.nspath_eval('gm03:date', namespaces)))
+ self.date_type = util.testXMLValue(md.find(util.nspath_eval('gm03:dateType', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:CI_Citation', namespaces))
+ self.citation = _GenericObjectProperty(val)
+
+
+class CI_Telephone(_GenericObject):
+ """CI_Telephone parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.number = util.testXMLValue(md.find(util.nspath_eval('gm03:number', namespaces)))
+ self.number_type = util.testXMLValue(md.find(util.nspath_eval('gm03:numberType', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:CI_ResponsibleParty', namespaces))
+ self.responsible_party = _GenericObjectProperty(val)
+
+
+class DQ_Scope(_GenericObject):
+ """DQ_Scope parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.level = util.testXMLValue(md.find(util.nspath_eval('gm03:level', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:DQ_DataQuality', namespaces))
+ self.data_quality = _GenericObjectProperty(val)
+
+
+class EX_VerticalExtent(_GenericObject):
+ """EX_VerticalExtent parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.minimum_value = util.testXMLValue(md.find(util.nspath_eval('gm03:minimumValue', namespaces)))
+ self.maximum_value = util.testXMLValue(md.find(util.nspath_eval('gm03:maximumValue', namespaces)))
+ self.unit_of_measure = util.testXMLValue(md.find(util.nspath_eval('gm03:unitOfMeasure', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:verticalDatum', namespaces))
+ self.vertical_datum = _GenericObjectProperty(val)
+
+
+class MD_Format(_GenericObject):
+ """MD_Format parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.name = util.testXMLValue(md.find(util.nspath_eval('gm03:name', namespaces)))
+ self.version = util.testXMLValue(md.find(util.nspath_eval('gm03:version', versionspaces)))
+
+
+class MD_Metadata(_GenericObject):
+ """MD_Metadata parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.file_identifier = util.testXMLValue(md.find(util.nspath_eval('gm03:fileIdentifier', namespaces)))
+ self.language = util.testXMLValue(md.find(util.nspath_eval('gm03:language', namespaces)))
+ self.character_set = util.testXMLValue(md.find(util.nspath_eval('gm03:characterSet', namespaces)))
+ self.date_stamp = util.testXMLValue(md.find(util.nspath_eval('gm03:dateStamp', namespaces)))
+ self.metadata_standard_name = util.testXMLValue(md.find(util.nspath_eval('gm03:metadataStandardName', namespaces)))
+ self.metadata_standard_version = util.testXMLValue(md.find(util.nspath_eval('gm03:metadataStandardVersion', namespaces)))
+ self.dataset_uri = util.testXMLValue(md.find(util.nspath_eval('gm03:dataSetURI', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:hierarchyLevel', namespaces))
+ if val is not None:
+ values = []
+ for value in val.findall(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_ScopeCode_/gm03:value', namespaces)):
+ values.append(util.testXMLValue(value))
+ self.hierarchy_level = values
+
+ val = md.find(util.nspath_eval('gm03:hierarchyLevelName', namespaces))
+ if val is not None:
+ values = []
+ for value in val.findall(util.nspath_eval('gm03:GM03_2_1Core.Core.CharacterString_/gm03:value', namespaces)):
+ values.append(util.testXMLValue(value))
+ self.hierarchy_level_name = values
+
+ val = md.find(util.nspath_eval('gm03:distributionInfo', namespaces))
+ self.distribution_info = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:parentIdentifier', namespaces))
+ self.parent_identifier = _GenericObjectProperty(val)
+
+
+class MD_RepresentativeFraction(_GenericObject):
+ """MD_RepresentativeFraction parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.denominator = util.testXMLValue(md.find(util.nspath_eval('gm03:denominator', namespaces)))
+
+
+class MD_Resolution(_GenericObject):
+ """MD_Resolution parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.distance = util.testXMLValue(md.find(util.nspath_eval('gm03:distance', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:MD_DataIdentification', namespaces))
+ self.data_identification = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:equivalentScale', namespaces))
+ self.equivalent_scale = _GenericObjectProperty(val)
+
+
+class MD_ScopeDescription(_GenericObject):
+ """MD_ScopeDescription parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.attributes = util.testXMLValue(md.find(util.nspath_eval('gm03:attributes', namespaces)))
+ self.features = util.testXMLValue(md.find(util.nspath_eval('gm03:features', namespaces)))
+ self.feature_instances = util.testXMLValue(md.find(util.nspath_eval('gm03:featureInstances', namespaces)))
+ self.attribute_instances = util.testXMLValue(md.find(util.nspath_eval('gm03:attributeInstances', namespaces)))
+ self.dataset = util.testXMLValue(md.find(util.nspath_eval('gm03:dataset', namespaces)))
+ self.other = util.testXMLValue(md.find(util.nspath_eval('gm03:other', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:DQ_Scope', namespaces))
+ self.scope = _GenericObjectProperty(val)
+
+
+class EX_BoundingPolygon(_GenericObject):
+ """EX_BoundingPolygon parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.extent_type_code = util.testXMLValue(md.find(util.nspath_eval('gm03:extentTypeCode', namespaces)))
+
+ boundaries = []
+
+ for boundary in md.findall(util.nspath_eval('gm03:SURFACE/gm03:BOUNDARY', namespaces)):
+ polylines = []
+ for polyline in boundary.findall(util.nspath_eval('gm03:POLYLINE', namespaces)):
+ coords = []
+ arcs = []
+ for coord in polyline.findall(util.nspath_eval('gm03:COORD', namespaces)):
+ c1 = util.testXMLValue(coord.find(util.nspath_eval('gm03:C1', namespaces)))
+ c2 = util.testXMLValue(coord.find(util.nspath_eval('gm03:C2', namespaces)))
+ c3 = util.testXMLValue(coord.find(util.nspath_eval('gm03:C3', namespaces)))
+ coordvalue = {'c1': c1, 'c2': c2, 'c3': c3}
+ coords.append(coordvalue)
+ for arc in polyline.findall(util.nspath_eval('gm03:ARC', namespaces)):
+ c1 = util.testXMLValue(coord.find(util.nspath_eval('gm03:C1', namespaces)))
+ c2 = util.testXMLValue(coord.find(util.nspath_eval('gm03:C2', namespaces)))
+ c3 = util.testXMLValue(coord.find(util.nspath_eval('gm03:C3', namespaces)))
+ a1 = util.testXMLValue(coord.find(util.nspath_eval('gm03:A1', namespaces)))
+ a2 = util.testXMLValue(coord.find(util.nspath_eval('gm03:A2', namespaces)))
+ r = util.testXMLValue(coord.find(util.nspath_eval('gm03:R', namespaces)))
+ arcpoint = {'c1': c1, 'c2': c2, 'c3': c3, 'a1': a1, 'a2': a2, 'r': r}
+ arcs.append(arcpoint)
+ polylines.append(coords)
+ polylines.append(arcs)
+ boundaries.append(polylines)
+ self.boundary = boundaries
+
+
+class EX_GeographicBoundingBox(_GenericObject):
+ """EX_GeographicBoundingBox parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.extent_type_code = util.testXMLValue(md.find(util.nspath_eval('gm03:extentTypeCode', namespaces)))
+ self.north_bound_latitude = util.testXMLValue(md.find(util.nspath_eval('gm03:northBoundLatitude', namespaces)))
+ self.south_bound_latitude = util.testXMLValue(md.find(util.nspath_eval('gm03:southBoundLatitude', namespaces)))
+ self.east_bound_longitude = util.testXMLValue(md.find(util.nspath_eval('gm03:eastBoundLongitude', namespaces)))
+ self.west_bound_longitude = util.testXMLValue(md.find(util.nspath_eval('gm03:westBoundLongitude', namespaces)))
+
+
+class EX_GeographicDescription(_GenericObject):
+ """EX_GeographicDescription parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.extent_type_code = util.testXMLValue(md.find(util.nspath_eval('gm03:extentTypeCode', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:geographicIdentifier', namespaces))
+ self.geographic_identifier = _GenericObjectProperty(val)
+
+
+class EX_TemporalExtent(_GenericObject):
+ """EX_TemporalExtent parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ begin = util.testXMLValue(md.find(util.nspath_eval('gm03:extent/gm03:GM03_2_1Core.Core.TM_Primitive/begin', namespaces)))
+ end = util.testXMLValue(md.find(util.nspath_eval('gm03:extent/gm03:GM03_2_1Core.Core.TM_Primitive/end', namespaces)))
+
+ self.extent = {'begin': begin, 'end': end}
+
+
+class MD_DistributiondistributionFormat(object):
+ """MD_DistributiondistributionFormat parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ val = md.find(util.nspath_eval('gm03:MD_Distribution', namespaces))
+ self.distribution = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:distributionFormat', namespaces))
+ self.distribution_format = _GenericObjectProperty(val)
+
+
+class referenceSystemInfoMD_Metadata(object):
+ """referenceSystemInfoMD_Metadata parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ val = md.find(util.nspath_eval('gm03:referenceSystemInfo', namespaces))
+ self.reference_system_info = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:MD_Metadata', namespaces))
+ self.metadata = _GenericObjectProperty(val)
+
+
+class CI_Citation(_GenericObject):
+ """CI_Citation parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:title', namespaces))
+ if val is not None:
+ self.title = PT_FreeText(md)
+
+ val = md.find(util.nspath_eval('gm03:MD_Authority', namespaces))
+ self.authority = _GenericObjectProperty(val)
+
+
+class CI_Contact(_GenericObject):
+ """CI_Contact parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.hours_of_service = util.testXMLValue(md.find(util.nspath_eval('gm03:hoursOfService', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:contactInstructions', namespaces))
+ if val is not None:
+ self.contact_instructions = PT_FreeText(val)
+
+
+class CI_OnlineResource(_GenericObject):
+ """CI_OnlineResource parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.protocol = util.testXMLValue(md.find(util.nspath_eval('gm03:protocol', namespaces)))
+ self.application_profile = util.testXMLValue(md.find(util.nspath_eval('gm03:applicationProfile', namespaces)))
+ self.function = util.testXMLValue(md.find(util.nspath_eval('gm03:function', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:description', namespaces))
+ if val is not None:
+ self.description = PT_FreeText(val)
+
+ val = md.find(util.nspath_eval('gm03:name', namespaces))
+ if val is not None:
+ self.name = PT_FreeText(val)
+
+ val = md.find(util.nspath_eval('gm03:linkage', namespaces))
+ if val is not None:
+ self.linkage = PT_FreeURL(val)
+
+ val = md.find(util.nspath_eval('gm03:MD_DigitalTransferOptions', namespaces))
+ self.digital_transfer_options = _GenericObjectProperty(val)
+
+
+class CI_ResponsibleParty(_GenericObject):
+ """CI_ResponsibleParty parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.individual_first_name = util.testXMLValue(md.find(util.nspath_eval('gm03:individualFirstName', namespaces)))
+ self.individual_last_name = util.testXMLValue(md.find(util.nspath_eval('gm03:individualLastName', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:electronicalMailAddress', namespaces))
+ if val is not None:
+ self.electronical_mail_address = util.testXMLValue(val.find(util.nspath_eval('gm03:GM03_2_1Core.Core.URL_/gm03:value', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:organisationName', namespaces))
+ if val is not None:
+ self.organisation_name = PT_FreeText(val)
+
+ val = md.find(util.nspath_eval('gm03:positionName', namespaces))
+ if val is not None:
+ self.position_name = PT_FreeText(val)
+
+ val = md.find(util.nspath_eval('gm03:organisationAcronym', namespaces))
+ if val is not None:
+ self.organisation_acronym = PT_FreeText(val)
+
+ val = md.find(util.nspath_eval('gm03:linkage', namespaces))
+ if val is not None:
+ self.linkage = PT_FreeURL(val)
+
+ val = md.find(util.nspath_eval('gm03:address', namespaces))
+ self.address = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:contactInfo', namespaces))
+ self.contact_info = _GenericObjectProperty(val)
+
+
+class EX_Extent(_GenericObject):
+ """EX_Extent parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:description', namespaces))
+ if val is not None:
+ self.description = PT_FreeText(val)
+
+ val = md.find(util.nspath_eval('gm03:MD_DataIdentification', namespaces))
+ self.data_identification = _GenericObjectProperty(val)
+
+
+class EX_SpatialTemporalExtent(EX_TemporalExtent):
+ """EX_SpatialTemporalExtent parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ EX_TemporalExtent.__init__(self, md)
+
+
+class LI_Lineage(_GenericObject):
+ """LI_Lineage parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:statement', namespaces))
+ if val is not None:
+ self.statement = PT_FreeText(val)
+
+ val = md.find(util.nspath_eval('gm03:DQ_DataQuality', namespaces))
+ self.data_quality = _GenericObjectProperty(val)
+
+
+class MD_Identifier(_GenericObject):
+ """MD_Identifier parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:code', namespaces))
+ if val is not None:
+ self.code = PT_FreeText(val)
+
+ val = md.find(util.nspath_eval('gm03:MD_Authority', namespaces))
+ self.authority = _GenericObjectProperty(val)
+
+
+class MD_Keywords(_GenericObject):
+ """MD_Keywords parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ self.type = util.testXMLValue(md.find(util.nspath_eval('gm03:type', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:keyword', namespaces))
+ if val is not None:
+ self.keyword = PT_FreeText(val)
+
+ val = md.find(util.nspath_eval('gm03:thesaurus', namespaces))
+ self.thesaurus = _GenericObjectProperty(val)
+
+
+class MD_DataIdentification(_GenericObject):
+ """MD_DataIdentification parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:status', namespaces))
+ if val is not None:
+ self.status = util.testXMLValue(val.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_ProgressCode_/gm03:value', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:abstract', namespaces))
+ if val is not None:
+ self.abstract = PT_FreeText(val)
+
+ val = md.find(util.nspath_eval('gm03:purpose', namespaces))
+ if val is not None:
+ self.purpose = PT_FreeText(val)
+
+ val = md.find(util.nspath_eval('gm03:MD_Metadata', namespaces))
+ self.metadata = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:citation', namespaces))
+ self.citation = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:spatialRepresentationType', namespaces))
+ if val is not None:
+ self.spatial_representation_type = util.testXMLValue(val.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_SpatialRepresentationTypeCode_/gm03:value', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:language', namespaces))
+ if val is not None:
+ self.language = util.testXMLValue(val.find(util.nspath_eval('gm03:CodeISO.LanguageCodeISO_/gm03:value', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:characterSet', namespaces))
+ if val is not None:
+ self.character_set = util.testXMLValue(val.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_CharacterSetCode_/gm03:value', namespaces)))
+
+ val = md.find(util.nspath_eval('gm03:topicCategory', namespaces))
+ if val is not None:
+ self.topic_category = util.testXMLValue(val.find(util.nspath_eval('gm03:GM03_2_1Core.Core.MD_TopicCategoryCode_/gm03:value', namespaces)))
+
+
+class RS_Identifier(_GenericObject):
+ """RS_Identifier parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:code', namespaces))
+ if val is not None:
+ self.code = PT_FreeText(val)
+
+ val = md.find(util.nspath_eval('gm03:MD_Authority', namespaces))
+ self.authority = _GenericObjectProperty(val)
+
+
+class CI_ResponsiblePartyparentinfo(_GenericObject):
+ """CI_ResponsiblePartyparentinfo parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:parentResponsibleParty', namespaces))
+ self.parent_responsible_party = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:CI_ResponsibleParty', namespaces))
+ self.responsible_party = _GenericObjectProperty(val)
+
+
+class descriptiveKeywordsMD_Identification(_GenericObject):
+ """descriptiveKeywordsMD_Identification parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:descriptiveKeywords', namespaces))
+ self.descriptive_keywords = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:MD_Identification', namespaces))
+ self.identification = _GenericObjectProperty(val)
+
+
+class EX_ExtentgeographicElement(_GenericObject):
+ """EX_ExtentgeographicElement parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:EX_Extent', namespaces))
+ self.extent = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:temporalElement', namespaces))
+ self.temporal_element = _GenericObjectProperty(val)
+
+
+class EX_ExtentverticalElement(_GenericObject):
+ """EX_ExtentverticalElement parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:EX_Extent', namespaces))
+ self.extent = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:verticalElement', namespaces))
+ self.vertical_element = _GenericObjectProperty(val)
+
+
+class EX_ExtentgeographicElement(_GenericObject):
+ """EX_ExtentgeographicElement parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:EX_Extent', namespaces))
+ self.extent = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:geographicElement', namespaces))
+ self.geographic_element = _GenericObjectProperty(val)
+
+
+class MD_IdentificationpointOfContact(_GenericObject):
+ """MD_IdentificationpointOfContact parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:pointOfContact', namespaces))
+ self.point_of_contact = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:MD_Identification', namespaces))
+ self.identification = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:role', namespaces))
+ if val is not None:
+ self.role = util.testXMLValue(val.find(util.nspath_eval('gm03:GM03_2_1Core.Core.CI_RoleCode_/gm03:value', namespaces)))
+
+
+class MD_Metadatacontact(_GenericObject):
+ """MD_Metadatacontact parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:contact', namespaces))
+ self.contact = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:MD_Metadata', namespaces))
+ self.metadata = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:role', namespaces))
+ if val is not None:
+ self.role = util.testXMLValue(val.find(util.nspath_eval('gm03:GM03_2_1Core.Core.CI_RoleCode_/gm03:value', namespaces)))
+
+
+class spatialExtentEX_SpatialTemporalExtent(_GenericObject):
+ """spatialExtentEX_SpatialTemporalExtent parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ _GenericObject.__init__(self, md)
+
+ val = md.find(util.nspath_eval('gm03:spatialExtent', namespaces))
+ self.spatial_extent = _GenericObjectProperty(val)
+
+ val = md.find(util.nspath_eval('gm03:EX_SpatialTemporalExtent', namespaces))
+ self.spatial_temporal_extent = _GenericObjectProperty(val)
+
+
+class Comprehensive(Core):
+ """Comprehensive parser"""
+ def __init__(self, md):
+ """constructor"""
+
+ Core.__init__(self, md)
diff --git a/owslib/namespaces.py b/owslib/namespaces.py
index 2ab248f..830f4fa 100644
--- a/owslib/namespaces.py
+++ b/owslib/namespaces.py
@@ -18,6 +18,7 @@ class Namespaces(object):
'fes' : 'http://www.opengis.net/fes/2.0',
'fgdc' : 'http://www.opengis.net/cat/csw/csdgm',
'gco' : 'http://www.isotc211.org/2005/gco',
+ 'gm03' : 'http://www.interlis.ch/INTERLIS2.3',
'gmd' : 'http://www.isotc211.org/2005/gmd',
'gmi' : 'http://www.isotc211.org/2005/gmi',
'gml' : 'http://www.opengis.net/gml',
diff --git a/owslib/wps.py b/owslib/wps.py
index 5d26458..04cede2 100644
--- a/owslib/wps.py
+++ b/owslib/wps.py
@@ -811,6 +811,8 @@ class InputOutput(object):
def __init__(self, element):
+ self.abstract = None
+
# loop over sub-elements without requiring a specific namespace
for subElement in element:
@@ -1147,9 +1149,10 @@ class Process(object):
self.processVersion = elem.get( nspath('processVersion', ns=wpsns) )
self.statusSupported = bool( elem.get( "statusSupported" ) )
self.storeSupported = bool( elem.get( "storeSupported" ) )
+ self.abstract = None
for child in elem:
-
+
# this element's namespace
ns = getNamespace(child)
diff --git a/tests/doctests/gm03_parse.txt b/tests/doctests/gm03_parse.txt
new file mode 100755
index 0000000..d0ad718
--- /dev/null
+++ b/tests/doctests/gm03_parse.txt
@@ -0,0 +1,62 @@
+
+Imports
+
+ >>> from __future__ import (absolute_import, division, print_function)
+ >>> from tests.utils import resource_file
+ >>> from owslib.etree import etree
+ >>> from owslib.gm03 import GM03
+
+Print testing some metadata elements
+
+ >>> e = etree.parse(resource_file('gm03_example1.xml'))
+ >>> gm03 = GM03(e)
+ >>> gm03.header.version
+ '2.3'
+ >>> gm03.header.sender
+ 'geocat.ch'
+ >>> hasattr(gm03.data, 'core')
+ False
+ >>> hasattr(gm03.data, 'comprehensive')
+ True
+ >>> len(gm03.data.comprehensive.elements)
+ 9
+ >>> sorted(list(gm03.data.comprehensive.elements.keys()))
+ ['address', 'contact', 'date', 'extent', 'extent_geographic_element', 'geographic_bounding_box', 'identification_point_of_contact', 'metadata', 'responsible_party']
+ >>> isinstance(gm03.data.comprehensive.date, list)
+ True
+ >>> len(gm03.data.comprehensive.date)
+ 1
+ >>> gm03.data.comprehensive.metadata.file_identifier
+ '41ac321f632e55cebf0508a2cea5d9023fd12d9ad46edd679f2c275127c88623fb9c9d29726bef7c'
+ >>> gm03.data.comprehensive.metadata.date_stamp
+ '1999-12-31T12:00:00'
+ >>> gm03.data.comprehensive.metadata.language
+ 'de'
+
+Test TID searching
+
+ >>> gm03.data.comprehensive.metadata.tid
+ 'xN6509077498146737843'
+ >>> search_tid = gm03.data.comprehensive.metadata.tid
+ >>> gm03.data.comprehensive.get_element_by_tid('404') is None
+ True
+ >>> gm03.data.comprehensive.get_element_by_tid(search_tid) is None
+ False
+ >>> search_tid2 = gm03.data.comprehensive.extent.data_identification.ref
+ >>> search_tid2
+ 'xN8036063300808707346'
+ >>> gm03.data.comprehensive.get_element_by_tid(search_tid2) is None
+ True
+
+ >>> e = etree.parse(resource_file('gm03_example2.xml'))
+ >>> gm03 = GM03(e)
+ >>> gm03.data.comprehensive.geographic_bounding_box.extent_type_code
+ 'false'
+ >>> gm03.data.comprehensive.geographic_bounding_box.north_bound_latitude
+ '47.1865387201702'
+ >>> gm03.data.comprehensive.geographic_bounding_box.south_bound_latitude
+ '47.1234508676764'
+ >>> gm03.data.comprehensive.geographic_bounding_box.east_bound_longitude
+ '9.10597474389878'
+ >>> gm03.data.comprehensive.geographic_bounding_box.west_bound_longitude
+ '9.23798212070671'
diff --git a/tests/resources/gm03_example1.xml b/tests/resources/gm03_example1.xml
new file mode 100644
index 0000000..95b0cac
--- /dev/null
+++ b/tests/resources/gm03_example1.xml
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TRANSFER xmlns="http://www.interlis.ch/INTERLIS2.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <HEADERSECTION SENDER="geocat.ch" VERSION="2.3">
+ <MODELS />
+ </HEADERSECTION>
+ <DATASECTION>
+ <GM03_2_1Comprehensive.Comprehensive BID="xw107831703a">
+ <GM03_2_1Core.Core.MD_Metadata TID="xN6509077498146737843">
+ <fileIdentifier>41ac321f632e55cebf0508a2cea5d9023fd12d9ad46edd679f2c275127c88623fb9c9d29726bef7c</fileIdentifier>
+ <language>de</language>
+ <characterSet>utf8</characterSet>
+ <dateStamp>1999-12-31T12:00:00</dateStamp>
+ <metadataStandardName>GM03Core</metadataStandardName>
+ <metadataStandardVersion>2.3</metadataStandardVersion>
+ <hierarchyLevel>
+ <GM03_2_1Core.Core.MD_ScopeCode_>
+ <value>dataset</value>
+ </GM03_2_1Core.Core.MD_ScopeCode_>
+ </hierarchyLevel>
+ </GM03_2_1Core.Core.MD_Metadata>
+ <GM03_2_1Core.Core.MD_Metadatacontact>
+ <contact REF="xN5427082179211945081" />
+ <MD_Metadata REF="xN6509077498146737843" />
+ <role>
+ <GM03_2_1Core.Core.CI_RoleCode_>
+ <value>custodian</value>
+ </GM03_2_1Core.Core.CI_RoleCode_>
+ </role>
+ </GM03_2_1Core.Core.MD_Metadatacontact>
+ <GM03_2_1Core.Core.CI_ResponsibleParty TID="xN5427082179211945081">
+ <electronicalMailAddress>
+ <GM03_2_1Core.Core.URL_>
+ <value>unbekannt</value>
+ </GM03_2_1Core.Core.URL_>
+ </electronicalMailAddress>
+ <organisationName>
+ <GM03_2_1Core.Core.PT_FreeText>
+ <textGroup>
+ <GM03_2_1Core.Core.PT_Group>
+ <language>de</language>
+ <plainText>Gemeinde Ebnat-Kappel (Datenherr); Gemeinde Ebnat-Kappel (Verwaltungsstelle)</plainText>
+ </GM03_2_1Core.Core.PT_Group>
+ </textGroup>
+ </GM03_2_1Core.Core.PT_FreeText>
+ </organisationName>
+ <linkage>
+ <GM03_2_1Core.Core.PT_FreeURL>
+ <URLGroup>
+ <GM03_2_1Core.Core.PT_URLGroup>
+ <language>de</language>
+ <plainURL>www.ebnatkappel.ch</plainURL>
+ </GM03_2_1Core.Core.PT_URLGroup>
+ </URLGroup>
+ </GM03_2_1Core.Core.PT_FreeURL>
+ </linkage>
+ <address REF="xN2635871268258132149" />
+ <contactInfo REF="xN2875432517461217663" />
+ </GM03_2_1Core.Core.CI_ResponsibleParty>
+ <GM03_2_1Core.Core.CI_Address TID="xN2635871268258132149" />
+ <GM03_2_1Core.Core.CI_Contact TID="xN2875432517461217663" />
+ <GM03_2_1Comprehensive.Comprehensive.MD_DataIdentification TID="xN8036063300808707346">
+ <abstract>
+ <GM03_2_1Core.Core.PT_FreeText>
+ <textGroup>
+ <GM03_2_1Core.Core.PT_Group>
+ <language>de</language>
+ <plainText>Der Unterhaltsdienst beinhaltete folgende Themen: Standorte Ruhebänke, Standorte Splittkasten, öffentliche Plätze, Standorte Abfalleimer, Standorte Robidog, Sammelstellen; Zusätzliche Hinweise:</plainText>
+ </GM03_2_1Core.Core.PT_Group>
+ </textGroup>
+ </GM03_2_1Core.Core.PT_FreeText>
+ </abstract>
+ <MD_Metadata REF="xN6509077498146737843" />
+ <citation REF="xN2836740537917903206" />
+ <language>
+ <CodeISO.LanguageCodeISO_>
+ <value>de</value>
+ </CodeISO.LanguageCodeISO_>
+ </language>
+ <characterSet>
+ <GM03_2_1Core.Core.MD_CharacterSetCode_>
+ <value>utf8</value>
+ </GM03_2_1Core.Core.MD_CharacterSetCode_>
+ </characterSet>
+ </GM03_2_1Comprehensive.Comprehensive.MD_DataIdentification>
+ <GM03_2_1Comprehensive.Comprehensive.CI_Citation TID="xN2836740537917903206">
+ <title>
+ <GM03_2_1Core.Core.PT_FreeText>
+ <textGroup>
+ <GM03_2_1Core.Core.PT_Group>
+ <language>de</language>
+ <plainText>Unterhaltsdienst</plainText>
+ </GM03_2_1Core.Core.PT_Group>
+ </textGroup>
+ </GM03_2_1Core.Core.PT_FreeText>
+ </title>
+ </GM03_2_1Comprehensive.Comprehensive.CI_Citation>
+ <GM03_2_1Core.Core.CI_Date TID="xw107831703aac27b1b1b1b3b1">
+ <date>1999-12-31</date>
+ <dateType>creation</dateType>
+ <CI_Citation REF="xN2836740537917903206" />
+ </GM03_2_1Core.Core.CI_Date>
+ <GM03_2_1Core.Core.MD_IdentificationpointOfContact>
+ <pointOfContact REF="xN5427082179211945081" />
+ <MD_Identification REF="xN8036063300808707346" />
+ <role>
+ <GM03_2_1Core.Core.CI_RoleCode_>
+ <value>custodian</value>
+ </GM03_2_1Core.Core.CI_RoleCode_>
+ </role>
+ </GM03_2_1Core.Core.MD_IdentificationpointOfContact>
+ <GM03_2_1Core.Core.EX_Extent TID="xN3674850297815639997">
+ <description>
+ <GM03_2_1Core.Core.PT_FreeText>
+ <textGroup>
+ <GM03_2_1Core.Core.PT_Group>
+ <language>de</language>
+ <plainText>Ebnat-Kappel</plainText>
+ </GM03_2_1Core.Core.PT_Group>
+ </textGroup>
+ </GM03_2_1Core.Core.PT_FreeText>
+ </description>
+ <MD_DataIdentification REF="xN8036063300808707346" />
+ </GM03_2_1Core.Core.EX_Extent>
+ <GM03_2_1Core.Core.EX_ExtentgeographicElement>
+ <EX_Extent REF="xN3674850297815639997" />
+ <geographicElement REF="xN1056366029451267545" />
+ </GM03_2_1Core.Core.EX_ExtentgeographicElement>
+ <GM03_2_1Core.Core.EX_GeographicBoundingBox TID="xN1056366029451267545">
+ <extentTypeCode>false</extentTypeCode>
+ <northBoundLatitude>47.2834366721671</northBoundLatitude>
+ <southBoundLatitude>47.1855371323622</southBoundLatitude>
+ <eastBoundLongitude>9.07380432424527</eastBoundLongitude>
+ <westBoundLongitude>9.19139891907917</westBoundLongitude>
+ </GM03_2_1Core.Core.EX_GeographicBoundingBox>
+ </GM03_2_1Comprehensive.Comprehensive>
+ </DATASECTION>
+</TRANSFER>
diff --git a/tests/resources/gm03_example2.xml b/tests/resources/gm03_example2.xml
new file mode 100644
index 0000000..ae0d662
--- /dev/null
+++ b/tests/resources/gm03_example2.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TRANSFER xmlns="http://www.interlis.ch/INTERLIS2.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <HEADERSECTION SENDER="geocat.ch" VERSION="2.3">
+ <MODELS />
+ </HEADERSECTION>
+ <DATASECTION>
+ <GM03_2_1Comprehensive.Comprehensive BID="xw107834205a">
+ <GM03_2_1Core.Core.MD_Metadata TID="xN1700275456469187994">
+ <fileIdentifier>b6e8562f8bffdfa45b70db1e12fb2a1b64999f31aa0adb59142b3bee5a5d07861c7292c243088468</fileIdentifier>
+ <language>de</language>
+ <characterSet>utf8</characterSet>
+ <dateStamp>1999-12-31T12:00:00</dateStamp>
+ <metadataStandardName>GM03Core</metadataStandardName>
+ <metadataStandardVersion>2.3</metadataStandardVersion>
+ <hierarchyLevel>
+ <GM03_2_1Core.Core.MD_ScopeCode_>
+ <value>dataset</value>
+ </GM03_2_1Core.Core.MD_ScopeCode_>
+ </hierarchyLevel>
+ </GM03_2_1Core.Core.MD_Metadata>
+ <GM03_2_1Core.Core.MD_Metadatacontact>
+ <contact REF="xN8649995031921957558" />
+ <MD_Metadata REF="xN1700275456469187994" />
+ <role>
+ <GM03_2_1Core.Core.CI_RoleCode_>
+ <value>custodian</value>
+ </GM03_2_1Core.Core.CI_RoleCode_>
+ </role>
+ </GM03_2_1Core.Core.MD_Metadatacontact>
+ <GM03_2_1Core.Core.CI_ResponsibleParty TID="xN8649995031921957558">
+ <individualFirstName>Matthias</individualFirstName>
+ <individualLastName>Oettli</individualLastName>
+ <electronicalMailAddress>
+ <GM03_2_1Core.Core.URL_>
+ <value>matthias.oettli at amden.ch</value>
+ </GM03_2_1Core.Core.URL_>
+ </electronicalMailAddress>
+ <organisationName>
+ <GM03_2_1Core.Core.PT_FreeText>
+ <textGroup>
+ <GM03_2_1Core.Core.PT_Group>
+ <language>de</language>
+ <plainText>Gemeinde Amden (Datenherr); Gemeinde Amden (Verwaltungsstelle)</plainText>
+ </GM03_2_1Core.Core.PT_Group>
+ </textGroup>
+ </GM03_2_1Core.Core.PT_FreeText>
+ </organisationName>
+ <linkage>
+ <GM03_2_1Core.Core.PT_FreeURL>
+ <URLGroup>
+ <GM03_2_1Core.Core.PT_URLGroup>
+ <language>de</language>
+ <plainURL>www.amden.ch</plainURL>
+ </GM03_2_1Core.Core.PT_URLGroup>
+ </URLGroup>
+ </GM03_2_1Core.Core.PT_FreeURL>
+ </linkage>
+ <address REF="xN4764608505690439814" />
+ <contactInfo REF="xN1384672275328005245" />
+ </GM03_2_1Core.Core.CI_ResponsibleParty>
+ <GM03_2_1Core.Core.CI_Address TID="xN4764608505690439814" />
+ <GM03_2_1Core.Core.CI_Contact TID="xN1384672275328005245" />
+ <GM03_2_1Core.Core.CI_Telephone TID="xN4289127695412919835">
+ <number>055 611 60 76</number>
+ <numberType>mainNumber</numberType>
+ <CI_ResponsibleParty REF="xN8649995031921957558" />
+ </GM03_2_1Core.Core.CI_Telephone>
+ <GM03_2_1Comprehensive.Comprehensive.MD_DataIdentification TID="xN3766575436551981417">
+ <abstract>
+ <GM03_2_1Core.Core.PT_FreeText>
+ <textGroup>
+ <GM03_2_1Core.Core.PT_Group>
+ <language>de</language>
+ <plainText>Der Unterhaltsdienst beinhaltete folgende Themen: Standorte Ruhebänke, Standorte Splittkasten, öffentliche Plätze, Standorte Abfalleimer, Standorte Robidog, Sammelstellen; Zusätzliche Hinweise:</plainText>
+ </GM03_2_1Core.Core.PT_Group>
+ </textGroup>
+ </GM03_2_1Core.Core.PT_FreeText>
+ </abstract>
+ <MD_Metadata REF="xN1700275456469187994" />
+ <citation REF="xN1752770866428883463" />
+ <language>
+ <CodeISO.LanguageCodeISO_>
+ <value>de</value>
+ </CodeISO.LanguageCodeISO_>
+ </language>
+ <characterSet>
+ <GM03_2_1Core.Core.MD_CharacterSetCode_>
+ <value>utf8</value>
+ </GM03_2_1Core.Core.MD_CharacterSetCode_>
+ </characterSet>
+ </GM03_2_1Comprehensive.Comprehensive.MD_DataIdentification>
+ <GM03_2_1Comprehensive.Comprehensive.CI_Citation TID="xN1752770866428883463">
+ <title>
+ <GM03_2_1Core.Core.PT_FreeText>
+ <textGroup>
+ <GM03_2_1Core.Core.PT_Group>
+ <language>de</language>
+ <plainText>Unterhaltsdienst</plainText>
+ </GM03_2_1Core.Core.PT_Group>
+ </textGroup>
+ </GM03_2_1Core.Core.PT_FreeText>
+ </title>
+ </GM03_2_1Comprehensive.Comprehensive.CI_Citation>
+ <GM03_2_1Core.Core.CI_Date TID="xw107834205aac27b1b1b1b3b1">
+ <date>1999-12-31</date>
+ <dateType>creation</dateType>
+ <CI_Citation REF="xN1752770866428883463" />
+ </GM03_2_1Core.Core.CI_Date>
+ <GM03_2_1Core.Core.MD_IdentificationpointOfContact>
+ <pointOfContact REF="xN8649995031921957558" />
+ <MD_Identification REF="xN3766575436551981417" />
+ <role>
+ <GM03_2_1Core.Core.CI_RoleCode_>
+ <value>custodian</value>
+ </GM03_2_1Core.Core.CI_RoleCode_>
+ </role>
+ </GM03_2_1Core.Core.MD_IdentificationpointOfContact>
+ <GM03_2_1Core.Core.EX_Extent TID="xN2109595790587395274">
+ <description>
+ <GM03_2_1Core.Core.PT_FreeText>
+ <textGroup>
+ <GM03_2_1Core.Core.PT_Group>
+ <language>de</language>
+ <plainText>Amden</plainText>
+ </GM03_2_1Core.Core.PT_Group>
+ </textGroup>
+ </GM03_2_1Core.Core.PT_FreeText>
+ </description>
+ <MD_DataIdentification REF="xN3766575436551981417" />
+ </GM03_2_1Core.Core.EX_Extent>
+ <GM03_2_1Core.Core.EX_ExtentgeographicElement>
+ <EX_Extent REF="xN2109595790587395274" />
+ <geographicElement REF="xN747330322707818024" />
+ </GM03_2_1Core.Core.EX_ExtentgeographicElement>
+ <GM03_2_1Core.Core.EX_GeographicBoundingBox TID="xN747330322707818024">
+ <extentTypeCode>false</extentTypeCode>
+ <northBoundLatitude>47.1865387201702</northBoundLatitude>
+ <southBoundLatitude>47.1234508676764</southBoundLatitude>
+ <eastBoundLongitude>9.10597474389878</eastBoundLongitude>
+ <westBoundLongitude>9.23798212070671</westBoundLongitude>
+ </GM03_2_1Core.Core.EX_GeographicBoundingBox>
+ </GM03_2_1Comprehensive.Comprehensive>
+ </DATASECTION>
+</TRANSFER>
--
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