From a49b5f5036be1a6be87a180a5896c2b215fe82fe Mon Sep 17 00:00:00 2001 From: Ronald Tse Date: Sat, 24 Oct 2026 08:47:25 +0800 Subject: [PATCH 1/2] site: the version badge renders again; the content sweep fixes The VersionBadge was lost in the Astro cutover: the library and about pages imported a Vue component from the archived VitePress theme through a script-setup block Astro does not process, so the import rendered as raw text and no badge ever appeared. - fetch-api-reference.mjs also fetches the pubid gem's version from main into src/data/pubid-version.json; - src/components/VersionBadge.astro renders it at build time; the library index converts to MDX to host it; the about page links the generated API reference instead (its long raw-HTML body is not JSX-safe for MDX); - the specs index loses its empty VitePress script block; - the api-reference generated pages are gitignored (written by the prebuild at deploy time). --- .gitignore | 1 + scripts/fetch-api-reference.mjs | 12 + src/components/VersionBadge.astro | 31 ++ src/content/about/index.md | 359 ------------------- src/content/library/{index.md => index.mdx} | 4 +- src/content/specs/iec-urn-specification.adoc | 4 +- src/content/specs/index.md | 3 - src/content/specs/iso-urn-specification.adoc | 16 +- src/data/pubid-version.json | 4 + 9 files changed, 59 insertions(+), 375 deletions(-) create mode 100644 src/components/VersionBadge.astro delete mode 100644 src/content/about/index.md rename src/content/library/{index.md => index.mdx} (95%) create mode 100644 src/data/pubid-version.json diff --git a/.gitignore b/.gitignore index 81a1f31..d7c9d5d 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ TODO* !TODO.astro/ !TODO.improve-website/ src/content/library/api-reference-ruby.md +src/content/library/api-reference-ts.md diff --git a/scripts/fetch-api-reference.mjs b/scripts/fetch-api-reference.mjs index af08976..cccee4d 100644 --- a/scripts/fetch-api-reference.mjs +++ b/scripts/fetch-api-reference.mjs @@ -29,6 +29,18 @@ description: "${description}" `; +// the pubid version badge reads this at build time +mkdirSync("src/data", { recursive: true }); +const versionUrl = "https://raw.githubusercontent.com/pubid/pubid/main/lib/pubid/version.rb"; +const versionRes = await fetch(versionUrl); +const versionText = await versionRes.text(); +const versionMatch = versionText.match(/VERSION\s*=\s*"([^"]+)"/); +writeFileSync( + "src/data/pubid-version.json", + JSON.stringify({ version: versionMatch ? versionMatch[1] : null, fetched_at: new Date().toISOString() }, null, 2) + "\n", +); +console.log("pubid version:", versionMatch ? versionMatch[1] : "NOT FOUND"); + mkdirSync("src/content/library", { recursive: true }); for (const { repo, file, out, title, description } of SOURCES) { const url = `https://raw.githubusercontent.com/${repo}/main/${file}`; diff --git a/src/components/VersionBadge.astro b/src/components/VersionBadge.astro new file mode 100644 index 0000000..97fb8fc --- /dev/null +++ b/src/components/VersionBadge.astro @@ -0,0 +1,31 @@ +--- +import data from '../data/pubid-version.json' + +const { version, fetched_at } = data +const date = fetched_at ? new Date(fetched_at).toISOString().split('T')[0] : '' +--- + +
+ pubid-ruby + {version && v{version}} + {date && ·} + {date && {date}} +
+ + diff --git a/src/content/about/index.md b/src/content/about/index.md deleted file mode 100644 index fd43d98..0000000 --- a/src/content/about/index.md +++ /dev/null @@ -1,359 +0,0 @@ ---- -title: About PubID -description: The story behind PubID — a universal, machine-readable system for publication identifiers, grounded in the philosophy that meaning precedes form. ---- - -# About PubID - -
-

The meaning of a document lives before its name is written

-
- -## Origin Story - -At [Ribose](https://www.ribose.com/), we build systems that manage standards documents — and we kept running into the same wall. Every publisher identifies documents differently. ISO uses `ISO 9001:2015`. IEEE writes `IEEE Std 802.3-2018`. NIST has `NIST SP 800-53 Rev. 5`. These identifiers carry rich semantic meaning — publisher, document type, number, year, stage, part — but that meaning is locked inside conventions that only humans can parse, and only imperfectly. - -There was no universal way to: - -- **Parse** an identifier into its semantic components -- **Exchange** identifiers between systems without loss -- **Render** the same identifier in multiple formats -- **Compare** identifiers across different publishers - -**PubID was born** from a conviction that the meaning of an identifier should be separate from any single representation of it. We needed a metaschema — a shared grammar — that could capture the full semantic depth of any publication identifier and express it in whatever form the situation demands. - -Since then, PubID has grown to cover **38+ publishers** across international, regional, national, and industry standards, with a Ruby reference implementation that parses, renders, and interchanges identifiers with round-trip fidelity. - -## The Metaschema - -The PubID metaschema defines the common elements that make up any publication identifier: - -| Element | Required | Description | -|---------|----------|-------------| -| Publisher | Yes | The issuing organization (ISO, IEC, IEEE, etc.) | -| Document Type | Yes | The type of deliverable (Standard, Report, Guide, etc.) | -| Document Number | Yes | The unique identifier number | -| Year | Optional | Publication or revision year | -| Part | Optional | Part number for multi-part standards | -| Edition | Optional | Edition number | -| Stage | Optional | Development stage (Draft, CD, DIS, FDIS, etc.) | -| Language | Optional | Language code (en, fr, ru, etc.) | -| Supplement | Optional | Amendment, Corrigendum, Addendum | - -Each publisher's schema specifies which elements are used, their allowed values, and how they combine syntactically. - -## Identifier Composition - -Identifiers compose through algebraic relationships. A supplement identifier **embeds** a base identifier — the supplement carries its own type, number, and year, while the base remains intact inside it: - -| Composition | Example | -|-------------|---------| -| **Base** | `ISO 9001:2015` — publisher, number, year | -| **Supplement embeds Base** | `ISO 9001:2015/Amd 1:2023` — amendment identifier contains the base | -| **With Copublisher** | `ISO/IEC 17031-1:2020` — joint publication | -| **Composite** | `ISO/IEC 17031-1:2020/Amd 1:2022` — amendment embeds copublished base | -| **3-Level Nesting** | `ISO/IEC 13818-1:2015/Amd 3:2016/Cor 1:2017` — corrigendum embeds amendment, which embeds base standard | -| **Adoption** | `BS EN ISO 9001:2015` — national body adopts European norm, which adopts international standard | -| **Dual Published** | `IEC 60255-24 Ed. 2.0 2013-04 and IEEE Std C37.111-2013` — two equivalent identifiers from different publishers | -| **Bundled** | `CSA B127.1:99 + B127.2:99` — multiple standards sold as a package | - -Each layer is a complete identifier in its own right. A supplement identifier does not modify the base — it wraps it, adding its own type (Amendment, Corrigendum), number, and year. - -## Multi-Style Rendering - -A key innovation in PubID is the ability to render the same identifier in multiple styles without information loss. A single identifier is parsed into structured components, then re-rendered in any output format: - - - -This pattern extends across all supported publishers: every PubID can render as a human-readable string, a URN, or structured JSON. Parse any style, and you can re-render it in any other — the interchange is lossless. - -## The Ecosystem - -| Component | Description | -|-----------|-------------| -| **Metaschema** | Formal definition of identifier elements and their relationships | -| **Publisher Schemas** | 38+ publisher-specific schema definitions | -| **Reference Library** | Ruby gem implementing all schemas with parse/render/URN support | -| **This Website** | Documentation, interactive playground, and schema registry | - - - -**Data pipeline:** Publisher schema data on this site is exported directly from the [pubid-ruby](https://github.com/metanorma/pubid) reference implementation. The export version is: - -
- -
- -## NIST: The First Adopter - -
- -In 2021, NIST published the [Publication Identifier Syntax for NIST Technical Series Publications](https://www.nist.gov/system/files/documents/2022/04/01/PubID_Syntax_NIST_TechPubs.pdf) — a formal scheme for uniquely identifying every document across the 53 publication series and 19,333+ documents in the NIST Library, dating back to 1901. - -NIST was the first standards organization to adopt a multi-style, round-trippable PubID scheme with four defined rendering styles: - -| Style | Usage | Example | -|-------|-------|---------| -| **Full** | Title page and bibliography | National Institute of Standards and Technology Special Publication 800-53, Revision 5 | -| **Abbreviated** | Authority section | Natl. Inst. Stand. Technol. Spec. Publ. 800-53 Rev. 5 | -| **Short** | Inline citations | NIST SP 800-53 Rev. 5 | -| **Machine-Readable** | DOI suffix | NIST.SP.800-53r5 | - -[Ribose](https://www.ribose.com) was involved from the conception phase alongside the NIST Information Services Office and CSRC teams in conceptualizing the universal PubID scheme — acknowledged in both the original 2020 draft and the final PubID 1.0 document. Ribose submitted [formal comments](https://riboseinc.github.io/report-nist-pubid/) during the public review period, built the [nist-pubid](https://github.com/metanorma/nist-pubid) conversion tool that migrated all 19,333 legacy identifiers, and assisted with the CSWP identifier migration when NIST moved from date-based to sequential numbering. - -The NIST PubID demonstrated that a well-designed identifier scheme can serve both human and machine needs simultaneously — a principle that PubID carries forward across all publishers. - - - -
- -## What We Believe - -
- -**PubID exists to preserve the integrity of meaning across every form a publication identifier can take — human or machine, verbose or terse, printed or digital.** - -
- -- The **meaning** of an identifier is prior to and independent of any particular rendering -- **Human-readable** and **machine-readable** forms are equally valid expressions of the same reality -- **Round-trip fidelity** — parse any form, recover the original — is not just a feature but a philosophical commitment -- Every identifier carries **depth** that no single surface representation exhausts - -## The Name & Logo - -**PubID** stands for **Publication Identifier**. It is both a noun and a mission: to give every publication an identifier that is universally parsable, unambiguously structured, and faithful to the original meaning it represents. - -The logo is not decoration — it is a statement of philosophy: - -
- PubID Logo -
- -
-

道可道,非常道;名可名,非常名

-

The Way that can be spoken is not the eternal Way;
the name that can be named is not the eternal name.

-
- -Every element encodes a layer of meaning: - -
- -
-
道
-

The Pool

-

The pool is the Way: the original, complete meaning of a publication identifier. It is the source — the semantic model from which all representations emerge and to which they return. Its depths are profound and unfathomable; meaning exists there in its purest form, beyond any particular expression, the deep structure that no single rendering can fully capture. Every identifier, in every format, points back to the same underlying reality in this pool.

-
- -
-
名
-

The Surface

-

The surface of the pool is where meaning begins to take name and form. It is the boundary between the unnameable and the named — where depth rises toward expression, where semantic models crystallize into identifiable structure. A name is real and necessary, yet it is never the thing itself.

-
- -
-
有
-

Waves & Particles

-

The waves (human-readable identifiers) and particles (machine-readable forms) are 有 — being, manifest existence. Every representation is real and functional, yet no single form is constant. Human-readable strings and machine-readable URNs are two modes of the same 有 — both arising from the same source, both legitimate, neither permanent.

-
- -
-
無
-

The Space Between

-

The emptiness between the waves and particles is 無 — non-being, the void. It is not absence but potential: the space that gives each form its meaning. Without the gaps, there is no structure; without 無, 有 has no shape. The void is what makes the identifier parsable — the delimiters, the spaces, the structure that separates one component from another.

-
- -
- -## Open Source - -PubID is proudly open source. - -- **GitHub**: [github.com/pubid](https://github.com/pubid) -- **Reference Implementation**: [github.com/metanorma/pubid](https://github.com/metanorma/pubid) -- **This Site**: [github.com/pubid/pubid.github.io](https://github.com/pubid/pubid.github.io) -- **Contributing**: New publisher schemas and features welcome - -*An open source project maintained by [Ribose](https://www.ribose.com)* - - diff --git a/src/content/library/index.md b/src/content/library/index.mdx similarity index 95% rename from src/content/library/index.md rename to src/content/library/index.mdx index ea2e1c5..0a13685 100644 --- a/src/content/library/index.md +++ b/src/content/library/index.mdx @@ -7,9 +7,7 @@ description: "PubID library documentation." The PubID Ruby gem provides parsing, rendering, and URN generation for all supported publisher schemes. - +import VersionBadge from '../../components/VersionBadge.astro'
diff --git a/src/content/specs/iec-urn-specification.adoc b/src/content/specs/iec-urn-specification.adoc index 34c7351..2dff2cb 100644 --- a/src/content/specs/iec-urn-specification.adoc +++ b/src/content/specs/iec-urn-specification.adoc @@ -142,7 +142,7 @@ edition plus its amendments). | Within a field (part numbers, date components, copublishers, languages) | `urn:iec:std:iec-iso:60601-1-1` -| `||` +| `\|\|` | Between base edition and adjunct (reference to adjunct itself) | `urn:iec:std:iec:60601-1-1:2015-10:::fr\|\|amd:1:2017-01` @@ -528,7 +528,7 @@ Global. | Supplement model | Appended with `:` separator -| Adjunct model with `||` (adjunct ref) and `_` (consolidation) +| Adjunct model with `\|\|` (adjunct ref) and `_` (consolidation) | Relation marker | Not applicable diff --git a/src/content/specs/index.md b/src/content/specs/index.md index 5bcee74..038c2e7 100644 --- a/src/content/specs/index.md +++ b/src/content/specs/index.md @@ -2,9 +2,6 @@ title: "URN Specifications" --- - - # URN Specifications Every PubID maps to a canonical URN (Uniform Resource Name) for machine interchange. These specifications define the URN namespaces for each standards publisher. diff --git a/src/content/specs/iso-urn-specification.adoc b/src/content/specs/iso-urn-specification.adoc index ae8dc15..cd96638 100644 --- a/src/content/specs/iso-urn-specification.adoc +++ b/src/content/specs/iso-urn-specification.adoc @@ -243,9 +243,9 @@ project iteration. stage-00.00:: Preliminary work item stage-20.00:: New work item proposal stage-30.00:: Committee draft -stage-40.00:: Draft (enquiry) -- DIS for an IS project, DAM for an +stage-40.00:: Draft (enquiry) -- DIS for an IS project, DAM for an + amendment project, DTS for a TS project, ... -stage-50.00:: Final draft -- FDIS for an IS project, FDAM for an +stage-50.00:: Final draft -- FDIS for an IS project, FDAM for an + amendment project, FDTS for a TS project, ... stage-60.00:: Published (not emitted for published documents) @@ -298,14 +298,14 @@ The slots after the type token, in order: [horizontal] supplnumber:: the supplement's own number (`Amd 1` carries 1) -supplyear:: the supplement's own publication year (`Amd 1:2007`) -- +supplyear:: the supplement's own publication year (`Amd 1:2007`) -- + added by this specification; RFC 5141 has no slot for it -supplversion:: the corrected version of the published supplement -(`v2` = version corrected once); omitted when not stated, where the +supplversion:: the corrected version of the published supplement + +(`v2` = version corrected once); omitted when not stated, where the + reference is to the highest version per RFC 5141 -stage:: optionally, the supplement's own stage immediately BEFORE the -type token (`stage-40.00:amd:1`) -- added by this specification; RFC -5141's single `status` slot cannot separate a draft amendment from its +stage:: optionally, the supplement's own stage immediately BEFORE the + +type token (`stage-40.00:amd:1`) -- added by this specification; RFC + +5141's single `status` slot cannot separate a draft amendment from its + published base ==== addition diff --git a/src/data/pubid-version.json b/src/data/pubid-version.json new file mode 100644 index 0000000..53983d1 --- /dev/null +++ b/src/data/pubid-version.json @@ -0,0 +1,4 @@ +{ + "version": "2.0.0.pre.alpha.53", + "fetched_at": "2026-10-24T00:46:13.344Z" +} From 7bd4a5d70a8a019390cf99b58fdfeb3628a14c4b Mon Sep 17 00:00:00 2001 From: Ronald Tse Date: Sat, 24 Oct 2026 09:23:37 +0800 Subject: [PATCH 2/2] site: keep the about page's git entry with the sweep --- src/content/about/index.md | 351 +++++++++++++++++++++++++++++++++++++ 1 file changed, 351 insertions(+) create mode 100644 src/content/about/index.md diff --git a/src/content/about/index.md b/src/content/about/index.md new file mode 100644 index 0000000..6d1a830 --- /dev/null +++ b/src/content/about/index.md @@ -0,0 +1,351 @@ +--- +title: About PubID +description: The story behind PubID — a universal, machine-readable system for publication identifiers, grounded in the philosophy that meaning precedes form. +--- + +# About PubID + +
+

The meaning of a document lives before its name is written

+
+ +## Origin Story + +At [Ribose](https://www.ribose.com/), we build systems that manage standards documents — and we kept running into the same wall. Every publisher identifies documents differently. ISO uses `ISO 9001:2015`. IEEE writes `IEEE Std 802.3-2018`. NIST has `NIST SP 800-53 Rev. 5`. These identifiers carry rich semantic meaning — publisher, document type, number, year, stage, part — but that meaning is locked inside conventions that only humans can parse, and only imperfectly. + +There was no universal way to: + +- **Parse** an identifier into its semantic components +- **Exchange** identifiers between systems without loss +- **Render** the same identifier in multiple formats +- **Compare** identifiers across different publishers + +**PubID was born** from a conviction that the meaning of an identifier should be separate from any single representation of it. We needed a metaschema — a shared grammar — that could capture the full semantic depth of any publication identifier and express it in whatever form the situation demands. + +Since then, PubID has grown to cover **38+ publishers** across international, regional, national, and industry standards, with a Ruby reference implementation that parses, renders, and interchanges identifiers with round-trip fidelity. + +## The Metaschema + +The PubID metaschema defines the common elements that make up any publication identifier: + +| Element | Required | Description | +|---------|----------|-------------| +| Publisher | Yes | The issuing organization (ISO, IEC, IEEE, etc.) | +| Document Type | Yes | The type of deliverable (Standard, Report, Guide, etc.) | +| Document Number | Yes | The unique identifier number | +| Year | Optional | Publication or revision year | +| Part | Optional | Part number for multi-part standards | +| Edition | Optional | Edition number | +| Stage | Optional | Development stage (Draft, CD, DIS, FDIS, etc.) | +| Language | Optional | Language code (en, fr, ru, etc.) | +| Supplement | Optional | Amendment, Corrigendum, Addendum | + +Each publisher's schema specifies which elements are used, their allowed values, and how they combine syntactically. + +## Identifier Composition + +Identifiers compose through algebraic relationships. A supplement identifier **embeds** a base identifier — the supplement carries its own type, number, and year, while the base remains intact inside it: + +| Composition | Example | +|-------------|---------| +| **Base** | `ISO 9001:2015` — publisher, number, year | +| **Supplement embeds Base** | `ISO 9001:2015/Amd 1:2023` — amendment identifier contains the base | +| **With Copublisher** | `ISO/IEC 17031-1:2020` — joint publication | +| **Composite** | `ISO/IEC 17031-1:2020/Amd 1:2022` — amendment embeds copublished base | +| **3-Level Nesting** | `ISO/IEC 13818-1:2015/Amd 3:2016/Cor 1:2017` — corrigendum embeds amendment, which embeds base standard | +| **Adoption** | `BS EN ISO 9001:2015` — national body adopts European norm, which adopts international standard | +| **Dual Published** | `IEC 60255-24 Ed. 2.0 2013-04 and IEEE Std C37.111-2013` — two equivalent identifiers from different publishers | +| **Bundled** | `CSA B127.1:99 + B127.2:99` — multiple standards sold as a package | + +Each layer is a complete identifier in its own right. A supplement identifier does not modify the base — it wraps it, adding its own type (Amendment, Corrigendum), number, and year. + +## Multi-Style Rendering + +A key innovation in PubID is the ability to render the same identifier in multiple styles without information loss. A single identifier is parsed into structured components, then re-rendered in any output format: + + + +This pattern extends across all supported publishers: every PubID can render as a human-readable string, a URN, or structured JSON. Parse any style, and you can re-render it in any other — the interchange is lossless. + +## The Ecosystem + +| Component | Description | +|-----------|-------------| +| **Metaschema** | Formal definition of identifier elements and their relationships | +| **Publisher Schemas** | 38+ publisher-specific schema definitions | +| **Reference Library** | Ruby gem implementing all schemas with parse/render/URN support | +| **This Website** | Documentation, interactive playground, and schema registry | + +**Data pipeline:** Publisher schema data on this site is exported directly from the [pubid-ruby](https://github.com/pubid/pubid) reference implementation, fetched at build time from its main branch — see the generated [API Reference — Ruby](/library/api-reference-ruby/) for exactly what the current export reflects. + +## NIST: The First Adopter + +
+ +In 2021, NIST published the [Publication Identifier Syntax for NIST Technical Series Publications](https://www.nist.gov/system/files/documents/2022/04/01/PubID_Syntax_NIST_TechPubs.pdf) — a formal scheme for uniquely identifying every document across the 53 publication series and 19,333+ documents in the NIST Library, dating back to 1901. + +NIST was the first standards organization to adopt a multi-style, round-trippable PubID scheme with four defined rendering styles: + +| Style | Usage | Example | +|-------|-------|---------| +| **Full** | Title page and bibliography | National Institute of Standards and Technology Special Publication 800-53, Revision 5 | +| **Abbreviated** | Authority section | Natl. Inst. Stand. Technol. Spec. Publ. 800-53 Rev. 5 | +| **Short** | Inline citations | NIST SP 800-53 Rev. 5 | +| **Machine-Readable** | DOI suffix | NIST.SP.800-53r5 | + +[Ribose](https://www.ribose.com) was involved from the conception phase alongside the NIST Information Services Office and CSRC teams in conceptualizing the universal PubID scheme — acknowledged in both the original 2020 draft and the final PubID 1.0 document. Ribose submitted [formal comments](https://riboseinc.github.io/report-nist-pubid/) during the public review period, built the [nist-pubid](https://github.com/metanorma/nist-pubid) conversion tool that migrated all 19,333 legacy identifiers, and assisted with the CSWP identifier migration when NIST moved from date-based to sequential numbering. + +The NIST PubID demonstrated that a well-designed identifier scheme can serve both human and machine needs simultaneously — a principle that PubID carries forward across all publishers. + + + +
+ +## What We Believe + +
+ +**PubID exists to preserve the integrity of meaning across every form a publication identifier can take — human or machine, verbose or terse, printed or digital.** + +
+ +- The **meaning** of an identifier is prior to and independent of any particular rendering +- **Human-readable** and **machine-readable** forms are equally valid expressions of the same reality +- **Round-trip fidelity** — parse any form, recover the original — is not just a feature but a philosophical commitment +- Every identifier carries **depth** that no single surface representation exhausts + +## The Name & Logo + +**PubID** stands for **Publication Identifier**. It is both a noun and a mission: to give every publication an identifier that is universally parsable, unambiguously structured, and faithful to the original meaning it represents. + +The logo is not decoration — it is a statement of philosophy: + +
+ PubID Logo +
+ +
+

道可道,非常道;名可名,非常名

+

The Way that can be spoken is not the eternal Way;
the name that can be named is not the eternal name.

+
+ +Every element encodes a layer of meaning: + +
+ +
+
道
+

The Pool

+

The pool is the Way: the original, complete meaning of a publication identifier. It is the source — the semantic model from which all representations emerge and to which they return. Its depths are profound and unfathomable; meaning exists there in its purest form, beyond any particular expression, the deep structure that no single rendering can fully capture. Every identifier, in every format, points back to the same underlying reality in this pool.

+
+ +
+
名
+

The Surface

+

The surface of the pool is where meaning begins to take name and form. It is the boundary between the unnameable and the named — where depth rises toward expression, where semantic models crystallize into identifiable structure. A name is real and necessary, yet it is never the thing itself.

+
+ +
+
有
+

Waves & Particles

+

The waves (human-readable identifiers) and particles (machine-readable forms) are 有 — being, manifest existence. Every representation is real and functional, yet no single form is constant. Human-readable strings and machine-readable URNs are two modes of the same 有 — both arising from the same source, both legitimate, neither permanent.

+
+ +
+
無
+

The Space Between

+

The emptiness between the waves and particles is 無 — non-being, the void. It is not absence but potential: the space that gives each form its meaning. Without the gaps, there is no structure; without 無, 有 has no shape. The void is what makes the identifier parsable — the delimiters, the spaces, the structure that separates one component from another.

+
+ +
+ +## Open Source + +PubID is proudly open source. + +- **GitHub**: [github.com/pubid](https://github.com/pubid) +- **Reference Implementation**: [github.com/metanorma/pubid](https://github.com/metanorma/pubid) +- **This Site**: [github.com/pubid/pubid.github.io](https://github.com/pubid/pubid.github.io) +- **Contributing**: New publisher schemas and features welcome + +*An open source project maintained by [Ribose](https://www.ribose.com)* + +