English
Extension builder
Use it when your system needs attributes that a catalog model does not have. Pick the model and enter your attributes; you get two files:
- @context: imports the catalog
@contextby URL and defines only your attributes, so the catalog attributes keep their IRIs. It is the profile pattern from Extending models. - JSON Schema: validates the catalog attributes and yours.
Use a namespace under a domain you control. If an attribute would be useful to many systems, please propose it to the catalog (link below). What you enter stays on this page and is not sent anywhere, except when you open the link to the proposal form: that sends the attribute names and descriptions you entered to GitHub, to fill in the form.
Your attributes
Your @context
{
"@context": [
"https://datamodels.jp/context/transportation/v1.jsonld",
{
"acme": "https://example.com/ns/acme/",
"patrolRoute": "acme:patrolRoute"
}
]
}JSON Schema (the catalog attributes plus yours)
The catalog schemas are closed (additionalProperties: false), so a schema that only references them cannot add attributes. This one starts from https://datamodels.jp/schema/transportation/RoadRestriction/v1.0.0.json; generate it again when you move to a new version, and replace $id with your own URL.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/schema/acme/RoadRestriction.json",
"title": "RoadRestriction (acme)",
"description": "One road restriction, including closures: road name, regulated section as a point, line or area, status and category.",
"x-license-url": "https://datamodels.jp/LICENSE-CONTENT",
"x-model-tags": "road, transportation, Japan",
"x-derived-from": "https://github.com/geolonia/geonicdb-datamodels",
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uri",
"description": "Entity id (URN)"
},
"type": {
"type": "string",
"const": "RoadRestriction",
"description": "Entity type"
},
"roadName": {
"description": "Road name",
"type": "string",
"x-ngsi": {
"type": "Property"
},
"x-iri": "https://smartdatamodels.org/dataModel.Transportation/roadName"
},
"address": {
"$ref": "https://datamodels.jp/schema/common/JapaneseAddress/v1.0.0.json",
"description": "Address of the location, as a JapaneseAddress value (common subject)",
"x-ngsi": {
"type": "Property",
"model": "https://datamodels.jp/ns/common/JapaneseAddress"
},
"x-iri": "https://schema.org/address"
},
"location": {
"$ref": "https://datamodels.jp/schema/common/Geometry/v1.0.0.json",
"description": "The regulated section, as a GeoJSON geometry. A point for a single-spot restriction, a LineString for a section, a polygon for an area, matching the point/line/area regulation forms (点規制・線規制・面規制) of the NPA's traffic regulation data format (交通規制情報(拡張版標準フォーマット)説明書 Ver: k_2.1, JARTIC, 2025-01-20)",
"x-ngsi": {
"type": "GeoProperty",
"model": "https://datamodels.jp/ns/common/Geometry"
},
"x-iri": "https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld#location"
},
"restrictionStatus": {
"description": "Normalised restriction state, the value space of Smart Data Models RoadSegment.status: closed (no traffic), limited (traffic possible but not in full capacity), open (restriction lifted or not yet in place). The local wording goes in statusLabel; regulationCategory gives the finer public-sector category. When no value fits, leave it out and give the local wording in statusLabel",
"type": "string",
"enum": [
"closed",
"limited",
"open"
],
"x-ngsi": {
"type": "Property"
},
"x-iri": "https://datamodels.jp/ns/transportation/restrictionStatus"
},
"regulationCategory": {
"description": "Regulation category, from the legend of MLIT's Road Information Provision System (道路情報提供システム 通行規制情報, road-info-prvs.mlit.go.jp, accessed 2026-09-24): the categories a road administrator uses for a driver-facing closure or restriction. Optional and independent of restrictionStatus",
"type": "string",
"enum": [
"closedWeather",
"closedConstruction",
"closedHeavyVehicle",
"closedWinter",
"laneRestriction",
"alternatingOneWay",
"mobileRestriction",
"chainRestriction",
"chainGuidance",
"other"
],
"x-ngsi": {
"type": "Property"
},
"x-iri": "https://datamodels.jp/ns/transportation/regulationCategory"
},
"statusLabel": {
"type": "string",
"minLength": 1,
"description": "The restriction status in the local or source system's wording (依頼中, 通行止め中, 解除済み). Required when restrictionStatus is left out",
"x-ngsi": {
"type": "Property"
},
"x-iri": "https://datamodels.jp/ns/task/statusLabel"
},
"validFrom": {
"description": "When the restriction takes effect",
"type": "string",
"format": "date-time",
"x-ngsi": {
"type": "Property"
},
"x-iri": "https://smartdatamodels.org/validFrom"
},
"validTo": {
"description": "When the restriction is lifted",
"type": "string",
"format": "date-time",
"x-ngsi": {
"type": "Property"
},
"x-iri": "https://smartdatamodels.org/dataModel.Alert/validTo"
},
"description": {
"type": "string",
"description": "Free-text memo",
"x-ngsi": {
"type": "Property"
},
"x-iri": "https://uri.etsi.org/ngsi-ld/v1/ngsi-ld-core-context-v1.8.jsonld#description"
},
"patrolRoute": {
"type": "string",
"x-ngsi": {
"type": "Property"
},
"x-iri": "https://example.com/ns/acme/patrolRoute"
}
},
"required": [
"id",
"type",
"location"
],
"anyOf": [
{
"required": [
"restrictionStatus"
]
},
{
"required": [
"statusLabel"
]
}
],
"additionalProperties": false,
"x-extends": "https://datamodels.jp/schema/transportation/RoadRestriction/v1.0.0.json"
}If these attributes belong in the catalog, tell us with the proposal form (filled in for you).