Archiv
[Semantic Web Technologies] SPARQL Test Tool und Lösungen
Hallo zusammen,
In der letzten Veranstaltung hab ich festgestellt, daß ihr wohl teilweise Probleme damit habt, euch die SPARQL Queries vorzustellen. Auch waren wir uns bei den gefundenen Ergebnissen nicht immer hundertprozentig sicher, ob es auch wirklich so funktioniert. Also hab ich kurzerhand ein kleines Tool geschrieben, mit dem ihr eure Queries ausprobieren könnt.
Das Tool basiert auf dem Jena Framework und dem zugehörigen ARQ SPARQL Prozessor. ARQ ist ein sehr mächtiges Tool, wie wir ja auch schon in der Vorlesung sehen konnten (ARQ implementiert viele Features über den Standard hinaus).
Was kann man mit diesem Tool nun machen? Die Bedienung ist ganz einfach: Ihr gebt zunächst auf der linken Seite die Daten (im TURTLE Format) ein, auf die ihr eure Abfrage stellen wollt. Rechts oben tragt ihr dann die Query ein, die ihr ausprobieren wollt. Nach einem Druck auf den “Query” Button werden die Daten geparst, in ein Jena Model gepackt und dann mit der eingegebenen Query abgefragt.
Das Tool kann alle vier Abfragearten (SELECT, ASK, CONSTRUCT und DESCRIBE) und merkt sich beim Beenden die zuletzt verarbeiteten Daten, so dass diese bei einem erneuten Aufruf wieder zur Verfügung stehen. Den Code der Anwendung habe ich direkt unter die GPL gestellt. Ich habe euch auch gleich zwei Pakete geschnürt. Das erste ist ein ausführbares JAR-File, das direkt alles nötige enthält. Einfach runterladen und mit java -jar ausführen. Das zweite Paket enthält den Source-Code. Dieser ist nicht sehr kompliziert und besteht lediglich aus vier Files. Zum Übersetzen und Ausführen braucht ihr die JARs des Jena Frameworks.
SPARQL Test Tool (Executable JAR File, including Jena)
So, nun zu den Lösungen der SPARQL Aufgaben:
Aufgabe 1
@prefix ex: <http://example.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
ex:Sonne ex:radius "1.392e6"^^xsd:double ;
ex:satellit ex:Merkur, ex:Venus, ex:Erde, ex:Mars .
ex:Merkur ex:radius "2439.7"^^xsd:double .
ex:Venus ex:radius "6051.9"^^xsd:double .
ex:Erde ex:radius "6372.8"^^xsd:double ;
ex:satellit ex:Mond .
ex:Mars ex:radius "3402.5"^^xsd:double ;
ex:satellit ex:Phobos, ex:Deimos .
ex:Mond ex:name "Mond"@de, "Moon"@en ;
ex:radius "1737.1"^^xsd:double .
ex:Phobos ex:name "Phobos" .
ex:Deimos ex:name "Deimos".
Objekte, die um die Sonne oder um einen Satelliten der Sonne kreisen
SELECT ?x WHERE {
{ ex:Sonne ex:satellit ?x } UNION
{ ex:Sonne ex:satellit ?y.
?y ex:satellit ?x } }
Objekte mit einem Volumen von über 2*10^10 (km^3) (Objekte mit Radius können mit der Formel V = 4/3πr^3 berechnet werden) und falls vorhanden, mit dem Objekt dessen Satellit sie sind.
SELECT ?x ?y WHERE{
?x ex:radius ?rad .
FILTER( 4*3.14*?rad*?rad*?rad/3 > 20000000000 ).
OPTIONAL { ?y ex:satellit ?x . } }
Objekte mit einem Satelliten, für den ein Name in englischer Sprache angegeben worden ist, die außerdem Satellit eines Objekts von über 3000 (km) Durchmesser sind
SELECT ?Objekt
{
?Objekt ex:satellit ?Satellit .
?Satellit ex:name ?SatName .
FILTER( LANG(?SatName) = "en" ).
?GrossObjekt ex:satellit ?Objekt .
?GrossObjekt ex:radius ?Radius .
FILTER( 2*?Radius > 3000 )
}
Objekte mit zwei oder mehr Satelliten (nehmen Sie an, dass unterschiedliche URIs hier unterschiedliche Objekte bezeichnen)
SELECT DISTINCT ?x {
?x ex:satellit ?a .
?x ex:satellit ?b .
FILTER( ! sameTERM( ?a, ?b ) ) }
Aufgabe 2
@prefix ex: <http://example.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
ex:Sonne rdf:type ex:Himmelskörper ;
ex:radius "1.392e6"^^xsd:double ;
ex:satellit ex:Merkur, ex:Venus, ex:Erde, ex:Mars .
ex:Merkur rdf:type ex:Himmelskörper ;
ex:radius "2439.7"^^xsd:double .
ex:Venus rdf:type ex:Himmelskörper ;
ex:radius "6051.9"^^xsd:double .
ex:Erde rdf:type ex:Himmelskörper ;
ex:radius "6372.8"^^xsd:double ;
ex:satellit ex:Mond .
ex:Mars rdf:type ex:Himmelskörper ;
ex:radius "3402.5"^^xsd:double ;
ex:satellit ex:Phobos, ex:Deimos .
ex:Mond rdf:type ex:Himmelskörper ;
ex:name "Mond"@de, "Moon"@en ;
ex:radius "1737.1"^^xsd:double .
ex:Phobos rdf:type ex:Himmelskörper ;
ex:name "Phobos" .
ex:Deimos rdf:type ex:Himmelskörper ;
ex:name "Deimos" .
Wie kann man alle Himmelskörper selektieren, die KEINEN Satelliten haben?
SELECT ?x {
?x rdf:type ex:Himmelskörper.
OPTIONAL { ?x ex:satellit ?satellit }.
FILTER( !BOUND( ?satellit ) ) }
Aufgabe 3
@prefix ex: <http://example.org/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
ex:a ex:value "1"^^xsd:integer ;
ex:value "3"^^xsd:integer .
ex:b ex:value "2"^^xsd:integer .
Was erwarten Sie als Ergebnis der Anfragen?
1. SELECT ?s ?v WHERE{ ?s ex:value ?v } ORDER BY ?v
| ?s | ?v |
|---|---|
| a | 1 |
| b | 2 |
| a | 3 |
Wie erwartet werden die Ergebnisse nach v sortiert
2. SELECT ?s WHERE{ ?s ex:value ?v } ORDER BY ?v
| ?s |
|---|
| a |
| b |
| a |
Auch hier werden die Ergebnisse wieder nach v sortiert. v wird nur
nicht angezeigt
3. SELECT ?s WHERE{ ?s ex:value ?v } ORDER BY DESC(?v) LIMIT 2
| ?s |
|---|
| a |
| b |
Diesmal wird genau umgekehrt sortiert. Anschließend werden aber nur
noch zwei Ergebnisse angezeigt
4. SELECT DISTINCT ?s WHERE{ ?s ex:value ?v } ORDER BY ?v
| ?s |
|---|
| a |
| b |
Ansich die selbe Anfrage wie (2) nur das wir nun mit DISTINCT
zusätzlich doppelte Werte aussortieren.
4a. SELECT DISTINCT ?s WHERE{ ?s ex:value ?v } ORDER BY ?v LIMIT 1
| ?s |
|---|
| a |
Auch hier gibt es keine Überraschungen, das liegt an der festgelegten
Reihenfolge der Modifikatoren bei SPARQL:
1. Sortierung anhand von ORDER BY
2. Entfernung nicht ausgewählter Variablen
3. Entfernung doppelter Ergebnisse (DISTINCT)
4. Entfernung der Ergebniszeilen vor dem OFFSET
5. Entfernung der überschüssigen Zeilen nach LIMIT
Siehe hierzu auch im Skript zu SPARQL auf Seite 25
Anbei nochmal die Lösungen im txt Format. So lassen sich die Daten evtl. leichter kopieren / einfügen.
[Semantic Web Technologies] Übung 2 – RDF-Contacts
In der heutigen Übung soll einen kleine Applikation zur Kontaktverwaltung in Java mit Hilfe des Jena Frameworks, welches in der letzten Vorlesung vorgestellt wurde, erstellt werden.
Ich habe hierfür ein kleines Rahmenprogramm erstellt, dass uns als Ausgangspunkt dienen soll und bereits die Oberfläche implementiert. Sie müssen also nur noch die für den Datenzugriff wichtigen Codestellen ausfüllen. Entsprechende Stellen sind im Co
de mit TODO markiert.
Inhalte der Übung sind:
- Erstellen einer Konstantenklasse mit dem Jena schemagen Werkzeug
- Laden des Modells von einer Datei
- Speichern der Triple in einer Datei
- Erstellen von Triplen
- Finden und Lesen von Triplen
- Löschen von Triplen
Als Vokabular für die Übungsapplikation verwenden wir einen Teil des FOAF-Vokabulars, den wir mit eigenen Properties für die foaf:Person angereichert haben (siehe Grafik auf der rechten Seite).
Wenn Sie möchten, können Sie das mitgelieferte Vokabular oder die Benutzerschnittstelle gerne um eigene Elemente erweitern. Focus der Übung liegt aber ganz klar darauf, das Jena-Framework und seine grundlegende Funktionalität kennen zu lernen.
Uebungsblatt: Uebung 2 – RDF Contacts
Material:
- ExampleContacts Vokabular
- FOAF Vokabular
- Code für die RDF Beispielapplikation
Links:
- JavaDoc zu Jena
- HOWTO zu schemagen
- Jena RDF Tutorial
- Für Fortgeschrittene: Representing vCard Objects in RDF/XML
[Semantic Web Technologies] Slides zu Vorlesung 6: RDF(S) Frameworks
Nach den theoretischen Grundlagen vom letzten Mal, wenden wir uns nun wieder den eher praktischen Gefielden zu. In der aktuellen Vorlesung beschäftigen wir uns mit RDF(S)-Frameworks aus der Java Welt.
Zunächst wird mit Sesame eines der bekanntesten Frameworks vorgestellt. Durch sein Storage and Inference Layer (SAIL) kann es semantische Daten mit praktisch beliebigen Mechanismen persistieren.
Der Mulgara Semantic Store ist ein Triple Store, der nativ in Java als Triple Store implementiert ist und nicht auf relationale Datenbanken angewiesen ist. Als wichtigstes Feature gibt es bei Mulgara das Resolver-SPI, mit dem es möglich ist, entfernten Content zu integrieren.
Mit dem Topaz Projekt existiert eine Erweiterung zu Mulgara, die die Idee eines Objekt Relational Mappers ala Hibernate in die Semantic Web Welt transferiert.
Abschließend beschäftigen wir uns mit Jena, dem marktführenden Semantic Web Framework, dass ursprünglich von Hewlett Packard als Open Source entwickelt wurde und seit kurzem als OpenJena verfügbar ist. Viele Beispiele demonstrieren, wie man mit dem Jena API die wichtigsten Aufgaben erledigt.
Literatur:
- Sesame Dokumentation
- Mulgara Tutorial / Dokumentation
- Jena RDF-API Tutorial
- Umfangreiches Tutorial von IBM zu Jena
- JENA API-Docs
![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=f3df7f9a-25f2-4d67-84f4-cc7d6afcb7e5)

![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=96a80ee1-7cf0-4e9d-aaac-fe1e3dab6a68)
![Reblog this post [with Zemanta]](http://img.zemanta.com/reblog_e.png?x-id=d57ff0df-ba5d-4db4-98ac-557b826ae549)