Difference between revisions of "Lab: OWL 1"

Line 60: Line 60:
 
Write the ontology to a TURTLE file, and try to visualise it using http://visualdataweb.de/webvowl/ . WebVOWL is oriented towards visualising classes and their properties, so the individuals may not show.
 
Write the ontology to a TURTLE file, and try to visualise it using http://visualdataweb.de/webvowl/ . WebVOWL is oriented towards visualising classes and their properties, so the individuals may not show.
  
==Triples you can use for tasks==
+
==Triples you can extend for the tasks==
<syntaxhighlight>
+
import owlrl
@prefix ex: <http://example.org/> .
+
from rdflib import Graph, Namespace, Literal, URIRef
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+
from rdflib.namespace import RDF, RDFS, XSD, FOAF, OWL
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
 
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
 
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
 
  
ex:Cade a foaf:Person ;
+
g = Graph()
    ex:address [ a ex:Address ;
 
            ex:city ex:Berkeley ;
 
            ex:country ex:USA ;
 
            ex:postalCode "94709"^^xsd:string ;
 
            ex:state ex:California ;
 
            ex:street "1516_Henry_Street"^^xsd:string ] ;
 
    ex:age 27 ;
 
    ex:characteristic ex:Kind ;
 
    ex:degree [ ex:degreeField ex:Biology ;
 
            ex:degreeLevel "Bachelor"^^xsd:string ;
 
            ex:degreeSource ex:University_of_California ;
 
            ex:year "2011-01-01"^^xsd:gYear ] ;
 
    ex:interest ex:Bird,
 
        ex:Ecology,
 
        ex:Environmentalism,
 
        ex:Photography,
 
        ex:Travelling ;
 
    ex:married ex:Mary ;
 
    ex:meeting ex:Meeting1 ;
 
    ex:visit ex:Canada,
 
        ex:France,
 
        ex:Germany ;
 
    foaf:knows ex:Emma ;
 
    foaf:name "Cade_Tracey"^^xsd:string .
 
  
ex:Mary a ex:Student,
+
# Namespaces
        foaf:Person ;
+
ex = Namespace("http://example.org/")
    ex:age 26 ;
+
dbp = Namespace("http://dbpedia.org/resource/United_States")
    ex:characteristic ex:Kind ;
+
geo = Namespace("http://sws.geonames.org/")
    ex:interest ex:Biology,
+
schema = Namespace("https://schema.org/")
        ex:Chocolate,
+
akt = Namespace("http://www.aktors.org/ontology/portal#")
        ex:Hiking .
+
vcard = Namespace("http://www.w3.org/2006/vcard/ns#")
  
ex:Emma a foaf:Person ;
+
g.bind("ex", ex)
    ex:address [ a ex:Address ;
+
g.bind("owl", OWL)
            ex:city ex:Valencia ;
 
            ex:country ex:Spain ;
 
            ex:postalCode "46020"^^xsd:string ;
 
            ex:street "Carrer_de_la Guardia_Civil_20"^^xsd:string ] ;
 
    ex:age 26 ;
 
    ex:degree [ ex:degreeField ex:Chemistry ;
 
            ex:degreeLevel "Master"^^xsd:string ;
 
            ex:degreeSource ex:University_of_Valencia ;
 
            ex:year "2015-01-01"^^xsd:gYear ] ;
 
    ex:expertise ex:Air_Pollution,
 
        ex:Toxic_Waste,
 
        ex:Waste_Management ;
 
    ex:interest ex:Bike_Riding,
 
        ex:Music,
 
        ex:Travelling ;
 
    ex:meeting ex:Meeting1 ;
 
    ex:visit ( ex:Portugal ex:Italy ex:France ex:Germany ex:Denmark ex:Sweden ) ;
 
    foaf:name "Emma_Dominguez"^^xsd:string .
 
  
ex:Meeting1 a ex:Meeting ;
 
    ex:date "August, 2014"^^xsd:string ;
 
    ex:involved ex:Cade,
 
        ex:Emma ;
 
    ex:location ex:Paris .
 
  
ex:Paris a ex:City ;
+
# RDFS Tasks from last time.
    ex:capitalOf ex:France ;
+
g.add((ex.Cade, ex.degreeFrom, ex.University_of_California))
    ex:locatedIn ex:France .
+
g.add((ex.Emma, ex.degreeFrom, ex.University_of_Valencia))
 +
g.add((ex.Cade, ex.degreeSubject, ex.Biology))
 +
g.add((ex.Emma, ex.degreeSubject, ex.Chemistry))
 +
g.add((ex.University_of_California, RDF.type, ex.University))
 +
g.add((ex.University_of_Valencia, RDF.type, ex.University))
 +
g.add((ex.University, RDFS.subClassOf, ex.Higher_Education_Institution))
 +
g.add((ex.expertise, RDFS.range, ex.Subject))
 +
g.add((ex.expertise, RDFS.domain, FOAF.Person))
 +
g.add((ex.degreeSubject, RDFS.subPropertyOf, ex.expertise))
 +
g.add((ex.graduated, RDFS.range, ex.Higher_Education_Institution))
 +
g.add((ex.graduated, RDFS.domain, FOAF.Person))
 +
g.add((ex.degreeFrom, RDFS.subPropertyOf, ex.graduated))
 +
g.add((ex.Biology, RDFS.label, Literal("Biology")))
 +
g.add((ex.Biology, RDFS.label, Literal("La Biologie")))
 +
g.add((ex.Biology, RDFS.comment, Literal("Biology is a natural science concerned with the study of life and living organisms, including their structure, function, growth, evolution, distribution, identification and taxonomy.")))
  
ex:France ex:capital ex:Paris .
+
g.add((ex.Chemistry, RDFS.label, Literal("Chemistry")))
 +
g.add((ex.Chemistry, RDFS.label, Literal("La Chimie")))
 +
g.add((ex.Chemistry, RDFS.comment, Literal("Chemistry is a branch of physical science that studies the composition, structure, properties and change of matter.")))
 
</syntaxhighlight>
 
</syntaxhighlight>

Revision as of 10:01, 6 March 2020

Lab 7: RDFS Plus / Basic OWL

Topics

Basic OWL ontology programming with RDFlib and owlrl.

WebVOWL visualisation.

Classes/Vocabularies

Vocabulary:

  • OWL (sameAs, equivalentClass, equivalentProperty, differentFrom, disjointWith, inverseOf)


Tasks

Task 1

Write OWL triples that corresponds to the following text. .If you can, try to build on your example from labs 2 and 7, or extend the triples at the bottom of the page.

Cade and Emma 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 Emma 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. Nothing can be any two of a person, a university, or a city 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 Emma 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".)


Task 2

g.add((ex.Cade, ex.married, ex.Mary))
g.add((ex.Cade, ex.livesWith, ex.Mary))
g.add((ex.Cade, ex.sibling, ex.Andrew))
g.add((ex.Cade, ex.sibling, ex.Anna))
g.add((ex.Cade, ex.hasFather, ex.Bob))
g.add((ex.Bob, ex.fatherOf, ex.Cade))

Look through the predicates(properties) above and add new triples for each one that describes them as any of the following: a reflexive , irreflexive, symmetric, asymmetric, transitive, or a functional property. e.g

g.add((ex.married, RDF.type, OWL.SymmetricProperty))

Task 3

Print/Serialize the ontology. Then use owlrl to infer additional triples. Can you spot any inferences?

# These three lines add inferred triples to the graph.
owl = owlrl.CombinedClosure.RDFS_OWLRL_Semantics(g, False, False, False)
owl.closure()
owl.flush_stored_triples()

If you have more time...

Write the ontology to a TURTLE file, and try to visualise it using http://visualdataweb.de/webvowl/ . WebVOWL is oriented towards visualising classes and their properties, so the individuals may not show.

Triples you can extend for the tasks

import owlrl from rdflib import Graph, Namespace, Literal, URIRef from rdflib.namespace import RDF, RDFS, XSD, FOAF, OWL

g = Graph()

  1. Namespaces

ex = Namespace("http://example.org/") dbp = Namespace("http://dbpedia.org/resource/United_States") geo = Namespace("http://sws.geonames.org/") schema = Namespace("https://schema.org/") akt = Namespace("http://www.aktors.org/ontology/portal#") vcard = Namespace("http://www.w3.org/2006/vcard/ns#")

g.bind("ex", ex) g.bind("owl", OWL)


  1. RDFS Tasks from last time.

g.add((ex.Cade, ex.degreeFrom, ex.University_of_California)) g.add((ex.Emma, ex.degreeFrom, ex.University_of_Valencia)) g.add((ex.Cade, ex.degreeSubject, ex.Biology)) g.add((ex.Emma, ex.degreeSubject, ex.Chemistry)) g.add((ex.University_of_California, RDF.type, ex.University)) g.add((ex.University_of_Valencia, RDF.type, ex.University)) g.add((ex.University, RDFS.subClassOf, ex.Higher_Education_Institution)) g.add((ex.expertise, RDFS.range, ex.Subject)) g.add((ex.expertise, RDFS.domain, FOAF.Person)) g.add((ex.degreeSubject, RDFS.subPropertyOf, ex.expertise)) g.add((ex.graduated, RDFS.range, ex.Higher_Education_Institution)) g.add((ex.graduated, RDFS.domain, FOAF.Person)) g.add((ex.degreeFrom, RDFS.subPropertyOf, ex.graduated)) g.add((ex.Biology, RDFS.label, Literal("Biology"))) g.add((ex.Biology, RDFS.label, Literal("La Biologie"))) g.add((ex.Biology, RDFS.comment, Literal("Biology is a natural science concerned with the study of life and living organisms, including their structure, function, growth, evolution, distribution, identification and taxonomy.")))

g.add((ex.Chemistry, RDFS.label, Literal("Chemistry"))) g.add((ex.Chemistry, RDFS.label, Literal("La Chimie"))) g.add((ex.Chemistry, RDFS.comment, Literal("Chemistry is a branch of physical science that studies the composition, structure, properties and change of matter."))) </syntaxhighlight>