Durm:DurmOntologieAbfragen
From Durm
Nächstältere Version→ | ←Nächstjüngere Version
Abfragen der Durm-Ontologie
Diese Seite beschreibt einige Möglichkeiten, Abfragen auf der automatisch befüllten Durm-Ontologie durchzuführen.
Hintergrundinformationen
Die zuerst manuell erstellte Ontologie der Domäne 'Architektur' (A_Waende.owl) enthielt zunächst nur Konzepte und deren Beziehungen. Eine solche Ontologie bietet, vergleichbar mit einer Taxonomie, eine (automatisch auswertbare) Strukturierung der Konzepte einer Domäne (hier der Architektur). Um als Wissensbasis zu dienen, muß die Ontologie zusätzlich Instanzen enthalten. Diese wurden hier automatisch aus dem bearbeiteten Handbuch der Architektur abgeleitet und in die Ontologie überführt, wie auf dieser Seite beschrieben.
Da die (befüllte) Ontologie in einem standardisierten Datenformat, dem vom World Wide Web Consortium (W3C) genormten OWL-DL, vorliegt, kann sie nun von beliebigen Anwendungen als Wissensbasis verwendet werden. Eine Möglichkeit der Verwendung ist die Beantwortung von (semantischen) Fragen, wobei die Antworten automatisch aus der Wissensbasis abgeleitet werden. Die grundsätzliche Vorgehensweise ist dabei die Formulierung von Hypothesen, die sich in eine Ontologie-Abfrage übersetzen lassen. Die Antwort stellt dann idealerweise die Lösung des formulierten Problems dar. Natürlich muß die Ontologie dabei strukturell und semantisch so entworfen worden sein, daß sie die Beantwortung der gestellten Frage überhaupt leisten kann (also ein geeigneter Ontologie-Entwurf vorliegen). Abfragen auf einer Wissensbasis in Form einer Ontologie lassen sich dabei in zwei grundsätzliche Klassen einteilen:
- strukturelle (syntaktische) Abfragen auf der einer OWL-Ontologie zugrunde liegenden Graphrepräsentation
- semantische Abfragen basierend auf der modellierten Bedeutungshierarchie (mit Hilfe automatischer Beweiser)
Auf dieser Seite wird der Einfachheit halber nur die erste Variante im Detail beschrieben (siehe jedoch unten Anmerkungen zur zweiten Variante). Bei syntaktischen Abfragen wird die Eigenschaft ausgenutzt, daß eine OWL-Ontologie intern als Graph repräsentiert werden kann, der wiederum aus Tripeln der Form (Subjekt, Prädikat, Objekt) besteht. Ein (fiktives) Beispiel für ein solches Tripel ist (Stein123, originalPageNumber, 73), d.h., auf Seite 73 im HdA kommt eine Instanz (ein OWL-Individuum) des Konzeptes 'Stein' vor. Diese Repräsentationsform wird als RDF (Resource Description Framework) bezeichnet.
Eine (weit verbreitete) Möglichkeit zur Abfrage dieser RDF-Tripel ist die ebenfalls vom W3C im Standardisierungsprozeß befindliche Sprache SPARQL. Eine SPARQL-Abfrage auf dem Ontologiegraph erzeugt dabei einen neuen (Unter-)Graph, der nachfolgend ausgebenen werden kann. Diese Art von Abfragen läßt sich unter anderem direkt aus Protégé heraus durchführen, wie nachfolgend beschrieben.
Abfragen mit Hilfe von Protégé
Einfache Abfragen können auf der Ontologie mit Hilfe von Protégé durchgeführt werden. Dazu ist eine Protégé-Version von mindestens 3.2 erforderlich (siehe diese Webseite über SPARQL-Abfragen).
Schritt-für-Schritt Anleitung
Die Vorgehensweise dazu ist:
- Herunterladen der befüllten Durm-Ontologie von dieser Seite
- Starten von Protégé
- Laden der durmOntology.owl
- Auswahl des Menüpunktes OWL -> Open SPARQL Query panel
- Im linken unteren Kasten kann jetzt eine Abfrage im SPARQL-Format eingegeben werden (einige Beispiele, die sich per copy-and-paste dort einsetzen lassen, sind im nächsten Unterabschnitt gegeben).
- Nach Klick auf Execute Query (unten links) erscheinen im rechten unteren Kasten die Ergebnisse der Abfrage in tabellarischer Form.
Durch einen Doppelklick auf eine Ergebnisinstanz (in der Tabelle durch eine Raute markiert) erscheinen im oberen Fensterteil Detailinformationen, wie im nachfolgenden Bild gezeigt.
Beispielabfragen
Die folgenden Beispielabfragen lassen sich mit Hilfe von Protégé anhand der Ontologie beantworten. Sie sind dabei aber nur als Einstieg in die Formulierung eigener Abfragen gedacht, da sich mit Hilfe von SPARQL beliebige weitere Fragen, unter Einbeziehung aller in der Ontologie modellierten Konzepte und Instanzen, stellen lassen.
Frage 1: Auf welchen Seiten im Handbuch wird das Konzept 'Stein' erwähnt, und was sind die zugehörigen Seiten im Wiki?
SELECT ?x ?page ?pageurl
WHERE {
?x :originalPageNumber ?page .
?x :pageURL ?pageurl .
?x rdf:type :Stein
}
Diese Abfrage sucht alle Instanzen der Ontologieklasse Stein und gibt zu jeder gefundenen Instanz (?x) aus, auf welcher Seite (?page) sie im Handbuch zu finden ist, sowie die zugehörige URL im HdA Wiki (?pageurl), auf der die Seite direkt abgerufen werden kann.
Frage 2: Auf welchen Seiten im Handbuch wird sowohl das Konzept 'Stein', als auch das Konzept 'Mauer' erwähnt?
SELECT DISTINCT ?page ?pageurl
WHERE {
?x :originalPageNumber ?page .
?x :pageURL ?pageurl .
?x rdf:type :Stein .
?y :pageURL ?pageurl .
?y rdf:type :Mauer
}
ORDER BY ?page
Hier wird nach zwei Instanzen (?x, ?y) gesucht, die auf der gleichen Seite vorkommen (gleiche ?pageurl) und deren Seite (?page) zusammen mit ihrer URL im HdA Wiki (?pageurl) ausgebenen. Damit eine Seite nur einmal ausgebenen wird, auch wenn mehrere solche Paare (?x, ?y) auf ihr vorkommen, wird nach eindeutigen Werten gesucht (SELECT DISTINCT). Zur Sortierung nach der Seitennummer schließlich dient 'ORDER BY ?page'.
Frage 3: Welche Baumaterialien werden im Handbuch erwähnt, und auf welcher Seite?
Amerkung: Hier wird nur nach Vorkommen von Instanzen in direkten Unterklassen der Ontologieklasse 'Materialien' gesucht.
SELECT DISTINCT ?type ?page ?pageurl
WHERE {
?x :originalPageNumber ?page .
?x :pageURL ?pageurl .
?x rdf:type ?type .
?type rdfs:subClassOf :Materialien
}
ORDER BY ?page
Soll zu jedem Vorkommen eines solchen Materials auch die gefundene Instanz ausgegeben werden, läßt sich dies einfach mit folgender Abfrage erreichen:
SELECT *
WHERE {
?x :originalPageNumber ?page .
?x rdf:type ?type .
?x :pageURL ?pageurl .
?type rdfs:subClassOf :Materialien
}
ORDER BY ?page
(Anmerkung: mit "SELECT *" kann man sich immer immer alle Variablen ausgeben lassen, die in einer Anfrage vorkommen.)
Frage 4: Gib mir den Inhalt aller Sätze, die die Konzepte 'Beton' und 'Mauer' enthalten
Ähnlich zu Frage 2, nur daß diesmal auf der Ebene einzelner Sätze gefragt wird und durch die Abfrage deren wörtlicher Inhalt aus der Ontologie gelesen werden soll. Zusätzlich werden die Seitennummer, auf der der Satz zu finden ist, und die URL im HdA Wiki ausgelesen:
SELECT DISTINCT ?sentence ?content ?page ?pageurl
WHERE {
?sentence :contains ?x;
:contains ?y;
:content ?content .
?x rdf:type :Beton ;
:originalPageNumber ?page;
:pageURL ?pageurl .
?y rdf:type :Mauer
}
ORDER BY ?page
Diese Abfrage illustriert zusätzlich eine etwas kompaktere Schreibweise.
Frage 5: Welche Baumaterialien werden überhaupt im Handbuch im gleichen Satz wie 'Mauer' erwähnt?
Ähnlich zu Frage 3, nur daß diesmal nur nach der Ontologieklasse gefragt wird. Wie zuvor werden nur direkte Unterklassen von 'Materialien' berücksichtigt; d.h., Unterklassen von 'Stein' oder 'Beton' sowie Bezüge auf 'Material' an sich werden unterschlagen -- dies läßt sich nur durch den Einsatz eines Automatischen Beweisers (wie Racer oder Pellet) erreichen.
SELECT DISTINCT ?type
WHERE {
?sentence :contains ?x;
:contains ?y .
?x :originalPageNumber ?page;
:pageURL ?pageurl;
rdf:type ?type .
?y rdf:type :Mauer .
?type rdfs:subClassOf :Materialien
}
Wie zuvor lassen sich durch Verwendung von "SELECT *" anstelle "SELECT DISTINCT ?type" alle Details zu den Instanzen mit ausgeben.
Anwendungsintegration
Existierende Anwendungen, die noch nicht mit dem Datenformat OWL umgehen können, müssen entsprechend erweitert werden. Zwei verbreitete Möglichkeiten dazu, die auch Abfragen mit SPARQL erlauben, sind:
- Verwendung von Jena, dem "Semantic Web Framework for Java"
- Verwendung des Protégé-OWL Java API von Protégé, das intern auch eine Jena-Integration bietet
Eine Alternative ist die (technisch komplexere, aber flexiblere) Integration über DIG. Über diese Variante lassen sich insbesondere Automatische Beweiser (automated reasoner) einbauen, die weitergehende Abfragen und Dienste auf einer OWL-DL Ontologie ermöglichen. Ein Beispiel für einen solchen Reasoner ist der frei verfügbare Pellet. In diesem Fall wird ein externer Reasoner (wie Pellet) gestartet, der die Ontologie einliest und anderen Anwendungen über das DIG-Protokoll Anfragen beantwortet. Sowohl Protégé als auch Jena bieten Möglichkeiten, einen solchen Reasoner einzubauen:
- Protégé-OWL Reasoning API (siehe auch das Protégé Wiki dazu)
- Jena mit DIG Reasoner

