From 42db45d31fd8ff73c0968ddbb4d2e0ccd540a1fb Mon Sep 17 00:00:00 2001 From: Martin Fenner Date: Mon, 13 May 2024 14:04:47 +0200 Subject: [PATCH] handle missing affiliations in crossrefxml writer --- cmd/version.go | 2 +- crossrefxml/reader.go | 4 +-- crossrefxml/writer.go | 62 +++++++++++++++++++++++++------------------ 3 files changed, 39 insertions(+), 29 deletions(-) diff --git a/cmd/version.go b/cmd/version.go index 319525d..a507161 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -15,7 +15,7 @@ var versionCmd = &cobra.Command{ Short: "Print the version number of commonmeta", Long: `All software has versions. This is commonmeta's`, Run: func(cmd *cobra.Command, args []string) { - fmt.Println("Commonmeta v0.3.5 -- HEAD") + fmt.Println("Commonmeta v0.3.6 -- HEAD") }, } diff --git a/crossrefxml/reader.go b/crossrefxml/reader.go index d6b801d..36552f7 100644 --- a/crossrefxml/reader.go +++ b/crossrefxml/reader.go @@ -98,7 +98,7 @@ type Affiliation struct { type Affiliations struct { XMLName xml.Name `xml:"affiliations"` - Institution []Institution `xml:"institution"` + Institution []Institution `xml:"institution,omitempty"` } type ApprovalDate struct { @@ -334,7 +334,7 @@ type Format struct { type Institution struct { XMLName xml.Name `xml:"institution"` - InstitutionName string `xml:"institution_name"` + InstitutionName string `xml:"institution_name,omitempty"` InstitutionPlace string `xml:"institution_place,omitempty"` InstitutionID *InstitutionID `xml:"institution_id,omitempty"` } diff --git a/crossrefxml/writer.go b/crossrefxml/writer.go index a455505..2539128 100644 --- a/crossrefxml/writer.go +++ b/crossrefxml/writer.go @@ -102,36 +102,46 @@ func Convert(data commonmeta.Data) (Crossref, error) { if i > 0 { sequence = "additional" } - institution := []Institution{} - for _, a := range contributor.Affiliations { - if a.Name != "" { - if a.ID != "" { - institutionID := &InstitutionID{ - IDType: "ror", - Text: a.ID, + if len(contributor.Affiliations) > 0 { + institution := []Institution{} + for _, a := range contributor.Affiliations { + if a.Name != "" { + if a.ID != "" { + institutionID := &InstitutionID{ + IDType: "ror", + Text: a.ID, + } + institution = append(institution, Institution{ + InstitutionID: institutionID, + InstitutionName: a.Name, + }) + } else { + institution = append(institution, Institution{ + InstitutionName: a.Name, + }) } - institution = append(institution, Institution{ - InstitutionID: institutionID, - InstitutionName: a.Name, - }) - } else { - institution = append(institution, Institution{ - InstitutionName: a.Name, - }) } } + affiliations := &Affiliations{ + Institution: institution, + } + personName = append(personName, PersonName{ + ContributorRole: contributorRole, + Sequence: sequence, + ORCID: contributor.ID, + GivenName: contributor.GivenName, + Surname: contributor.FamilyName, + Affiliations: affiliations, + }) + } else { + personName = append(personName, PersonName{ + ContributorRole: contributorRole, + Sequence: sequence, + ORCID: contributor.ID, + GivenName: contributor.GivenName, + Surname: contributor.FamilyName, + }) } - affiliations := &Affiliations{ - Institution: institution, - } - personName = append(personName, PersonName{ - ContributorRole: contributorRole, - Sequence: sequence, - ORCID: contributor.ID, - GivenName: contributor.GivenName, - Surname: contributor.FamilyName, - Affiliations: affiliations, - }) } }