!!! 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/ %