OWL (3. Übung SWebT1 WS09/10, Teil 1)
Aus Semantic-Web-Grundlagen
Übung | |
---|---|
OWL (Teil 1)
| |
Dozent | Markus Krötzsch |
Datum | December 7 2009 |
von | 9:45 |
bis | 11:15 |
Ort | Gebäude 11.40 Raum 231 |
Veranstaltungsreihe SWebT1 WS09/10
| |
Diese Übung umfasst Stoff aus den vorangegangenen Vorlesungen zu OWL-Syntax und zur OWL-Semantik.
Download: Übungsblatt (PDF)
Lösungen
Aufgabe 3.1 und 3.3
Die Lösungen der Aufgaben 3.1 und 3.3 lauten wie folgt (beschreibungslogische Syntax jeweils unterhalb der Turtle-Syntax):
- Gemüse ist eine Subklasse von Pizzabelag:
ex:Gemüse rdfs:subClassOf ex:PizzaBelag . Gemüse ⊑ PizzaBelag
- PizzaBelag und Pizza enthalten keine gemeinsamen Elemente:
ex:PizzaBelag owl:disjointWith ex:Pizza . PizzaBelag ⊓ Pizza ≡ ⊥
- Aubergine ist ein Pizzabelag:
ex:aubergine rdf:type ex:PizzaBelag PizzaBelag(aubergine)
- Die abstrakte Rolle hatBelag besteht ausschließlich zwischen Elementen der Klasse Pizza und der Klasse PizzaBelag:
ex:hatBelag rdfs:domain ex:Pizza ; rdfs:range ex:PizzaBelag ; rdf:type owl:ObjectProperty . ∃ hatBelag.⊤ ⊑ Pizza ⊤ ⊑ ∀ hatBelag.PizzaBelag
- Pizzen haben immer mindestens zwei Beläge.
ex:Pizza rdf:type owl:Class ; rdfs:subClassOf _:leererKnoten . _:leererKnoten rdf:type owl:Restriction ; owl:onProperty ex:hatBelag ; owl:minCardinality "2"^^xsd:nonNegativeInteger .
- Einfacher lässt sich das ausdrücken durch:
ex:Pizza rdf:type owl:Class ; rdfs:subClassOf [ rdf:type owl:Restriction ; owl:onProperty ex:hatBelag ; owl:minCardinality "2"^^xsd:nonNegativeInteger ] . Pizza ⊑ ≥2 hatBelag
- Jede Pizza der Klasse PizzaMargarita hat Tomate als Belag.
ex:PizzaMargarita rdf:type owl:Class ; rdfs:subClassOf [ rdf:type owl:Restriction ; owl:onProperty ex:hatBelag ; owl:someValuesFrom ex:Tomate ] . PizzaM ⊑ ∃ hatBelag.Tomate
- Die Klasse Vegetarische Pizza besteht aus den Elementen, die sowohl in der Klasse PizzaOhneFleisch als auch in der Klasse PizzaOhneFisch sind.
- Eine schwache Interpretation dieser Aussage ist, dass jede Vegetarische Pizza einfach in den genannten Klassen sein muss:
ex:VegiPizza rdfs:subClassOf ex:PizzaOhneFleisch ; rdfs:subClassOf ex:PizzaOhneFisch .
- Stärker ist die Annahme, dass die Klasse vegetarischer Pizzas genau die Überschneidung der anderen beiden Klassen ist:
ex:VegiPizza owl:equivalentClass [ owl:intersectionOf ( ex:PizzaOhneFleisch ex:PizzaOhneFisch ) ] .
- Hier kann man sich auch eine anonyme Klasse in der Darstellung sparen:
ex:VegiPizza owl:intersectionOf ( ex:PizzaOhneFleisch ex:PizzaOhneFisch ) . VegiPizza ≡ PizzaOhneFleisch ⊓ PizzaOhneFisch
- Keine Pizza der Klasse PizzaMargarita hat Belag aus der Klasse Fleisch.
ex:PizzaMargarita rdfs:subClassOf [ rdf:type owl:Class ; owl:complementOf [ rdf:type owl:Restriction ; owl:onProperty ex:hatBelag ; owl:someValuesFrom ex:Fleisch ] . ] . PizzaM ⊑ ¬ (∃ hatBelag.Fleisch)
Aufgabe 3.2
Es ist sinnvoll, hatZutat als transitiv und hatBelag als invers funktional anzunehmen. Funktionalität bei hatBelag macht dagegen keinen Sinn.
Ein konkretes Beispiel zur inversen Funktionalität:
ex:PizzaSalami rdf:type owl:Class ; rdfs:subClassOf [ rdf:type owl:Restriction ; owl:onProperty ex:hatBelag ; owl:someValuesFrom ex:Käse ] . ex:PizzaMargarita rdf:type owl:Class ; rdfs:subClassOf [ rdf:type owl:Restriction ; owl:onProperty ex:hatBelag ; owl:someValuesFrom ex:Käse ] . ex:hatBelag rdf:type owl:inverseFunctionalProperty . ex:meinePizzaVonGesternAbend rdf:type ex:PizzaSalami . ex:meinePizzaVonVorgestern rdf:type ex:PizzaMargarita .
Hieraus kann man folgern, dass die beiden genannten Pizzas einen (unbekannten) Belag vom Typ Käse haben. In Turtle könnte man diese Schlussfolgerungen wie folgt schreiben:
ex:meinePizzaVonGesternAbend ex:hatBelag [ rdf:type ex:Käse ] . ex:meinePizzaVonVorgestern ex:hatBelag [ rdf:type ex:Käse ] .
Es folgt aber nicht, dass diese unbekannten Käsebelege die gleichen sind; sie sind nur in der gleichen Klasse. daher ist die inverse Funktionalität nicht anwendbar.
Wenn man dagegen angibt, dass beide Pizzen einen konkreten Käsebelag gemeinsam haben, dann ändert sich die Situation:
ex:meinePizzaVonGesternAbend ex:hatBelag ex:meinPizzaKäse . ex:meinePizzaVonVorgestern ex:hatBelag ex:meinPizzaKäse .
Gemeinsam mit der oben angegebenen inversen Funktionalität folgt nun, dass beide Bezeichnungen ein und die selbe Pizza beschreiben:
ex:meinePizzaVonGesternAbend owl:sameAs ex:meinePizzaVonVorgestern .
Die Ontologie ist also so angelegt, dass ein Belag jeweils nur auf einer Pizza auftreten kann, aber dass zwei Beläge auch auf unterschiedlichen Pizzen vorkommen dürfen, auch wenn sie der gleichen Klasse angehören (z.B. Käse).
Datum | 7. Dezember 2009 + |
Dozent | Markus Krötzsch + |
Endzeit | 7. Dezember 2009 11:15 + |
Ort | Gebäude 11.40 Raum 231 + |
Serie | SWebT1 WS09/10 + |
Startzeit | 7. Dezember 2009 09:45 + |
Titel | OWL (Teil 1) + |
Unterlagen | Uebung3-owl-ws0910.pdf + |