Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Funder should be in 'citedResponsibleParty' #924

Merged
merged 1 commit into from
Apr 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 61 additions & 6 deletions owslib/iso3.py
Original file line number Diff line number Diff line change
Expand Up @@ -407,16 +407,24 @@ def __init__(self, namespaces, md=None):
self.onlineresource = None
self.role = None
else:
val = md.find(util.nspath_eval('cit:party/cit:CI_Organisation/cit:individual/cit:CI_Individual/cit:name/gco:CharacterString', self.namespaces))
# Individual name
val = md.find(util.nspath_eval('cit:party/cit:CI_Individual/cit:name/gco:CharacterString', self.namespaces))
self.name = util.testXMLValue(val)

# Individual within organisation name
if self.name is None:
val = md.find(util.nspath_eval('cit:party/cit:CI_Organisation/cit:individual/cit:CI_Individual/cit:name/gco:CharacterString', self.namespaces))
self.name = util.testXMLValue(val)

# Organisation name
val = md.find(util.nspath_eval('cit:party/cit:CI_Organisation/cit:name/gco:CharacterString', self.namespaces))
self.organization = util.testXMLValue(val)

# Individual within organisation position
val = md.find(util.nspath_eval('cit:party/cit:CI_Organisation/cit:individual/cit:CI_Individual/cit:positionName/gco:CharacterString', self.namespaces))
self.position = util.testXMLValue(val)

# Telephone
# Organisation telephone
val_list = md.xpath('cit:party/cit:CI_Organisation/cit:contactInfo/cit:CI_Contact/cit:phone/cit:CI_Telephone[cit:numberType/cit:CI_TelephoneTypeCode/@codeListValue="voice"]/cit:number/gco:CharacterString', namespaces=self.namespaces)
if len(val_list) > 0:
self.phone = util.testXMLValue(val_list[0])
Expand All @@ -426,6 +434,7 @@ def __init__(self, namespaces, md=None):
if len(val_list) > 0:
self.fax = util.testXMLValue(val_list[0])

# Organisation address
val = md.find(util.nspath_eval(
'cit:party/cit:CI_Organisation/cit:contactInfo/cit:CI_Contact/cit:address/cit:CI_Address/cit:deliveryPoint/gco:CharacterString',
self.namespaces))
Expand All @@ -450,11 +459,13 @@ def __init__(self, namespaces, md=None):
self.namespaces))
self.country = util.testXMLValue(val)

# Organisation email
val = md.find(util.nspath_eval(
'cit:party/cit:CI_Organisation/cit:contactInfo/cit:CI_Contact/cit:address/cit:CI_Address/cit:electronicMailAddress/gco:CharacterString',
self.namespaces))
self.email = util.testXMLValue(val)

# Organisation online resources
val = md.find(util.nspath_eval(
'cit:party/cit:CI_Organisation/cit:contactInfo/cit:CI_Contact/cit:onlineResource/cit:CI_OnlineResource', self.namespaces))
if val is not None:
Expand Down Expand Up @@ -586,6 +597,7 @@ def __init__(self, namespaces, md=None, identtype=None):
self.supplementalinformation = None
self.spatialrepresentationtype = []
else:
# Title
self.identtype = identtype
val = md.find(util.nspath_eval(
'mri:citation/cit:CI_Citation/cit:title/gco:CharacterString', self.namespaces))
Expand All @@ -595,6 +607,7 @@ def __init__(self, namespaces, md=None, identtype=None):
'mri:citation/cit:CI_Citation/cit:alternateTitle/gco:CharacterString', self.namespaces))
self.alternatetitle = util.testXMLValue(val)

# Identifier
self.uricode = []
for end_tag in ['gco:CharacterString', 'gcx:Anchor']:
_values = md.findall(util.nspath_eval(
Expand All @@ -613,12 +626,14 @@ def __init__(self, namespaces, md=None, identtype=None):
if val is not None:
self.uricodespace.append(val)

# Date
self.date = []
self.datetype = []

for i in md.findall(util.nspath_eval('mri:citation/cit:CI_Citation/cit:date/cit:CI_Date', self.namespaces)):
self.date.append(CI_Date(self.namespaces, i))

# Use Limitation
self.uselimitation = []
self.uselimitation_url = []
uselimit_values = md.findall(util.nspath_eval(
Expand All @@ -628,6 +643,7 @@ def __init__(self, namespaces, md=None, identtype=None):
if val is not None:
self.uselimitation.append(val)

# Access constraints
self.accessconstraints = []
for i in md.findall(util.nspath_eval(
'mri:resourceConstraints/mco:MD_LegalConstraints/mco:accessConstraints/mco:MD_RestrictionCode',
Expand All @@ -636,8 +652,10 @@ def __init__(self, namespaces, md=None, identtype=None):
if val is not None:
self.accessconstraints.append(val)

# Classification
self.classification = [] # Left empty - no legal classification equivalent

# Other constraints
self.otherconstraints = []
for end_tag in ['gco:CharacterString', 'gcx:Anchor']:
for i in md.findall(util.nspath_eval(
Expand All @@ -647,6 +665,7 @@ def __init__(self, namespaces, md=None, identtype=None):
if val is not None:
self.otherconstraints.append(val)

# Security constraints
self.securityconstraints = []
for i in md.findall(util.nspath_eval(
'mri:resourceConstraints/mco:MD_SecurityConstraints/mco:classification/mco:MD_ClassificationCode',
Expand All @@ -655,6 +674,7 @@ def __init__(self, namespaces, md=None, identtype=None):
if val is not None:
self.securityconstraints.append(val)

# Use constraints
self.useconstraints = []
for i in md.findall(util.nspath_eval(
'mri:resourceConstraints/mco:MD_LegalConstraints/mco:useConstraints/mco:MD_RestrictionCode',
Expand All @@ -663,6 +683,7 @@ def __init__(self, namespaces, md=None, identtype=None):
if val is not None:
self.useconstraints.append(val)

# Spatial resolution denominators
self.denominators = []
for i in md.findall(util.nspath_eval(
'mri:spatialResolution/mri:MD_Resolution/mri:equivalentScale/mri:MD_RepresentativeFraction/mri:denominator/gco:Integer',
Expand All @@ -671,6 +692,7 @@ def __init__(self, namespaces, md=None, identtype=None):
if val is not None:
self.denominators.append(val)

# Spatial resolution distance and units of measure
self.distance = []
self.uom = []
for i in md.findall(util.nspath_eval(
Expand All @@ -680,12 +702,14 @@ def __init__(self, namespaces, md=None, identtype=None):
self.distance.append(val)
self.uom.append(i.get("uom"))

# Language code
self.resourcelanguagecode = []
for i in md.findall(util.nspath_eval('mri:defaultLocale/lan:PT_Locale/lan:language/lan:LanguageCode', self.namespaces)):
val = _testCodeListValue(i)
if val is not None:
self.resourcelanguagecode.append(val)

# Language
self.resourcelanguage = []
for i in md.findall(util.nspath_eval('mri:defaultLocale/lan:PT_Locale/lan:language/gco:CharacterString', self.namespaces)):
val = util.testXMLValue(i)
Expand All @@ -696,23 +720,46 @@ def __init__(self, namespaces, md=None, identtype=None):
self.publisher = []
self.contributor = []
self.funder = []
# Extract roles from point of contact for resource
for val in md.findall(util.nspath_eval('mri:pointOfContact/cit:CI_Responsibility', self.namespaces)):
role = val.find(util.nspath_eval('cit:role/cit:CI_RoleCode', self.namespaces))
if role is not None:
clv = _testCodeListValue(role)
rp = CI_Responsibility(self.namespaces, val)
if clv == 'originator':
# Creator
if clv in ['originator', 'principalInvestigator', 'author']:
self.creator.append(rp)
# Publisher
elif clv == 'publisher':
self.publisher.append(rp)
elif clv == 'author':
# Contributor
elif clv in ['collaborator', 'coAuthor', 'contributor', 'editor']:
self.contributor.append(rp)
elif clv == 'funder':
self.funder.append(rp)

# Edition
val = md.find(util.nspath_eval('cit:CI_Citation/cit:edition/gco:CharacterString', self.namespaces))
self.edition = util.testXMLValue(val)

# Extract roles from responsible party for resource
for val in md.findall(util.nspath_eval('mri:citation/cit:CI_Citation/cit:citedResponsibleParty/cit:CI_Responsibility', self.namespaces)):
role = val.find(util.nspath_eval('cit:role/cit:CI_RoleCode', self.namespaces))
if role is not None:
clv = _testCodeListValue(role)
rp = CI_Responsibility(self.namespaces, val)
# Creator
if clv in ['originator', 'principalInvestigator', 'author']:
self.creator.append(rp)
# Publisher
elif clv == 'publisher':
self.publisher.append(rp)
# Contributor
elif clv in ['collaborator', 'coAuthor', 'contributor', 'processor', 'editor']:
self.contributor.append(rp)
# Funder
elif clv == 'funder':
self.funder.append(rp)

# Abstract
val = md.find(util.nspath_eval('mri:abstract/gco:CharacterString', self.namespaces))
self.abstract = util.testXMLValue(val)

Expand All @@ -723,11 +770,14 @@ def __init__(self, namespaces, md=None, identtype=None):
self.abstract = util.testXMLValue(val)
self.abstract_url = val.attrib.get(util.nspath_eval('xlink:href', self.namespaces))

# Purpose
val = md.find(util.nspath_eval('mri:purpose/gco:CharacterString', self.namespaces))
self.purpose = util.testXMLValue(val)

# Status
self.status = _testCodeListValue(md.find(util.nspath_eval('mri:status/mri:MD_ProgressCode', self.namespaces)))

# Graphic overview
self.graphicoverview = []
for val in md.findall(util.nspath_eval(
'mri:graphicOverview/mcc:MD_BrowseGraphic/mcc:fileName/gco:CharacterString', self.namespaces)):
Expand All @@ -736,28 +786,33 @@ def __init__(self, namespaces, md=None, identtype=None):
if val2 is not None:
self.graphicoverview.append(val2)

# Point of Contact
self.contact = []
for i in md.findall(util.nspath_eval('mri:pointOfContact/cit:CI_Responsibility', self.namespaces)):
o = CI_Responsibility(self.namespaces, i)
self.contact.append(o)

# Spatial repreentation type
self.spatialrepresentationtype = []
for val in md.findall(util.nspath_eval(
'mri:spatialRepresentationType/mcc:MD_SpatialRepresentationTypeCode', self.namespaces)):
val = util.testXMLAttribute(val, 'codeListValue')
if val:
self.spatialrepresentationtype.append(val)

# Keywords
self.keywords = []
for mdkw in md.findall(util.nspath_eval('mri:descriptiveKeywords/mri:MD_Keywords', self.namespaces)):
self.keywords.append(MD_Keywords(self.namespaces, mdkw))

# Topic category
self.topiccategory = []
for i in md.findall(util.nspath_eval('mri:topicCategory/mri:MD_TopicCategoryCode', self.namespaces)):
val = util.testXMLValue(i)
if val is not None:
self.topiccategory.append(val)

# Supplamental information
val = md.find(util.nspath_eval('mri:supplementalInformation/gco:CharacterString', self.namespaces))
self.supplementalinformation = util.testXMLValue(val)

Expand Down
Loading
Loading