The Transport Disruption ontology provides a formal framework for modelling travel and transport related events that have a disruptive impact on an agent's planned travel.
The ontology can be considered as consisting of two main sections: classes modelling the disruptive event and its impact on an agent’s plan, and a hierarchy of travel and transport related events.
For details of the ontology itself, please see the ontology documentation. The ontology is also available in TTL and RDF/XML encodings either directly or through content negotiation using the http://purl.org/td/transportdisruption namespace.
Throughout this page, examples are defined in the TTL format using the following namespaces:
@prefix : <http://www.example.com/transportdisruption#> . @prefix td: <http://purl.org/td/transportdisruption#> . @prefix tl: <http://purl.org/NET/c4dm/timeline.owl#> . @prefix event: <http://purl.org/NET/c4dm/event.owl#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . @prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . @base <http://www.example.com/transportdisruption> .
While the ontology documentation is useful, some examples are also useful! Lets consider an simple example where there will be roadworks on Union Street in Aberdeen, UK taking place overnight from 19:00 on Monday 20 October 2015 until 06:00 Tuesday 21 October 2015, and as a result the road will be closed. This can be represented as:
:roadworks a td:Roadworks; event:place :roadworksLocation; event:time :mondayNight. :roadworksLocation a geo:Point; geo:lat "57.146451"; geo:long "-2.09872". :mondayNight a tl:Interval; tl:beginsAtDateTime "2015-10-20T19:00:00"^^xsd:dateTime; tl:endsAtDateTime "2015-10-21T07:00:00"^^xsd:dateTime. :roadclosure a td:RoadClosure; event:place <http://linkedgeodata.org/page/triplify/way95288246>; event:time :mondayNight; event:factor :roadworks.
A couple of things to note about this example:
- The roadworks are located with a geolocation consisting of latitude and longitude values specifying where the roadworks are taking place.
- The road closure is located using the LinkedGeoData representation of one of the OpenStreetMap ways for Union Street, Aberdeen, UK. As this particular road consists of multiple ways, we could have added them all, but this particular one is fine indicating the part of the road that is closed.
- As both the roadworks and road closure occur at the same time, they use the same interval (defined using the Interval class of the Timeline ontology).
- The relationship between the two events (i.e. that the road closure is due to the roadworks) is captured by the
eg:roadclosed event:factor :roadworkstriple.
OK, so we have some events, now lets consider the travel plans of Bob, who was due to drive along that part of Union Street on his way to work that evening:
:bob a foaf:Person; td:hasPlan :driveToWork. :bobsDriveToWork a td:Plan; :time [ tl:beginsAtDateTime "2015-10-20T20:30:00"^^xsd:dateTime; tl:endsAtDateTime "2015-10-20T20:55:00"^^xsd:dateTime. ]; :route [ .... <http://linkedgeodata.org/page/triplify/way95288246>, ... ].
As Bob will be travelling when the road is closed, he is not going to be able to complete his journey as normal. Most likely he is going to have to divert his route to avoid the road closure. Using the Transport Disruption ontology, this could be represented as follows:
:alternativeRouteNecessary a td:DisruptiveImpact; td:relevantTo :bob; td:impactsOn :bobsDriveToWork; td:hasCause :roadclosure.
td:hasCause is the inverse property of
td:casuseOf the triple
eg:alternativeRouteNecessary td:hasCause eg:roadclosure will result in the following inference
:roadclosure td:causeOf :alternativeRouteNecessary.
And as such the
eg:roadclosure is now considered to be a disruptive event as it has had a disruptive impact on Bob's travel plans, captured by the following assertion:
:roadclosure a td:DisruptiveEvent.
The full example is available here.
For more information about the ontology itself:
- See the ISWC 2015 paper The Transport Disruption Ontology, which describes the design process and an example use case.
- Use the issues board on the main github project page.
- Contact David Corsar either on here (@dcorsar), via his website, or via Twitter with comments, questions, etc. or to request an invite to the github project.