Difference between revisions of "Lab: More OWL"

From Info216
Jump to: navigation, search
 
(2 intermediate revisions by the same user not shown)
Line 74: Line 74:
 
import owlrl
 
import owlrl
 
from rdflib import Graph, Literal, Namespace, BNode
 
from rdflib import Graph, Literal, Namespace, BNode
from rdflib.namespace import RDF, OWL
+
from rdflib.namespace import RDF, OWL, RDFS
 
from rdflib.collection import Collection
 
from rdflib.collection import Collection
  
Line 108: Line 108:
  
 
Use owlrl like we did in lab 8 to infer additional triples.
 
Use owlrl like we did in lab 8 to infer additional triples.
e.g below I print the ontology before and after the reasoning.
+
IMPORANT: It seems owlrl is unable to reason with OWL Restrictions and perhaps other concepts as well.
 +
There is a python library for better OWL reasoning called Owlready if you want to reason with restrictions. 
 +
Below I print the ontology before and after the reasoning.
  
 
What has changed about e.g Cade after using owlrl?
 
What has changed about e.g Cade after using owlrl?
  
 
<syntaxhighlight>
 
<syntaxhighlight>
# print without reasoning
+
# # Write owl file before any reasoned triples
 
g.serialize(destination="owl1.ttl", format="turtle")
 
g.serialize(destination="owl1.ttl", format="turtle")
  
Line 121: Line 123:
 
owl_reasoner.flush_stored_triples()
 
owl_reasoner.flush_stored_triples()
  
# # Print with reasoning
+
# Write owl file that includes reasoned triples
 
g.serialize(destination="owl2.ttl", format="turtle")
 
g.serialize(destination="owl2.ttl", format="turtle")
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
==Scenarios from previous labs==
 
==Scenarios from previous labs==

Latest revision as of 11:25, 24 April 2020

Lab 13: More OWL

Topics

OWL ontology programming with RDFlib.

Tutorial

Classes and methods

In Lab 8 you have already used these OWL concepts:

  • (sameAs, equivalentClass, equivalentProperty, differentFrom, disjointWith, inverseOf)
  • (ReflexiveProperty, IrreflexiveProperty, SymmetricProperty, AsymmetricProperty, TransitiveProperty, FunctionalProperty, InverseFunctionalProperty),


In this lab you will mostly use the following OWL terms:

  • (oneOf, unionOf, intersectionOf. complementOf)
  • (Restriction, onProperty)
  • (someValuesFrom, allValuesFrom, hasValue)
  • (cardinality, minCardinality, maxCardinality)
  • (qualifiedCardinality, minQualifiedCardinality, maxQualifiedCardinality, onClass)


OWL Restrictions

Most of the tasks today involve restrictions.

I Recommend refreshing your memories on restrictions and complex classes from the lecture notes When solving the tasks look at the notes, find the relevant OWL term/s, and try to use the same principles in python code.

Down below is an example solution of the first task: "anyone who is a graduate has at least one degree". It looks complicated, but once you understand it, the other tasks follow a similar pattern. In short: I create a blank node that is an OWL.restriction on the ex.degree property. The restriction in question is a minCardinaality restriction with the value 1. (e.g "at least one") Then I create another blank node that is for a List of all the criteria that makes a person a Graduate. In this case I say that a Graduate is the intersection of a Person and the restriction we creater earlier. Collection is essentially used to create lists and everything between [] is what is in the list (the intersections).

# anyone who is a graduate has at least one degree
 
br = BNode()
g.add((br, RDF.type, OWL.Restriction))
g.add((br, OWL.onProperty, ex.degree))
g.add((br, OWL.minCardinality, Literal(1)))
bi = BNode()
Collection(g, bi, [ex.Person, br])
g.add((ex.Graduate, OWL.intersectionOf, bi))


Tasks

Create or Extend a previous graph into an ontology that expresses the following using concepts from OWL (and some from RDF/RDFS):

  • anyone who is a graduate has at least one degree
  • anyone who is a university graduate has at least one degree from a university
  • a grade is either an A, B, C, D, E or F
  • a straight A student is a student that has only A grades
  • a graduate has no F grades
  • a student has a unique student number
  • each student has exactly one average grade
  • a course is either a bachelor, a master or a Ph.D course
  • a bachelor student takes only bachelor courses
  • a masters student takes only master courses and at most one bachelor course
  • a Ph.D student takes only Ph.D and at most two masters courses
  • a Ph.D. student cannot take a bachelor course

Write each of the above statements as python code using RDFlib and OWL.


Code to get started

import owlrl
from rdflib import Graph, Literal, Namespace, BNode
from rdflib.namespace import RDF, OWL, RDFS
from rdflib.collection import Collection

g = Graph()
ex = Namespace("http://example.org/")
g.bind("ex", ex)
g.bind("owl", OWL)

# anyone who is a graduate has at least one degree
br = BNode()
g.add((br, RDF.type, OWL.Restriction))
g.add((br, OWL.onProperty, ex.degree))
g.add((br, OWL.minCardinality, Literal(1)))
bi = BNode()
Collection(g, bi, [ex.Person, br])
g.add((ex.Graduate, OWL.intersectionOf, bi))

# Continue here with the other statements:

print(g.serialize(format="turtle").decode())


If You Have More Time

Populate the ontology with data. E.g like:

g.add((ex.Cade, RDF.type, ex.Graduate))
g.add((ex.Cade, ex.grade, ex.A))

Use owlrl like we did in lab 8 to infer additional triples. IMPORANT: It seems owlrl is unable to reason with OWL Restrictions and perhaps other concepts as well. There is a python library for better OWL reasoning called Owlready if you want to reason with restrictions. Below I print the ontology before and after the reasoning.

What has changed about e.g Cade after using owlrl?

# # Write owl file before any reasoned triples
g.serialize(destination="owl1.ttl", format="turtle")

# Infer additional triples
owl_reasoner = owlrl.CombinedClosure.RDFS_OWLRL_Semantics(g, False, False, False)
owl_reasoner.closure()
owl_reasoner.flush_stored_triples()

# Write owl file that includes reasoned triples
g.serialize(destination="owl2.ttl", format="turtle")

Scenarios from previous labs