@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix flights: <http://www.example.org/flights#> .

<http://www.example.org/flights> rdf:type owl:Ontology .

flights:City rdf:type owl:Class .
flights:HeadOffice rdf:type owl:Class .
flights:Airport rdf:type owl:Class .
flights:Flight rdf:type owl:Class.
flights:Airline rdf:type owl:Class .
flights:CharterFlight rdf:type owl:Class ;
  rdfs:subClassOf flights:Flight .
flights:IStop rdf:type owl:Class .


flights:headOfficeInCity rdf:type owl:ObjectProperty .
flights:airportInCity rdf:type owl:ObjectProperty .
flights:hasHO rdf:type owl:ObjectProperty .
flights:depFrom rdf:type owl:ObjectProperty .
flights:arrIn rdf:type owl:ObjectProperty .
flights:ofAirline rdf:type owl:ObjectProperty .
flights:iStopAtAirport rdf:type owl:ObjectProperty .
flights:iStopOfFlight rdf:type owl:ObjectProperty .


flights:headOfficeInCity rdfs:domain flights:HeadOffice ;
  rdfs:range flights:City .
flights:airportInCity rdfs:domain flights:Airport ;
  rdfs:range flights:City .
flights:hasHO rdfs:domain flights:Airline ;
  rdfs:range flights:HeadOffice .
flights:depFrom rdfs:domain flights:Flight ;
  rdfs:range flights:Airport .
flights:arrIn rdfs:domain flights:Flight ;
  rdfs:range flights:Airport .
flights:ofAirline rdfs:domain flights:Flight ;
  rdfs:range flights:Airline .
flights:iStopAtAirport rdfs:domain flights:IStop ;
  rdfs:range flights:Airport .
flights:iStopOfFlight rdfs:domain flights:IStop ;
  rdfs:range flights:CharterFlight .


flights:name rdf:type owl:DatatypeProperty ; rdfs:range xsd:string .
flights:nation rdf:type owl:DatatypeProperty ; rdfs:range xsd:string .
flights:population rdf:type owl:DatatypeProperty ; rdfs:range xsd:integer .
flights:phone rdf:type owl:DatatypeProperty ; rdfs:range xsd:integer .
flights:year rdf:type owl:DatatypeProperty ; rdfs:range xsd:integer .
flights:duration rdf:type owl:DatatypeProperty ; rdfs:range xsd:integer .
flights:order rdf:type owl:DatatypeProperty ; rdfs:range xsd:integer .
flights:aircraftType rdf:type owl:DatatypeProperty ; rdfs:range xsd:string .

flights:code rdf:type owl:DatatypeProperty .
flights:codeAirport rdf:type owl:DatatypeProperty ;
  rdfs:subPropertyOf flights:code ;
  rdfs:domain flights:Airport ;
  rdfs:range xsd:integer .
flights:codeFlight rdf:type owl:DatatypeProperty ;
  rdfs:subPropertyOf flights:code ;
  rdfs:domain flights:Flight ;
  rdfs:range xsd:string .


flights:HeadOffice rdfs:subClassOf [
  rdf:type owl:Restriction ;
  owl:onProperty flights:headOfficeInCity ;
  owl:someValuesFrom flights:City
] .
flights:Airport rdfs:subClassOf [
  rdf:type owl:Restriction ;
  owl:onProperty flights:airportInCity ;
  owl:someValuesFrom flights:City
] .
flights:Airline rdfs:subClassOf [
  rdf:type owl:Restriction ;
  owl:onProperty flights:hasHO ;
  owl:someValuesFrom flights:HeadOffice
] .
flights:Flight rdfs:subClassOf [
  rdf:type owl:Restriction ;
  owl:onProperty flights:depFrom ;
  owl:someValuesFrom flights:Airport
] , [
  rdf:type owl:Restriction ;
  owl:onProperty flights:arrIn ;
  owl:someValuesFrom flights:Airport
] .
flights:Flight rdfs:subClassOf [
  rdf:type owl:Restriction ;
  owl:onProperty flights:ofAirline ;
  owl:someValuesFrom flights:Airline
] .
flights:IStop rdfs:subClassOf [
  rdf:type owl:Restriction ;
  owl:onProperty flights:iStopAtAirport ;
  owl:someValuesFrom flights:Airport
] , [
  rdf:type owl:Restriction ;
  owl:onProperty flights:iStopOfFlight ;
  owl:someValuesFrom flights:Flight
] .


flights:City rdfs:subClassOf [
  rdf:type owl:Restriction ;
  owl:onProperty flights:name ;
  owl:someValuesFrom xsd:string
] , [
  rdf:type owl:Restriction ;
  owl:onProperty flights:nation ;
  owl:someValuesFrom xsd:string
] , [
  rdf:type owl:Restriction ;
  owl:onProperty flights:population ;
  owl:someValuesFrom xsd:integer
] .
flights:HeadOffice rdfs:subClassOf [
  rdf:type owl:Restriction ;
  owl:onProperty flights:phone ;
  owl:someValuesFrom xsd:integer
] .
flights:Airport rdfs:subClassOf [
  rdf:type owl:Restriction ;
  owl:onProperty flights:codeAirport ;
  owl:someValuesFrom xsd:integer
] , [
  rdf:type owl:Restriction ;
  owl:onProperty flights:name ;
  owl:someValuesFrom xsd:string
] .
flights:Flight rdfs:subClassOf [
  rdf:type owl:Restriction ;
  owl:onProperty flights:codeFlight ;
  owl:someValuesFrom xsd:string
] , [
  rdf:type owl:Restriction ;
  owl:onProperty flights:duration ;
  owl:someValuesFrom xsd:integer
] .
flights:Airline rdfs:subClassOf [
  rdf:type owl:Restriction ;
  owl:onProperty flights:name ;
  owl:someValuesFrom xsd:string
] , [
  rdf:type owl:Restriction ;
  owl:onProperty flights:year ;
  owl:someValuesFrom xsd:integer
] .
flights:IStop rdfs:subClassOf [
  rdf:type owl:Restriction ;
  owl:onProperty flights:order ;
  owl:someValuesFrom xsd:integer
] .
flights:CharterFlight rdfs:subClassOf [
  rdf:type owl:Restriction ;
  owl:onProperty flights:aircraftType ;
  owl:someValuesFrom xsd:string
] .


flights:headOfficeInCity rdf:type owl:FunctionalProperty .
flights:airportInCity rdf:type owl:FunctionalProperty .
flights:hasHO rdf:type owl:FunctionalProperty .
flights:depFrom rdf:type owl:FunctionalProperty .
flights:arrIn rdf:type owl:FunctionalProperty .
flights:ofAirline rdf:type owl:FunctionalProperty .
flights:iStopAtAirport rdf:type owl:FunctionalProperty .


flights:name rdf:type owl:FunctionalProperty .
flights:nation rdf:type owl:FunctionalProperty .
flights:population rdf:type owl:FunctionalProperty .
flights:year rdf:type owl:FunctionalProperty .
flights:duration rdf:type owl:FunctionalProperty .
flights:order rdf:type owl:FunctionalProperty .
flights:aircraftType rdf:type owl:FunctionalProperty .
flights:codeAirport rdf:type owl:FunctionalProperty .
flights:codeFlight rdf:type owl:FunctionalProperty .