Proposal for author roles in CodeMeta v3
See original GitHub issueThe question of authorship and contribution roles in the scholarly ecosystem has been addressed in different ways, yet software remains an uncharted terrain. In the CRedit for example, software is a unique role that combines all roles related to software authorship (see https://casrai.org/credit/ )
We know that the situation with software development is a bit more complex and can’t be resumed in the distinction between author
and contributor
.
Recently the Inria research center’s citation WG has published the following article with a specific taxonomy concerning software roles:
Pierre Alliez, Roberto Di Cosmo, Benjamin Guedj, Alain Girault, Mohand-Said Hacid, Arnaud Legrand, Nicolas Rougier. Attributing and Referencing (Research) Software: Best Practices and Outlook From Inria. Computing in Science > Engineering, 22 (1), pp. 39-52, 2020, ISSN: 1558-366X. https://dx.doi.org/10.1109/MCSE.2019.2949413 also available https://hal.archives-ouvertes.fr/hal-02135891
We want to find a way to integrate the identified roles in the CodeMeta vocabulary and in schema.org.
To that end we propose on using the Role class under author
, and link it to a Person, as specified in the blog post on roles.
List of roles:
- Design (algorithm)
- Architecture
- Debugging
- Maintenance
- Coding
- Documentation
- Testing
- Support
- Management
Here is an example:
{
"@context": "https://doi.org/10.5063/schema/codemeta-2.0",
"@type": "SoftwareSourceCode",
"name": "Foo Software",
"author": [
{
"@type": "Role",
"roleName": "Design",
"startDate": "2000",
"endDate": "2002",
"author": {
"@type Person",
"@id": "http://example.org/~jdupont",
"givenName": "John",
"familyName": "Dupont",
"affiliation": [
{
"@type": "Organization",
"name": "CNRS"
},
{
"@type": "Organization",
"name": "Inria"
},
{
"@type": "Organization",
"name": "Université de Paris"
}
]
}
},
{
"@type": "Role",
"roleName": "Coding",
"startDate": "2000",
"endDate": "2002",
"author": {
"@id": "http://example.org/~jdupont"
}
},
{
"@type": "Role",
"roleName": "Documentation",
"startDate": "2000",
"endDate": "2002",
"author": {
"@id": "http://example.org/~jdupont"
}
}
]
}
Note that I added an ID to avoid duplicating the person’s data
Issue Analytics
- State:
- Created 3 years ago
- Reactions:3
- Comments:16 (7 by maintainers)
@mbjones very true! Though my take on this is that we benefit more by being consistent with schema.org rather than creating a chimera. This proposal is different, in that role would be an optional refinement/annotation of author, rather than a required field of “agent”, which wasn’t a CreativeWork property. In general I am supportive of valid schema.org being valid codemeta; and particularly if this pattern is likely to be used in markup of similar objects like academic journals.
Personally I’m still not a big fan of
role
codes in CRedit, in my own experience I always find them to be simultaneously too granular and too vague: it is often the case that one person takes a lead role in one aspect, say, documentation, and another in a different aspect, say, coding, but the coder does some writing and the documentation lead does some coding, so both get the same role codes (whether we’re talking about software or journal articles). But that’s neither here nor there I suppose. A nice thing about the above format is that a tool consuming codemeta (say, CiteAs) has the ability to ignore the role code refinement of ‘author’ if they want, while still being able to perform fundamental task like generating authorship list to create a citation.@ProgVal,
ah, I understand, role here is acting as an n-ary relationship. You are right in that converting to RDF the modeling would be wrong. However, how it’s done in the proposal the
author
relationship is still overloadedI would maybe introduce a “contributionRoles” property and do something similar to what @moranegg proposed:
This way you can use authors/contributors/maintainers properties independently of the roles.
But this is still requires quite a bit of complexity. If codemeta is aiming for simplicity, I would argue against using reified statements.