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()