This site provides URI dereferencing for ISO/TC 211 Geographic information/Geomatics standards. Every URI used in a published standard for requirements, recommendations, permissions, and conformance tests resolves to a page here.
This repository is used to build and deploy the https://standards.isotc211.org site. Jointly managed by ISO/TC 211 and Ribose.
# Install dependencies
bundle install
npm install
# Build site (output to _site/)
make all
# Local dev server with live reload
make serve
# Clean build artifacts
make cleanRequires Ruby 3.1+ and Node.js 20+.
The canonical URI pattern for ISO/TC 211 provision statements:
https://standards.isotc211.org/{Standard}/-{Part}/{Edition}/{Type}/{ClassId}[/{ItemId}]
Type-
One of
req(requirements),rec(recommendations),per(permissions), orconf(conformance).
Examples:
-
/19112/-1/2/conf/gaz/— Gazetteer conformance class -
/19112/-1/2/req/gaz/sch/— Gazetteer schema requirement -
/19135/-/2/req/identifiers/uniqueness/— Identifier uniqueness requirement
Every ISO/TC 211 standard on this site falls into one of three categories:
| Provided |
Standards with URI-identified requirements classes and conformance classes.
Data is provided as YAML files under |
| Without Harmonized URI Requirements |
Standards that do not specify requirements that utilize the ISO/TC 211 Harmonized URI scheme.
Listed manually in |
| Awaiting Data Upload |
Standards where the ISO defines requirements/conformance classes but data has not yet been uploaded to this site. These appear automatically from the inventory and show under "Standards Awaiting Data Upload". |
Adding a new standard requires only YAML files — no HTML authoring, no config changes, no template edits. The generator discovers the data, creates the index page, provision pages, homepage listing, 404 links, and example URIs automatically.
source/_data/{StandardNumber}/{Part}/{Edition}/
For a standard without parts, use - as the part:
source/_data/19135/-/2/ # ISO 19135:2026, Edition 2 source/_data/19115/-3/2/ # ISO 19115-3, Edition 2 source/_data/19112/-1/2/ # ISO 19112:2019, Edition 2
This file controls all metadata for the standard.
title: "ISO 19135:2026 Geographic information — Procedures for registration"
label: "ISO 19135:2026" # Short label for cards and breadcrumbs
subtitle: "Geographic information — Procedures for registration"
edition: 2
description: >
ISO 19135:2026 specifies procedures to be followed in establishing,
maintaining, and publishing registers of unique, unambiguous and
permanent identifiers and meanings assigned to items in geographic
information.
hide_fields: [statement, description, purpose, method]
iso_standard_url: https://www.iso.org/standard/87753.html
iso_preview_url: https://www.iso.org/obp/ui/en/#iso:std:iso:19135:ed-2:v1:en
title
|
Full standard title (used in page |
label
|
Short label with year (e.g. "ISO 19135:2026") — shown on cards, breadcrumbs, nav |
subtitle
|
Subtitle shown below the label on the standard index page |
edition
|
Edition number (shown as badge) |
description
|
Paragraph describing the standard (shown on its index page) |
hide_fields
|
Fields to strip from generated pages (ISO copyright control). Use |
iso_standard_url
|
Link to the standard page on ISO.org |
iso_preview_url
|
Link to the preview on ISO OBP |
*-rc.yaml-
Requirements classes (generates
/req/pages) *-cc.yaml-
Conformance classes (generates
/conf/pages)
The prefix is organizational and typically matches the standard’s clause numbering:
07-identifier-rc.yaml # Requirements classes for clause 7 07-identifier-cc.yaml # Conformance classes for clause 7
Uses the OGC ModSpec canonical format with normative_statements_classes at the top level:
---
normative_statements_classes:
- identifier: /req/class-id
name: "Full class name"
subject: subject-area
dependencies:
- /req/other-class
normative_statements:
- identifier: /req/class-id/fragment
name: "Requirement name"
statement: "The normative statement text"
guidance:
- "Implementation guidance"Each class generates a page at /{Standard}/-{Part}/{Edition}/req/{classId}/.
Each statement generates a page at /{Standard}/-{Part}/{Edition}/req/{classId}/{fragment}/.
---
conformance_classes:
- identifier: /conf/class-id
name: "Full class name"
target: /req/class-id
dependencies:
- /conf/other-class
tests:
- identifier: /conf/class-id/fragment
name: "Test name"
targets:
- /req/class-id/fragment
purpose: "Why this test exists"
method: "How to perform the test"
type: Validation
guidance:
- "Optional guidance"Each class generates a page at /{Standard}/-{Part}/{Edition}/conf/{classId}/.
Each test generates a page at /{Standard}/-{Part}/{Edition}/conf/{classId}/{fragment}/.
make clean && make allVerify key URIs resolve in _site/. The following are generated automatically:
-
Standard index page at
/{StandardNumber}/— lists all req/conf classes -
Class pages at
/{Standard}/-{Part}/{Edition}/req/{classId}/and…/conf/{classId}/ -
Item pages for individual requirements and tests
-
Homepage card in the standards catalog
-
404 page links for navigation back to available standards
-
Example URIs in the homepage URI format section
If an ISO/TC 211 standard does not specify requirements that utilize the ISO/TC 211 Harmonized URI scheme, add its reference to source/_data/tc211_standards_pending.yaml:
# One reference per line. Must match the reference field in tc211_standards.yaml.
# Prefix matching is used, so "ISO 6709" matches "ISO 6709:2022".
---
- ISO 6709:2022The standard will then appear under "Standards Without Harmonized URI Requirements" instead of "Awaiting Data Upload".
source/_data/tc211_standards.yaml contains a machine-generated inventory of all published ISO/TC 211 standards.
Each entry includes the standard reference, title, number, part, edition, ISO catalog ID, and publication date.
This file is not edited manually — it is maintained by the auto-discovery process.
script/discover_standards.rb:
-
Streams ISO public metadata (JSONL) for TC 211 deliverables
-
Filters to published, non-supplement, non-replaced standards
-
Keeps the latest edition per standard
-
Applies the pending list from
tc211_standards_pending.yaml -
Writes the complete inventory to
tc211_standards.yaml -
Reports newly discovered entries (used by GHA for PR creation)
Run manually:
ruby script/discover_standards.rbA GitHub Actions workflow (.github/workflows/discover_standards.yml) runs weekly on Sunday at 02:00 UTC (and on manual trigger).
When new standards are found, it creates a PR updating tc211_standards.yaml.
Any new standard not yet present under source/_data/ with YAML data automatically appears under "Awaiting Data Upload".
Once data files are added (see Adding a New Standard), it moves to "Supported Standards".
Phase 1: Standards with YAML data
_meta.yaml + *-rc.yaml + *-cc.yaml
│
▼
SiteScanner (discovers _data/{standard}/{part}/{edition}/)
│
▼
Standard (loads YAML via modspec-ruby models)
│
▼
CrossReferenceIndex (maps req↔conf identifiers)
│
▼
PageFactory (creates Jekyll pages + standards catalog)
Phase 2: Placeholder standards from inventory
tc211_standards.yaml + tc211_standards_pending.yaml
│
▼
PageFactory (creates placeholder pages for standards without data)
│
▼
Standards catalog (merged and sorted)
│
▼
Jekyll build (layouts + includes → _site/)
| Component | File | Purpose |
|---|---|---|
SiteScanner |
|
Discovers standard directories under |
Standard |
|
Loads |
CrossReferenceIndex |
|
Maps identifiers for req↔conf cross-links |
PageFactory |
|
Creates all Jekyll pages and the standards catalog |
FieldPolicy |
|
Strips copyright-restricted fields per |
identifier
|
Full URI path (e.g. |
name
|
Full class name |
subject
|
Subject area |
target
|
(conf only) Link to corresponding requirements class |
dependencies
|
List of dependency URI paths |
description
|
Class description (may be hidden via |
guidance
|
Implementation guidance (list of strings) |
normative_statements
|
(req only) List of child requirements |
tests
|
(conf only) List of child conformance tests |
identifier
|
Full URI path (e.g. |
name
|
Display name |
statement
|
(req) The normative statement text (may be hidden) |
guidance
|
Implementation guidance (list of strings) |
targets
|
(tests) List of requirement URIs this test validates |
purpose
|
(tests) Why the test exists (may be hidden) |
method
|
(tests) How to perform the test (may be hidden) |
type
|
(tests) Test type (e.g. Validation) |
examples
|
Usage examples |