Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions public/logos/calconnect-logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions src/content/about/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ There was no universal way to:

**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 **37+ publishers** across international, regional, national, and industry standards, with a Ruby reference implementation that parses, renders, and interchanges identifiers with round-trip fidelity.
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

Expand Down Expand Up @@ -72,7 +72,7 @@ This pattern extends across all supported publishers: every PubID can render as
| Component | Description |
|-----------|-------------|
| **Metaschema** | Formal definition of identifier elements and their relationships |
| **Publisher Schemas** | 37+ publisher-specific schema definitions |
| **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 |

Expand Down
2 changes: 1 addition & 1 deletion src/content/library/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ gem install pubid
- **Generate URNs** for machine interchange
- **Serialize** to JSON, YAML, or Hash
- **Validate** identifier syntax
- **37+ publisher schemes** supported out of the box
- **38+ publisher schemes** supported out of the box

## Quick Example

Expand Down
7 changes: 7 additions & 0 deletions src/data/__tests__/flavors.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,13 @@ describe('specific flavor invariants', () => {
expect(keys).toEqual(['rfc', 'bcp', 'std', 'fyi', 'internet_draft'])
})

it('CalConnect has the Standard doc type', () => {
const cc = publishers.find(p => p.flavor === 'calconnect')
expect(cc).toBeDefined()
expect(cc?.docTypes).toHaveLength(1)
expect(cc?.docTypes[0]?.key).toBe('standard')
})

it('PDF Association is not a flavor (not in pubid gem)', () => {
const pdf = publishers.find(p => p.flavor === 'pdf' || p.flavor === 'pdf_association')
expect(pdf).toBeUndefined()
Expand Down
4 changes: 2 additions & 2 deletions src/data/__tests__/registry.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import type { Publisher, Category } from '~/data/types'

describe('registry', () => {
it('contains exactly the expected publisher count', () => {
// 37 = 35 (prior baseline) + ECMA + IETF (added 2026-07-15)
expect(publishers).toHaveLength(37)
// 38 = 37 (post-Astro-cutover baseline on main) + CalConnect (added 2026-07-16)
expect(publishers).toHaveLength(38)
})

it('publishers are sorted alphabetically by flavor', () => {
Expand Down
43 changes: 43 additions & 0 deletions src/data/flavors/calconnect.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import type { Publisher } from '../types'

export const calconnect: Publisher = {
flavor: "calconnect",
logo: "/logos/calconnect-logo.svg",
name: "CalConnect",
fullName: "The Calendaring and Scheduling Consortium",
category: "industry",
description: "CalConnect (The Calendaring and Scheduling Consortium) is a nonprofit organization founded in 2004 that develops open standards for calendaring and scheduling. CalConnect brings together vendors, developers, and users of calendar systems to coordinate interoperability of iCalendar (RFC 5545/7986), CalDAV, and related calendaring technologies. CalConnect standards address gaps in the iCalendar ecosystem: calendaring event metadata, scheduling protocols, time-zone handling, and event publishing. Member organizations include major technology vendors, universities, and government agencies.",
website: "https://www.calconnect.org",
syntaxNotes: "CalConnect identifiers follow the shape: CC[/<series>] <number>:<date>. The publisher token is always 'CC'. An optional series letter or token follows after a slash (A, WD, DIR, …). The number is a plain string (preserves leading zeros and sub-part separators like '0812-1' or '0707.1'). The date segment uses the ISO-style year format with optional month and day for full-date forms (e.g. 'CC/WD 51017:2024-07-23').",
urnPattern: "urn:cc:[series]:[number]:[year]",
relatedFlavors: ["ietf", "iso"],
docTypes: [
{
key: "standard",
title: "CalConnect Standard (CC)",
abbr: ["CC"],
description: "CalConnect Standards — the normative specifications published by CalConnect. Numbered with a 4-digit sequence (preserves leading zeros, e.g. CC 18011:2018). An optional series letter (A, WD for Working Draft, DIR for Directives) can prefix the number after a slash. Full-date forms occur for working drafts (e.g. CC/WD 51017:2024-07-23).",
examples: [
{ input: "CC 18011:2018" },
{ input: "CC/DIR 10006:2019" },
{ input: "CC/WD 51017:2024-07-23" },
{ input: "CC 0514:2017" },
{ input: "CC 0812-1:2019" },
],
},
],
components: [
{ name: "Publisher", description: "CC — the canonical publisher token", example: "CC" },
{ name: "Series", description: "Optional series letter or token (A, WD, DIR, etc.) appearing after the publisher, separated by slash", attribute: "series", example: "WD" },
{ name: "Number", description: "Document number, kept as a string to preserve leading zeros and sub-part separators (0514, 0812-1, 0707.1)", attribute: "number", example: "51017" },
{ name: "Date", description: "Publication date: always year; month/day present only for full-date forms (2024-07-23)", attribute: "date", example: "2024" },
],
algebra: [
{ type: "Standard", description: "Basic CalConnect Standard without series", syntax: "CC <number>:<year>", example: "CC 18011:2018" },
{ type: "With Series", description: "Series prefix after the publisher, separated by slash", syntax: "CC/<series> <number>:<date>", example: "CC/DIR 10006:2019" },
{ type: "Full Date", description: "Full-date form for working drafts", syntax: "CC/<series> <number>:<year>-<month>-<day>", example: "CC/WD 51017:2024-07-23" },
{ type: "Without Publisher", description: "Bare series+number form (no 'CC' prefix)", syntax: "[<series> ]<number>:<date>", example: "DIR 10006:2019" },
],
}

export default calconnect
Loading