Skip to content

Mini University Demo Project

julijaovcinnikova edited this page Mar 5, 2026 · 12 revisions

This repository contains the Mini University demo ontology used to illustrate the updated web-based OWLGrEd visual notation and tooling for OWL 2 ontology management.

Graphical OWL ontology (Mini University)

The Mini University ontology is represented using a UML-inspired graphical notation for OWL 2. Screenshot 2026-03-02 084836

OWL export in Turtle

@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> .
@prefix owl:  <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix :     <http://lumii.lv/ontologies/Mini_University.owl#> .

: a owl:Ontology .

:AcademicProgram a owl:Class ;
  rdfs:subClassOf [ a owl:Restriction ; owl:onProperty :programName ; owl:onDataRange xsd:string ;
                    owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ] .

:acadTitle a owl:DatatypeProperty ; rdfs:domain :FacultyLevel ; rdfs:range xsd:string .

:Alice a :Student, owl:NamedIndividual ; :takes :ComputerScience .

:Assistant a owl:Class ; rdfs:subClassOf :Teacher ; owl:disjointWith :Professor ;
  owl:equivalentClass [ a owl:Class ; owl:intersectionOf ( :Teacher
    [ a owl:Restriction ; owl:onProperty :facultyLevel ; owl:hasValue :Level_Assistant ] ) ] .

:completed a owl:ObjectProperty ; rdfs:comment "Completed courses are finished taken courses" ;
  rdfs:domain :Student ; rdfs:range :Course ; rdfs:subPropertyOf :takes .

:ComputerScience a :MandatoryCourse, owl:NamedIndividual .

:Course a owl:Class ; owl:equivalentClass [ owl:unionOf ( :MandatoryCourse :OptionalCourse ) ] .

:courseCode a owl:DatatypeProperty ; rdfs:domain :Course ; rdfs:range xsd:string .
:courseName a owl:DatatypeProperty ; rdfs:domain :Course ; rdfs:range xsd:string .
:courseCredit a owl:DatatypeProperty ; rdfs:domain :Course ;
  rdfs:range [ a rdfs:Datatype ; owl:onDatatype xsd:integer ;
               owl:withRestrictions ( [ xsd:minExclusive 0 ] ) ] .

:enrolled a owl:ObjectProperty ; rdfs:domain :Student ; rdfs:range :AcademicProgram .
:includes a owl:ObjectProperty ; rdfs:domain :AcademicProgram ; rdfs:range :Course .

:facultyLevel a owl:ObjectProperty ; rdfs:domain :Teacher ; rdfs:range :FacultyLevel .
:FacultyLevel a owl:Class .

:isTaughtBy a owl:ObjectProperty ; rdfs:domain :Course ; rdfs:range :Teacher ; owl:inverseOf :teaches .

:MandatoryCourse a owl:Class ; rdfs:comment "Mandatory courses are taught by only professors" ;
  rdfs:subClassOf :Course,
    [ a owl:Restriction ; owl:onProperty :isTaughtBy ; owl:allValuesFrom :Professor ] ;
  owl:disjointWith :OptionalCourse .

:OptionalCourse a owl:Class ; rdfs:subClassOf :Course .

:nationality a owl:ObjectProperty ; rdfs:domain foaf:Person ; rdfs:range :Nationality .
:Nationality a owl:Class .
:nCode  a owl:DatatypeProperty ; rdfs:domain :Nationality ; rdfs:range xsd:string .
:nValue a owl:DatatypeProperty ; rdfs:domain :Nationality ; rdfs:range xsd:string .

:personID   a owl:DatatypeProperty ; rdfs:domain foaf:Person ; rdfs:range xsd:string .
:personName a owl:DatatypeProperty ; rdfs:domain foaf:Person ; rdfs:range xsd:string .

:Professor a owl:Class ; rdfs:subClassOf :Teacher ;
  owl:equivalentClass [ a owl:Class ; owl:intersectionOf ( :Teacher
    [ a owl:Restriction ; owl:onProperty :facultyLevel ; owl:hasValue :Level_Professor ] ) ] .

:programName a owl:DatatypeProperty ; rdfs:domain :AcademicProgram ; rdfs:range xsd:string .
:salary a owl:DatatypeProperty ; rdfs:domain :Teacher ; rdfs:range xsd:decimal .

:Student a owl:Class ;
  rdfs:subClassOf foaf:Person,
    [ a owl:Restriction ; owl:onProperty :enrolled ; owl:onClass :AcademicProgram ;
      owl:qualifiedCardinality "1"^^xsd:nonNegativeInteger ],
    [ a owl:Restriction ; owl:onProperty :takes ; owl:someValuesFrom :Course ] .

:studentName a owl:DatatypeProperty ; rdfs:domain :Student ; rdfs:range xsd:string ;
  rdfs:subPropertyOf :personName .
:studentNumber a owl:DatatypeProperty ; rdfs:domain :Student ; rdfs:range xsd:string .

:takes a owl:ObjectProperty ; rdfs:domain :Student ; rdfs:range :Course ;
  owl:propertyDisjointWith :teaches .

:Teacher a owl:Class ; rdfs:subClassOf foaf:Person .
:teacherName a owl:DatatypeProperty ; rdfs:domain :Teacher ; rdfs:range xsd:string ;
  rdfs:subPropertyOf :personName .

:teaches a owl:ObjectProperty ; rdfs:domain :Teacher ; rdfs:range :Course ;
  owl:propertyDisjointWith :takes .

foaf:Person a owl:Class ;
  rdfs:subClassOf [ a owl:Restriction ; owl:onProperty :nationality ; owl:onClass :Nationality ;
                    owl:maxQualifiedCardinality "1"^^xsd:nonNegativeInteger ] ;
  owl:hasKey ( :personID ) .

Graphical example of property qualifiers

Contextual metadata attached to a property axiom or property assertion, such as temporal validity, provenance, or confidence.

  • qualifiers are encoded using OWL 2 annotation properties,
  • the qualifier-to-property link is represented via an AnnotationAssertion that connects the qualifier annotation property to the qualified property,
  • additional nested annotations can further describe the qualifier (for example expected value type via rdfs:range or multiplicity constraints),
  • once defined, the same qualifier annotation properties can be reused to annotate instance-level assertions.

Object Property qualifiers

Screenshot 2026-03-05 152616

OWL functional syntax

Declaration(AnnotationProperty(:datePaid))
Declaration(AnnotationProperty(:tutor))
Declaration(AnnotationProperty(:dateCompleted))
Declaration(AnnotationProperty(:mark))

AnnotationAssertion(
    Annotation(rdfs:range xsd:dateTime)
    ex:qualifier :takes :datePaid)

AnnotationAssertion(
    Annotation(rdfs:range :Teacher)
    ex:qualifier :takes :tutor)

AnnotationAssertion(
    Annotation(rdfs:range xsd:dateTime)
    ex:qualifier :completed :dateCompleted)

AnnotationAssertion(
    Annotation(rdfs:range xsd:integer)
    ex:qualifier :completed :mark)

OWL turtle syntax

:datePaid rdf:type owl:AnnotationProperty .
:tutor rdf:type owl:AnnotationProperty .
:dateCompleted rdf:type owl:AnnotationProperty .
:mark rdf:type owl:AnnotationProperty .

[
  rdf:type owl:Axiom ;
  owl:annotatedSource :takes ;
  owl:annotatedProperty ex:qualifier ;
  owl:annotatedTarget :datePaid ;
  rdfs:range xsd:dateTime
] .

[
  rdf:type owl:Axiom ;
  owl:annotatedSource :takes ;
  owl:annotatedProperty ex:qualifier ;
  owl:annotatedTarget :tutor ;
  rdfs:range :Teacher
] .

[
  rdf:type owl:Axiom ;
  owl:annotatedSource :completed ;
  owl:annotatedProperty ex:qualifier ;
  owl:annotatedTarget :dateCompleted ;
  rdfs:range xsd:dateTime
] .

[
  rdf:type owl:Axiom ;
  owl:annotatedSource :completed ;
  owl:annotatedProperty ex:qualifier ;
  owl:annotatedTarget :mark ;
  rdfs:range xsd:integer
] .

Data Property qualifiers

Screenshot 2026-03-05 152628

OWL functional syntax

Declaration(AnnotationProperty(:dateFrom))
Declaration(AnnotationProperty(:dateTo))

AnnotationAssertion(
    Annotation(rdfs:range xsd:dateTime)
    ex:qualifier :salary :dateFrom)

AnnotationAssertion(
    Annotation(rdfs:range xsd:dateTime)
    Annotation(owl:maxCardinality "1"^^xsd:nonNegativeInteger)
    ex:qualifier :salary :dateTo)

OWL turtle syntax

:dateFrom rdf:type owl:AnnotationProperty .
:dateTo   rdf:type owl:AnnotationProperty .

[
  rdf:type owl:Axiom ;
  owl:annotatedSource :salary ;
  owl:annotatedProperty ex:qualifier ;
  owl:annotatedTarget :dateFrom ;
  rdfs:range xsd:dateTime
] .

[
  rdf:type owl:Axiom ;
  owl:annotatedSource :salary ;
  owl:annotatedProperty ex:qualifier ;
  owl:annotatedTarget :dateTo ;
  rdfs:range xsd:dateTime ;
  owl:maxCardinality "1"^^xsd:nonNegativeInteger
] .

Clone this wiki locally