!!! The Simpsons - An example Ontology for tutorial purposes

The Simpsons is a polpular comic televisions series. A comprehensive overview (in german) is [Simpsonspedia|http://simpsonspedia.net].

[{Image src='simpsons_family.png' width='150px' align='left'}]


!!! General Domain Model

We first define some classes framing the example domain.


! Classes 

%%turtle
si:Human
   rdf:type rdfs:Class ;
   rdfs:label "Mensch"@de, "Human"@en .

si:Animal
   rdf:type rdfs:Class ;
   rdfs:label "Tier"@de, "Animal"@en .

si:GenderType 
   rdf:type rdfs:Class ;
   rdfs:label "Geschlecht"@de, "Gender"@en .

si:male
   rdf:type si:GenderType ;
   rdfs:label "männlich"@de, "male"@en .

si:female
   rdf:type si:GenderType ;
   rdfs:label "weiblich"@de, "female"@en .

si:Building
   rdf:type rdfs:Class ;
   rdfs:label "Gebäude"@de, "Building"@en .
   
si:Location
   rdf:type rdfs:Class ;
   rdfs:label "Ort"@de, "Location"@en .
   
si:Powerplant   
   rdf:type rdfs:Class ;
   rdfs:subClassOf si:Building ;
   rdfs:label "Kraftwerk"@de, "Power plant"@en .
%

Some (alternative ways) to express negations.

%%Turtle 
[] rdf:type     owl:AllDisjointClasses ;
   owl:members  ( si:Human  si:Building si:GenderType) .

si:GenderType owl:disjointWith si:Human .

%


! Properties

%%turtle
si:livesIn
   rdf:type rdf:Property .

si:relatedWith 
   rdf:type owl:ReflexiveProperty .

si:parent
   rdf:type owl:AsymmetricProperty ;
   rdfs:subPropertyOf si:relatedWith .
   
si:spouse
   rdf:type rdf:Property .

si:husband
   rdfs:subPropertyOf si:spouse .
   
si:spouse owl:propertyDisjointWith si:parent .
      
si:child
   rdf:type rdf:Property ;
   rdfs:subPropertyOf si:relatedWith ;
   owl:inverseOf si:parent .

si:mother
   rdf:type rdf:Property ;
   rdfs:subPropertyOf si:parent .

si:father
   rdf:type rdf:Property ;
   rdfs:subPropertyOf si:parent .

si:grandparent 
   rdf:type rdf:Property ; 
   owl:propertyChainAxiom  ( si:parent  si:parent ) .
   
si:grandfather 
   rdf:type rdf:Property ; 
   owl:propertyChainAxiom  ( si:parent  si:father ) .


si:sibling
   rdf:type owl:SymmetricProperty ;
   rdf:type owl:TransitiveProperty ;
   rdfs:subPropertyOf si:relatedWith .
   
si:gender
   rdf:type rdf:Property ;
   rdfs:domain si:GenderType . 
   
si:age rdf:type rdf:Property .   

si:owns rdf:type rdf:Property ;
   owl:minCardinality "1" .

si:amount rdf:type rdf:Property .

si:ownType rdf:type rdf:Property .
%


! NegativeObjectPropertyAssertion

Bart never wants to be a female.

%%turtle
 []  rdf:type               owl:NegativePropertyAssertion ;
     owl:sourceIndividual   si:bart ;
     owl:assertionProperty  si:gender ;
     owl:targetIndividual   si:female .
%


!!! Illustrative Instances

We now insert some characters and things of the Simpsons world.

%%Turtle
si:springfield
   rdf:type si:Location ;
   rdfs:label "Springfield" .

si:homer
   rdfs:label "Homer Simpson" ;
   rdf:type si:Human ;
   si:age "36" ;
   si:gender si:male ;
   si:father si:abraham ;
   si:livesIn si:springfield .

si:marge
   rdfs:label "Marge Simpson" ;
   rdf:type si:Human ;
   si:age "34" ;
   si:gender si:female ;
   si:livesIn si:springfield .

si:bart
   rdfs:label "Bart Simpson" ;
   rdf:type si:Human ;
   si:age "10" ;
   si:gender si:male ;
   si:sibling si:lisa ;
   si:mother si:marge ;
   si:father si:homer ;
   si:livesIn si:springfield .
   
si:lisa 
   rdfs:label "Lisa Simpson" ;
   rdf:type si:Human ;
   si:age "8" ;
   si:gender si:female ;
   si:mother si:marge ;
   si:father si:homer ;
   si:livesIn si:springfield .

si:maggie 
   rdfs:label "Maggie Simpson" ;
   rdf:type si:Human ;
   si:age "1" ;
   si:sibling si:lisa ;
   si:gender si:female ;
   si:mother si:marge ;
   si:father si:homer ;
   si:livesIn si:springfield .
   
si:abraham
   rdfs:label "Abraham Simpson" ;
   rdf:type si:Human ;
   si:mother si:yuma ;
   si:gender si:male .

si:yuma
   rdfs:label "Yuma Hickman" ;
   rdf:type si:Human ;
   si:gender si:female .


si:burns_dog
   rdf:type si:Animal ;
   rdfs:label "Mr. Burns' dog" .

si:burns_powerplant
   rdf:type si:Powerplant ;
   rdfs:label "Mr. Burns' nuclear power plant" .
%

We can also introduce blank nodes to represent the belongings of Mr. Burns.

%%Turtle 
si:burns
   rdf:type si:Human ;
   rdfs:label "Charles Montgomery Burns" ;
   si:gender si:male ;
   si:owns _:own1, _:own2 .

_:own1 
   si:amount "3" ;
   si:ownType si:burns_dog .

_:own2 
   si:amount "1" ;
   si:ownType si:burns_powerplant .

%


!!! Sample Queries

Ok, we can test/query the ontology by inserting some SPARQL statements.


! Simple start

Show me all instances of Human and also show their labels.

%%Sparql 
SELECT ?x ?name
WHERE {
  ?x rdf:type si:Human ;
     rdfs:label ?name .
}
@border: true
@zebramode: true
@showQuery: true
%


! Barts Grand-Pa

Use property paths in SPARQL.

%%Sparql 
SELECT ?name
WHERE {
  si:bart si:father/si:father ?name .
}
@border: true
@zebramode: true
@showQuery: true
%

Now using a defined PropertyChain

%%Sparql 
SELECT ?name
WHERE {
  si:bart si:grandparent ?name .
}
@border: true
@zebramode: true
@showQuery: true
%


! Optional belongings

We also can add optional patterns into the query. Show all humans and their (optional) belongings.

%%Sparql 
SELECT ?name ?belonging
WHERE {
  ?x rdf:type si:Human ;
     rdfs:label ?name .
  OPTIONAL { ?x si:owns/si:ownType/rdfs:label ?belonging } .
}
@border: true
@zebramode: true
@showQuery: true
%


! UNION: All names of humans and animals

%%Sparql 
SELECT ?name
WHERE {
  { ?x rdf:type si:Human ;
       rdfs:label ?name .
  } UNION {
    ?x rdf:type si:Animal ;
       rdfs:label ?name .
  }
}
@border: true
@zebramode: true
@showQuery: true
%


!!! Administrative Definitions of the Simpsons Ontology

This wiki article belongs to the {{simpsons}} package.

%%package simpsons

We define the ontology using all articles of the {{simpsons}} package.

%%ontology
  @uses: simpsons
%

Let's us the namespace {{si}} for the resources.

%%namespace 
  si http://www.example.org/
%