OWL (3. Übung SWebT1 WS09/10, Teil 1)

Aus Semantic-Web-Grundlagen

Wechseln zu: Navigation, Suche
Ü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).

Fakten zu OWL (3. Übung SWebT1 WS09/10, Teil 1)RDF-Feed
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  +
Persönliche Werkzeuge