Third Candidate: Madrid Traffic Accidents, Built from a PDF Spec

The Candidates repository has a third entry: madrid-accidentes-trafico, one model — AccidentInvolvedPerson — covering traffic accidents registered by Madrid’s Policía Municipal. Browse it alongside the other two candidates on the search page.

If this is your first time hearing about the Candidates repository, the introductory post explains what it is and why it exists.

A different kind of source

Our first two candidates came from formal ontologies. This one is different: it’s built directly from a 3-page PDF field specification published by Madrid’s Dirección General de la Policía Municipal — a plain data dictionary, in Spanish, with no OWL, no RDF, nothing machine-readable at all. That’s exactly the kind of source Candidates is meant to handle: most open data in the world looks like this, not like a formal ontology.

One design detail worth calling out: Madrid’s dataset publishes one row per person involved in an accident — drivers, passengers, pedestrians — not one row per accident. A single serious incident can generate over 40 rows. This candidate mirrors that structure faithfully with a single flat entity rather than splitting accident and person data apart, so a row in the real CSV maps directly to one entity instance, no extra grouping logic required.

Real data almost always disagrees with the spec, a little

Because we had both the specification and the real published dataset, we could check one against the other — and found genuine gaps, all documented in the candidate’s standard-metadata.yaml:

  • The PDF describes 8 broad accident-type categories in prose. The real 2023 data records 13 more granular ones as independent values — for example, what the spec calls one category (“Colisión doble”) actually appears in the data as three separate values depending on the collision angle.
  • The PDF says accident times are grouped into 1-hour ranges. The real data has full minute-level precision.
  • The PDF describes the sex field as “hombre, Mujer o no asignado.” The real data uses “Desconocido” instead of “no asignado.”

In every case, the schema follows what’s actually in the published data, not what the specification claims — because a schema that matches the document but not the dataset isn’t useful to anyone trying to load real records.

Tested against every real row, not a sample

This candidate introduces something new to the repository: a generic, reusable CSV validator (tools/validate_against_csv.py) that converts real CSV rows into JSON per a column mapping and checks them against a schema.json, with stratified sampling and full date/time format checking. We used it to validate this candidate against Madrid’s entire published 2023 dataset — not a sample. All 48,830 real rows pass.

The tool is schema-agnostic, so it’s ready to reuse on any future candidate with a real CSV or tabular source to test against.

What’s still open

Two things this candidate does not resolve, flagged directly rather than glossed over: the source PDF doesn’t state a license for the dataset, and we haven’t checked whether this overlaps with any existing official Smart Data Models Transportation model. Both are worth checking before this goes any further.

Real corrections, comments, and pull requests are welcome on standards/madrid-accidentes-trafico.

Second Candidate: Tourism Accommodation and Heritage Models from SEGITTUR

The Candidates repository has its second entry: edint-turismo, 11 models covering tourism accommodation (hotels, guest houses, aparthotels) and historical/cultural resources (fortified palaces, amphitheatres, aqueducts), translated from the EDINT Tourism repository. You can browse both candidates now on the search page.

If you missed it, the first post explains what the Candidates repository is and why it exists. This second entry is a good illustration of exactly the kind of situation it’s meant to surface.

A repository that isn’t the ontology

The EDINT Tourism repository doesn’t actually contain an ontology — its own README says it “only includes usage examples.” The real vocabulary lives externally: SEGITTUR’s Core Tourism Ontology, a reference model for Spain’s future Intelligent Destination Platform, with 388 classes, real SHACL constraints, and dozens of controlled vocabularies. The EDINT repository demonstrates a thin, deliberately narrow slice of it — 11 classes, backed by real open-data records from Aragón, Castilla y León, Gijón, Alcalá de Henares and Segovia. This candidate translates exactly that slice, not the other 377 classes SEGITTUR’s ontology defines.

What we found inside SEGITTUR’s own ontology

Translating from real, formal ontologies has a side effect: it surfaces inconsistencies that are easy to miss when a model is only ever read by humans. A few worth mentioning:

  • Rating is defined three incompatible ways in the same ontology. The formal class definition uses ratingUnit/ratingValue (matching every real example we found — “stars” / “3”); the ontology’s own SHACL shapes instead define bookingValue, googleReviewValue and tripAdvisorValue as separate float fields; and the SHACL shape for Hotel specifically adds a fourth pattern, a flat stars integer. None of the real data uses either of the SHACL variants. We followed the real data.
  • Several property and class names in the repository’s own example files don’t match the ontology they claim to use: numberOfAccomodationUnits should be numberOfAccommodationUnits, offersAccommodationRateType should be typeOfAccommodationRate, and the historical-resource classes Amphiteatre and Acueduct should be Amphitheatre and Aqueduct. We corrected these against the authoritative ontology while keeping the real recorded values.
  • hasBookingChannel is used directly on a Hotel instance in the ontology’s own documentation example — but its formally declared domain doesn’t actually include Hotel’s superclass chain. A genuine domain/usage mismatch in the source, not something we introduced.

All of this is recorded in the candidate’s standard-metadata.yaml, exactly so nobody has to rediscover it.

What still needs checking

This one carries a higher duplication risk than our first candidate, and we’re saying so plainly rather than waiting for someone else to notice: Smart Data Models already has official SmartDestinations and PointOfInterest domains, and this candidate almost certainly overlaps with models that already exist there. We did not check before publishing this candidate — that overlap check is the single most useful thing anyone could do next, before any of these eleven models go further.

As with the first candidate: real examples, corrections, and comments are welcome via pull request or issue on standards/edint-turismo.

Track new Candidate models straight from the front page

Keep an eye on the last widget in the right-hand column of the smartdatamodels.org front page: it now tracks live updates to the Candidates repository, the place where existing standards and ontologies get their first translation into the Smart Data Models shape before becoming official.

Every new candidate standard, every new model, every fix lands there as soon as it’s pushed — so it’s the fastest way to notice something new without watching the repository yourself.

Want to explore what’s already in? Use the searchable index at smart-data-models.github.io/Candidates, or browse the repository directly on GitHub. And if you’re new to the Candidates concept, start with the introductory post.

Introducing the Smart Data Models Candidates Repository

The Smart Data Models now has a Candidates repository — a low-friction entry point where any existing standard, ontology or open dataset can be translated into the SDM shape (JSON Schema + NGSI-LD context + examples) before anyone commits to the full contribution process. The first entry, translated from the EDINT Infrastructure Ontology, is live today — and it needs your help to move forward.

What is the Candidates repository?

Until now, turning an external standard into a Smart Data Model meant going almost straight to the Incubated repository, where a contributor actively develops the model to the point of passing our full validation suite and preparing it for official publication. That’s the right process once someone is committed to doing the work — but it leaves no room for a lighter step: “here is a standard that looks like it maps well onto NGSI-LD — does anyone want to develop this further?”

The Candidates repository fills that gap. It maps existing standards — ontologies, open data schemas, sector vocabularies — into the SDM format (JSON Schema, JSON-LD context, key-value and NGSI-LD normalized examples) as a starting point, organized standard-first:

standards/<standard-slug>/
  standard-metadata.yaml
  models/<EntityName>/
    schema.json
    context.jsonld
    examples/
      example.json
      example-normalized.jsonld

A candidate is not a finished data model. It’s a proposal: a structurally valid, plausible translation that any user of Smart Data Models can pick up, test against real payloads, comment on, correct, or use as the basis for a full contribution to Incubated.

The first example: the EDINT Infrastructure Ontology

The first entry, edint-infraestructura, translates the EDINT Infrastructure Ontology — a formal OWL vocabulary developed under the EU-funded EDINT (Espacio de Datos para las Infraestructuras Urbanas Inteligentes) project for describing a municipality’s public and private facilities: educational, cultural, social and sports centers, health centers, on-street and off-street parking, and shared-bicycle stations, together with the sensors, observations, management roles and organizations involved in operating them.

Eleven candidate models were generated: Facility, Parking, BikeSharingStation, ObservationPoint, AccessSensor, CountingSensor, AccessObservation, CountingObservation, Violation, ManagementRole and Organization. Every schema is valid JSON Schema (Draft 2020-12) and every example validates against its own schema — but that’s where “finished” stops. In the spirit of being upfront about what a Candidate actually is, here’s exactly where this one stands:

  • Real examples exist for only one of the eleven models. Facility is grounded in a real record from the source ontology’s own example data (a municipal day-care center in Madrid). The other ten — the sensors, observations, violations, roles — have plausible but synthetic example payloads, because the source ontology itself doesn’t ship real instance data for them. This is the single most useful thing the community could contribute right now: real payloads from an actual access-control sensor, a real counting observation, a real management-role record.
  • Two models likely duplicate existing official subjects. Parking and Organization are thin, attribute-free specializations in the source ontology and may well overlap with the existing official dataModel.Parking and dataModel.Organization. This needs a real review before either goes any further.
  • The source ontology is licensed CC-BY-SA-4.0 (ShareAlike), while SDM contributions are conventionally CC-BY-4.0. This hasn’t been resolved and is flagged directly in the candidate’s standard-metadata.yaml for whoever picks this up next.
  • Geolocation needs a second look. The source ontology’s geometry is expressed in a projected coordinate system (not WGS84), so the example coordinates here are illustrative Madrid locations, not verified reprojections of the original data.

None of this makes the candidate useless — quite the opposite. It’s exactly the kind of concrete, checkable list that turns “someone should look into this standard” into a set of small, tractable tasks anyone can pick up.

How a Candidate could become an official data model

There is no formal graduation process yet, and we’d rather propose one in the open than invent it quietly. Here’s a first draft, and we’re actively looking for feedback on it:

  1. Real-world evidence. At least one model in the candidate has real, non-synthetic example payloads from an actual system or dataset using it.
  2. Passes validation. The candidate’s schemas and examples pass the standard SDM test suite with zero blocking failures (the same 12 checks used for Incubated contributions).
  3. No unresolved duplication. Any overlap with an existing official model has been explicitly checked and either resolved (extend the existing model instead) or justified (the candidate covers something genuinely different).
  4. Compatible licensing. The source material’s license allows redistribution under the terms Smart Data Models publishes under.
  5. A short public review. A brief comment period on the candidate’s pull request or a linked issue, open to anyone in the community.

Once a candidate clears these, it moves into the normal Incubated workflow for full development ahead of official publication.

How to get involved

  • Browse the repository: github.com/smart-data-models/Candidates
  • Search all candidates: smart-data-models.github.io/Candidates — a searchable, always up to date index of every candidate standard and model
  • Contribute a real example for any of the eleven EDINT models above — open a pull request against standards/edint-infraestructura/, or an issue if you’re not sure how.
  • Propose a new candidate: if you know a standard, ontology or open dataset that should have an SDM mapping, open an issue describing it, or submit the translated standards/<slug>/ folder directly.
  • Give feedback on the promotion criteria above — they’re a first draft, not a final decision.

Find all published Smart Data Models at smartdatamodels.org/ search menu, and everything currently in development in the Incubated repository.

New data models geometry_msgs_pose, nav_msgs_odometry and sensor_msgs_batteryState at subject dataModel.ROS2

We are pleased to announce the publication of geometry_msgs_pose and nav_msgs_odometry and sensor_msgs_batteryState within the subject dataModel.ROS2.

geometry_msgs_pose: A representation of pose in free space, composed of position and orientation

nav_msgs_odometry: Represents an estimate of a position and velocity in free space

sensor_msgs_batteryState: Represents the state of a battery, including voltage, current, charge, capacity, and health status

We are grateful to Manfredi Pistone from Engineering Ingegneria Informatica S.p.A. for their contribution to these data models.

New data models EnergyCommunity and EnergyProsumer at subject dataModel.EnergyCommunity

We are pleased to announce the publication of EnergyCommunity and EnergyProsumer within the subject dataModel.EnergyCommunity.

EnergyCommunity: A collective entity representing an energy community enabling shared production, consumption, and storage of energy among its members.

EnergyProsumer: A role played by an individual or organization that both consumes and produces energy within an energy community.

We are grateful to Rodi Jolak from RISE Research Institutes of Sweden (Contributor of EnergyCommunity and EnergyProsumer data models), for his contributions to these data models.

 

New data models FishContainment, Specie and Sump at subject dataModel.Aquaculture

We are pleased to announce the publication of FishContainment and Specie and Sump within the subject dataModel.Aquaculture.

FishContainment: FishContainment entity represents a fish containment unit (tank, cage, pond, or any enclosed water structure) used in aquaculture to house and monitor fish populations and water quality parameters

Specie: Specie entity describes scientific and physiological parameters of an aquaculture fish species, including digestion, feeding capacity, and biological growth-related properties used for simulation and monitoring

Sump: Sump entity represents a water treatment and recirculation unit in an aquaculture facility, monitoring water quality parameters such as pH, CO2, redox potential, and gas pressure to ensure optimal conditions for fish containment.

We are grateful to Ahmed ABID from EGM, Franck LE GALL from EGM for their contributions to these data models.

New data models OSMBoundary, OSMClub, OSMCraft, OSMEmergency, OSMGeological, OSMHealthcare, OSMHistoric, OSMIndoor, OSMManMade, OSMMilitary, OSMOffice, OSMPlace, OSMPower, OSMRoute, OSMTelecom, OSMTrafficSign and OSMWater at subject dataModel.OpenStreetMap

We are pleased to announce the publication of OSMBoundary, OSMClub,  OSMCraft,  OSMEmergency,  OSMGeological, OSMHealthcare, OSMHistoric, OSMIndoor, OSMManMade, OSMMilitary, OSMOffice, OSMPlace, OSMPower, OSMRoute, OSMTelecom, OSMTrafficSign and OSMWater within the subject dataModel.OpenStreetMap.

OSMBoundary: Administrative and other boundaries from OpenStreetMap tagged with boundary=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMClub: Social, sports, or interest-based clubs from OpenStreetMap tagged with club=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMCraft: A place for crafts and manual trades from OpenStreetMap tagged with craft=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMEmergency: An emergency facility or equipment from OpenStreetMap tagged with emergency=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMGeological: Geological features from OpenStreetMap tagged with geological=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMHealthcare: Healthcare facilities and services from OpenStreetMap tagged with healthcare=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMHistoric: A historic site or monument from OpenStreetMap tagged with historic=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMIndoor: Indoor features from OpenStreetMap tagged with indoor=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMManMade: An artificial structure from OpenStreetMap tagged with man_made=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMMilitary: Military zones and buildings from OpenStreetMap tagged with military=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMOffice: An office or place of business from OpenStreetMap tagged with office=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMPlace: Geographical places from OpenStreetMap tagged with place=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMPower: Facilities for generation and distribution of electrical power from OpenStreetMap tagged with power=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMRoute: Established routes from OpenStreetMap tagged with route=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMTelecom: Telecommunication infrastructure from OpenStreetMap tagged with telecom=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMTrafficSign: Road and traffic signs from OpenStreetMap tagged with traffic_sign=*. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

OSMWater: Bodies of water from OpenStreetMap tagged with water=* or natural=water. This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.

We are grateful to OpenStreetMap contributors from OpenStreetMap (This data model is a derivative work based on the OpenStreetMap Wiki, licensed under CC BY-SA 2.0 by OpenStreetMap contributors.) for their contribution to these data models.