Komplexitätskatalog von SPARQL-Anfragen


Der folgende Anfragekatalog zeigt SPARQL-Beispielanfragen steigender Komplexität, beginnend
mit mit einer einfachen Anfrage. Die Komplexität wird hierbei durch den nötigen Transformationsaufwand
eine SPARQL-Anfrage in eine SQL-Anfrage gemessen. Weiterhin wird der Transformationsaufwand
nicht an einer Umwandlung einer SPARQL-Anfrage auf eine einzige Tabelle mit RDF-Informationen
(beispielsweise eine Tabelle mit den Spalten Subject, Predicate, Object) gemessen,
sondern auf mehrere Tabelle, die Informationen enthalten können.


Die hier aufgezeigten Beispiele nutzen standardmäßig jeweils den foaf- bzw. atom-Namensraum
(<http://xmlns.com/foaf/0.1/>, <http://www.w3.org/2005/Atom#>), welcher der Einfachheit halber
in einer Anfrage nicht per PREFIX-Definition festgelegt wird.


SPARQL-Anfragen werden mittels Graph Patterns ausgedrückt. Diese können aus einem Basic Graph
Pattern (Zusammenstellung eines Triple Patterns), Group Graph Pattern (Verknüpfung mehrere
Graph Patterns), Value Constraints (Werteinschränung), Optional Graph Pattern (optionale Graph
Patterns), Union Graph Pattern (Vereinigung von Graph Patterns) und RDF Dataset Graph Pattern
(Graph Patterns einzelner RDF-Datensätze) bestehen.


Der nachfolgende Katalog zeigt keinesweg die vollständige Nutzung sämtlicher in der SPARQL-Spezifikation
definierten Konstrukte, sondern soll lediglich Aufschluss über mögliche Komplexitätssteigerungen
geben.


1. Basic Graph Pattern

SELECT ?x WHERE
{ ?x foaf:name “Christian Lehmann” .}

2. dto.

SELECT ?x ?predicate WHERE
{ ?x ?predicate “value” .}

3. dto.

SELECT ?s ?p ?o WHERE
{ ?s ?p ?o .}

4. dto.

SELECT ?x WHERE
{ ?x ?foaf:name “Christian Lehmann” .} ORDER BY ?x
bzw.
SELECT DISTINCT ?x WHERE
{ ?x ?foaf:name “Christian Lehmann” .} LIMIT “50”

5. Group Graph Pattern

SELECT ?name ?mail WHERE
{ ?x foaf:name ?name.
?y foaf:mail ?mail.}

6. dto.

SELECT ?name ?mail WHERE
{ ?x foaf:name ?name.
?x foaf:mail ?mail. }

7. dto.

SELECT ?name ?mbox WHERE
{?chris foaf:name “Christian Lehmann”.
?chris foaf:knows ?friend .
?friend foaf:mbox ?mbox .
?friend foaf:name ?name .
}

8. Group Graph Pattern + Value Contraints

SELECT ?name ?mail WHERE
{ ?x foaf:name ?name.
FILTER (?name = “Christian Lehmann”).
?x foaf:mail ?mail. }

9. Union Graph Pattern

SELECT ?name ?mail WHERE
{ {?x foaf:name ?name. }
UNION
{?x atom:author ?name.}
}

10. Union Graph Pattern + Group Graph Pattern

SELECT ?name ?mail WHERE
{ {?x foaf:name ?name. ?x foaf:mail ?mail.}
UNION
{?x atom:author ?name. ?x atom:email ?mail.}
}

11. Optional Graph Pattern

SELECT ?name ?mail WHERE
{ ?x foaf:name ?name.
OPTIONAL{ ?x foaf:mail ?mail.}
}

12. Optional Graph Pattern + Value Constraint

SELECT ?name ?mail WHERE
{ ?x foaf:name ?name.
OPTIONAL{ ?x foaf:mail ?mail.}
FILTER {?mail = «mail@mail.de»}
}

13. Optional Graph Pattern

SELECT ?name ?mail WHERE
{ ?x foaf:name ?name.
OPTIONAL { ?x foaf:mail ?mail.}
OPTIONAL {?x foaf:givenname ?gname
OPTIONAL {?x foaf:homepage ?hp.}
}
}

14. RDF Dataset Graph Pattern

SELECT ?src ?nick WHERE
{
GRAPH ?src
{?x foaf:nick “bob”.}
}

15. dto.

SELECT ?src ?nick WHERE
{
GRAPH ?src
{?x foaf:nick ?nick .
?x foaf:name “Bob Wheeler” .}
}

16. dto.

PREFIX data: <http://example.com/foaf/
SELECT ?name ?doc WHERE
{ GRAPH data:ChrisFoaf
{?chris foaf:name “Christian Lehmann”.
?chris foaf:knows ?knows .
?knows rdfs:seeAlso ?doc .
?doc foaf:PersonalProfileDocument . }

GRAPH ?doc

{?friend foaf:name ?name. }
}

 
There are no files on this page. [Display files/form]
There is no comment on this page. [Display comments/form]

Information

Last Modification: 2006-12-04 15:08:08 by Christian Lehmann