|
|
from rdflib import Graph, Namespace, RDF, RDFS, OWL, Literal, XSD |
|
|
|
|
|
def create_ontology(): |
|
|
g = Graph() |
|
|
|
|
|
|
|
|
EX = Namespace("http://example.org/cars/") |
|
|
g.bind("ex", EX) |
|
|
|
|
|
|
|
|
g.bind("owl", OWL) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes = [ |
|
|
"Car", "Component", "Engine", "FuelType", "Manufacturer", |
|
|
"Color", "PassengerCar", "TwoSeaterCar", "FourSeaterCar", |
|
|
"FiveSeaterCar", "Coupe", "Sedan", "SUV", "SportsCar", |
|
|
"SuperCar", "HyperCar", "EconomyCar", "ElectricCar", |
|
|
"ICECar", "HybridCar", "PetrolCar", "DieselCar", |
|
|
"VEngine", "V8Engine", "V10Engine", "V12Engine", |
|
|
"ElectricMotor", "EcoFriendlyCar", "LuxuryCar", "LuxurySportCar" |
|
|
] |
|
|
|
|
|
for cls in classes: |
|
|
g.add((EX[cls], RDF.type, OWL.Class)) |
|
|
|
|
|
|
|
|
g.add((EX.PassengerCar, RDFS.subClassOf, EX.Car)) |
|
|
g.add((EX.SportsCar, RDFS.subClassOf, EX.Car)) |
|
|
g.add((EX.Engine, RDFS.subClassOf, EX.Component)) |
|
|
g.add((EX.ElectricCar, RDFS.subClassOf, EX.Car)) |
|
|
g.add((EX.PetrolCar, RDFS.subClassOf, EX.Car)) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
obj_props = [ |
|
|
"hasManufacturer", "manufactures", "hasEngine", "usesFuel", |
|
|
"hasCompetitor", "isModelVariantOf", "hasTrimLevel" |
|
|
] |
|
|
|
|
|
for prop in obj_props: |
|
|
g.add((EX[prop], RDF.type, OWL.ObjectProperty)) |
|
|
|
|
|
|
|
|
g.add((EX.hasManufacturer, RDFS.domain, EX.Car)) |
|
|
g.add((EX.hasManufacturer, RDFS.range, EX.Manufacturer)) |
|
|
|
|
|
|
|
|
data_props = [ |
|
|
"hasPriceValue", "hasHorsePowerValue", "hasTopSpeedKMH", |
|
|
"hasSeatCount", "hasTorqueNm", "has0to100Sec", "hasEngineDisplacement" |
|
|
] |
|
|
|
|
|
for prop in data_props: |
|
|
g.add((EX[prop], RDF.type, OWL.DatatypeProperty)) |
|
|
g.add((EX[prop], RDFS.domain, EX.Car)) |
|
|
|
|
|
|
|
|
g.serialize(destination="cars_ontology.ttl", format="turtle") |
|
|
print("Ontology T-Box saved to cars_ontology.ttl") |
|
|
|
|
|
if __name__ == "__main__": |
|
|
create_ontology() |
|
|
|