SPARQL (4. Übung SWebT1 WS09/10)
Aus Semantic-Web-Grundlagen
Übung | |
---|---|
SPARQL
| |
Dozent | Sebastian Rudolph |
Datum | Jan 18 2010 |
von | 9:45 |
bis | 11:15 |
Ort | Gebäude 11.40 Raum 231 |
Veranstaltungsreihe SWebT1 WS09/10
| |
Nummer | 4 |
Diese Übung umfasst Stoff aus den vorangegangenen beiden Vorlesungen zu SPARQL-Syntax und SPARQL-Semantik.
Download: Übungsblatt (PDF)
Inhaltsverzeichnis |
Aufgabe 4.1
Anfrage 1
SELECT ?objekt
WHERE
{ { ex:Sonne ex:satellit ?objekt . } UNION
{ ex:Sonne ex:satellit ?satellit .
?satellit ex:satellit ?objekt . }
}
Anfrage 2
SELECT ?objekt ?zentrum
WHERE
{ { ?objekt ex:radius ?radius }
OPTIONAL { ?zentrum ex:satellit ?objekt }
FILTER ( 4 / 3 * 3.1416 * ?radius * ?radius * ?radius > 20000000000 )
}
Anfrage 3
SELECT ?objekt
WHERE
{ ?objekt ex:satellit ?satellit .
?satellit ex:name ?name .
?zentrum ex:satellit ?objekt .
?zentrum ex:radius ?radius .
FILTER ( langMATCHES( LANG(?name), "en") )
FILTER ( 2 * ?radius > 3000 )
}
Anfrage 4
SELECT DISTINCT ?objekt
WHERE
{ ?objekt ex:satellit ?satellit1 .
?objekt ex:satellit ?satellit2 .
FILTER ( !sameTERM(?satellit1,?satellit2) )
}
Aufgabe 4.2
Anfrage 1
Join(BGP(<http<nowiki>://</nowiki>example.org/Sonne> <http<nowiki>://</nowiki>example.org/satellit> ?satellit.),
BGP(?satellit <http<nowiki>://</nowiki>example.org/satellit> ?objekt.)
)
)
Anfrage 2
LeftJoin(
BGP(?objekt <http<nowiki>://</nowiki>example.org/radius> ?radius.),
BGP(?zentrum <http<nowiki>://</nowiki>example.org/satellit> ?objekt.),
true
)
)
Anfrage 3
Join(
Join(
Join(
BGP(?objekt <http<nowiki>://</nowiki>example.org/satellit> ?satellit.),
BGP(?satellit <http<nowiki>://</nowiki>example.org/name> ?name. )
),
BGP(?zentrum <http<nowiki>://</nowiki>example.org/satellit> ?objekt.)
),
BGP(?zentrum <http<nowiki>://</nowiki>example.org/radius ?radius>)
)
)
Anfrage 4
Join(
BGP(?objekt <http<nowiki>://</nowiki>example.org/satellit> ?satellit1.),
BGP(?objekt <http<nowiki>://</nowiki>example.org/satellit> ?satellit2.),
)
)
Aufgabe 4.3
Aufgabe 4.4
Geht man davon aus, dass jeder Himmelskörper mit einem entsprechenden Typ versehen wird, also Tripel der Form
ex:Merkur rdf:type ex:Himmelskörper .
in der Wissensbasis enthalten sind, so lautet die Lösung:
SELECT ?objekt
WHERE
{ { ?objekt rdf:type ex:Himmelskörper }
OPTIONAL { ?objekt ex:satellit ?satellit }
FILTER ( !BOUND(?satellit) )
}
Aufgabe 4.5
RDF document:
"1"^^xsd:int, "2"^^xsd:int, "3"^^xsd:int, "4"^^xsd:int .
SPARQL query:
?F21 ?F22 ?F23 ?F24
?F31 ?F32 ?F33 ?F34
?F41 ?F42 ?F43 ?F44
WHERE { ex:square ex:allowed ?F11, ?F12, ?F13, ?F14,
?F21, ?F22, ?F23, ?F24,
?F31, ?F32, ?F33, ?F34,
?F41, ?F42, ?F43, ?F44.
FILTER ( ?F14 = "3"^^xsd:int )
FILTER ( ?F24 = "4"^^xsd:int )
FILTER ( ?F31 = "2"^^xsd:int )
FILTER ( ?F41 = "3"^^xsd:int )
FILTER ( ?F11 != ?F12 ) FILTER ( ?F11 != ?F13 )
FILTER ( ?F11 != ?F14 ) FILTER ( ?F12 != ?F13 )
FILTER ( ?F12 != ?F14 ) FILTER ( ?F13 != ?F14 )
FILTER ( ?F21 != ?F22 ) FILTER ( ?F21 != ?F23 )
FILTER ( ?F21 != ?F24 ) FILTER ( ?F22 != ?F23 )
FILTER ( ?F22 != ?F24 ) FILTER ( ?F23 != ?F24 )
FILTER ( ?F31 != ?F32 ) FILTER ( ?F31 != ?F33 )
FILTER ( ?F31 != ?F34 ) FILTER ( ?F32 != ?F33 )
FILTER ( ?F32 != ?F34 ) FILTER ( ?F33 != ?F34 )
FILTER ( ?F41 != ?F42 ) FILTER ( ?F41 != ?F43 )
FILTER ( ?F41 != ?F44 ) FILTER ( ?F42 != ?F43 )
FILTER ( ?F42 != ?F44 ) FILTER ( ?F43 != ?F44 )
FILTER ( ?F11 != ?F21 ) FILTER ( ?F11 != ?F31 )
FILTER ( ?F11 != ?F41 ) FILTER ( ?F21 != ?F31 )
FILTER ( ?F21 != ?F41 ) FILTER ( ?F31 != ?F41 )
FILTER ( ?F12 != ?F22 ) FILTER ( ?F12 != ?F32 )
FILTER ( ?F12 != ?F42 ) FILTER ( ?F22 != ?F32 )
FILTER ( ?F22 != ?F42 ) FILTER ( ?F32 != ?F42 )
FILTER ( ?F13 != ?F23 ) FILTER ( ?F13 != ?F33 )
FILTER ( ?F13 != ?F43 ) FILTER ( ?F23 != ?F33 )
FILTER ( ?F23 != ?F43 ) FILTER ( ?F33 != ?F43 )
FILTER ( ?F14 != ?F24 ) FILTER ( ?F14 != ?F34 )
FILTER ( ?F14 != ?F44 ) FILTER ( ?F24 != ?F34 )
FILTER ( ?F24 != ?F44 ) FILTER ( ?F34 != ?F44 )
FILTER ( ?F11 != ?F22 ) FILTER ( ?F12 != ?F21 )
FILTER ( ?F13 != ?F24 ) FILTER ( ?F14 != ?F23 )
FILTER ( ?F31 != ?F42 ) FILTER ( ?F32 != ?F41 )
FILTER ( ?F33 != ?F44 ) FILTER ( ?F34 != ?F43 )
}
Aufgabe 4.6
Anfrage 1
s | v |
---|---|
http://example.org/a | "1"^^xsd:integer |
http://example.org/b | "2"^^xsd:integer |
http://example.org/a | "3"^^xsd:integer |
Anfrage 2
s |
---|
http://example.org/a |
http://example.org/b |
http://example.org/a |
Anfrage 3
s |
---|
http://example.org/a |
http://example.org/b |
Das Ergebnis der vierten Anfrage wird durch die SPARQL-Spezifikation nicht eindeutig definiert, derzufolge "die Reihenfolge von Distinct(Ψ) jede von OrderBy vorgegebene Ordnung erhalten muss", welche aber auch erfordert, dass jede Ergebniszeile höchstens einmal in dem durch Distinct zurückgegebenen Resultat erscheint. Demnach wird ein Auftreten von ex:a gelöscht, aber es bleibt der Implementierung überlassen zu entscheiden, welches. Demnach könnte das Ergebnis dasselbe wie für die dritte Anfrage sein oder aber in umgekehrter Reihenfolge.
Dies beeinflusst auch die letzte Frage der Aufgabe: die Lösung, die sich mit LIMIT 1 ergibt, ist die erste der berechneten Folge und hängt demnach von der Entscheidung, die bei der Anwendung von Distinct getroffen wurde, ab. Die demonstriert auch einen der seltenen Fälle, wo Distinct sogar Ergebnisse von Fragen im CONSTRUCT-Format beeinflussen könnte. Natürlich ist nicht zu empfehlen, Anfragen mit solch einem unvorhersagbaren Verhalten zu formulieren und CONSTRUCT gestattet die zusätzliche Verwendung von DISTINCT nicht.
Datum | 18. Januar 2010 + |
Dozent | Sebastian Rudolph + |
Endzeit | 18. Januar 2010 11:15 + |
Nummer | 4 + |
Ort | Gebäude 11.40 Raum 231 + |
Serie | SWebT1 WS09/10 + |
Startzeit | 18. Januar 2010 09:45 + |
Titel | SPARQL + |
Unterlagen | Uebung4-owl-ws0910.pdf + |