Carz / src /ontology.py
umer6016
Fresh Deploy
1d12e97
from rdflib import Graph, Namespace, RDF, RDFS, OWL, Literal, XSD
def create_ontology():
g = Graph()
# Define Namespace
EX = Namespace("http://example.org/cars/")
g.bind("ex", EX)
# Enable OWL/RDFS
g.bind("owl", OWL)
# ==========================
# CLASSES (Goal: 20+)
# ==========================
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))
# Class Hierarchy
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))
# ==========================
# PROPERTIES (Goal: 7+ Object, 7+ Data)
# ==========================
# Object Properties
obj_props = [
"hasManufacturer", "manufactures", "hasEngine", "usesFuel",
"hasCompetitor", "isModelVariantOf", "hasTrimLevel"
]
for prop in obj_props:
g.add((EX[prop], RDF.type, OWL.ObjectProperty))
# Domain/Range examples
g.add((EX.hasManufacturer, RDFS.domain, EX.Car))
g.add((EX.hasManufacturer, RDFS.range, EX.Manufacturer))
# Datatype Properties
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))
# Save Ontology T-Box
g.serialize(destination="cars_ontology.ttl", format="turtle")
print("Ontology T-Box saved to cars_ontology.ttl")
if __name__ == "__main__":
create_ontology()