SPARQL (4. Übung SWebT1 WS09/10)

Aus Semantic-Web-Grundlagen

Wechseln zu: Navigation, Suche
Ü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

PREFIX ex: <http<nowiki>://</nowiki>example.org/>
 SELECT ?objekt
 WHERE
  { { ex:Sonne    ex:satellit  ?objekt    . } UNION
    { ex:Sonne    ex:satellit  ?satellit  .
      ?satellit   ex:satellit  ?objekt    . } 
  }

Anfrage 2

PREFIX  ex:  <http<nowiki>://</nowiki>example.org/>
 SELECT  ?objekt  ?zentrum
 WHERE
  {         { ?objekt    ex:radius     ?radius }
   OPTIONAL { ?zentrum   ex:satellit   ?objekt }
   FILTER ( 4 / 3 * 3.1416 * ?radius * ?radius * ?radius > 20000000000 )
  }

Anfrage 3

PREFIX  ex:  <http<nowiki>://</nowiki>example.org/>
 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

PREFIX  ex:  <http<nowiki>://</nowiki>example.org/>
 SELECT DISTINCT ?objekt  
 WHERE
  { ?objekt      ex:satellit  ?satellit1 .
    ?objekt      ex:satellit  ?satellit2 .
    FILTER ( !sameTERM(?satellit1,?satellit2) ) 
  }

Aufgabe 4.2

Anfrage 1

Union(BGP(<http<nowiki>://</nowiki>example.org/Sonne> <http<nowiki>://</nowiki>example.org/satellit> ?objekt.),
               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

Filter((3/4 * 3.1416 * ?radius * ?radius * ?radius > 20000000000),
 LeftJoin(
           BGP(?objekt <http<nowiki>://</nowiki>example.org/radius> ?radius.),
           BGP(?zentrum <http<nowiki>://</nowiki>example.org/satellit> ?objekt.),
           true
         )
       )

Anfrage 3

Filter(((langMATCHES( LANG(?name), "en")) && (2 * ?radius > 3000)),
    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

Filter((!sameTERM(?satellit1,?satellit2)),
         Join(
              BGP(?objekt <http<nowiki>://</nowiki>example.org/satellit> ?satellit1.),
              BGP(?objekt <http<nowiki>://</nowiki>example.org/satellit> ?satellit2.),
             ) 
        )


Aufgabe 4.3

Lösung als PDF

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:

PREFIX  ex:  <http<nowiki>://</nowiki>example.org/> 
 SELECT ?objekt 
 WHERE
   {         { ?objekt  rdf:type      ex:Himmelskörper }
    OPTIONAL { ?objekt  ex:satellit   ?satellit        }
    FILTER ( !BOUND(?satellit) )
   }




Aufgabe 4.5

RDF document:

<http<nowiki>://</nowiki>example.org/square> <http<nowiki>://</nowiki>example.org/allowed>
"1"^^xsd:int, "2"^^xsd:int, "3"^^xsd:int, "4"^^xsd:int .

SPARQL query:

PREFIX ex: <http<nowiki>://</nowiki>example.org/> SELECT ?F11 ?F12 ?F13 ?F14
?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.

Fakten zu SPARQL (4. Übung SWebT1 WS09/10)RDF-Feed
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  +
Persönliche Werkzeuge