pubmate helps you go from vocabulary/source data to publishable nanopublications.
This README focuses on real publishing workflows:
- prepare and normalize vocabulary data
- create per-term assertion graphs
- dry-run sign/publish checks
- publish to nanopub servers
From this repository:
uv syncCLI entrypoints provided by this project:
pubmate-yamlconcatpubmate-mintpubmate-cleanrdfpubmate-download-nanopubspubmate-extract-assertionspubmate-validate-definingpubmate-mint-publish
Use this when your terms are spread across files and you want one container.
pubmate-yamlconcat combined.yaml terms1.yaml terms2.yaml --target vocabulary_termsGenerate IDs into the id field (or another field via --id-key).
Preview only:
pubmate-mint \
--data combined.yaml \
--target vocabulary_terms \
--namespace https://w3id.org/yourspace/term/ \
--dry-runWrite changes:
pubmate-mint \
--data combined.yaml \
--target vocabulary_terms \
--namespace https://w3id.org/yourspace/term/Notes:
- default method is
hash(recommended for deterministic IDs) - use
--forceto regenerate existing IDs
pubmate-cleanrdf loads your ontology RDF, normalizes translation blocks into language-tagged literals, and writes one assertion file per subclass of the parent class(es).
pubmate-cleanrdf \
--input-ontology-path ontology.ttl \
--base-namespace https://w3id.org/yourspace/ \
--term-output-path assertions \
--term-parent-class your:VocabularyTerm \
--parent-subclasses your:AdditionalParentOutput: assertions/<term_id>.ttl files.
pubmate-validate-defining wraps each assertion into a defining nanopub and
signs it with an ephemeral in-memory key (no secrets, no network) — a good PR gate.
pubmate-validate-defining \
--assertion-folder assertions \
--namespace https://w3id.org/yourspace/term/pubmate-mint-publish re-keys each assertion onto the ~~~ARTIFACTCODE~~~
placeholder, signs it (which lands the artifact code on the term's thing URI),
and — unless --dry-run — publishes it. Minted .trig nanopubs go to
--output-dir, and the old-id → thing/np-URI mapping is merged into --id-map-file.
Dry-run (sign only, offline, ephemeral key):
pubmate-mint-publish \
--assertion-folder assertions \
--namespace https://w3id.org/yourspace/term/ \
--output-dir published \
--id-map-file id-map.tsv \
--dry-runPublish to the nanopub test server with testsuite keys (no personal secrets):
pubmate-mint-publish \
--assertion-folder assertions \
--namespace https://w3id.org/yourspace/term/ \
--output-dir published \
--id-map-file id-map.tsv \
--use-testsuite-keysReal publication uses the bot/personal key instead of --use-testsuite-keys:
pubmate-mint-publish \
--assertion-folder assertions \
--namespace https://w3id.org/yourspace/term/ \
--output-dir published \
--id-map-file id-map.tsv \
--orcid-id https://orcid.org/0000-0000-0000-0000 \
--name "Your Name" \
--private-key /path/to/id_rsa \
--public-key /path/to/id_rsa.pub \
--intro-nanopub-uri https://w3id.org/np/RA...Use pubmate-download-nanopubs when a query endpoint returns the nanopublication
URIs you want to mirror locally. The endpoint should return SPARQL results JSON;
by default Pubmate reads nanopub URIs from the np binding and downloads each one
as <nanopub-uri>.trig.
You can pass a complete endpoint URL:
pubmate-download-nanopubs \
"https://query.knowledgepixels.com/api/RA.../your-query?ontology=https%3A%2F%2Fw3id.org%2Fyourspace%2Fvocabulary" \
--output-dir published \
--manifest build/nanopub-network-published.tsvOr split filters into repeatable query parameters:
pubmate-download-nanopubs \
"https://query.knowledgepixels.com/api/RA.../your-query" \
--query-param "ontology=https://w3id.org/yourspace/vocabulary" \
--query-param "ontologyNamespace=https://w3id.org/yourspace/vocabulary" \
--output-dir published \
--manifest build/nanopub-network-published.tsvUseful options:
--np-column: read nanopub URIs from a binding other thannp.--min-count: fail if the endpoint returns fewer nanopubs than expected.--replace: replace existing.trigfiles in--output-dirwith exactly the endpoint result set.--no-validate: skip parsing each downloaded TriG file as a nanopublication.
Before real publish:
- Run
pubmate-mint --dry-runand inspect ID changes. - Generate assertion files and manually inspect a few
.ttloutputs. - Run
pubmate-validate-defining, thenpubmate-mint-publish --dry-run. - Publish a small subset first (e.g., a temporary small assertion folder).
- Then publish the full batch.
- Use
pubmate-download-nanopubs --replaceto rebuild the localpublishedfolder from the network when needed.
Missing required options in manual-key mode:- pass the full manual key/profile options, or use
--dry-run --use-testsuite-keys.
- pass the full manual key/profile options, or use
- No files published:
- verify assertion folder contains
.ttlfiles.
- verify assertion folder contains
- URI prefix differences:
- published nanopub URIs may use
purl.orgorw3id.orgprefixes depending on server behavior.
- published nanopub URIs may use
- Download endpoint returns no nanopubs:
- verify the endpoint returns SPARQL results JSON and that nanopub URIs are in the binding named by
--np-column(npby default).
- verify the endpoint returns SPARQL results JSON and that nanopub URIs are in the binding named by