commonmeta-schema 1.0rc1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- commonmeta_schema-1.0rc1/.gitignore +16 -0
- commonmeta_schema-1.0rc1/LICENSE +21 -0
- commonmeta_schema-1.0rc1/PKG-INFO +152 -0
- commonmeta_schema-1.0rc1/README.md +129 -0
- commonmeta_schema-1.0rc1/fixtures/bibtex/crossref.bib +14 -0
- commonmeta_schema-1.0rc1/fixtures/bibtex/journal_article.bib +14 -0
- commonmeta_schema-1.0rc1/fixtures/bibtex/pure.bib +14 -0
- commonmeta_schema-1.0rc1/fixtures/bibtex_commonmeta/crossref.json +82 -0
- commonmeta_schema-1.0rc1/fixtures/bibtex_commonmeta/journal_article.json +42 -0
- commonmeta_schema-1.0rc1/fixtures/bibtex_out/journal_article.bib +16 -0
- commonmeta_schema-1.0rc1/fixtures/cff/CITATION.cff +83 -0
- commonmeta_schema-1.0rc1/fixtures/cff_commonmeta/CITATION.json +76 -0
- commonmeta_schema-1.0rc1/fixtures/codemeta/codemeta.json +86 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/blog_post_1.json +44 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/citeproc.json +50 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/citeproc_no_author.json +38 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/codemeta.json +65 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/crossref_journal_article.json +59 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/csl_journal_article.json +55 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/datacite_blog_post.json +54 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/datacite_blog_post_citeproc.json +104 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/datacite_dataset.json +172 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/datacite_date.json +88 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/datacite_dryad.json +76 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/datacite_multiple_identifiers.json +48 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/datacite_subject_scheme_for.json +76 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/dataset_geo.json +43 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/inveniordm_software.json +74 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/journal_article.json +54 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/journal_article_datacite_reader.json +44 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/jsonfeed_blog_post.json +138 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/jsonfeed_blog_post_sathe.json +64 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/jsonfeed_cczero_license.json +69 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/jsonfeed_ghost_with_affiliations.json +80 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/jsonfeed_post_with_funding.json +147 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/jsonfeed_post_with_relationships.json +112 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/jsonfeed_wordpress_with_references.json +132 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/schemaorg_blog_posting.json +51 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/schemaorg_geolocation.json +118 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/schemaorg_gtex.json +42 -0
- commonmeta_schema-1.0rc1/fixtures/commonmeta/schemaorg_journal_article.json +48 -0
- commonmeta_schema-1.0rc1/fixtures/crossref/crossref_journal_article.json +78 -0
- commonmeta_schema-1.0rc1/fixtures/crossref_out/crossref_journal_article.json +77 -0
- commonmeta_schema-1.0rc1/fixtures/crossref_xml/crossref_elife_01567.xml +606 -0
- commonmeta_schema-1.0rc1/fixtures/crossref_xml/journal_article.xml +75 -0
- commonmeta_schema-1.0rc1/fixtures/crossref_xml_commonmeta/crossref_elife_01567.json +371 -0
- commonmeta_schema-1.0rc1/fixtures/csl/citeproc.json +28 -0
- commonmeta_schema-1.0rc1/fixtures/csl/citeproc_no_author.json +22 -0
- commonmeta_schema-1.0rc1/fixtures/csl/csl_journal_article.json +22 -0
- commonmeta_schema-1.0rc1/fixtures/datacite/journal_article.json +70 -0
- commonmeta_schema-1.0rc1/fixtures/datacite_reader/datacite_blog_post.json +116 -0
- commonmeta_schema-1.0rc1/fixtures/datacite_reader/datacite_blog_post_citeproc.json +1 -0
- commonmeta_schema-1.0rc1/fixtures/datacite_reader/datacite_dataset.json +848 -0
- commonmeta_schema-1.0rc1/fixtures/datacite_reader/datacite_date.json +318 -0
- commonmeta_schema-1.0rc1/fixtures/datacite_reader/datacite_dryad.json +249 -0
- commonmeta_schema-1.0rc1/fixtures/datacite_reader/datacite_multiple_identifiers.json +192 -0
- commonmeta_schema-1.0rc1/fixtures/datacite_reader/datacite_subject_scheme_for.json +249 -0
- commonmeta_schema-1.0rc1/fixtures/datacite_reader/journal_article_datacite_reader.json +62 -0
- commonmeta_schema-1.0rc1/fixtures/datacite_xml/full_v4_4.xml +114 -0
- commonmeta_schema-1.0rc1/fixtures/datacite_xml/geolocation.xml +66 -0
- commonmeta_schema-1.0rc1/fixtures/datacite_xml/schema_4_0.xml +140 -0
- commonmeta_schema-1.0rc1/fixtures/datacite_xml_commonmeta/full_v4_4.json +110 -0
- commonmeta_schema-1.0rc1/fixtures/datacite_xml_commonmeta/geolocation.json +75 -0
- commonmeta_schema-1.0rc1/fixtures/datacite_xml_commonmeta/schema_4_0.json +228 -0
- commonmeta_schema-1.0rc1/fixtures/inveniordm/inveniordm_software.json +83 -0
- commonmeta_schema-1.0rc1/fixtures/jsonfeed/jsonfeed_blog_post.json +1 -0
- commonmeta_schema-1.0rc1/fixtures/jsonfeed/jsonfeed_blog_post_sathe.json +62 -0
- commonmeta_schema-1.0rc1/fixtures/jsonfeed/jsonfeed_cczero_license.json +58 -0
- commonmeta_schema-1.0rc1/fixtures/jsonfeed/jsonfeed_ghost_with_affiliations.json +70 -0
- commonmeta_schema-1.0rc1/fixtures/jsonfeed/jsonfeed_post_with_funding.json +147 -0
- commonmeta_schema-1.0rc1/fixtures/jsonfeed/jsonfeed_post_with_relationships.json +105 -0
- commonmeta_schema-1.0rc1/fixtures/jsonfeed/jsonfeed_wordpress_with_references.json +128 -0
- commonmeta_schema-1.0rc1/fixtures/ris/crossref.ris +15 -0
- commonmeta_schema-1.0rc1/fixtures/ris/pure.ris +15 -0
- commonmeta_schema-1.0rc1/fixtures/ris_commonmeta/crossref.json +72 -0
- commonmeta_schema-1.0rc1/fixtures/schemaorg/schemaorg_blog_posting.json +49 -0
- commonmeta_schema-1.0rc1/fixtures/schemaorg/schemaorg_geolocation.json +82 -0
- commonmeta_schema-1.0rc1/fixtures/schemaorg/schemaorg_gtex.json +75 -0
- commonmeta_schema-1.0rc1/fixtures/schemaorg/schemaorg_journal_article.json +29 -0
- commonmeta_schema-1.0rc1/fixtures/schemaorg_out/journal_article.json +48 -0
- commonmeta_schema-1.0rc1/pyproject.toml +45 -0
- commonmeta_schema-1.0rc1/schemas/commonmeta_v1.0rc1.json +1133 -0
- commonmeta_schema-1.0rc1/src/commonmeta_schema/__init__.py +15 -0
- commonmeta_schema-1.0rc1/src/commonmeta_schema/resources.py +41 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Front Matter
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: commonmeta-schema
|
|
3
|
+
Version: 1.0rc1
|
|
4
|
+
Summary: Commonmeta JSON Schemas and conformance fixtures
|
|
5
|
+
Project-URL: Homepage, https://github.com/front-matter/commonmeta-schema
|
|
6
|
+
Project-URL: Repository, https://github.com/front-matter/commonmeta-schema
|
|
7
|
+
Project-URL: Issues, https://github.com/front-matter/commonmeta-schema/issues
|
|
8
|
+
Author: Front Matter
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: commonmeta,fixtures,json-schema,metadata,schema
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
20
|
+
Classifier: Topic :: Text Processing
|
|
21
|
+
Requires-Python: >=3.11
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
|
|
24
|
+
# commonmeta-schema
|
|
25
|
+
|
|
26
|
+
Language-neutral JSON Schema definitions and conformance fixtures for
|
|
27
|
+
[Commonmeta](https://commonmeta.org), the scholarly metadata interchange format.
|
|
28
|
+
|
|
29
|
+
This repository is the shared source of truth consumed by the following Commonmeta
|
|
30
|
+
implementations:
|
|
31
|
+
|
|
32
|
+
- [commonmeta-rs](https://github.com/front-matter/commonmeta-rs) (Rust)
|
|
33
|
+
- [commonmeta-py](https://github.com/front-matter/commonmeta-py) (Python)
|
|
34
|
+
|
|
35
|
+
Keeping the schema and the golden fixtures in one place lets every
|
|
36
|
+
implementation validate against the same contract and run the same
|
|
37
|
+
cross-format conformance tests.
|
|
38
|
+
|
|
39
|
+
## Layout
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
schemas/
|
|
43
|
+
commonmeta_v1.0rc1.json # the Commonmeta JSON Schema (current: v1.0rc1)
|
|
44
|
+
fixtures/
|
|
45
|
+
commonmeta/ # canonical Commonmeta records (round-trip + expected output)
|
|
46
|
+
<format>/ # input fixtures in a given source format
|
|
47
|
+
<format>_out/ # expected writer output (Commonmeta -> format)
|
|
48
|
+
<format>_commonmeta/ # expected reader output for non-JSON inputs
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Schema versions
|
|
52
|
+
|
|
53
|
+
Schemas are versioned by filename. The current version is
|
|
54
|
+
`commonmeta_v1.0rc1.json`; new versions are added alongside it rather than
|
|
55
|
+
replacing existing files, so implementations can pin a version. The
|
|
56
|
+
`schema_version` field of a Commonmeta record is the URL
|
|
57
|
+
`https://commonmeta.org/commonmeta_v1.0rc1.json`.
|
|
58
|
+
|
|
59
|
+
## Fixture conventions
|
|
60
|
+
|
|
61
|
+
The conformance harness in each implementation follows these naming rules
|
|
62
|
+
(a missing pair is skipped, so partial coverage is fine):
|
|
63
|
+
|
|
64
|
+
| Test kind | Input | Expected |
|
|
65
|
+
|----------------------|----------------------------------------|---------------------------------------------|
|
|
66
|
+
| Round-trip | `fixtures/commonmeta/<name>.json` | itself (re-serialized, semantically equal) |
|
|
67
|
+
| Reader (JSON input) | `fixtures/<format>/<name>.json` | `fixtures/commonmeta/<name>.json` |
|
|
68
|
+
| Reader (text input) | `fixtures/<format>/<name>.<ext>` | `fixtures/<format>_commonmeta/<name>.json` |
|
|
69
|
+
| Writer | `fixtures/commonmeta/<name>.json` | `fixtures/<format>_out/<name>.<ext>` |
|
|
70
|
+
|
|
71
|
+
Formats currently covered: `crossref`, `crossref_xml`, `datacite`,
|
|
72
|
+
`datacite_xml`, `schemaorg`, `csl`, `bibtex`, `cff`, `ris`, `jsonfeed`,
|
|
73
|
+
`inveniordm`, `codemeta`.
|
|
74
|
+
|
|
75
|
+
### Semantic comparison
|
|
76
|
+
|
|
77
|
+
Fixtures are compared as parsed JSON trees, not as strings, using an
|
|
78
|
+
omitempty-aware and numeric-aware diff: key order and whitespace are
|
|
79
|
+
irrelevant, an absent field equals an empty/zero/null value, and `52`
|
|
80
|
+
equals `52.0`. This keeps hand-authored fixtures robust across
|
|
81
|
+
implementations.
|
|
82
|
+
|
|
83
|
+
## Using this repository
|
|
84
|
+
|
|
85
|
+
Each implementation vendors (copies) the schema and fixtures it needs from
|
|
86
|
+
here. Update the canonical files in this repository first, then sync them
|
|
87
|
+
into `commonmeta-rs` and `commonmeta-py`.
|
|
88
|
+
|
|
89
|
+
## Packaging and publishing
|
|
90
|
+
|
|
91
|
+
This repository can be published as both:
|
|
92
|
+
|
|
93
|
+
- a Python package on PyPI (`commonmeta-schema`)
|
|
94
|
+
- a Rust crate on crates.io (`commonmeta-schema`)
|
|
95
|
+
|
|
96
|
+
For the initial release, publish explicitly via CLI (not CI automation).
|
|
97
|
+
|
|
98
|
+
Package versions follow the schema version:
|
|
99
|
+
|
|
100
|
+
- PyPI uses PEP 440 form: `1.0rc1`
|
|
101
|
+
- crates.io uses SemVer form: `1.0.0-rc.1`
|
|
102
|
+
|
|
103
|
+
### Python (PyPI) via `uv publish`
|
|
104
|
+
|
|
105
|
+
1. Ensure you are authenticated for PyPI (recommended: trusted publisher or API token).
|
|
106
|
+
2. Build distribution artifacts:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
uv build
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
3. Optionally validate the build metadata:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
uvx twine check dist/*
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
4. Publish to PyPI:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
uv publish
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Rust (crates.io) via `cargo publish`
|
|
125
|
+
|
|
126
|
+
1. Log in once with a crates.io token:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
cargo login
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
2. Validate package contents from the crate directory:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
cargo package --manifest-path rust/Cargo.toml --allow-dirty
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
3. Publish:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
cargo publish --manifest-path rust/Cargo.toml
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Recommended first-release order
|
|
145
|
+
|
|
146
|
+
1. Publish `1.0rc1` to PyPI with `uv publish`.
|
|
147
|
+
2. Publish `1.0.0-rc.1` to crates.io with `cargo publish`.
|
|
148
|
+
3. Create a git tag `v1.0rc1` after both uploads succeed.
|
|
149
|
+
|
|
150
|
+
## License
|
|
151
|
+
|
|
152
|
+
[MIT](LICENSE) © 2026 Front Matter
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# commonmeta-schema
|
|
2
|
+
|
|
3
|
+
Language-neutral JSON Schema definitions and conformance fixtures for
|
|
4
|
+
[Commonmeta](https://commonmeta.org), the scholarly metadata interchange format.
|
|
5
|
+
|
|
6
|
+
This repository is the shared source of truth consumed by the following Commonmeta
|
|
7
|
+
implementations:
|
|
8
|
+
|
|
9
|
+
- [commonmeta-rs](https://github.com/front-matter/commonmeta-rs) (Rust)
|
|
10
|
+
- [commonmeta-py](https://github.com/front-matter/commonmeta-py) (Python)
|
|
11
|
+
|
|
12
|
+
Keeping the schema and the golden fixtures in one place lets every
|
|
13
|
+
implementation validate against the same contract and run the same
|
|
14
|
+
cross-format conformance tests.
|
|
15
|
+
|
|
16
|
+
## Layout
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
schemas/
|
|
20
|
+
commonmeta_v1.0rc1.json # the Commonmeta JSON Schema (current: v1.0rc1)
|
|
21
|
+
fixtures/
|
|
22
|
+
commonmeta/ # canonical Commonmeta records (round-trip + expected output)
|
|
23
|
+
<format>/ # input fixtures in a given source format
|
|
24
|
+
<format>_out/ # expected writer output (Commonmeta -> format)
|
|
25
|
+
<format>_commonmeta/ # expected reader output for non-JSON inputs
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Schema versions
|
|
29
|
+
|
|
30
|
+
Schemas are versioned by filename. The current version is
|
|
31
|
+
`commonmeta_v1.0rc1.json`; new versions are added alongside it rather than
|
|
32
|
+
replacing existing files, so implementations can pin a version. The
|
|
33
|
+
`schema_version` field of a Commonmeta record is the URL
|
|
34
|
+
`https://commonmeta.org/commonmeta_v1.0rc1.json`.
|
|
35
|
+
|
|
36
|
+
## Fixture conventions
|
|
37
|
+
|
|
38
|
+
The conformance harness in each implementation follows these naming rules
|
|
39
|
+
(a missing pair is skipped, so partial coverage is fine):
|
|
40
|
+
|
|
41
|
+
| Test kind | Input | Expected |
|
|
42
|
+
|----------------------|----------------------------------------|---------------------------------------------|
|
|
43
|
+
| Round-trip | `fixtures/commonmeta/<name>.json` | itself (re-serialized, semantically equal) |
|
|
44
|
+
| Reader (JSON input) | `fixtures/<format>/<name>.json` | `fixtures/commonmeta/<name>.json` |
|
|
45
|
+
| Reader (text input) | `fixtures/<format>/<name>.<ext>` | `fixtures/<format>_commonmeta/<name>.json` |
|
|
46
|
+
| Writer | `fixtures/commonmeta/<name>.json` | `fixtures/<format>_out/<name>.<ext>` |
|
|
47
|
+
|
|
48
|
+
Formats currently covered: `crossref`, `crossref_xml`, `datacite`,
|
|
49
|
+
`datacite_xml`, `schemaorg`, `csl`, `bibtex`, `cff`, `ris`, `jsonfeed`,
|
|
50
|
+
`inveniordm`, `codemeta`.
|
|
51
|
+
|
|
52
|
+
### Semantic comparison
|
|
53
|
+
|
|
54
|
+
Fixtures are compared as parsed JSON trees, not as strings, using an
|
|
55
|
+
omitempty-aware and numeric-aware diff: key order and whitespace are
|
|
56
|
+
irrelevant, an absent field equals an empty/zero/null value, and `52`
|
|
57
|
+
equals `52.0`. This keeps hand-authored fixtures robust across
|
|
58
|
+
implementations.
|
|
59
|
+
|
|
60
|
+
## Using this repository
|
|
61
|
+
|
|
62
|
+
Each implementation vendors (copies) the schema and fixtures it needs from
|
|
63
|
+
here. Update the canonical files in this repository first, then sync them
|
|
64
|
+
into `commonmeta-rs` and `commonmeta-py`.
|
|
65
|
+
|
|
66
|
+
## Packaging and publishing
|
|
67
|
+
|
|
68
|
+
This repository can be published as both:
|
|
69
|
+
|
|
70
|
+
- a Python package on PyPI (`commonmeta-schema`)
|
|
71
|
+
- a Rust crate on crates.io (`commonmeta-schema`)
|
|
72
|
+
|
|
73
|
+
For the initial release, publish explicitly via CLI (not CI automation).
|
|
74
|
+
|
|
75
|
+
Package versions follow the schema version:
|
|
76
|
+
|
|
77
|
+
- PyPI uses PEP 440 form: `1.0rc1`
|
|
78
|
+
- crates.io uses SemVer form: `1.0.0-rc.1`
|
|
79
|
+
|
|
80
|
+
### Python (PyPI) via `uv publish`
|
|
81
|
+
|
|
82
|
+
1. Ensure you are authenticated for PyPI (recommended: trusted publisher or API token).
|
|
83
|
+
2. Build distribution artifacts:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
uv build
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
3. Optionally validate the build metadata:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
uvx twine check dist/*
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
4. Publish to PyPI:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
uv publish
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Rust (crates.io) via `cargo publish`
|
|
102
|
+
|
|
103
|
+
1. Log in once with a crates.io token:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
cargo login
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
2. Validate package contents from the crate directory:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
cargo package --manifest-path rust/Cargo.toml --allow-dirty
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
3. Publish:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
cargo publish --manifest-path rust/Cargo.toml
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Recommended first-release order
|
|
122
|
+
|
|
123
|
+
1. Publish `1.0rc1` to PyPI with `uv publish`.
|
|
124
|
+
2. Publish `1.0.0-rc.1` to crates.io with `cargo publish`.
|
|
125
|
+
3. Create a git tag `v1.0rc1` after both uploads succeed.
|
|
126
|
+
|
|
127
|
+
## License
|
|
128
|
+
|
|
129
|
+
[MIT](LICENSE) © 2026 Front Matter
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
@article{Sankar_2014,
|
|
2
|
+
doi = {10.7554/elife.01567},
|
|
3
|
+
url = {http://elifesciences.org/lookup/doi/10.7554/eLife.01567},
|
|
4
|
+
year = 2014,
|
|
5
|
+
month = {feb},
|
|
6
|
+
publisher = {{eLife} Sciences Organisation, Ltd.},
|
|
7
|
+
volume = {3},
|
|
8
|
+
author = {Martial Sankar and Kaisa Nieminen and Laura Ragni and Ioannis Xenarios and Christian S Hardtke},
|
|
9
|
+
title = {Automated quantitative histology reveals vascular morphodynamics during Arabidopsis hypocotyl secondary growth},
|
|
10
|
+
abstract = {Among various advantages, their small size makes model organisms preferred subjects of investigation. Yet, even in model systems detailed analysis of numerous developmental processes at cellular level is severely hampered by their scale.},
|
|
11
|
+
journal = {eLife},
|
|
12
|
+
issn = {2050-084X},
|
|
13
|
+
copyright = {http://creativecommons.org/licenses/by/3.0/}
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
@article{10.5555/12345678,
|
|
2
|
+
author = {Lovelace, Ada},
|
|
3
|
+
copyright = {https://creativecommons.org/licenses/by/4.0/legalcode},
|
|
4
|
+
date = {2024-03-15},
|
|
5
|
+
doi = {10.5555/12345678},
|
|
6
|
+
issn = {1234-5678},
|
|
7
|
+
issue = {3},
|
|
8
|
+
journal = {Journal of Examples},
|
|
9
|
+
language = {English},
|
|
10
|
+
pages = {100--110},
|
|
11
|
+
title = {A Study of Things},
|
|
12
|
+
url = {https://example.org/article/1},
|
|
13
|
+
volume = {12},
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
@phdthesis{dbbe66e459a446a0b6fddf42d3401ccb,
|
|
2
|
+
title = "A multiscale analysis of the urban heat island effect: from city averaged temperatures to the energy demand of individual buildings",
|
|
3
|
+
abstract = "Designing the climates of cities",
|
|
4
|
+
author = "Y. Toparlar",
|
|
5
|
+
note = "Proefschrift",
|
|
6
|
+
year = "2018",
|
|
7
|
+
month = "4",
|
|
8
|
+
day = "25",
|
|
9
|
+
language = "English",
|
|
10
|
+
isbn = "978-90-386-4503-2",
|
|
11
|
+
series = "Bouwstenen",
|
|
12
|
+
publisher = "Technische Universiteit Eindhoven",
|
|
13
|
+
school = "Department of Built Environment",
|
|
14
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "https://doi.org/10.7554/elife.01567",
|
|
3
|
+
"type": "JournalArticle",
|
|
4
|
+
"container": {
|
|
5
|
+
"identifier": "2050-084X",
|
|
6
|
+
"identifier_type": "ISSN",
|
|
7
|
+
"type": "Journal",
|
|
8
|
+
"title": "eLife",
|
|
9
|
+
"volume": "3"
|
|
10
|
+
},
|
|
11
|
+
"contributors": [
|
|
12
|
+
{
|
|
13
|
+
"type": "Person",
|
|
14
|
+
"person": {
|
|
15
|
+
"given_name": "Martial",
|
|
16
|
+
"family_name": "Sankar"
|
|
17
|
+
},
|
|
18
|
+
"roles": [
|
|
19
|
+
"Author"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"type": "Person",
|
|
24
|
+
"person": {
|
|
25
|
+
"given_name": "Kaisa",
|
|
26
|
+
"family_name": "Nieminen"
|
|
27
|
+
},
|
|
28
|
+
"roles": [
|
|
29
|
+
"Author"
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"type": "Person",
|
|
34
|
+
"person": {
|
|
35
|
+
"given_name": "Laura",
|
|
36
|
+
"family_name": "Ragni"
|
|
37
|
+
},
|
|
38
|
+
"roles": [
|
|
39
|
+
"Author"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"type": "Person",
|
|
44
|
+
"person": {
|
|
45
|
+
"given_name": "Ioannis",
|
|
46
|
+
"family_name": "Xenarios"
|
|
47
|
+
},
|
|
48
|
+
"roles": [
|
|
49
|
+
"Author"
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"type": "Person",
|
|
54
|
+
"person": {
|
|
55
|
+
"given_name": "Christian S",
|
|
56
|
+
"family_name": "Hardtke"
|
|
57
|
+
},
|
|
58
|
+
"roles": [
|
|
59
|
+
"Author"
|
|
60
|
+
]
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"date_published": "2014-02",
|
|
64
|
+
"description": "Among various advantages, their small size makes model organisms preferred subjects of investigation. Yet, even in model systems detailed analysis of numerous developmental processes at cellular level is severely hampered by their scale.",
|
|
65
|
+
"identifiers": [
|
|
66
|
+
{
|
|
67
|
+
"identifier": "https://doi.org/10.7554/elife.01567",
|
|
68
|
+
"identifier_type": "DOI"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"license": {
|
|
72
|
+
"id": "CC-BY-3.0",
|
|
73
|
+
"title": "Creative Commons Attribution 3.0 Unported",
|
|
74
|
+
"url": "http://creativecommons.org/licenses/by/3.0/"
|
|
75
|
+
},
|
|
76
|
+
"publisher": {
|
|
77
|
+
"name": "eLife Sciences Organisation, Ltd."
|
|
78
|
+
},
|
|
79
|
+
"schema_version": "https://commonmeta.org/commonmeta_v1.0.json",
|
|
80
|
+
"title": "Automated quantitative histology reveals vascular morphodynamics during Arabidopsis hypocotyl secondary growth",
|
|
81
|
+
"url": "http://elifesciences.org/lookup/doi/10.7554/eLife.01567"
|
|
82
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "https://doi.org/10.5555/12345678",
|
|
3
|
+
"type": "JournalArticle",
|
|
4
|
+
"title": "A Study of Things",
|
|
5
|
+
"container": {
|
|
6
|
+
"identifier": "1234-5678",
|
|
7
|
+
"identifier_type": "ISSN",
|
|
8
|
+
"type": "Journal",
|
|
9
|
+
"title": "Journal of Examples",
|
|
10
|
+
"first_page": "100",
|
|
11
|
+
"last_page": "110",
|
|
12
|
+
"volume": "12",
|
|
13
|
+
"issue": "3"
|
|
14
|
+
},
|
|
15
|
+
"contributors": [
|
|
16
|
+
{
|
|
17
|
+
"type": "Person",
|
|
18
|
+
"person": {
|
|
19
|
+
"given_name": "Ada",
|
|
20
|
+
"family_name": "Lovelace"
|
|
21
|
+
},
|
|
22
|
+
"roles": [
|
|
23
|
+
"Author"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"date_published": "2024-03-15",
|
|
28
|
+
"identifiers": [
|
|
29
|
+
{
|
|
30
|
+
"identifier": "https://doi.org/10.5555/12345678",
|
|
31
|
+
"identifier_type": "DOI"
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"language": "en",
|
|
35
|
+
"license": {
|
|
36
|
+
"id": "CC-BY-4.0",
|
|
37
|
+
"title": "Creative Commons Attribution 4.0 International",
|
|
38
|
+
"url": "https://creativecommons.org/licenses/by/4.0/legalcode"
|
|
39
|
+
},
|
|
40
|
+
"schema_version": "https://commonmeta.org/commonmeta_v1.0.json",
|
|
41
|
+
"url": "https://example.org/article/1"
|
|
42
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
@article{10.5555/12345678,
|
|
2
|
+
abstract = {An abstract about things.},
|
|
3
|
+
author = {Lovelace, Ada},
|
|
4
|
+
copyright = {https://creativecommons.org/licenses/by/4.0/legalcode},
|
|
5
|
+
doi = {{10.5555/12345678}},
|
|
6
|
+
issn = {1234-5678},
|
|
7
|
+
issue = {3},
|
|
8
|
+
journal = {Journal of Examples},
|
|
9
|
+
language = {English},
|
|
10
|
+
month = {mar},
|
|
11
|
+
pages = {100--110},
|
|
12
|
+
title = {A Study of Things},
|
|
13
|
+
url = {{https://example.org/article/1}},
|
|
14
|
+
volume = {12},
|
|
15
|
+
year = {2024},
|
|
16
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# This CITATION.cff file was created by ruby-cff (v 0.9.0).
|
|
2
|
+
# Gem: https://rubygems.org/gems/cff
|
|
3
|
+
# CFF: https://citation-file-format.github.io/
|
|
4
|
+
|
|
5
|
+
cff-version: 1.2.0
|
|
6
|
+
message: If you use ruby-cff in your work, please cite it using the following metadata
|
|
7
|
+
title: Ruby CFF Library
|
|
8
|
+
abstract: This library provides a Ruby interface to manipulate Citation File Format files
|
|
9
|
+
authors:
|
|
10
|
+
- family-names: Haines
|
|
11
|
+
given-names: Robert
|
|
12
|
+
orcid: https://orcid.org/0000-0002-9538-7919
|
|
13
|
+
affiliation: The University of Manchester, UK
|
|
14
|
+
- name: The Ruby Citation File Format Developers
|
|
15
|
+
keywords:
|
|
16
|
+
- ruby
|
|
17
|
+
- credit
|
|
18
|
+
- software citation
|
|
19
|
+
- research software
|
|
20
|
+
- software sustainability
|
|
21
|
+
- metadata
|
|
22
|
+
- citation file format
|
|
23
|
+
- CFF
|
|
24
|
+
version: 0.9.0
|
|
25
|
+
doi: 10.5281/zenodo.1184077
|
|
26
|
+
date-released: 2021-08-18
|
|
27
|
+
license: Apache-2.0
|
|
28
|
+
repository-artifact: https://rubygems.org/gems/cff
|
|
29
|
+
repository-code: https://github.com/citation-file-format/ruby-cff
|
|
30
|
+
references:
|
|
31
|
+
- type: software
|
|
32
|
+
title: Citation File Format
|
|
33
|
+
authors:
|
|
34
|
+
- family-names: Druskat
|
|
35
|
+
given-names: Stephan
|
|
36
|
+
orcid: https://orcid.org/0000-0003-4925-7248
|
|
37
|
+
- family-names: Spaaks
|
|
38
|
+
given-names: Jurriaan H.
|
|
39
|
+
orcid: https://orcid.org/0000-0002-7064-4069
|
|
40
|
+
- family-names: Chue Hong
|
|
41
|
+
given-names: Neil
|
|
42
|
+
orcid: https://orcid.org/0000-0002-8876-7606
|
|
43
|
+
- family-names: Haines
|
|
44
|
+
given-names: Robert
|
|
45
|
+
orcid: https://orcid.org/0000-0002-9538-7919
|
|
46
|
+
- family-names: Baker
|
|
47
|
+
given-names: James
|
|
48
|
+
orcid: https://orcid.org/0000-0002-2682-6922
|
|
49
|
+
- family-names: Bliven
|
|
50
|
+
given-names: Spencer
|
|
51
|
+
orcid: https://orcid.org/0000-0002-1200-1698
|
|
52
|
+
email: spencer.bliven@gmail.com
|
|
53
|
+
- family-names: Willighagen
|
|
54
|
+
given-names: Egon
|
|
55
|
+
orcid: https://orcid.org/0000-0001-7542-0286
|
|
56
|
+
- family-names: Pérez-Suárez
|
|
57
|
+
given-names: David
|
|
58
|
+
orcid: https://orcid.org/0000-0003-0784-6909
|
|
59
|
+
website: https://dpshelio.github.io
|
|
60
|
+
- family-names: Konovalov
|
|
61
|
+
given-names: Alexander
|
|
62
|
+
orcid: https://orcid.org/0000-0001-5299-3292
|
|
63
|
+
identifiers:
|
|
64
|
+
- type: doi
|
|
65
|
+
value: 10.5281/zenodo.1003149
|
|
66
|
+
description: The concept DOI for the collection containing all versions of the Citation File Format.
|
|
67
|
+
- type: doi
|
|
68
|
+
value: 10.5281/zenodo.5171937
|
|
69
|
+
description: The versioned DOI for the version 1.2.0 of the Citation File Format.
|
|
70
|
+
keywords:
|
|
71
|
+
- citation file format
|
|
72
|
+
- CFF
|
|
73
|
+
- citation files
|
|
74
|
+
- software citation
|
|
75
|
+
- file format
|
|
76
|
+
- YAML
|
|
77
|
+
- software sustainability
|
|
78
|
+
- research software
|
|
79
|
+
- credit
|
|
80
|
+
abstract: CITATION.cff files are plain text files with human- and machine-readable citation information for software. Code developers can include them in their repositories to let others know how to correctly cite their software. This is the specification for the Citation File Format.
|
|
81
|
+
date-released: 2021-08-09
|
|
82
|
+
license: CC-BY-4.0
|
|
83
|
+
version: 1.2.0
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "https://doi.org/10.5281/zenodo.1184077",
|
|
3
|
+
"type": "Software",
|
|
4
|
+
"contributors": [
|
|
5
|
+
{
|
|
6
|
+
"type": "Person",
|
|
7
|
+
"person": {
|
|
8
|
+
"id": "https://orcid.org/0000-0002-9538-7919",
|
|
9
|
+
"given_name": "Robert",
|
|
10
|
+
"family_name": "Haines",
|
|
11
|
+
"affiliations": [
|
|
12
|
+
{
|
|
13
|
+
"name": "The University of Manchester, UK"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"roles": [
|
|
18
|
+
"Author"
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"type": "Organization",
|
|
23
|
+
"organization": {
|
|
24
|
+
"name": "The Ruby Citation File Format Developers"
|
|
25
|
+
},
|
|
26
|
+
"roles": [
|
|
27
|
+
"Author"
|
|
28
|
+
]
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"date_published": "2021-08-18",
|
|
32
|
+
"description": "This library provides a Ruby interface to manipulate Citation File Format files",
|
|
33
|
+
"license": {
|
|
34
|
+
"id": "Apache-2.0",
|
|
35
|
+
"title": "Apache License 2.0",
|
|
36
|
+
"url": "https://www.apache.org/licenses/LICENSE-2.0"
|
|
37
|
+
},
|
|
38
|
+
"publisher": {
|
|
39
|
+
"name": "GitHub"
|
|
40
|
+
},
|
|
41
|
+
"references": [
|
|
42
|
+
{
|
|
43
|
+
"id": "https://doi.org/10.5281/zenodo.1003149"
|
|
44
|
+
}
|
|
45
|
+
],
|
|
46
|
+
"schema_version": "https://commonmeta.org/commonmeta_v1.0.json",
|
|
47
|
+
"subjects": [
|
|
48
|
+
{
|
|
49
|
+
"subject": "ruby"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"subject": "credit"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"subject": "software citation"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"subject": "research software"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"subject": "software sustainability"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"subject": "metadata"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"subject": "citation file format"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"subject": "CFF"
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
"title": "Ruby CFF Library",
|
|
74
|
+
"url": "https://github.com/citation-file-format/ruby-cff",
|
|
75
|
+
"version": "0.9.0"
|
|
76
|
+
}
|