class DIARights(ISOElement): elements = [ ISOElement( name="use_limitation", search_paths=["gmd:useLimitation/gco:CharacterString/text()"], multiplicity="0..1"), ISOElement( name="use_constraints", search_paths=["gmd:useConstraints/gmd:MD_RestrictionCode/text()"], multiplicity="0..1"), ]
class ISOTextGroup(ISOElement): elements = [ ISOElement( name="text", search_paths=["gmd:LocalisedCharacterString/text()"], multiplicity="1", ), ISOElement( name="locale", search_paths=["gmd:LocalisedCharacterString/@locale"], multiplicity="1", ) ]
class ISOCornerPoints(ISOElement): elements = [ ISOElement( name="pos", search_paths=["gml:Point/gml:pos/text()"], multiplicity="*", ) ]
class DIAISOResponsibleParty(ISOElement): elements = [ ISOElement(name="contact-info", search_paths=[ "gmd:contactInfo/gmd:CI_Contact", ], multiplicity="0..1", elements=[ ISOElement( name="phone", search_paths=[ ("gmd:phone/gmd:CI_Telephone/gmd:voice/" "gco:CharacterString/text()"), ], multiplicity="0..1", ), ]) ]
ISODocument.elements.append( ISOResponsibleParty( name="cited-responsible-party", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:citation/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty" ], multiplicity="1..*", )) ISODocument.elements.append( ISOElement( name="conformity-specification-title", search_paths=[ "gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_DomainConsistency/gmd:result/gmd:DQ_ConformanceResult/gmd:specification/gmd:CI_Citation/gmd:title/gco:CharacterString/text()" ], multiplicity="1", )) ISOKeyword.elements.append( ISOElement( name="thesaurus-title", search_paths=[ "gmd:thesaurusName/gmd:CI_Citation/gmd:title/gco:CharacterString/text()", ], multiplicity="1", )) ISOKeyword.elements.append( ISOElement(
class ISOCharacterSet(ISOElement): elements = [ ISOElement(name="code", search_paths=["gmd:MD_CharacterSetCode/@codeListValue"], multiplicity="0..1") ]
class NgdsXmlMapping(ISODocument): elements = [ ISOElement( name="guid", search_paths="gmd:fileIdentifier/gco:CharacterString/text()", multiplicity="0..1", ), ISOElement( name="metadata-language", search_paths=[ "gmd:language/gmd:LanguageCode/@codeListValue", "gmd:language/gmd:LanguageCode/text()", ], multiplicity="0..1", ), ISOElement( name="metadata-standard-name", search_paths="gmd:metadataStandardName/gco:CharacterString/text()", multiplicity="0..1", ), ISOElement( name="metadata-standard-version", search_paths= "gmd:metadataStandardVersion/gco:CharacterString/text()", multiplicity="0..1", ), ISOElement( name="resource-type", search_paths=[ "gmd:hierarchyLevel/gmd:MD_ScopeCode/@codeListValue", "gmd:hierarchyLevel/gmd:MD_ScopeCode/text()", ], multiplicity="*", ), ISOResponsibleParty( name="metadata-point-of-contact", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact/gmd:CI_ResponsibleParty", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:pointOfContact/gmd:CI_ResponsibleParty", ], multiplicity="1..*", ), ISOElement( name="metadata-date", search_paths=[ "gmd:dateStamp/gco:DateTime/text()", "gmd:dateStamp/gco:Date/text()", ], multiplicity="1", ), ISOElement( name="spatial-reference-system", search_paths=[ "gmd:referenceSystemInfo/gmd:MD_ReferenceSystem/gmd:referenceSystemIdentifier/gmd:RS_Identifier/gmd:code/gco:CharacterString/text()", ], multiplicity="0..1", ), ISOElement( name="title", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:title/gco:CharacterString/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:citation/gmd:CI_Citation/gmd:title/gco:CharacterString/text()", ], multiplicity="1", ), ISOElement( name="alternate-title", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:alternateTitle/gco:CharacterString/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:citation/gmd:CI_Citation/gmd:alternateTitle/gco:CharacterString/text()", ], multiplicity="*", ), ISOReferenceDate( name="dataset-reference-date", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date", ], multiplicity="1..*", ), ISOElement( name="unique-resource-identifier", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:identifier/gmd:MD_Identifier/gmd:code/gco:CharacterString/text()", "gmd:identificationInfo/gmd:SV_ServiceIdentification/gmd:citation/gmd:CI_Citation/gmd:identifier/gmd:MD_Identifier/gmd:code/gco:CharacterString/text()", ], multiplicity="0..1", ), ISOElement( name="presentation-form", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:presentationForm/gmd:CI_PresentationFormCode/text()", "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:presentationForm/gmd:CI_PresentationFormCode/@codeListValue", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:citation/gmd:CI_Citation/gmd:presentationForm/gmd:CI_PresentationFormCode/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:citation/gmd:CI_Citation/gmd:presentationForm/gmd:CI_PresentationFormCode/@codeListValue", ], multiplicity="*", ), ISOElement( name="abstract", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:abstract/gco:CharacterString/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:abstract/gco:CharacterString/text()", ], multiplicity="1", ), ISOElement( name="purpose", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:purpose/gco:CharacterString/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:purpose/gco:CharacterString/text()", ], multiplicity="0..1", ), ISOResponsibleParty( name="responsible-organisation", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:pointOfContact/gmd:CI_ResponsibleParty", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:pointOfContact/gmd:CI_ResponsibleParty", "gmd:contact/gmd:CI_ResponsibleParty", ], multiplicity="1..*", ), ISOElement( name="frequency-of-update", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceMaintenance/gmd:MD_MaintenanceInformation/gmd:maintenanceAndUpdateFrequency/gmd:MD_MaintenanceFrequencyCode/@codeListValue", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceMaintenance/gmd:MD_MaintenanceInformation/gmd:maintenanceAndUpdateFrequency/gmd:MD_MaintenanceFrequencyCode/@codeListValue", "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceMaintenance/gmd:MD_MaintenanceInformation/gmd:maintenanceAndUpdateFrequency/gmd:MD_MaintenanceFrequencyCode/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceMaintenance/gmd:MD_MaintenanceInformation/gmd:maintenanceAndUpdateFrequency/gmd:MD_MaintenanceFrequencyCode/text()", ], multiplicity="0..1", ), ISOElement( name="maintenance-note", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceMaintenance/gmd:MD_MaintenanceInformation/gmd:maintenanceNote/gco:CharacterString/text()", "gmd:identificationInfo/gmd:SV_ServiceIdentification/gmd:resourceMaintenance/gmd:MD_MaintenanceInformation/gmd:maintenanceNote/gco:CharacterString/text()", ], multiplicity="0..1", ), ISOElement( name="progress", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:status/gmd:MD_ProgressCode/@codeListValue", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:status/gmd:MD_ProgressCode/@codeListValue", "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:status/gmd:MD_ProgressCode/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:status/gmd:MD_ProgressCode/text()", ], multiplicity="*", ), ISOKeyword( name="keywords", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords/gmd:MD_Keywords", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:descriptiveKeywords/gmd:MD_Keywords", ], multiplicity="*"), ISOElement( name="keyword-inspire-theme", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/gco:CharacterString/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:descriptiveKeywords/gmd:MD_Keywords/gmd:keyword/gco:CharacterString/text()", ], multiplicity="*", ), # Deprecated: kept for backwards compatibilty ISOElement( name="keyword-controlled-other", search_paths=[ "gmd:identificationInfo/srv:SV_ServiceIdentification/srv:keywords/gmd:MD_Keywords/gmd:keyword/gco:CharacterString/text()", ], multiplicity="*", ), ISOUsage( name="usage", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceSpecificUsage/gmd:MD_Usage", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceSpecificUsage/gmd:MD_Usage", ], multiplicity="*"), ISOElement( name="limitations-on-public-access", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints/gmd:otherConstraints/gco:CharacterString/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints/gmd:otherConstraints/gco:CharacterString/text()", ], multiplicity="*", ), ISOElement( name="access-constraints", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints/gmd:accessConstraints/gmd:MD_RestrictionCode/@codeListValue", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints/gmd:accessConstraints/gmd:MD_RestrictionCode/@codeListValue", "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints/gmd:accessConstraints/gmd:MD_RestrictionCode/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_LegalConstraints/gmd:accessConstraints/gmd:MD_RestrictionCode/text()", ], multiplicity="*", ), ISOElement( name="use-constraints", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:resourceConstraints/gmd:MD_Constraints/gmd:useLimitation/gco:CharacterString/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:resourceConstraints/gmd:MD_Constraints/gmd:useLimitation/gco:CharacterString/text()", ], multiplicity="*", ), ISOAggregationInfo( name="aggregation-info", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:aggregationInfo/gmd:MD_AggregateInformation", "gmd:identificationInfo/gmd:SV_ServiceIdentification/gmd:aggregationInfo/gmd:MD_AggregateInformation", ], multiplicity="*"), ISOElement( name="spatial-data-service-type", search_paths=[ "gmd:identificationInfo/srv:SV_ServiceIdentification/srv:serviceType/gco:LocalName/text()", ], multiplicity="0..1", ), ISOElement( name="spatial-resolution", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:spatialResolution/gmd:MD_Resolution/gmd:distance/gco:Distance/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:spatialResolution/gmd:MD_Resolution/gmd:distance/gco:Distance/text()", ], multiplicity="0..1", ), ISOElement( name="spatial-resolution-units", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:spatialResolution/gmd:MD_Resolution/gmd:distance/gco:Distance/@uom", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:spatialResolution/gmd:MD_Resolution/gmd:distance/gco:Distance/@uom", ], multiplicity="0..1", ), ISOElement( name="equivalent-scale", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:spatialResolution/gmd:MD_Resolution/gmd:equivalentScale/gmd:MD_RepresentativeFraction/gmd:denominator/gco:Integer/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:spatialResolution/gmd:MD_Resolution/gmd:equivalentScale/gmd:MD_RepresentativeFraction/gmd:denominator/gco:Integer/text()", ], multiplicity="*", ), ISOElement( name="dataset-language", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:language/gmd:LanguageCode/@codeListValue", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:language/gmd:LanguageCode/@codeListValue", "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:language/gmd:LanguageCode/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:language/gmd:LanguageCode/text()", ], multiplicity="*", ), ISOElement( name="topic-category", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:topicCategory/gmd:MD_TopicCategoryCode/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:topicCategory/gmd:MD_TopicCategoryCode/text()", ], multiplicity="*", ), ISOElement( name="extent-controlled", search_paths=[], multiplicity="*", ), ISOElement( name="extent-free-text", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicDescription/gmd:geographicIdentifier/gmd:MD_Identifier/gmd:code/gco:CharacterString/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/srv:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicDescription/gmd:geographicIdentifier/gmd:MD_Identifier/gmd:code/gco:CharacterString/text()", ], multiplicity="*", ), ISOBoundingBox( name="bbox", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox", "gmd:identificationInfo/srv:SV_ServiceIdentification/srv:extent/gmd:EX_Extent/gmd:geographicElement/gmd:EX_GeographicBoundingBox", ], multiplicity="*", ), ISOElement( name="temporal-extent-begin", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/srv:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:beginPosition/text()", ], multiplicity="*", ), ISOElement( name="temporal-extent-end", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition/text()", "gmd:identificationInfo/srv:SV_ServiceIdentification/srv:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimePeriod/gml:endPosition/text()", ], multiplicity="*", ), ISOElement( name="vertical-extent", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:verticalElement/gmd:EX_VerticalExtent", "gmd:identificationInfo/srv:SV_ServiceIdentification/srv:extent/gmd:EX_Extent/gmd:verticalElement/gmd:EX_VerticalExtent", ], multiplicity="*", ), ISOCoupledResources( name="coupled-resource", search_paths=[ "gmd:identificationInfo/srv:SV_ServiceIdentification/srv:operatesOn", ], multiplicity="*", ), ISOElement( name="additional-information-source", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:supplementalInformation/gco:CharacterString/text()", ], multiplicity="0..1", ), ISODataFormat( name="data-format", search_paths=[ "gmd:distributionInfo/gmd:MD_Distribution/gmd:distributionFormat/gmd:MD_Format", ], multiplicity="*", ), ISOResponsibleParty( name="distributor", search_paths=[ "gmd:distributionInfo/gmd:MD_Distribution/gmd:distributor/gmd:MD_Distributor/gmd:distributorContact/gmd:CI_ResponsibleParty", ], multiplicity="*", ), ISOResourceLocator( name="resource-locator", search_paths=[ "gmd:distributionInfo/gmd:MD_Distribution/gmd:transferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource", "gmd:distributionInfo/gmd:MD_Distribution/gmd:distributor/gmd:MD_Distributor/gmd:distributorTransferOptions/gmd:MD_DigitalTransferOptions/gmd:onLine/gmd:CI_OnlineResource" ], multiplicity="*", ), ISOResourceLocator( name="resource-locator-identification", search_paths=[ "gmd:identificationInfo//gmd:CI_OnlineResource", ], multiplicity="*", ), ISOElement( name="conformity-specification", search_paths=[ "gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_DomainConsistency/gmd:result/gmd:DQ_ConformanceResult/gmd:specification", ], multiplicity="0..1", ), ISOElement( name="conformity-pass", search_paths=[ "gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_DomainConsistency/gmd:result/gmd:DQ_ConformanceResult/gmd:pass/gco:Boolean/text()", ], multiplicity="0..1", ), ISOElement( name="conformity-explanation", search_paths=[ "gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_DomainConsistency/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", ], multiplicity="0..1", ), ISOElement( name="lineage", search_paths=[ "gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:lineage/gmd:LI_Lineage/gmd:statement/gco:CharacterString/text()", ], multiplicity="0..1", ), ISOBrowseGraphic( name="browse-graphic", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:graphicOverview/gmd:MD_BrowseGraphic", "gmd:identificationInfo/srv:SV_ServiceIdentification/gmd:graphicOverview/gmd:MD_BrowseGraphic", ], multiplicity="*", ), ################################### # Metadata Maintainer responsible party ISOResponsibleParty( name="maintainers", search_paths=["gmd:contact/gmd:CI_ResponsibleParty"], multiplicity="*"), # Other ID ISOElement( name="other_id", search_paths="gmd:dataSetURI/gco:CharacterString/text()", multiplicity="0..1", # "*", "1..*", "1" are other options ), # Data Type ISOElement( name="data_type", search_paths="gmd:hierarchyLevelName/gco:CharacterString/text()", multiplicity="*", # "*", "1..*", "1" are other options ), # Pub Date ISOElement( name="publication_date", search_paths= "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date/gmd:date/gco:DateTime/text()", multiplicity="0..1", # "*", "1..*", "1" are other options ), # Authors ISOResponsibleParty( name="authors", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty" ], multiplicity="*"), # Quality <<< Node that CKAN ISODocument object pulls explanation from gmd:DQ_DomainConsistency # into conformity-explanation. Handler for quality needs to be a complex object like ResponsibleParty # Include in this array of paths the paths for DQ_Elements that seem likely tohave text explanations... [SMR 2014-03-21] ISOElement( name="quality", search_paths=[ "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_CompletenessCommission/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_CompletenessOmission/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_ConceptualConsistency/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_FormatConsistency/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_TopologicalConsistency/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_NonQuantitativeAttributeAccuracy/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_ThematicClassificationCorrectness/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_TemporalConsistency/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_TemporalValidity/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()" ], multiplicity="*", # "*", "1..*", "1" are other options ), # Lineage <<< Note that the CKAN ISODocument object already defines this. Its not clear why # its defined here as well... ISOElement( name="lineage", search_paths= "gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:lineage/gmd:LI_Lineage/gmd:statement/gco:CharacterString/text()", multiplicity="0..1", # "*", "1..*", "1" are other options ), # Status <<< NOte that CKAN ISODocument object harvests this element into 'progress' ISOElement( name="status", search_paths= "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:status/gmd:MD_ProgressCode/@codeListValue", multiplicity="0..1", # "*", "1..*", "1" are other options ) ]
class NgdsXmlMapping(ISODocument): """ Inherits from ckanext.spatial.model.MappedXmlDocument. ckanext.spatial.model.ISODocument is a similar example (see https://github.com/ckan/ckanext-spatial/blob/master/ckanext/spatial/model/harvested_metadata.py) - Invoke with `my_ngds_mapping = NgdsXmlMapping(xml_str=None, xml_tree=None)` - Then get values by `my_ngds_mapping.read_values()` """ elements = [ # Metadata Maintainer responsible party ISOResponsibleParty( name="maintainers", search_paths=["gmd:contact/gmd:CI_ResponsibleParty"], multiplicity="*"), # Other ID ISOElement( name="other_id", search_paths="gmd:dataSetURI/gco:CharacterString/text()", multiplicity="0..1", # "*", "1..*", "1" are other options ), # Data Type ISOElement( name="data_type", search_paths="gmd:hierarchyLevelName/gco:CharacterString/text()", multiplicity="*", # "*", "1..*", "1" are other options ), # Pub Date ISOElement( name="publication_date", search_paths= "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date/gmd:date/gco:DateTime/text()", multiplicity="0..1", # "*", "1..*", "1" are other options ), # Authors ISOResponsibleParty( name="authors", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty" ], multiplicity="*"), # Quality <<< Node that CKAN ISODocument object pulls explanation from gmd:DQ_DomainConsistency # into conformity-explanation. Handler for quality needs to be a complex object like ResponsibleParty # Include in this array of paths the paths for DQ_Elements that seem likely tohave text explanations... [SMR 2014-03-21] ISOElement( name="quality", search_paths=[ "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_CompletenessCommission/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_CompletenessOmission/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_ConceptualConsistency/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_FormatConsistency/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_TopologicalConsistency/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_NonQuantitativeAttributeAccuracy/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_ThematicClassificationCorrectness/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_TemporalConsistency/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()", "/gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:report/gmd:DQ_TemporalValidity/gmd:result/gmd:DQ_ConformanceResult/gmd:explanation/gco:CharacterString/text()" ], multiplicity="*", # "*", "1..*", "1" are other options ), # Lineage <<< Note that the CKAN ISODocument object already defines this. Its not clear why # its defined here as well... ISOElement( name="lineage", search_paths= "gmd:dataQualityInfo/gmd:DQ_DataQuality/gmd:lineage/gmd:LI_Lineage/gmd:statement/gco:CharacterString/text()", multiplicity="0..1", # "*", "1..*", "1" are other options ), # Status <<< NOte that CKAN ISODocument object harvests this element into 'progress' ISOElement( name="status", search_paths= "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:status/gmd:MD_ProgressCode/@codeListValue", multiplicity="0..1", # "*", "1..*", "1" are other options ) ] def infer_values(self, values): return values
from ckan.logic import ValidationError, NotFound, get_action from pylons import config from datetime import datetime log = logging.getLogger(__name__) # Extend the ISODocument definitions by adding some more useful elements log.info('GeoNetwork harvester: extending ISODocument with TimeInstant') ISODocument.elements.append( ISOElement( name="temporal-extent-instant", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/gmd:EX_Extent/gmd:temporalElement/gmd:EX_TemporalExtent/gmd:extent/gml:TimeInstant/gml:timePosition/text()", ], multiplicity="*", )) # Some old GN instances still uses the old GML URL # We'll add more xpath for addressing this issue log.info('GeoNetwork harvester: adding old GML URI') ISOElement.namespaces['oldgml'] = "http://www.opengis.net/gml" for element in ISODocument.elements: newpaths = [] for path in element.search_paths: if "gml:" in path: newpath = path.replace('gml:', 'oldgml:')
class DIADocument(MappedXmlDocument): elements = [ ISOElement( name="language", search_paths=[ ("gmd:identificationInfo/gmd:MD_DataIdentification/" "gmd:language/gco:CharacterString/text()"), # Original search strings from # ckanext.spatial.models.harvested_metadata ("gmd:identificationInfo/gmd:MD_DataIdentification/" "gmd:language/gmd:LanguageCode/@codeListValue"), ("gmd:identificationInfo/srv:SV_ServiceIdentification/" "gmd:language/gmd:LanguageCode/@codeListValue"), ("gmd:identificationInfo/gmd:MD_DataIdentification/" "gmd:language/gmd:LanguageCode/text()"), ("gmd:identificationInfo/srv:SV_ServiceIdentification/" "gmd:language/gmd:LanguageCode/text()"), ], multiplicity="0..1", ), ISOElement( name="jurisdiction", search_paths=[ ("gmd:identificationInfo/gmd:MD_DataIdentification/gmd:extent/" "gmd:EX_Extent/gmd:geographicElement/" "gmd:EX_GeographicDescription/gmd:geographicIdentifier/" "gmd:MD_Identifier/gmd:code/gco:CharacterString/text()") ], multiplicity="0..1"), DIAISOResponsibleParty( name="metadata-point-of-contact", search_paths=[ ("gmd:identificationInfo/gmd:MD_DataIdentification/" "gmd:pointOfContact/gmd:CI_ResponsibleParty"), ("gmd:identificationInfo/srv:SV_ServiceIdentification/" "gmd:pointOfContact/gmd:CI_ResponsibleParty"), ], multiplicity="1..*", ), DIARights(name="rights", search_paths=[ ("gmd:identificationInfo/gmd:MD_DataIdentification/" "gmd:resourceConstraints/gmd:MD_LegalConstraints") ], multiplicity="*"), ISODataFormat( name="data-format", search_paths=[("gmd:distributionInfo/gmd:MD_Distribution/" "gmd:distributionFormat/gmd:MD_Format"), ("gmd:identificationInfo/gmd:MD_DataIdentification/" "gmd:resourceFormat/gmd:MD_Format")], multiplicity="*", ), ISOCornerPoints(name="corner-points", search_paths=[ ("/gmd:MD_Metadata/gmd:spatialRepresentationInfo/" "gmd:MD_Georectified/gmd:cornerPoints") ], multiplicity="*"), ]
class NgdsXmlMapping(ISODocument): """ Inherits from ckanext.spatial.model.MappedXmlDocument. ckanext.spatial.model.ISODocument is a similar example - Invoke with `my_ngds_mapping = NgdsXmlMapping(xml_str=None, xml_tree=None)` - Then get values by `my_ngds_mapping.read_values()` """ elements = [ # Maintainer ISOResponsibleParty( name="maintainer", search_paths=[ "gmd:contact/gmd:CI_ResponsibleParty" ], multiplicity="1" ), # Other ID ISOElement( name="other_id", search_paths="gmd:dataSetURI/gco:CharacterString/text()", multiplicity="0..1", # "*", "1..*", "1" are other options ), # Data Type ISOElement( name="data_type", search_paths="gmd:hierarchyLevelName/gco:CharacterString/text()", multiplicity="1", # "*", "1..*", "1" are other options ), # Pub Date ISOElement( name="publication_date", search_paths="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:date/gmd:CI_Date/gmd:date/gco:DateTime/text()", multiplicity="0..1", # "*", "1..*", "1" are other options ), # Authors ISOResponsibleParty( name="authors", search_paths=[ "gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:citedResponsibleParty/gmd:CI_ResponsibleParty" ], multiplicity="*" ), # Quality <<< ISOElement( name="quality", search_paths="gmd:dataSetURI/gco:CharacterString/text()", multiplicity="0..1", # "*", "1..*", "1" are other options ), # Lineage <<< ISOElement( name="lineage", search_paths="gmd:dataSetURI/gco:CharacterString/text()", multiplicity="0..1", # "*", "1..*", "1" are other options ), # Status ISOElement( name="status", search_paths="gmd:identificationInfo/gmd:MD_DataIdentification/gmd:status/gmd:MD_ProgressCode/@codeListValue", multiplicity="0..1", # "*", "1..*", "1" are other options ) ] def infer_values(self, values): return values