Skip to content

ISO-TC211/standards-isotc211.github.io

Repository files navigation

ISO/TC 211 Standards URI Dereferencing Service

Quick Start

# 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 clean

Requires Ruby 3.1+ and Node.js 20+.

URI Template

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), or conf (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

Standards Categories

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 source/_data/{Standard}/{Part}/{Edition}/. These appear under "Supported Standards" on the homepage.

Without Harmonized URI Requirements

Standards that do not specify requirements that utilize the ISO/TC 211 Harmonized URI scheme. Listed manually in source/_data/tc211_standards_pending.yaml. These appear under "Standards Without Harmonized URI Requirements".

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

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.

Step 1: Create the data directory

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

Step 2: Add _meta.yaml

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 <title>)

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 [statement, description, purpose, method] when full text cannot be published. Use [] when approved for publication.

iso_standard_url

Link to the standard page on ISO.org

iso_preview_url

Link to the preview on ISO OBP

Step 3: Add YAML data files

File naming convention

*-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

Requirements class format (*-rc.yaml)

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 class format (*-cc.yaml)

---
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}/.

Step 4: Build and verify

make clean && make all

Verify 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

Marking a Standard as "Without Harmonized URI Requirements"

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:2022

The standard will then appear under "Standards Without Harmonized URI Requirements" instead of "Awaiting Data Upload".

Standards Inventory and Auto-Discovery

Inventory file

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.

Discovery script

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.rb

Automated workflow

A 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".

Architecture

Data flow

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/)

Generator pipeline

Component File Purpose

SiteScanner

source/_plugins/standards/site_scanner.rb

Discovers standard directories under _data/

Standard

source/_plugins/standards/standard.rb

Loads _meta.yaml and YAML data via modspec-ruby

CrossReferenceIndex

source/_plugins/standards/cross_reference_index.rb

Maps identifiers for req↔conf cross-links

PageFactory

source/_plugins/standards/page_factory.rb

Creates all Jekyll pages and the standards catalog

FieldPolicy

source/_plugins/standards/field_policy.rb

Strips copyright-restricted fields per _meta.yaml

Layouts

Layout Purpose

standard_index

Standard index page (auto-generated from _meta.yaml)

provision_class

Requirements/conformance class pages and individual provision pages

Data Fields Reference

Class-level fields (normative_statements_classes / conformance_classes)

identifier

Full URI path (e.g. /req/gaz)

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 hide_fields)

guidance

Implementation guidance (list of strings)

normative_statements

(req only) List of child requirements

tests

(conf only) List of child conformance tests

Item fields (requirements and tests)

identifier

Full URI path (e.g. /req/gaz/sch)

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

Standards data is copyright ISO. Fields restricted by copyright are controlled per-standard via _meta.yaml hide_fields. When full publication rights are obtained, set hide_fields: [] to display all content.

About

ISO/TC 211 site for normative statements and conformance

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors