This is a public document. First draft by Daniel Dardailler, to share for W3C geek week 2012 in July.
Editor: Daniel Dardailler, July 21th 2012, Finalized the runtime ontology using OWL2 Manchester syntax.
See OWL content and graph below.
Next steps: finalize the datamodel, enter some individuals and create some queries
I'm interested in designing some structured data logic to represent Road Accident, their parties, location, causes, effects, etc, so that we see more of the UK googlemap layer webapp showing accident-prone crossings, with more semantics available (aka: query for "car brand with the smaller number of serious casualty for rear passenger seats on motorways").
The aim is to create a useful/coherent Road Accident ontology and accompanying resources/tools to describe traffic or road accidents, involving people, vehicle, animal, having cause, effects, etc. with RDF/OWL.
Another goal is first to have fun designing/tuning an ontology, one made of easy-to-grasp concepts, and eventually to facilitate the growth of this particular segment of the web of open data, by providing some ready-to-use tools for people tracking these events (it could be in a crowd sourced db, or a gov maintained one, so we need to work at the lowest common denominator: an interoperable schema and some tools).
I think we are all concerned by road accidents and I don't see a single organization that is going to do this job to accelerate progress in avoiding them (I contacted a couple of them, see below in ref).
Notes: need to look better for existing work, and reuse if possible, but I couldn't find anything really relevant for what I want to achieve, at the higher level that is - what you see being used in googlemap is usually pretty linear data (address, hour, type:car/bike, etc) , and what you found in international organizations is usually detailed leaf ontology (i.e. on type of injuries, vehicles, road, etc, but nothing structuring the whole domain together) and I also think it's better to start designing ontology on a white board, to better understand all the information you want to handle, and be willing to drop it all if you find an pre-existing design or pieces that matches those requirements.

# this content loads fine in webprotege and protege, giving this layout
Prefix: xsd: <http://www.w3.org/2001/XMLSchema#>
Prefix: owl: <http://www.w3.org/2002/07/owl#>
Prefix: xml: <http://www.w3.org/XML/1998/namespace>
Prefix: rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
Prefix: dc: <http://purl.org/dc/elements/1.1/>
Prefix: rdfs: <http://www.w3.org/2000/01/rdf-schema#>
Prefix: : <http://www.w3.org/ontologies/2012/6/ra.owl#>
Prefix: ra: <ra:http://www.w3.org/2012/7/ra3.owl#>
Ontology: <http://www.w3.org/2012/7/ra3.owl>
AnnotationProperty: rdfs:comment
Datatype: xsd:positiveInteger
Datatype: xsd:anyURI
Datatype: xsd:date
Datatype: rdf:PlainLiteral
Datatype: xsd:boolean
Datatype: xsd:string
Datatype: xsd:integer
ObjectProperty: ra:drives
SubPropertyOf:
ra:isIn
Domain:
owl:Thing
Range:
ra:Vehicle
ObjectProperty: isPassengerOf
SubPropertyOf:
ra:isIn
Range:
ra:Vehicle
ObjectProperty: ra:involves
Annotations:
rdfs:comment "involves Person, Vehicle, Animal, NonLivingThing like a stone on the road, another RoadAccident, etc"
Domain:
ra:RoadAccident
Range:
owl:Thing
ObjectProperty: ra:carries
Domain:
owl:Thing
Range:
owl:Thing
ObjectProperty: ra:insures
Domain:
ra:InsuranceCompany
Range:
owl:Thing
InverseOf:
ra:insuredBy
ObjectProperty: ra:isIn
Annotations:
rdfs:comment "anything can be in anything"@en
EquivalentTo:
ra:isOn
Domain:
owl:Thing
Range:
owl:Thing
ObjectProperty: ra:location
Domain:
ra:Event
Range:
ra:Location
ObjectProperty: ra:isOn
EquivalentTo:
ra:isIn
Domain:
owl:Thing
Range:
owl:Thing
ObjectProperty: ra:drivenBy
Domain:
ra:Vehicle
ObjectProperty: ra:isOwnedBy
Annotations:
rdfs:comment "a person cannot be owned"
Domain:
owl:Thing
Range:
ra:Person
ObjectProperty: ra:deliveredBy
Domain:
ra:OfficialID
Range:
ra:Organization
ObjectProperty: ra:insuredBy
Domain:
owl:Thing
Range:
ra:InsuranceCompany
InverseOf:
ra:insures
ObjectProperty: ra:isPartOf
Domain:
owl:Thing
Range:
owl:Thing
ObjectProperty: ra:includes
Domain:
owl:Thing
Range:
owl:Thing
ObjectProperty: ra:delivers
Domain:
owl:Thing
Range:
owl:Thing
ObjectProperty: ra:owns
Annotations:
rdfs:comment "only Person and org owns things, several possible"
Domain:
ra:Person
Range:
owl:Thing
ObjectProperty: ra:involvedIn
Domain:
owl:Thing
Range:
ra:RoadAccident
DataProperty: ra:insuranceType
Annotations:
rdfs:comment "name of coverage package in the given insurance"
Domain:
owl:Thing
Range:
xsd:string
DataProperty: ra:ageInyears
Annotations:
rdfs:comment "age at event time"
Range:
xsd:positiveInteger
DataProperty: ra:lastName
Domain:
ra:LivingBeing
Range:
xsd:string
EquivalentTo:
ra:Name
DataProperty: ra:vehicleCategory
Domain:
ra:Vehicle
Range:
{"bicycle" , "bus" , "car" , "motocycle" , "truck"}
DataProperty: ra:driverLicenceCategory
Domain:
ra:DriverLicence
Range:
{"lightvehicle" , "motorcycle" , "truck"}
DataProperty: ra:positionInVehicle
Range:
{"backseat" , "front passenger" , "truck platform"}
DataProperty: ra:accidentDetails
Domain:
ra:RoadAccident
Range:
xsd:anyURI
DataProperty: ra:vehicleColor
Domain:
ra:Vehicle
Range:
{"darkgrey" , "green" , "lightgrey"}
DataProperty: ra:orgAddress
Domain:
ra:Organization
Range:
xsd:string
DataProperty: ra:vehicleProblem
Domain:
ra:Vehicle
Range:
{"brake" , "deadengine" , "flattire"}
DataProperty: ra:relatedDamage
Annotations:
rdfs:comment "apply to non living thing, cars, robot, same as injury for person/animal"
Domain:
ra:NonLivingThing
Range:
xsd:string
DataProperty: ra:parked
Domain:
ra:Vehicle
Range:
xsd:boolean
DataProperty: ra:birthDate
Domain:
ra:LivingBeing
EquivalentTo:
ra:makeDate
DataProperty: ra:animalRace
Annotations:
rdfs:comment "Person are not Animal in my universe"
Range:
{"boar" , "cat" , "deer" , "dog" , "donkey" , "horse"}
DataProperty: ra:relatedInjuryDesc
Annotations:
rdfs:comment "sms size description of injury"
Domain:
ra:LivingBeing
Range:
xsd:string
DataProperty: ra:insuranceID
Domain:
owl:Thing
Range:
xsd:string
DataProperty: ra:Name
Annotations:
rdfs:comment "same as lastName if not present"
Domain:
ra:LivingBeing
Range:
xsd:string
EquivalentTo:
ra:lastName
DataProperty: ra:isWitness
Annotations:
rdfs:comment "robot and animal cannot be witness or declares something in my universe"
Domain:
ra:Person
Range:
xsd:boolean
DataProperty: ra:speedUnit
Domain:
owl:Thing
Range:
{"kmh" , "mph"}
DataProperty: ra:vehicleBrand
Domain:
ra:Vehicle
Range:
xsd:string
DataProperty: ra:email
Domain:
ra:LivingBeing
Range:
xsd:string
DataProperty: ra:orgShortName
Domain:
ra:Organization
Range:
xsd:string
DataProperty: ra:trafficViolation
Annotations:
rdfs:comment "robot, animal, pedestrian included"
Domain:
owl:Thing
Range:
{"crossingfordidden" , "priority" , "redlight" , "speed" , "stop"}
DataProperty: ra:driverLicenceNumber
Domain:
ra:DriverLicence
Range:
xsd:string
DataProperty: ra:gps
Annotations:
rdfs:comment "e.g. lat:45.0 long:-6.5"
Domain:
ra:Location
Range:
xsd:string
DataProperty: ra:weatherCondition
Domain:
ra:RoadAccident
Range:
{"earthquake" , "flood" , "ice" , "mud" , "normal" , "rain" , "smoke" , "snow" , "wind"}
DataProperty: ra:isRemote
Domain:
owl:Thing
Range:
xsd:boolean
DataProperty: ra:passengerProtection
Annotations:
rdfs:comment "use None to say that the passenger didn't have one"
Range:
{"airbag" , "arceau" , "helmet" , "seatbelt"}
DataProperty: ra:deliveredDate
Domain:
ra:OfficialID
Range:
xsd:date
DataProperty: ra:vehicleID
Domain:
ra:Vehicle
Range:
xsd:string
DataProperty: ra:makeDate
Annotations:
rdfs:comment "creation or delivered date"
Domain:
ra:NonLivingThing
Range:
xsd:date
EquivalentTo:
ra:birthDate
DataProperty: ra:speed
Annotations:
rdfs:comment "speed in speedunit, default kmh"@en
Domain:
owl:Thing
Range:
xsd:integer
DataProperty: ra:isSerious
Domain:
ra:RoadAccident
Range:
xsd:boolean
DataProperty: ra:relatedInjury
Annotations:
rdfs:comment "use some kind of existing classification"
Domain:
ra:LivingBeing
Range:
{"fatal" , "light" , "none" , "severe"}
DataProperty: ra:declares
Domain:
ra:Person
Range:
xsd:string
DataProperty: ra:driverProblem
Range:
{"asleep" , "heartattack" , "lostcontrol" , "mistake" , "notlooking" , "onthephone"}
DataProperty: ra:orgFullName
Domain:
ra:Organization
Range:
xsd:string
DataProperty: ra:isOnRoadType
Annotations:
rdfs:comment "roadType of Road the accident happens on"
Domain:
ra:RoadAccident
Range:
{"freeway" , "motorway" , "street"}
DataProperty: ra:SSN
Annotations:
rdfs:comment "every living being can have a social security number, a person HAS one"
Domain:
ra:LivingBeing
Range:
xsd:string
DataProperty: ra:address
Domain:
ra:Location
Range:
xsd:string
DataProperty: ra:firstName
Domain:
ra:LivingBeing
Range:
xsd:string
DataProperty: ra:lightCondition
Domain:
ra:RoadAccident
Range:
{"darkness" , "daylight" , "inbetween" , "unknown"}
DataProperty: ra:date
Domain:
ra:Event
Range:
xsd:date
DataProperty: ra:validityDate
Domain:
ra:OfficialID
Range:
xsd:date
DataProperty: ra:isInService
Annotations:
rdfs:comment "someone working at the time of the even. dog can work by themselves"
Domain:
ra:LivingBeing
Range:
xsd:boolean
Class: owl:Thing
Class: ra:Infant
SubClassOf:
ra:Child
Class: ra:LivingBeing
DisjointWith:
ra:NonLivingThing
Class: ra:Teenager
SubClassOf:
ra:Child
Class: ra:Event
SubClassOf:
ra:NonLivingThing
Class: ra:Child
SubClassOf:
ra:Person
Class: ra:RoadAccident
SubClassOf:
ra:Event
Class: ra:DriverLicence
SubClassOf:
ra:OfficialID
HasKey:
ra:driverLicenceNumber
Class: ra:Location
SubClassOf:
ra:NonLivingThing
Class: ra:Senior
SubClassOf:
ra:Adult
Class: ra:InsuranceCert
SubClassOf:
ra:OfficialID
Class: ra:Woman
SubClassOf:
ra:Person
DisjointWith:
ra:Man
Class: ra:OfficialAgency
SubClassOf:
ra:Organization
Class: ra:Robot
SubClassOf:
ra:NonLivingThing
Class: ra:Organization
SubClassOf:
ra:NonLivingThing
Class: ra:Document
SubClassOf:
ra:NonLivingThing
Class: ra:Person
SubClassOf:
ra:LivingBeing
DisjointWith:
ra:Animal
Class: ra:InsuranceCompany
SubClassOf:
ra:OfficialAgency
HasKey:
ra:orgShortName
Class: ra:Man
SubClassOf:
ra:Person
DisjointWith:
ra:Woman
Class: ra:Animal
SubClassOf:
ra:LivingBeing
DisjointWith:
ra:Person
Class: ra:Vehicle
SubClassOf:
ra:NonLivingThing
HasKey:
ra:vehicleID
Class: ra:NonLivingThing
Annotations:
rdfs:comment "Top class for non living thing like vehicle, robot, etc"
DisjointWith:
ra:LivingBeing
Class: ra:OfficialID
SubClassOf:
ra:Document
Class: ra:Adult
SubClassOf:
ra:Person
Individual: TrashCan
Types:
ra:NonLivingThing
Individual: VETSUP
Types:
ra:InsuranceCompany
Facts:
ra:insures Nala
Individual: Carpentras
Types:
ra:Location
Individual: Nala
Types:
ra:Animal
Facts:
ra:involvedIn RA170560,
ra:isOn Alice,
ra:insuredBy VETSUP,
ra:isOwnedBy DanielD,
ra:passengerProtection "none",
ra:relatedInjuryDesc "broken nail and vomit on fur",
ra:insuranceID "mieaou007",
ra:ageInyears "17",
ra:relatedInjury "light",
ra:positionInVehicle "backseat",
ra:animalRace "maine coon female cat",
ra:Name "Nala"
Individual: RA170560
Types:
ra:RoadAccident
Facts:
ra:location Carpentras,
ra:involves Laurie,
ra:involves Yaya,
ra:involves GreenPunto,
ra:involves Nala,
ra:involves Alice,
ra:involves DanielD,
ra:date "17/05/1960",
ra:isOnRoadType "motorway",
ra:address "11 rue du temple",
ra:weatherCondition "rain",
ra:gps "lat 43 long 6",
ra:accidentDetails "http://dardailler.net",
ra:lightCondition "night",
ra:isSerious "false"
Individual: Yaya
Types:
ra:Vehicle
Facts:
ra:insuredBy MAIF,
ra:isOwnedBy DanielD,
ra:parked "yes",
ra:vehicleColor "lightgrey",
ra:speed "0",
ra:relatedDamage "back door left side bumped",
ra:vehicleBrand "Toyota",
ra:vehicleCategory "car",
ra:vehicleID "765 DD 12"
Individual: GreenPunto
Types:
ra:Vehicle
Facts:
ra:involvedIn RA170560,
ra:insuredBy MAIF,
ra:carries Alice,
ra:carries Laurie,
ra:isOwnedBy DanielD,
ra:drivenBy Laurie,
ra:speedUnit "kmh",
ra:speed "-20",
ra:vehicleColor "green metal",
ra:isOnRoadType "street one way",
ra:parked "false",
ra:relatedDamage "back paint gone on right side",
ra:vehicleBrand "Fiat",
ra:vehicleProblem "rear mirro broken",
ra:vehicleID "876 GH 71",
ra:vehicleCategory "car"
Individual: DanielD
Types:
ra:Man
Facts:
ra:insuredBy MAIF,
ra:owns Nala,
ra:owns GreenPunto,
ra:owns Yaya,
ra:insuranceID "2326779P"@fr,
ra:email "danield@w3.org"@fr,
ra:declares "Laurie can't see a thing"@fr,
ra:isWitness "true"@fr,
ra:insuranceType "full full full"@en,
ra:firstName "Daniel",
ra:SSN "160031294"@fr,
ra:isRemote "yes"@fr
Individual: Alice
Types:
ra:Teenager,
ra:Woman
Facts:
isPassengerOf GreenPunto,
ra:involvedIn RA170560,
ra:carries Nala,
ra:relatedInjury "none",
ra:isWitness "yes",
ra:firstName "Alice",
ra:positionInVehicle "backseat",
ra:declares "Laurie! stop !! Ya la voiture de Papa derrière !"@fr,
ra:passengerProtection "none"
Individual: MAIF
Types:
ra:InsuranceCompany
Facts:
ra:insures Laurie,
ra:insures DanielD,
ra:orgAddress "Le Cannet"
Individual: Laurie
Types:
ra:Woman
Facts:
ra:insuredBy MAIF,
ra:involvedIn RA170560,
ra:drives GreenPunto,
ra:declares "the read mirror was broken !",
ra:insuranceID "2326779P",
ra:trafficViolation "wrongway",
ra:driverProblem "not looking back",
ra:SSN "28806031",
ra:passengerProtection "seatbelt",
ra:firstName "Laurie"
OBSOLETE: written by hand, doesn't parse
## Manchester syntax for OWL2
# issues: - is there a general line comment character, like #, for this sort of files/syntax ?
# - should the file extention be .owl or .omn (used by something else)
# - I need to understand better the literal/class/range/equiv stuff to declare enum vs subclass
# - also how to model stable instance value vs. current value
Prefix: : <http://example.org/owl/roadaccident#>
Prefix: geo: <http://example.org/otherOntologies/Geographic#>
Prefix: ext: <http://example.org/otherOntologies/External#>
Ontology: <http://example.org/owl/roadaccident>
Annotations: creator DanielD
Annotations: creationDate "18 July 2012"
Annotations: mainClass RoadAccident
import: UsefulThings # isOn, isMoving, speed, etc
import: NonLivingThing # event, org, document, insurance, etc
import: LivingBeing # person, woman, declares, animal, etc
import: DrugCondition, healthcondition
import: Road, lane, roadtype
import: Vehicle # driver, passenger, licence, etc
Class: RoadAccident
SubClassOf: Event
Annotations: rdfs:comment "come as an Event with date/location/shortdesc"
ObjectProperty: accidentDetails
Domain: RoadAccident
Range: ext:Container
Annotations: rdfs:comment "for img, video, recording, scan of police report"
DataProperty: lightCondition
Domain: RoadAccident
Range: { daylight, darkness, inbetween, unknown }
DataProperty: weatherCondition
Domain: RoadAccident
Range: { wind,rain,snow,ice,mud,flood,earthquake,smoke,normal }
DataProperty: isOnRoadType
Domain: RoadAccident
Range: roadType
Annotations: rdfs:comment "roadType of Road the accident happens on"
DataProperty: isSerious
Domain: RoadAccident
Range: xsd:bool and involves some Person some injury ("fatal" or "severe")
ObjectProperty: involves
Domain: RoadAccident
Range: Thing
Annotations: rdfs:comment "involves Person, Vehicle, Animal, NonLivingThing like a stone on the road, another RoadAccident, etc"
# not on roadaccident but depends on it
DataProperty: involvedIn
Domain: Thing
Range: RoadAccident
DataProperty: relatedDamage
Domain: NonLivingThing x and RoadAccident involves x
Range: xsd:string
Annotations: rdfs:comment "apply to non living thing, cars, robot, same as injury for person/animal"
DataProperty: relatedInjury
Domain: LivingBeing and involvedIn some RoadAccident
Range: { fatal, severe, light, none }
Annotations: rdfs:comment "use some kind of existing classification"
DataProperty: relatedInjuryDesc
Domain: LivingBeing
Range: xsd:string
Annotations: rdfs:comment "sms size description of injury"
# Health, DrugCondition stuff
# independent of road accident
# import basic living/nonliving thing
Class: HealthCondition
SubclassOf: NonLivingThing
Annotations: rdfs:comment "could be a subclass of finer grain class such as condition, state, etc"
Annotations: rdfs:comment "use None for no health issue"
DataProperty: healthIssue
Domain: LivingBeing
Range: { heartattack, fainted, seasick, trembling, nohand, noleg, veryold }
Class: DrugCondition
SubclassOf: HealthCondition
DataProperty: drugType
Domain: DrugCondition
Range: { alcool, med, coke, cannabis, hero, lsd, etc }
DataProperty: drugLevel
Domain: DrugCondition
Range: xsd:integer
DataProperty: drugLevelUnit
Domain: DrugCondition
Range: { mgPerBloodLiter, percentUnit, etc }
# not on Drugcondition but depends on it
ObjectProperty: hasDrugCondition
Domain: LivingBeing
Range: DrugCondition
Annotations: rdfs:comment "use None for checked sober, or create an individual DrugCondition"
# definitions for road system related classes
# import basic living/nonliving, could live with just Thing
Class: Road
SubclassOf: NonLivingThing
DisjointUnionOf: PavedRoad and UnpavedRoad
Class: Sidewalk
SubclassOf: NonLivingThing
Class: PavedRoad
SubclassOf: Road
Class: UnpavedRoad
SubclassOf: Road
Class: RoadNetwork
EquivalentTo: all Road
Class: RoadSystem
EquivalentTo: RoadNetwork and all Sidewalk
DisjointClasses: PavedRoad, UnpavedRoad, Sidewalk
Class: Lane
SubclassOf: NonLivingThing
Range: isPartOf Road
DataProperty: laneNumber
Domain: Lane
Range: xsd:strictlyPositiveInteger
Annotations: rdfs:comment "starting with 1, numbered right to left by default"
DataProperty: laneType
Domain: Lane
Range: { buslane, cyclelane, tramlane, parkinglane, etc }
DataProperty: roadType
Domain: Road and geo:Location
# not sure this work: a road type per road by default but several road type per location for a given road ?
Range: { motorway, highway, dirtroad, street, etc }
Annotations: rdfs:comment "vocab from http://www.internationaltransportforum.org/Pub/pdf/09GloStat.pdf"
# the vehicle class and its properties should be external, and be reusable by the car retail industry for instance, the car maker, etc.
# import UsefulThings, NonLivingThing, Road
# define vehicle, driver, passenger, etc
Class: Vehicle
SubClassOf: NonLivingThing
HasKey: vehicleID
DataProperty: vehicleCategory
Range: { car, bus, truck, bicycle, motocycle, moped, trailer, unknown, policeunit, firetruck, ambulance, etc }
Domain: Vehicle
# more Vehicle DataProperty: vehicleColor vehicleBrand vehicleKind, vehicleEnergy, vehiclePlateId, vehicleId, vehiclePassengerCapacity, vehicleLoad, etc.
DataProperty: vehicleProblem
Domain: Vehicle
Range: { tire, deadengine, brake, shock, windshield, engine, etc }
# traffic/road/vehicle oriented role
Class: Driver
SubclassOf: Thing
EquivalentTo: drives Vehicle
Annotations: rdfs:comment "have to include robot, animal.. and remote control"
Class: IllegalDriver
SubclassOf: Driver and hasDriverLicence is None
Class: CommercialDriver
SubclassOf: Driver
Equivalent: drives and isInService
ObjectProperty: drivenBy
Domain: Vehicle
Range: Driver
Annotations: rdfs:comment "use None for no driver situation"
ObjectProperty: drives
Domain: Thing isIn some Vehicle or isRemote
Range: Vehicle
DataProperty: driverProblem:
Domain: Driver
Range: { lostcontrol, notlooking, mistake, phone, sleep, heartattack, etc}
DataProperty: parked
Domain: Vehicle
EquivalentTo: not isMoving and isOn some Lane.laneType "parkinglane"
# not sure this work
Class: Pedestrian
SubclassOf: Thing
EquivalentTo: not isIn Thing and (isOn Road or isOn Sidewalk)
Annotations: rdfs:comment "robot can be pedestrian, that is, walk on the sidewalk"
Class: Passenger
SubclassOf: Thing
EquivalentTo: isIn some Vehicle and not isInService
Annotations: rdfs:comment "a regular driver, unpaid, is a passenger; bus staff isn't for instance -- see PDF irtad"
DataProperty: positionInVehicle
Domain: Passenger
Range: { backseat, front passenger, truck platform, etc }
DataProperty: passengerProtection
Domain: Passenger
Range: { seatbelt, helmet, arceau, airbag, etc }
Annotations: rdfs:comment "use None to say that the passenger didn't have one"
# should also be external, in some gov ont
# needs person, organization/document, nonliving
Class: DriverLicence
SubclassOf: OfficialDocument
HasKey: number
DataProperty: number
Domain: DriverLicence
Range: xsd:string
DataProperty: deliveredDate
Domain: DriverLicence
EquivalentTo: makeDate
DataProperty: validityDate
Domain: DriverLicence
Range: xsd:date
DataProperty: category
Domain: DriverLicence
Range: "LightVehicle" or "Truck" or "MotorCycle"
DataProperty: deliveredBy
Domain: DriverLicence
Range: OfficialAgengy
# depende on DriverLicence
ObjectProperty: hasDriverLicence
Domain: Person and not Infant
Range: DriverLicence
Annotations: rdfs:comment "use None to note that a person doesn't have a driver licence whereas they should"
DataProperty: hasDriverLicenceNumber
Domain: Person
Range: number
Annotations: rdfs:comment "shortcut to save creating a driverlicence if only the number is needed as key"
# which number type is that ?
# not specific to accident but to driving
DataProperty: trafficViolation
Domain: Thing isIn RoadSystem
Range: { redlight, stop, speed, priority, crossingfordidden, etc }
Annotations: rdfs:comment "robot, animal, pedestrian included"
# generic stuff below, not involving RoadAccident or Vehicle, etc # defines nonLivingThing, event, org, etc Class NonLivingThing SubclassOf: Thing DataProperty: makeDate Domain: NonLivingThing Range: xsd:date Class: Robot SubclassOf: NonLivingThing # event Class: Event SubclassOf: NonLivingThing DataProperty: date Domain: Event Range: xsd:date Annotations: rdfs:comment "includes time and day" ObjectProperty: location Domain: Event Range: geo:Location Annotations: rdfs:comment "an external geo object with several attributes: lat/long, address, nearby, etc" DataProperty: shortDescription Domain: Event Range: xsd:string Annotations: rdfs:comment "sms size limit: what happen there and then" # org /insurance info Class: Organization SubclassOf: NonLivingThing DataProperty: orgShortName Domain: Organization Range: xsd:string DataProperty: orgFullName Domain: Organization Range: xsd:string DataProperty: orgAddress Domain: Organization Range: xsd:string Class: InsuranceCompany SubclassOf: OfficialAgency EquivalentTo: delivers InsuranceCert HasKey: orgShortName ObjectProperty: insuredBy Domain: Thing Range: InsuranceCompany InverseOf: insures ObjectProperty: insures Domain: InsuranceCompany Range: Thing InverseOf: insuredBy DataProperty: insuranceID Domain: Thing Range: xsd:string DataProperty: insuranceType Domain: Thing Range: xsd:string Annotations: rdfs:comment "name of coverage package in the given insurance" Class: Document SubclassOf: NonLivingThing Class: OfficalDocument SubclassOf: Document Class: OfficialAgency SubclassOf: Organization EquivalentTo: delivers OfficialDocument Class: InsuranceCert SubclassOf: OfficialDocument EquivalentTo: includes InsuranceID DataProperty: delivers Domain: Organization Range: Document
# Person, animal, man, etc
# defines LivingBeing
Class LivingBeing
SubclassOf: Thing
DataProperty: SSN
Domain: LivingBeing
Range: xsd:string
Annotations: rdfs:comment "every living being can have a social security number, a person HAS one"
DataProperty: firstName
Domain: LivingBeing
Range: xsd:string
DataProperty: lastName
Domain: LivingBeing
Range: xsd:string
DataProperty: Name
Domain: LivingBeing
Range: xsd:string
EquivalentTo: lastName
Annotations: rdfs:comment "same as lastName if not present"
DataProperty: birthDate
Domain: LivingBeing
EquivalentTo: makeDate
DataProperty: email
Domain: LivingBeing
Range: xsd:email
Class: Person
Annotations: rdfs:comment "Represents the set of all people/human with a SSN."
SubclassOf : LivingBeing
HasKey: SSN
DataProperty: declares
Domain: Person
Range: xsd:string
DataProperty: isWitness
Domain: Person
Range: xsd:bool
Annotations: rdfs:comment "robot and animal cannot be witness or declares something in my universe"
DataProperty: isInService
Domain: LivingBeing
Range: xsd:bool
Annotations: rdfs:comment "someone working at the time of the even. dog can work by themselves"
Class: Woman
SubClassOf: Person
Class: Man
SubClassOf: Person
Class: Child
SubclassOf: Person
SubClassOf: ageInYears some integer[<= 19]
Class: Infant
SubclassOf: Child and ageInYears some integer[<= 2]
Class: Teenager
SubclassOf: Child
SubClassOf: ageInYears some integer[>12]
Class: Adult
SubclassOf: Person
SubClassOf: ageInYears some integer[>= 20]
Class: Senior
SubclassOf: Adult
SubClassOf: ageInYears some integer[>= 60]
Class: Animal
SubclassOf : LivingBeing
DataProperty: animalRace
Range: { dog, cat, horse, donkey, deer, boar, etc }
Annotations: rdfs:comment "Person are not Animal in my universe"
ObjectProperty: isOwnedBy
Domain: Thing and not Person
Range: Person or Organization
Annotations: rdfs:comment "a person cannot be owned"
ObjectProperty: owns
Domain: Person or Organization
Range: Thing and not Person
Annotations: rdfs:comment "only Person and org owns things, several possible"
DisjointClasses: LivingBeing, NonLivingThing
DisjointClasses: Person, Animal
DisjointClasses: Woman, Man
DisjointClasses: Infant, Child, Teenager, Adult
# UsefulThings: ontology of generic verbs on pure things
ObjectProperty: isIn, isOn, isPartOf
Domain: Thing
Range: Thing
ObjectProperty: ageInYears
Domain: Thing
Range: xsd:positiviteInteger
Annotations: rdfs:comment "age at the date of an event"
DataProperty: speed
Domain: Thing
Range: xsd:integer
Annotations: rdfs:comment "use negative for backward direction -- default to kmh"
Annotations: rdfs:comment "speed at the time of an event"
DataProperty: speedUnit
Domain: Thing
Ranget: { mph, kmh, ms, etc}
DataProperty: isMovingBackward
SubclassOf: speed some integer[< 0]
Annotations: rdfs:comment "given a normal/forward direction for move is present"
DataProperty: isMoving
SubclassOf: xsd:bool
Range: speed some integer[!= 0]
Annotations: rdfs:comment "speed = 0 means isMoving is false"
ObjectProperty: riddenBy
Domain: Thing
Range: Thing
ObjectProperty: rides
Domain: isIn or isOn some Thing
Range: Thing
ObjectProperty: carriedBy
EquivalentTo: riddenBy
ObjectProperty: carries
EquivalentTo: rides
ObjectProperty: includes
Domain: Thing
Range: Thing
DataProperty: isRemote
Domaine: Thing
Range: xsd:bool Annotations: rdfs:comment "something is qualified of remote only if it's involved without being local"
# examples of instances Individual RA170560 Types: RoadAccident Facts: shortDescription "Laurie hit the yaris on the left side while she was going backward the punto with Alice and Nala in it; destroyed her trashcan while backing" Facts: involves Danield Facts: involves YayaDiesel Facts: involves Laurie Facts: involves GreenPunto Facts: involves Alice Facts: involves Nala Facts: involves TrashCan Facts: date "Tue, 17 Jul 2012 15:51:33 +0000" Facts: lightCondition "daylight" Facts: weatherCondition "normal" Facts: isOn some PavedRoad Facts: isOnRoadType "street" Facts: location LOC_InFrontOfAppartLaurie Facts: accidentDetails RA_170570Details Facts: isSerious False Individual LOC_InFrontOfLaurieAppart Types: geo:Location Facts: geo:address "11 Rue Grimaldi, 06130, Grasse, France" Facts: geo:lat="51.47026" and geo:long="-2.59466" Individual RA_170570Details Types: ext:Container Facts: ext:ContainerURL "http://.." Individual DanielD Types: Man Types: Owner Facts: firstName Daniel Facts: lastName Dardailler Facts: owns YayaDiesel Facts: owns GreenPunto Facts: owns Nala Facts: ssn "1600584" Facts: email "danield@w3.org" Facts: insuranceID "2326779P" Facts: isInsuredBy MAIF Types: Pedestrian Facts: isRemote and isOn Sidewalk Facts: ageInYears "52" Facts: involvedIn RA170560 Facts: declares "You'll hear your Mom!" Individual MAIF Types: InsuranceCompany Facts: orgShortName "MAIF" Facts: orgAddress "17 Avene Jean Jaurès, 06299 Cagnes-sur-Mer" Facts: insures YayaDiesel Facts: insures GreenPunto Facts: insures DanielD Facts: insures Laurie # insures all ? in this context only insures all in RA17.. Individual VETSUP Types: InsuranceCompany Facts: orgShortName "VetSup" Facts: orgAddress "13333 Salon de Provence" Facts: insures Nala Individual Laurie Types: Woman Facts: insuredBy MAIF Facts: insuranceID "2326779P" Facts: SSN "2880000" Facts: firstName "Laurie" Facts: lastName "Dardailler" Facts: hasDriverLicenceNumber "ab098098" Types: Driver Facts: Drives GreenPunto Facts: trafficViolation "wrongway" Facts: driverProblem "notlooking" Facts: hasDrugCondition None Facts: passengerProtection "seatbelt" Facts: involvedIn RA170560 Individual Alice Types: Teenager Types: Woman Facts: SSN "2910000" Facts: firstName "Alice" Facts: lastName "Dardailler" Types: Passenger Facts: isIn GreenPunto Facts: relatedInjury "none" Facts: positionInVehicle "backseat" Facts: passengerProtection None Facts: involvedIn RA170560 Individual YayaDiesel Types: Vehicle Facts: vehiclePlateID "170 DD 52" Facts: vehicleCategory "car" Facts: vehicleBrand "Toyota" Facts: vehicleKind "Yaris" Facts: isOwnedBy DanielD Facts: vehicleColor "lightgrey" Facts: insuredBy MAIF Facts: insuranceID "2326779P" # should the following be in a separate object, since it relates to one accident and not to the car itself ? Facts: parked true Facts: carries None Facts: drivenBy None Facts: speed 0 Facts: relatedDamage "left back door bumped and crushed" Facts: involvedIn RA170560 Individual GreenPunto Types: Vehicle Facts: vehicleCarID "fiat666777" Facts: vehicleCategory "car" Facts: vehicleBrand "Fiat" Facts: vehicleKind "Punto" Facts: vehicleColor "applegreen" Facts: insuredBy MAIF Facts: insuranceID "2326779P" Facts: isOwnedBy DanielD Facts: vehicleProblem "rearmirrorbroken" # should the following be in a separate object, since it relates to one accident and not to the car itself ? Facts: isMovingBackward True Facts: carries Laurie and Alice and Nala Facts: drivenBy Laurie // so Laurie isInVehicle too Facts: speed -20 Facts: speedUnit "kmh" Facts: relatedDamage "right bumper scratched" Facts: involvedIn RA170560 Individual Nala Types: Animal Facts: animalRace "cat" Facts: Name "Nala" Facts: birthDate "17 June 1995" Facts: insuredBy VETSUP Facts: isOwnedBy DanielD # specific to the accident Types: Passenger Facts: isIn GreenPunto Facts: relatedInjury "light" Facts: relatedInjuryDesc "Nala broke a nail and vomitted on her fur" Facts: ageInYears "17" Facts: healthCondition "veryold" Facts: isOn Alice Facts: involvedIn RA170560 Individual TrashCan Types: NonLivingThing Facts: isOwnedBy Laurie Facts: isMoving False Facts: isOn Road and isAt LO_InFrontofLaurieAppart Facts: relatedDamage "destroyed" Facts: makeDate "1/1/2000"
RoadAccident
// main Class being created, a traffic or road accident, involving people, vehicle, animal, having causes, effects, etc
// there is a precise definition for each country, see the PDF below from international transport form=
"has" GeoLocation // external ontology: gps, address, nearby, etc
"has" Date/time // external type)
"has" ShortDescription // string
"has" LongDescription // external : container for text + mediafile (img, video, etc)
"has" CauseContext (1-N) + %
// used to record all sort of context, not just the primary cause, use 0% to denote informational context
// I'd like a kind of switch type: causecontext is any of the following things, and there can be many context/cause, each associated with a % weight
TrafficViolation + Person // enum: redlight, stop, priority, speed, etc.
VehicleDamage + Vehicle // enum: tire, deadengine, brake, shock, windshield, engine, etc
DriverPb: + Person // enum: lostcontrol, testing, mistake, phone, sleep, heartattack, etc
ThingPb // e.g. a big rock on the road
RoadAccident // another accident as cause of this one
TypeofRoad // See below for an international classification
LightCondition // enum: daylight/darkness/inbetween/unknown
WeatherCondition // enum: wind,rain/snow/ice/mud/flood/earthquake/smoke/etc
// Note that timing + location could in theory give light and condition but it seems better to record data at the source, so adding some redundance is good
"involves" Person(0-N) // external Person: lastname, firstname, gender, age, address, nationalid, haircolor, height, weight, etc.
Person "has" ext:Insurance (name, address, id)
Person "has" ext:DriverLicence (number, date, validity, bywhom, category)
Person "has" ext:TrafficRole: pedestrian, jogger, wheelchair, sitting // note that driver and passenger roles are covered by "drives" and
"isIn"
Person "drives" Vehicle, Thing (e.g. plane), Animal (horse)
Person "declares" LongDescription // witness
Person "owns": Vehicle(0-N), Animal(0-N), Thing(0-N)
Person "isAtFault" Percent% // this could be reified by another person with a different opinion. can anything be ?
Person "has" ext:BodyInjury (death, severe, light, desc, etc)
Person "has" seatBelt, helmet, etc
Person "hasPosition" e.g. backseat, front passenger, truck platform, etc
Person "hasCondition" enum: sober, alcohol, etc. with %level
RESTRICTED: lastname, address, nationalid, insuranceInfo (id), owns(out)
// for privacy reasons, we need to restrict public access to some values, which should only be accessible to parties involved, how does one describe that while still reusing an existing external ontology ?
// it's also important to restrict access to what the Person owns in this road accident, and not give access to other properties not involved here (but available in the external person dataset being accessed)
// there is also the case of restricting access for privacy to data which would lead to identification of the person through "joint" queries: e.g. "there is only one male 60yo leaving on this st and the accident happened "on the way home", etc.
"involves" Vehicle(0-N) // external Vehicle: type:car, bus, truck, bicycle, motocycle, unknown, etc., color, brand, age, plateid, carid, etc.)
// plateid can give color/brand/age, but I find it better to also include them here, if available at the source, since color may have changed and the plateid dataset is not public
Vehicle "has" ext:VehicleDamage (see description in international accident classification)
Vehicle "hasMileage" unit + distance (e.g. 120000 km)
Vehicle "had" ext:VehicleDamage // a damage can be the cause of an accident (brake dead) or the result (shock impact) or an information that the vehicle was already damaged ("had")
"involves" Animal(s) // external Animal: race, size, name, gender, age, id, color, size, etc.
// I feel a need for a specific Animal class here, vs using a more general LivingThing, driven by the application field (accidents typically involves people, vehicle, animal, and other things on the road that shouldnt be there)
Animal "has" ext:BodyInjury (death, severe, light, desc, ambulance, etc)
"involves" Thing(s)
// e.g. falling rock, tree, bridge, pole, river, plane, boat, train, washing machine, windsurf, etc Ambulance, PoliceUnit, could be folded here
// things moving or not, cause or effect of the accident
// is there an external ontology for such a generic family of physical things ? it's basically anything you can imagine that can be involved in a road accident (from the eiffel tower falling on Paris to a mobile phone that you want to avoid)
// a cause should link the accident to the thing, maybe best is to use fr ee text as fallback ?
Thing "has" Damage (string ? thing is anything, so damage..)
Additional Properties on "any" thing (Person, Vehicle, Thing, Animal)
// these statement may be reified by several Person who disagree
Any "isIn" Vehicle, Thing
Any "has" ext:Location // at impact, can be different from accident location, a few meters away
Any "has" ext:Direction (other Location) // need initial and final
Any "has" ext:Speed (value:int + unit: kmh, mph, ms) // need more than one speed, eg. initial speed, speed at impact
Any "isDoing" ext:TrafficAction (uturn, turning right, left, passing, parking, reverse, etc)
Any "hasAim" enum:(wayhome, work, shopping, kid, fun, afterparty, etc)