Lab: More OWL: Difference between revisions

From info216
(Created page with " =Lab 9: OWL= ==Topics== Draw OWL graphs on paper. Basic OWL ontology programming in Jena. ==Tutorial== https://jena.apache.org/documentation/ontology/ ==Classes and method...")
 
No edit summary
Line 1: Line 1:


=Lab 9: OWL=
=Lab 13: More OWL=


==Topics==
==Topics==
Draw OWL graphs on paper.
OWL ontology programming with RDFlib.
Basic OWL ontology programming in Jena.


==Tutorial==
==Tutorial==
https://jena.apache.org/documentation/ontology/
 


==Classes and methods==
==Classes and methods==
Line 21: Line 20:


==Tasks==
==Tasks==
In labs 2, 3 and 8 you have modelled and programmed a scenario. You will find the descriptions at the end of this text.


Extend your graph into an ontology that expresses the following using concepts from OWL (and some from RDF/RDFS):
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 graduate has at least one degree
* anyone who is a university graduate has at least one degree from a university
* anyone who is a university graduate has at least one degree from a university
Line 37: Line 35:
* a Ph.D. student cannot take a bachelor course
* a Ph.D. student cannot take a bachelor course


Write each of the above staments in Turtle.
Write each of the above statements as python code using RDFlib and OWL.
 
 
==Code to get started==
 
<syntaxhighlight>
import owlrl
from rdflib import Graph, Literal, Namespace, BNode
from rdflib.namespace import RDF, OWL
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.minCaridinality, 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())
 
<syntaxhighlight>
 
 
 
==If You Have More Time==
In earlier labs we have modeled and programmed a scenario. You will find the descriptions at the end of this text.


Program your ontology in Jena.


==Scenarios from previous labs==
==Scenarios from previous labs==

Revision as of 10:23, 19 April 2020

Lab 13: More OWL

Topics

OWL ontology programming with RDFlib.

Tutorial

Classes and methods

In Lab 8 you have already used these classes and methods:

  • ModelFactory (createOntologyModel),
  • Model (createList, write),
  • OWL (sameAs, equivalentClass, equivalentProperty, differentFrom, disjointWith, inverseOf)
  • OntModel (createClass, createIndividual, createObjectProperty, CreateDatatypeProperty, createAllDifferent, createSymmetricProperty, createTransitiveProperty, createInverseFunctionalProperty),
  • OntClass, Individual, DatatypeProperty, and ObjectProperty.

In this lab you may also use the following ones:

  • OntModel (createAllValuesFromRestriction, create(Min/Max)CardinalityQRestriction, create(Min/Max)CardinalityRestriction, createEnumeratedClass, createHasValueRestriction, createInverseFunctionalProperty, createSomeValuesFromRestriction, createUnionClass)

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

<syntaxhighlight> import owlrl from rdflib import Graph, Literal, Namespace, BNode from rdflib.namespace import RDF, OWL from rdflib.collection import Collection

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

  1. 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.minCaridinality, Literal(1))) bi = BNode() Collection(g, bi, [ex.Person, br]) g.add((ex.Graduate, OWL.intersectionOf, bi))

  1. Continue here with the other statements:

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

<syntaxhighlight>


If You Have More Time

In earlier labs we have modeled and programmed a scenario. You will find the descriptions at the end of this text.


Scenarios from previous labs

In RDF: "Cade Tracy lives in 1516 Henry Street, Berkeley, California 94709, USA. He has a B.Sc. in biology from the University of California, Berkeley from 2011. His interests include birds, ecology, the environment, photography and travelling. He has visited Canada and France. Ines Dominguez lives in Carrer de la Guardia Civil 20, 46020 Valencia, Spain. She has a M.Sc. in chemistry from the University of Valencia from 2015. Her areas of expertise include waste management, toxic waste, air pollution. Her interests include bike riding, music and travelling. She has visited Portugal, Italy, France, Germany, Denmark and Sweden. Cade knows Ines. They met in Paris in August 2014."

In RDFS: "University of California, Berkeley and University of Valencia are both Universities. All universities are higher education instituttions (HEIs). Having a B.Sc. from a HEI and having a M.Sc. from a HEI are special cases of gradutating from that HEI. That a person has a degree in a subject means that the person has expertise in that subject. Only persons can have expertise, and what they have expertise about is always a subject."

In RDFS Plus: "Cade and Ines are two different persons. All the countries mentioned above are different. The country USA above is the same as the DBpedia resource http://dbpedia.org/resource/United_States (dbr:United_States) and the GeoNames resource http://sws.geonames.org/6252001/ (gn:6252001). The person class (the RDF type the Cade and Ines resources) in your graph is the same as FOAF's, schema.org's and AKT's person classes (they are http://xmlns.com/foaf/0.1/Person, http://schema.org/Person, and http://www.aktors.org/ontology/portal#Person, respectively, but on paper you can use prefixes). Nothing can be any two of a person, a university, a city, and a person at the same time. The property you have used in your RDF/RDFS graph to represent that 94709 is the US zip code of Berkeley, California in US is a subproperty of VCard's postal code-property (http://www.w3.org/2006/vcard/ns#postal-code). No two US cities can have the same postal code. The property you have used for Ines living in Valencia is the same property as FOAF's based near-property (http://xmlns.com/foaf/0.1/based_near), and it is the inverse of DBpedia's hometown property (http://dbpedia.org/ontology/hometown, dbo:hometown). (This is not completely precise: but "hometown" is perhaps the inverse of a subproperty of "based near".)