Skip to content

Commit cdcfce7

Browse files
authored
Add support for ISO 19115 Part 3 XML (#900)
* Add ISO 19115 Part 3 XML parsing, including unit test * Improved ISO 19115 Part 3 XML parsing - Added ArcGIS synthetic sample - Added tests for DQ_DataQuality, MD_FeatureCatalogueDescription and MD_Bands - Ability to parse older mdb v1.0 XML * Add iso_3 service tests * Fix missing thesaurus keyword bug * Add test for get_all_contacts() * Make iso_3 DQ_DataQuality more consistent * Fix bug in iso_3 legal constraints * Fix iso_3 identifier resourcelanguage xpath error * Fix xpath bug in iso_3 distribution * Add ISO 19115 Part 3 XML gfc:FC_FeatureCatalogue * Fix up metadata URL tests - Some 'Offline' tests were still calling on external services, monkeypatch of 'OpenURL' not working - Fixed up monkeypatch of 'OpenURL' calls - Added function to detect outer tag for iso_3.py - Added code to utilise iso_3 in WFS/WMS GetCapabilities responses - Added ISO 19115 Part 3 XML tests using pytest parameters * Remove redundant test file * Add CSW geonetwork tests for iso_3.py * Add spaces to inline comments for flake8 * Add spaces to inline comments for flake8 * Fix error in path description * Rename 'iso_3' to 'iso3' etc.
1 parent af8b0f2 commit cdcfce7

File tree

16 files changed

+8196
-37
lines changed

16 files changed

+8196
-37
lines changed

owslib/catalogue/csw2.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
from owslib import util
2121
from owslib import ows
2222
from owslib.iso import MD_Metadata, FC_FeatureCatalogue
23+
from owslib.iso3 import MD_Metadata as MD_Metadata3 # ISO 19115 Part 3 XML
24+
from owslib.iso3 import FC_FeatureCatalogue as FC_FeatureCatalogue3 # ISO 19115 Part 3 XML
2325
from owslib.fgdc import Metadata
2426
from owslib.dif import DIF
2527
from owslib.gm03 import GM03
@@ -578,6 +580,12 @@ def _parserecords(self, outputschema, esn):
578580
val = i.find(util.nspath_eval('gm03:fileIdentifier', namespaces))
579581
identifier = self._setidentifierkey(util.testXMLValue(val))
580582
self.records[identifier] = GM03(i)
583+
elif MD_Metadata3.handles(outputschema): # ISO 19115 Part 3 XML
584+
for elem, id in MD_Metadata3.find_ids(self._exml):
585+
self.records[self._setidentifierkey(id)] = MD_Metadata3(elem)
586+
for i in self._exml.findall('.//' + util.nspath_eval('gfc:FC_FeatureCatalogue', namespaces)):
587+
identifier = self._setidentifierkey(util.testXMLValue(i.attrib['uuid'], attrib=True))
588+
self.records[identifier] = FC_FeatureCatalogue3(i)
581589
else: # process default
582590
for i in self._exml.findall('.//' + util.nspath_eval('csw:%s' % self._setesnel(esn), namespaces)):
583591
val = i.find(util.nspath_eval('dc:identifier', namespaces))

owslib/catalogue/csw3.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
from owslib import util
2121
from owslib import ows
2222
from owslib.iso import MD_Metadata, FC_FeatureCatalogue
23+
from owslib.iso3 import MD_Metadata as MD_Metadata3 # ISO 19115 Part 3 XML
24+
from owslib.iso3 import FC_FeatureCatalogue as FC_FeatureCatalogue3 # ISO 19115 Part 3 XML
2325
from owslib.fgdc import Metadata
2426
from owslib.dif import DIF
2527
from owslib.gm03 import GM03
@@ -477,6 +479,12 @@ def _parserecords(self, outputschema, esn):
477479
val = i.find(util.nspath_eval('gm03:fileIdentifier', namespaces))
478480
identifier = self._setidentifierkey(util.testXMLValue(val))
479481
self.records[identifier] = GM03(i)
482+
elif MD_Metadata3.handles(outputschema): # ISO 19115 Part 3 XML
483+
for elem, id in MD_Metadata3.find_ids(self._exml):
484+
self.records[self._setidentifierkey(id)] = MD_Metadata3(elem)
485+
for i in self._exml.findall('.//' + util.nspath_eval('gfc:FC_FeatureCatalogue', namespaces)):
486+
identifier = self._setidentifierkey(util.testXMLValue(i.attrib['uuid'], attrib=True))
487+
self.records[identifier] = FC_FeatureCatalogue3(i)
480488
else: # process default
481489
for i in self._exml.findall('.//' + util.nspath_eval('csw30:%s' % self._setesnel(esn), namespaces)):
482490
val = i.find(util.nspath_eval('dc:identifier', namespaces))

owslib/feature/wfs100.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
from owslib.etree import etree
2626
from owslib.fgdc import Metadata
2727
from owslib.iso import MD_Metadata
28+
from owslib.iso3 import MD_Metadata as MD_Metadata3 # ISO 19115 Part 3 XML
2829
from owslib.crs import Crs
2930
from owslib.namespaces import Namespaces
3031
from owslib.feature.schema import get_schema
@@ -470,7 +471,11 @@ def parse_remote_metadata(self, timeout=30):
470471
if mdelem is not None:
471472
metadataUrl["metadata"] = MD_Metadata(mdelem)
472473
else:
473-
metadataUrl["metadata"] = None
474+
mdelem = MD_Metadata3.find_start(doc)
475+
if mdelem is not None:
476+
metadataUrl["metadata"] = MD_Metadata3(mdelem)
477+
else:
478+
metadataUrl["metadata"] = None
474479
except Exception:
475480
metadataUrl["metadata"] = None
476481

owslib/feature/wfs110.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@
1313
testXMLValue,
1414
nspath_eval,
1515
ServiceException,
16-
Authentication,
17-
# openURL,
16+
Authentication
1817
)
1918
from owslib.etree import etree
2019
from owslib.fgdc import Metadata
2120
from owslib.iso import MD_Metadata
21+
from owslib.iso3 import MD_Metadata as MD_Metadata3 # ISO 19115 Part 3 XML
2222
from owslib.ows import (
2323
OwsCommon,
2424
ServiceIdentification,
@@ -488,6 +488,10 @@ def parse_remote_metadata(self, timeout=30):
488488
if mdelem is not None:
489489
metadataUrl["metadata"] = MD_Metadata(mdelem)
490490
else:
491-
metadataUrl["metadata"] = None
491+
mdelem = MD_Metadata3.find_start(doc)
492+
if mdelem is not None:
493+
metadataUrl["metadata"] = MD_Metadata3(mdelem)
494+
else:
495+
metadataUrl["metadata"] = None
492496
except Exception:
493497
metadataUrl["metadata"] = None

owslib/feature/wfs200.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from owslib import util
1111
from owslib.fgdc import Metadata
1212
from owslib.iso import MD_Metadata
13+
from owslib.iso3 import MD_Metadata as MD_Metadata3 # ISO 19115 Part 3 XML
1314
from owslib.ows import Constraint, ServiceIdentification, ServiceProvider, OperationsMetadata
1415
from owslib.etree import etree
1516
from owslib.util import nspath, testXMLValue, openURL, Authentication
@@ -611,5 +612,12 @@ def parse_remote_metadata(self, timeout=30):
611612
if mdelem is not None:
612613
metadataUrl["metadata"] = MD_Metadata(mdelem)
613614
continue
615+
else: # ISO 19115 Part 3 XML
616+
mdelem = MD_Metadata3.find_start(doc)
617+
if mdelem is not None:
618+
metadataUrl["metadata"] = MD_Metadata3(mdelem)
619+
else:
620+
metadataUrl["metadata"] = None
621+
continue
614622
except Exception:
615623
metadataUrl["metadata"] = None

0 commit comments

Comments
 (0)