Skip to content

Commit 7633bc2

Browse files
committed
Rearrange doc and add section describing people, roles, orgs etc.
1 parent 25568e3 commit 7633bc2

1 file changed

Lines changed: 170 additions & 26 deletions

File tree

content/user-guide.md

Lines changed: 170 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -283,32 +283,7 @@ The change in hierarchy means that `"https://cran.r-project.org"` is
283283
represented as the `"url"` of `rmarkdown`, instead of being the url of
284284
`Central R Archive Network (CRAN)`.
285285

286-
### Example of a CodeMeta file
287-
288-
The following is an example of a basic `codemeta.json` that can be put at the
289-
root of a code repository:
290-
291-
```json
292-
{
293-
"@context": "https://w3id.org/codemeta/3.1",
294-
"type": "SoftwareSourceCode",
295-
"applicationCategory": "Biology",
296-
"codeRepository": "https://github.com/gem-pasteur/macsyfinder",
297-
"description": "MacSyFinder is a program to model and detect macromolecular systems, genetic pathways… in prokaryotes protein datasets.",
298-
"downloadUrl": "https://pypi.org/project/MacSyFinder/",
299-
"license": "https://spdx.org/licenses/GPL-3.0+",
300-
"name": "macsyfinder",
301-
"version": "2.1.4",
302-
"continuousIntegration": "https://github.com/gem-pasteur/macsyfinder/actions",
303-
"developmentStatus": "active",
304-
"issueTracker": "https://github.com/gem-pasteur/macsyfinder/issues",
305-
"referencePublication": "https://doi.org/10.24072/pcjournal.250"
306-
}
307-
```
308-
309-
([Link to full example](https://github.com/gem-pasteur/macsyfinder/blob/master/codemeta.json)).
310-
311-
## The context
286+
## Context
312287

313288
Every CodeMeta document must refer to the context file `codemeta.jsonld`, for
314289
example via a URL. This indicates that all terms in the document should be
@@ -342,6 +317,175 @@ For example, use the following for the latest release:
342317
"@context": "https://w3id.org/codemeta/3.1"
343318
```
344319

320+
## Attributions
321+
322+
Giving attribution to people and organizations who have made a software
323+
application is a large part of many `codemeta.json` files, especially if
324+
projects involve a community.
325+
326+
It is important to give proper attribution to the contributions that have been
327+
made. This includes using stable identifiers where possible and meaningful
328+
descriptions of each party's participation.
329+
330+
This is done primarily with the use of `Person`, `Role`, and `Organization`
331+
properties types.
332+
333+
### People
334+
335+
The properties listed in the [terms](terms) tables with a type `Person`
336+
can list one or more objects of the `Person` type that describe the various
337+
individuals who made the software. They have the `@type` or `type` value of
338+
`Person`.
339+
340+
They are top-level properties and should, where possible, contain an `@id`
341+
value that consistently identifies the individual and can be used for
342+
JSON-LD linking operations.
343+
344+
The distinction between an `author` and a `contributor` is not strictly
345+
defined and each project can assign it according to their preference. The
346+
properties describe a `contributor` as someone considered a "secondary
347+
contributor", perhaps to be reserved for non-code contributions.
348+
349+
A `maintainer` should include a method of contact, such as an email address.
350+
351+
Applications with one `author` may list the individual values directly within
352+
the `author` object. For example:
353+
354+
```json
355+
"author": {
356+
"@id": "http://orcid.org/0000-0003-0077-4738",
357+
"@type": "Person",
358+
"email": "slaughter@nceas.ucsb.edu",
359+
"givenName": "Peter",
360+
"familyName": "Slaughter"
361+
}
362+
```
363+
364+
Applications with multiple `author` individuals must describe them within an
365+
array (`[`, `]`) of objects, as follows:
366+
367+
```json
368+
"author": [
369+
{
370+
"id": "https://orcid.org/0000-0002-0220-0482",
371+
"type": "Person",
372+
"affiliation": {
373+
"type": "Organization",
374+
"name": "Institut Pasteur, Université Paris Cité, Bioinformatics and Biostatistics HUB, Paris, France "
375+
},
376+
"email": "bneron@pasteur.fr",
377+
"familyName": "Néron",
378+
"givenName": "Bertrand"
379+
},
380+
{
381+
"id": "https://orcid.org/0000-0002-5231-3346",
382+
"type": "Person",
383+
"affiliation": {
384+
"type": "Organization",
385+
"name": " Univ. Grenoble Alpes, CNRS, UMR 5525, VetAgro Sup, Grenoble INP, TIMC, 38000 Grenoble, France "
386+
},
387+
"email": "sophie.abby@univ-grenoble-alpes.fr",
388+
"familyName": "Abby",
389+
"givenName": "Sophie"
390+
},
391+
...
392+
]
393+
```
394+
395+
The specific values of the properties, such as `familyName` and `givenName`
396+
are free-form, and often contain pseudonyms or group names. `codemeta.json`
397+
files with such values are still valid, but where possible the values should
398+
refer to a consistent identity of an individual.
399+
400+
### Roles
401+
402+
The `Role` type property is used within the `author` property to define the
403+
participation of a `Person`.
404+
405+
This is distinct from the `contributor` and `maintainer` properties.
406+
407+
The `Role` must link to a `Person` previously defined in the top-level
408+
property. The example below demonstrates the `id` and `schema:author` values
409+
providing this link.
410+
411+
```json
412+
"author": [
413+
{
414+
"familyName": "Mannem",
415+
"id": "https://github.com/ruthvikm",
416+
"givenName": "Ruthvik",
417+
"type": "Person"
418+
},
419+
420+
...
421+
422+
{
423+
"roleName": "Tech Lead",
424+
"schema:author": "https://github.com/ruthvikm",
425+
"type": "Role"
426+
},
427+
428+
...
429+
430+
]
431+
432+
```
433+
434+
[Full example](https://github.com/oss-slu/Pi4Micronaut/blob/main/codemeta.json).
435+
436+
### Organizations
437+
438+
The properties listed in the [terms](terms) tables with a type `Organization`
439+
can list one or more organizations. They have the `type` value of
440+
`Organization`.
441+
442+
The `affiliation` property within a `Person` property is a common example of
443+
this object type. `affiliation` defines the associations that the individual
444+
has with various organizations. Like the `author` property, the properties
445+
can contain values, or an array of objects with those same values for multiple
446+
affiliations.
447+
448+
The [second example in the "People" section](user-guide/#people) contains a
449+
use of the affiliation property, with `Organization` as its type.
450+
451+
## Describing the Software
452+
453+
A minimum viable CodeMeta file needs only a `@context`, a `type` and a `name`.
454+
While valid, this is not a useful description of the software.
455+
456+
Each project's `codemeta.json` should represent that project's lifecycle,
457+
resources, and people. It should be considered a living document. Properties
458+
representing dynamic information such as `version` and `authors` should be
459+
updated as the software changes for the document to be most useful.
460+
461+
Useful properties include the ones in the example in the next section. Refer
462+
to the [terms](terms) page for all CodeMeta properties.
463+
464+
## Example of a CodeMeta file
465+
466+
The following is an example of a basic `codemeta.json` that can be put at the
467+
root of a code repository:
468+
469+
```json
470+
{
471+
"@context": "https://w3id.org/codemeta/3.1",
472+
"type": "SoftwareSourceCode",
473+
"applicationCategory": "Biology",
474+
"codeRepository": "https://github.com/gem-pasteur/macsyfinder",
475+
"description": "MacSyFinder is a program to model and detect macromolecular systems, genetic pathways… in prokaryotes protein datasets.",
476+
"downloadUrl": "https://pypi.org/project/MacSyFinder/",
477+
"license": "https://spdx.org/licenses/GPL-3.0+",
478+
"name": "macsyfinder",
479+
"version": "2.1.4",
480+
"continuousIntegration": "https://github.com/gem-pasteur/macsyfinder/actions",
481+
"developmentStatus": "active",
482+
"issueTracker": "https://github.com/gem-pasteur/macsyfinder/issues",
483+
"referencePublication": "https://doi.org/10.24072/pcjournal.250"
484+
}
485+
```
486+
487+
([Link to full example](https://github.com/gem-pasteur/macsyfinder/blob/master/codemeta.json)).
488+
345489
## Referencing CodeMeta
346490

347491
All versions, including release candidates, may be referred to consistently

0 commit comments

Comments
 (0)