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.

 Vorbereitung

  • 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

  1. 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

  2. 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.
  3. 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.
  4. Lassen Sie sich die Freunde ihrer Freunde ausgeben.
  5. 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();
    
  6. Implementieren Sie eine Möglichkeit, RQL-Anfragen per Tastatur einzugeben und die Ergebnisse auszugeben. Prüfen Sie ihre RQL-Kenntnisse mit weiteren Anfragen.