A Word on Linked Data
The massive shift in RINF 3.1 is the adoption of Linked Data principles. Instead of just sending files, we are building a Knowledge Graph.
ERA Ontology
The data model is based on the ERA Ontology. This is the dictionary of the railway. It provides machine-readable definitions for every object (Track, Signal, Platform) and property.
Instead of guessing what "TrackType=1" means, the Ontology defines it explicitly.
Open for Contribution
The ERA Ontology is managed openly. It is not a closed standard; contributions and comments are welcome from the community.
View on GitLabRDF Format
Data is structured using RDF (Resource Description Framework). This is a graph format where everything is a "triple" (Subject -> Predicate -> Object).
External Ontologies
RINF doesn't reinvent the wheel. It reuses standard global ontologies:
- GeoSPARQL for geography (coordinates, geometries).
- Time Ontology for validity dates and intervals.
- SKOS for code lists and definitions.
Validation with SHACL
How do we ensure the data is correct? RINF uses SHACL (Shapes Constraint Language) rules.Think of SHACL as a "spellchecker" for the graph. Just as XML has XSD to define valid structure, RDF uses SHACL. It defines "shapes" that data must fit into. If a node doesn't fit its shape (e.g., missing a required property or having the wrong data type), it's rejected.
SHACL rules act like automated tests for the data. They check:
- Cardinality: Does this track have exactly one length?
- Data Types: Is the speed limit a number?
- Dependencies: If a platform exists, does it have a reference to a parent station?
era-sh:TrackShape
a sh:NodeShape ;
sh:targetClass era:Track ;
sh:property [
sh:path era:length ;
sh:minCount 1 ;
sh:datatype xsd:double ;
sh:message "A track must have a length (number)." ;
] . Learn More
For a deep dive into how these rules work in practice, read SHACL for the Practitioner.
URIs: The Identity of Objects
In Linked Data, every object needs a unique name, or URI (Uniform Resource Identifier). RINF uses a specific strategy:
Hash URIs (Versioned)
Generated based on the object's natural keys *and* its
validity dates (as defined by the Time Ontology).
Examples: .../Track/123_2024-01-01_2025-01-01
This uniquely identifies a specific *version* of
an element in time.
Canonical URIs (Identity)
Represents the element conceptually, without considering
validity dates.
Example: .../Track/123
This allows us to query "Track 123" regardless of
when it was active.