Schema Explorer

Interactive tree of every entity, field, type, enum, and pattern in the Edoxen JSON Schema. Generated at build time from the canonical schemas bundled in @edoxen/edoxen.

Agenda5 fields

The business-order document of a Meeting. Versioned independently of the Meeting via the status field (draft, final, amended).

AgendaItem10 fields

One entry on an Agenda. v3.0: per-field Localized.

label
kind
references
outcome
decision_ref
topics
components
Attendance8 fields

One attendance record per person at a Meeting.

personrequired
statusrequired
role
response
affiliation
proxy_for
notes
BodyVocabularyEntry3 fields

One entry in a per-dataset body_vocabulary list. Maps a free-form body_type to a short canonical value. SSOT for body_type -> canonical_type resolution within the declaring collection.

body_type
canonical_type
definition
Contact11 fields

VCARD-like abstract contact. v3.0: per-field Localized (name, title, affiliation, address). Added urn (registry identity) and ref (reference-by-URN).

URN reference; if set, ignore other fields

^urn:edoxen:contact:[^:]+:[^:]+$
kind
role
contact_methods
ContactIdentifier3 fields

One polymorphic external identifier — ORCID, ISNI, Wikidata QID, ROR, Ringgold, GitHub handle, etc. Replaces the hard-coded orcid field. OCP: new identifier schemes are added via the ContactIdentifierKind enum (or other + extensions).

ContactMethod5 fields

One polymorphic communication channel — phone, email, fax, url, mail, etc. kind discriminates the channel; value carries the address/number; label is a free-form display hint ("Office", "Front desk"). OCP: new channel kinds are added via the ContactMethodKind enum (or other + extensions).

kind
value
label
primary
DateRange2 fields

Start + end date pair for multi-day meetings.

start
Deadline2 fields

A time-bound requirement. v3.0: per-field Localized.

daterequired
EntityRef6 fields

Typed cross-reference between entities (v2.1, TODO.refactor/44). Exactly one of urn, identifier, or local_ref should be set; the gem's EntityRef#valid? enforces this in Ruby.

identifier
local_ref
kind
role
note
ExtensionAttribute8 fields

One typed key/value pair within a MeetingExtension. Polymorphic on value type so consumers don't re-parse strings back into Int/Float/ Bool/Date (v2.1 tighten, TODO.refactor/47).

type
stringintegerfloatbooleandatedatetime
value
intValue
floatValue
booleanValue
dateValue
dateTimeValue
HostRef4 fields

Typed reference to a hosting organization.

refrequired
type
role
contact
LocalizedName3 fields

One language-specific value of a translatable Name field. Mirrors LocalizedString but carries a structured Name.

spellingrequired
valuerequired
LocalizedString3 fields

One language-specific value of a translatable String field. spelling is an ISO 24229 spelling/conversion system code. Always verbose — single-language data uses the same [{ spelling, value }] shape as multi-language data.

spellingrequired
valuerequired
Meeting35 fields

A single Meeting (event). v3.0: per-field Localized.

identifierrequired
ordinal
series_ref
typerequired
status
visibility
body_type
date_range
recurrence
venues
general_area
practical_info
city
^[A-Z]{2}[A-Z0-9]{3}$
country_code
^[A-Z]{2}$
committee
committee_group
officers
source_urls
landing_url
registration_url
contact
agenda
deadlines
attendance
minutes
MeetingCollection2 fields

Top-level wrapper for many Meetings in one file.

metadata
meetingsrequired
MeetingCollectionMetadata3 fields

Display-level metadata for a MeetingCollection. v3.0: per-field Localized.

MeetingComponent15 fields

Flat sub-event of a Meeting. v3.0: per-field Localized.

identifier
kind
body_type
starts_at
ends_at
venue_refs
officers
agenda_ref
minutes_ref
attendance_refs
MeetingExtension4 fields

Profile-specific extension. Adopters register their namespace via profile and discriminate via kind. Field semantics tightened v2.1 (TODO.refactor/47): kind is the in-profile discriminator, ref is the URN of an external profile document, and the recursive extensions[] slot was removed (YAGNI — use dotted keys in attributes[] for nesting).

MeetingRelation3 fields

Directed link between two meetings.

sourcerequired
destinationrequired
typerequired
MeetingSeries12 fields

Parent of recurring Meeting instances. v3.0: per-field Localized.

recurrence
term
contact
kind
meeting_refs
body_type
Minutes6 fields

The narrative record of a Meeting. v3.0: per-document language_code + script replaced by a single spelling (ISO 24229).

spelling

ISO 24229 spelling/conversion system code

source_doc
source_pages
MinutesSection6 fields

One section of a Meeting's minutes — typically tied to an agenda item by number. v3.0: per-field Localized.

number
page_start
page_end
references
Name7 fields

Structured personal/organisational name (VCARD RFC 6350 conventions). formatted is the pre-built display string (FN); the structured components (N) are stored separately for sorting, indexing, or locale-aware rendering.

formatted
family
given
additional
prefix
suffix
Officer5 fields

A person holding a structural role in a Meeting.

role
person
term_start
term_end
Person11 fields

A Contact that is specifically an individual human. Schema duplicates Contact's properties because JSON-Schema draft-07 doesn't support extends. Same shape; semantically a subclass.

^urn:edoxen:contact:[^:]+:[^:]+$
kind
role
contact_methods
Recurrence15 fields

Structured ISO 8601-2 §13 recurrence.

freq
interval
count
until
by_month_day
by_month
by_week_no
by_year_day
by_hour
by_minute
by_second
by_set_pos
week_start
RecurrenceByDay2 fields

BYDAY part of a recurrence. ordinal is null for 'every', +1 for first, -1 for last.

ordinal
weekday
Reference3 fields

Generic document reference.

SourceUrl4 fields

Per-spelling canonical source URL (e.g. one PDF per language).

refrequired
format
spelling

ISO 24229 spelling/conversion system code

kind
StructuredIdentifier2 fields

An identifier (prefix + number). A Decision carries 1..* of these.

prefixrequired
numberrequired
Topic12 fields

The subject of discussion at a Meeting. v3.0: per-field Localized.

identifier
status
resumption_of
references
motions
decisions
TopicAsset6 fields

Non-text resource about a Topic. v3.0: per-field Localized.

TopicDocument8 fields

Text-bearing document about a Topic. v3.0: per-field Localized.

identifier
version
status
format
spelling

ISO 24229 spelling/conversion system code

Venue28 fields

Polymorphic place where a Meeting happens. kind discriminates physical vs virtual; all fields from both subtypes live here as optional siblings. v3.0: per-field Localized (name, label, description, address, building, floor, room, access_notes). Added urn (registry identity) and ref (reference-by-URN).

URN reference; if set, ignore other fields

^urn:edoxen:venue:[^:]+:[^:]+$
kind
capacity
contact_methods
unlocode
^[A-Z]{2}[A-Z0-9]{3}$
iata_code
^[A-Z]{3}$
city
country_code
^[A-Z]{2}$
access_notes
passcode
meeting_id
dial_in_numbers
waiting_room
registration_required
VoteRecord8 fields

One vote by one person on one decision/voting.

decision_ref
voting_ref
personrequired
affiliation
voterequired
role
notes
Action3 fields

A verb + one effective date + human-readable message.

typerequired
date_effectiverequired
messagerequired
Approval4 fields

Approval record: vote type, consensus degree, date, message.

typerequired
degreerequired
daterequired
BodyVocabularyEntry3 fields

One entry in a per-dataset body_vocabulary list. Maps a free-form body_type to a short canonical value. SSOT for body_type -> canonical_type resolution within the declaring collection.

body_type
canonical_type
definition
Consideration3 fields

The basis for a Decision: a verb + one effective date + reasoning.

typerequired
date_effectiverequired
messagerequired
Contact11 fields

VCARD-like abstract contact. v3.0: per-field Localized (name, title, affiliation, address). Added urn (registry identity) and ref (reference-by-URN).

URN reference; if set, ignore other fields

^urn:edoxen:contact:[^:]+:[^:]+$
kind
role
contact_methods
ContactCollection4 fields

Registry of Contacts indexed by scoped URN. Members carry urn: urn:edoxen:contact:{scope}:{local-id}; the collection's scope MUST match the scope segment in member URNs.

ContactIdentifier3 fields

One polymorphic external identifier — ORCID, ISNI, Wikidata QID, ROR, Ringgold, GitHub handle, etc. Replaces the hard-coded orcid field. OCP: new identifier schemes are added via the ContactIdentifierKind enum (or other + extensions).

ContactMethod5 fields

One polymorphic communication channel — phone, email, fax, url, mail, etc. kind discriminates the channel; value carries the address/number; label is a free-form display hint ("Office", "Front desk"). OCP: new channel kinds are added via the ContactMethodKind enum (or other + extensions).

kind
value
label
primary
Decision23 fields

A formal Decision. v3.0: per-field Localized (every translatable field carries its own spelling tag). Removed localizations[].

identifierrequired
kind
status
body_type
agenda_item
categories
meeting
urls
brought_by_motions
about_topics
made_in_component
considerations
approvals
actions
DecisionDate2 fields

Date with semantic kind (adoption / drafted / discussed).

daterequired
typerequired
DecisionMetadata9 fields

Collection-level metadata (localized title, meeting date, source, source URLs, host venue).

date
source
source_urls
city
^[A-Z]{2}[A-Z0-9]{3}$
country_code
^[A-Z]{2}$
meeting_urn
body_vocabulary
DecisionRelation3 fields

Directed relation between two decisions identified by their StructuredIdentifier.

sourcerequired
destinationrequired
typerequired
EntityRef6 fields

Typed cross-reference between entities (v2.1, TODO.refactor/44). Exactly one of urn, identifier, or local_ref should be set; the gem's EntityRef#valid? enforces this in Ruby.

identifier
local_ref
kind
role
note
ExtensionAttribute8 fields

One typed key/value pair within a MeetingExtension. Polymorphic on value type so consumers don't re-parse strings back into Int/Float/ Bool/Date (v2.1 tighten, TODO.refactor/47).

type
stringintegerfloatbooleandatedatetime
value
intValue
floatValue
booleanValue
dateValue
dateTimeValue
HostRef4 fields

Typed reference to a hosting organization.

refrequired
type
role
contact
LocalizedName3 fields

One language-specific value of a translatable Name field. Mirrors LocalizedString but carries a structured Name.

spellingrequired
valuerequired
LocalizedString3 fields

One language-specific value of a translatable String field. spelling is an ISO 24229 spelling/conversion system code. Always verbose — single-language data uses the same [{ spelling, value }] shape as multi-language data.

spellingrequired
valuerequired
MeetingComponent15 fields

Flat sub-event of a Meeting. v3.0: per-field Localized.

identifier
kind
body_type
starts_at
ends_at
venue_refs
officers
agenda_ref
minutes_ref
attendance_refs
MeetingExtension4 fields

Profile-specific extension. Adopters register their namespace via profile and discriminate via kind. Field semantics tightened v2.1 (TODO.refactor/47): kind is the in-profile discriminator, ref is the URN of an external profile document, and the recursive extensions[] slot was removed (YAGNI — use dotted keys in attributes[] for nesting).

MeetingIdentifier2 fields

Identifies the meeting a Decision belongs to.

venue
date
MeetingSeries12 fields

Parent of recurring Meeting instances. v3.0: per-field Localized.

recurrence
term
contact
kind
meeting_refs
body_type
Motion12 fields

A procedural act that brings a Decision.

identifier
mover
seconders
status
introduced_at
proposed_decision
resulting_decision
resulting_decision_ref
votings
Name7 fields

Structured personal/organisational name (VCARD RFC 6350 conventions). formatted is the pre-built display string (FN); the structured components (N) are stored separately for sorting, indexing, or locale-aware rendering.

formatted
family
given
additional
prefix
suffix
Officer5 fields

A person holding a structural role in a Meeting.

role
person
term_start
term_end
Person11 fields

A Contact that is specifically an individual human. Schema duplicates Contact's properties because JSON-Schema draft-07 doesn't support extends. Same shape; semantically a subclass.

^urn:edoxen:contact:[^:]+:[^:]+$
kind
role
contact_methods
Recurrence15 fields

Structured ISO 8601-2 §13 recurrence.

freq
interval
count
until
by_month_day
by_month
by_week_no
by_year_day
by_hour
by_minute
by_second
by_set_pos
week_start
RecurrenceByDay2 fields

BYDAY part of a recurrence. ordinal is null for 'every', +1 for first, -1 for last.

ordinal
weekday
Reference3 fields

Generic document reference.

SourceUrl4 fields

Per-spelling canonical source URL (e.g. one PDF per language).

refrequired
format
spelling

ISO 24229 spelling/conversion system code

kind
StructuredIdentifier2 fields

An identifier (prefix + number). A Decision carries 1..* of these.

prefixrequired
numberrequired
Topic12 fields

The subject of discussion at a Meeting. v3.0: per-field Localized.

identifier
status
resumption_of
references
motions
decisions
TopicAsset6 fields

Non-text resource about a Topic. v3.0: per-field Localized.

TopicDocument8 fields

Text-bearing document about a Topic. v3.0: per-field Localized.

identifier
version
status
format
spelling

ISO 24229 spelling/conversion system code

Url3 fields

URL with a kind (access / report) and an optional format hint.

kindrequired
refrequired
format
Venue28 fields

Polymorphic place where a Meeting happens. kind discriminates physical vs virtual; all fields from both subtypes live here as optional siblings. v3.0: per-field Localized (name, label, description, address, building, floor, room, access_notes). Added urn (registry identity) and ref (reference-by-URN).

URN reference; if set, ignore other fields

^urn:edoxen:venue:[^:]+:[^:]+$
kind
capacity
contact_methods
unlocode
^[A-Z]{2}[A-Z0-9]{3}$
iata_code
^[A-Z]{3}$
city
country_code
^[A-Z]{2}$
access_notes
passcode
meeting_id
dial_in_numbers
waiting_room
registration_required
VenueCollection4 fields

Registry of Venues indexed by scoped URN. Mirrors ContactCollection.

VoteRecord8 fields

One vote by one person on one decision/voting.

decision_ref
voting_ref
personrequired
affiliation
voterequired
role
notes
Voting13 fields

State machine for a single vote on a Motion.

identifier
on_motion
status
voting_method
called_by
called_at
result_declared_at
result
counts
casting_vote
vote_records
VotingCounts4 fields

Tally for a Voting instance.

abstentions
absent

Download

Usage

CLI

edoxen validate decisions/*.yaml
edoxen validate-meetings meetings/*.yaml

JavaScript / TypeScript

import { validateDecisions, validateMeetings } from '@edoxen/edoxen'

const result = await validateMeetings(parsedYaml)
if (!result.valid) {
  result.errors.forEach(e => console.error(`${e.path}: ${e.message}`))
}