-
Notifications
You must be signed in to change notification settings - Fork 0
/
doaj.go
48 lines (44 loc) · 1.24 KB
/
doaj.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package convert
import (
"errors"
"fmt"
"strings"
"github.com/miku/scholkit/schema/doaj"
"github.com/miku/scholkit/schema/fatcat"
)
var ErrMissingDOAJIdentifier = errors.New("missing DOAJ ID")
func DOAJRecordToFatcatRelease(record *doaj.Record) (*fatcat.Release, error) {
var release fatcat.Release
// Set title
if record.ID() == "" {
return nil, ErrMissingDOAJIdentifier
}
release.ID = fmt.Sprintf("doaj-%s", record.ID())
release.Title = record.Metadata.Dc.Title
// Set contributors
for _, creator := range record.Metadata.Dc.Creator {
names := strings.Split(creator.Text, " ")
var givenName, surname string
if len(names) > 0 {
surname = names[len(names)-1]
}
if len(names) > 1 {
givenName = strings.Join(names[:len(names)-1], " ")
}
release.Contribs = append(release.Contribs, fatcat.Contrib{
GivenName: givenName,
Surname: surname,
})
}
// Set DOI
release.ExtIDs.OAI = record.Header.Identifier
release.ExtIDs.DOI = record.DOI()
release.ExtIDs.DOAJ = record.ID()
// Set URL
release.Extra.Crossref.AlternativeId = append(release.Extra.Crossref.AlternativeId, record.URL())
// Set release date
release.ReleaseDate = record.Metadata.Dc.Date
// Set ident
release.Ident = record.ID()
return &release, nil
}