|
Material zur Praxisübung Semantic Web
Vorbemerkung
- Beschäftigen Sie sich in der 7. Übung (25. Januar 2006) mit der 1. Aufgabe und lösen Sie diese bis zur
nächsten Übung komplett! Für die darauffolgenden Aufgaben ist es wichtig, daß Sie zur nächsten Übung (am 1. Februar 2006)
das Programm soweit fertig gestellt haben, daß es ihr eigenes FOAF-Profil als RDF-Datei ausgibt. Sollten Sie
die 1. Aufgabe nicht während der Übung fertigstellen können, beenden Sie diese bitte als Hausaufgabe. Sie
haben am Freitag, den 27. Januar zwischen 9 und 12 Uhr die Möglichkeit, offene Fragen
oder Probleme bei mir in der Sprechstunde (Raum 0445/A) zu erörtern.
- Bei der zweiten Praxisübung am 1. Februar wird Sie
Christoph Schmitz betreuen. Bitte stellen Sie das Programm in dieser
Übung fertig indem Sie die Aufgaben 2 bis 6 lösen. Sie können sich vor dieser Übung schon mit dem Anfragen von Knoten
und der Implementierung von RQL-Anfragen beschäftigen und zunächst ihr eigenes Modell anfragen oder schon
mein FOAF-Profil einbinden. Sollten Sie die Aufgaben nicht schaffen, beenden Sie diese bitte als
Hausaufgabe. Sie haben am Montag, den 6. Februar zwischen 9 und 12 Uhr die Möglichkeit, offene Fragen
oder Probleme bei mir in der Sprechstunde (Raum 0445/A) zu erörtern.
Vorbereitungen
-
Richten Sie zunächst in Eclipse ein neues Projekt ein und
binden Sie die Bibliotheken in lib.tar.gz (bzw. lib.zip) in den Build Path ein.
-
Informieren Sie sich dann selbständig über FOAF.
-
Lesen und verstehen Sie die Beispiele im Tutorial
zur Jena API (JavaDoc). Das Tutorial können Sie im weiteren als
begleitende Hilfe nutzen.
- Um mir die Formulierung dieser Übung sprachlich einfacher zu machen lege ich fest:
- Definition 1:
- Ein Freund im Sinne dieser Übung ist eine Person dieser Übung, die Sie kennen.
- Satz 2:
- Ich bin ihr Freund im Sinne dieser Übung.
- Beweis:
- Da Sie mich kennen, bin ich nach Definition 1 Freund im Sinne dieser Übung. qed.
Hier finden Sie mein FOAF-Profil sowie das FOAF-Profil eines meiner Freunde.
Aufgaben
- Modellieren Sie ihr eigenes FOAF-Profil mit Hilfe der Jena-API in Java. Als Starthilfe kann
Ihnen dieser Code dienen:
Model myModel = ModelFactory.createDefaultModel();
myModel.setNsPrefix("foaf", "http://xmlns.com/foaf/0.1/");
Resource me = myModel.createResource("https://www.kde.cs.uni-kassel.de/jaeschke");
Beschreiben Sie sich so ausführlich wie möglich, benutzen Sie z.B. die Properties
name, givenname, family_name, nick, mbox, homepage, depiction, phone, schoolHomepage, interest, icqChatID, ...
Die FOAF-Spezifikation enthält weitere mögliche Properties.
Benutzen sie die foaf:knows Property, um ihre Freunde zu
referenzieren, fragen Sie diese nach Ihren URIs und nutzen Sie diese als Referenz.
Schreiben Sie ihr erzeugtes Modell mit RDF/XML-ABBREV-Syntax in ein RDF-Dokument
- Tauschen Sie untereinander ihre FOAF-Profile (RDF-Dokumente) aus. Lesen Sie die FOAF-Profile
ihrer Freunde ein und vereinigen ("mergen")
Sie deren Modelle mit ihrem und arbeiten Sie bei den nächsten Aufgaben auf dem vereinigten Modell.
- Lassen Sie sich aus dem Modell ihren Knoten geben (diejenige Resource, die ihre URI trägt) und
iterieren Sie über ihre Freunde (die Resourcen der foaf:knows Beziehung). Lassen Sie
sich die Telefonnummern aller ihrer Freunde ausgeben. Alternativ können Sie sich auch eine Liste aller
Homepages, ChatIDs, usw. ihrer Freunde ausgeben lassen.
- Lassen Sie sich die Freunde ihrer Freunde ausgeben.
- Wiederholen Sie die Teilaufgaben 3 und 4, indem Sie RQL-Anfragen an das vereinigte Modell stellen. Dabei hilft Ihnen der
Sesame-Jena-Adapter.
Auf dieser Seite ist beschrieben, wie Sie eine
RQL-Anfrage auf das Modell stellen können. Folgender Code gibt Ihnen zum Beispiel die Telefonnummern aller bekannten Personen
des Modells mergedModel aus:
OntModel queryModel = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM, mergedModel);
String queryString= "select * from {X}"+mergedModel.expandPrefix("foaf:phone")+"{PHONE}";
Query query = new Query(queryString);
query.setSource(queryModel);
QueryEngine qe = new QueryEngine(query);
QueryResults results = qe.exec();
Iterator iter = results;
while(iter.hasNext()) {
ResultBinding rbind = (ResultBinding)iter.next();
System.out.println (rbind);
}
results.close();
- Implementieren Sie eine Möglichkeit, RQL-Anfragen per Tastatur
einzugeben und die Ergebnisse auszugeben. Prüfen
Sie ihre RQL-Kenntnisse mit weiteren Anfragen.
|