ContactRegister
A registry of Contacts indexed by scoped URN. Members
carry urn: urn:edoxen:contact:{scope}:{local-id}; the register’s
scope MUST match the scope segment in member URNs.
Other documents (Meeting, MeetingComponent, HostRef, etc.) reference
contacts via ref: urn:edoxen:contact:{scope}:{local-id} and resolve
against the matching ContactRegister. See
Entity resolution for the full three-tier
pattern (inline / document-scoped / register).
scope: isotc154
title:
- spelling: eng
value: ISO/TC 154 Contacts
contacts:
- urn: urn:edoxen:contact:isotc154:jianfang-zhang
kind: person
role: secretary
name:
- spelling: zho-Hans
value: { formatted: 张建方, family: 张, given: 建方 }
- spelling: eng
value: { formatted: Jianfang Zhang }
contact_methods:
- { kind: email, value: zhangjf@cnis.gov.cn }
- urn: urn:edoxen:contact:isotc154:roman-schwartz
kind: person
name:
- spelling: eng
value: { formatted: Roman Schwartz }
Fields
| Field | Type | Description |
|---|---|---|
scope |
String |
Registry scope (matches URN scope segment on members). |
title |
LocalizedString[0..*] |
Display title (localized). |
contacts |
Contact[0..*] |
Registry members. |
extensions |
MeetingExtension[0..*] |
Profile-specific extensions. |
Storage patterns
A ContactRegister can be stored as:
- Single YAML file — typical for small registries (10–1000 contacts).
- YAML Stream — one Contact per document, separated by
---, for large registries that need partial updates. Glossarist-style.
Stream loading is a service-layer concern (file-system I/O); the model owns only the (de)serialisation of one register.
Ruby helpers
register = Edoxen::ContactRegister.from_yaml(File.read("contacts.yaml"))
register.find_by_urn("urn:edoxen:contact:isotc154:jianfang-zhang")
# => #<Edoxen::Contact urn=... name=[...]>
See also
- Contact — member shape
- Entity resolution — how
ref/local_ref/ inline resolve - Venue Register — parallel registry for Venues
- Body Register — parallel registry for Bodies
- Localization — spelling codes