SlideShare ist ein Scribd-Unternehmen logo
Semantic Web Technologien Lehrveranstaltung Semantic Web Technologien WS 2009/10  HTWG Konstanz
Sprachen des Semantic Web SPARQL S PARQL  P rotocol  A nd  R DF  Q uery  L anguage
SPARQL - Einführung SPARQL Protocol and RDF Query Language Offizielle W3C Recommendation vom 15. Januar 2008
SPARQL (engl. ausgesprochen wie sparkle)
Anfragen auf RDF Graphen
Bestandteile Query Language / Anfragesprache Wichtigster Bestandteil
Hohe Relevanz in der Praxis SPROT – SPARQL Protocol for RDF Protokoll zur Übertragung von SPARQL Anfragen an einen SPARQL Query Processing Service und zum Empfang von Ergebnissen durch den Anfragesteller SPARQL Query Results XML Format XML Dokumentformat zur Darstellung von Ergebnissen von SPARQL SELECT und ASK Queries
SPARQL SPARQL Query Language
SPARQL - Einführung Einfache Anfragen: Daten: @prefix ex: < http://www.example.org/ > . ex:Volkswagen  ex:hatFirmensitzIn “Wolfsburg”. ex:Audi ex:hatFirmensitzIn “Ingolstadt”. Anfrage: PREFIX ex: <http://www.example.org> SELECT ?firmensitz WHERE  { ?x ex:hatFirmensitzIn ?firmensitz . } Resultat: firmensitz “Wolfsburg” “Ingolstadt”
SPARQL - Einführung Mit mehreren Variablen: Daten: @prefix ex: < http://www.example.org/ > . _:a  ex:hatFirmensitzIn “Wolfsburg” . _:a ex:hatNamen “Volkswagen” . _:b ex:hatFirmensitzIn “Ingolstadt” . _:b ex:hatNamen “Audi” . _:c ex:hatFirmensitzIn “Zuffenhausen” . Anfrage: PREFIX ex: <http://www.example.org> SELECT ?name ?firmensitz WHERE  { ?x ex:hatFirmensitzIn ?firmensitz . ?x ex:hatNamen ?name . } Resultat: name firmensitz “Volkswagen” “Wolfsburg” “Audi” “Ingolstadt”
SPARQL - Einführung Hauptbestandteile des SPARQL SELECT : Anfragemuster ( WHERE ) Verwendet TURTLE Syntax
Kann Variablen enthalten (  ?firmensitz  … )
Muster muss vollständig passen, damit Ergebnisse zurückgeliefert werden können URIs können mit  PREFIX  abgekürzt werden
Ergebnis durch “Auswahl” von Variablen ( SELECT )
SPARQL - Einführung Anfragemuster: Einfache Graphmuster
Menge von RDF Triplen in Turtle Syntax Auch Turtle Abkürzungen durch ; und , erlaubt Variablen werden durch ? Oder $ eingeleitet ?firmensitz  gleichbedeutend mit  $firmensitz
Prinzipiell auch innerhalb ein und der selben Anfrage mischbar
Bitte für eine Variante entscheiden, da sonst schwer bis nicht lesbar Variablen können an Stelle von Subjekt, Prädikat oder Objekt stehen
SPARQL – Behandlung von Literalen Literale Daten: ex:w  ex:p  &quot;test&quot; . ex:x  ex:p  &quot;test&quot;@de . ex:y  ex:p  &quot;test&quot;^^xsd:string . ex:z  ex:p  &quot;42&quot;^^xsd:integer . Query SELECT ?node WHERE { ?node ex:p “test” . }
Liefert nur Genaue Übereinstimmung gefordert Aber Ausnahme bei numerischen Typen: SELECT ?node WHERE { ?node ex:p 42 . }
Liefert Datentyp wird aus syntaktischer Form bestimmt  node ex:z node ex:w
SPARQL – Behandlung von Blank Nodes Blank Nodes (gekennzeichnet durch _:xyz) In Anfragen Können an Stelle von Subjekt oder Objekt stehen
ID beliebig (aber nur einmal pro Anfrage verwenden)
Variablen, die nicht ausgewählt werden können In Ergebnissen Platzhalter für unbekannte Elemente
Ids beliebig, aber evtl. an anderen Ergebnisteil gebunden Beispiel (basierend auf Daten des letzten Beispiels): SELECT ?node ?name WHERE { ?node ex:hatNamen ?name . } Ergebnis kann unterschiedliche Formen annehmen: node name _:b “Volkswagen” _:a “Audi” node name _:a “Volkswagen” _:b “Audi”
SPARQL – Gruppierung Gruppierung Anfragemuster können durch { und } zu Gruppen zusammengefasst und verschachtelt werden
Beispiel: SELECT ?name ?firmensitz WHERE  { { ?x ex:hatFirmensitzIn ?firmensitz . ?x ex:hatNamen ?name . } {} ?x ex:hatGruendungsjahr . } Aber ohne zusätzliche Konstrukte nicht sonderlich sinnvoll
SPARQL – Optionale Muster OPTIONAL: Angabe optionaler Teile eines Musters SELECT ?x ?name ?firmensitz WHERE  {  ?x rdf:type ex:Autohersteller . OPTIONAL { ?x ex:hatFirmensitzIn ?firmensitz . } OPTIONAL { ?x ex:hatNamen ?name . } } Ergebnis kann teilweise ungebunden sein: praktisch, wenn nicht alle Daten vorhanden sind, man aber auch nicht unbedingt alle Daten benötigt. x name firmensitz ex:Volkswagen “Volkswagen” “Wolfsburg” ex:Audi “Ingolstadt” ex:Porsche “Porsche”
SPARQL – Alternative Muster UNION Angabe alternativer Teile eines Musters
SELECT ?x ?firmensitz WHERE  {  ?x rdf:type ex:Autohersteller . { ?x ex:hatFirmensitzIn  ?firmensitz . } UNION { ?x ex:hatHauptstandortIn ?firmensitz . } }
Ergebnis ist die Vereinigung (logisches ODER) der Ergebnismengen beider möglichen Varianten
Gelten beide Varianten (Sind für einen Autohersteller beide Triple gepflegt) werden auch beide Varianten zurückgeliefert
Gleiche Variablennamen in beiden Teilen von UNION beeinflussen sich nicht gegenseitig.
SPARQL - Vorrangregelung Kombination von UNION und OPTIONAL SELECT ?x ?firmensitz ?name WHERE {  ?x rdf:type ex:Autohersteller . { ?x ex:hatFirmensitzIn  ?firmensitz . } UNION { ?x ex:hatHauptstandortIn ?firmensitz . } OPTIONAL { ?x ex:hatNamen ?name . } }
OPTIONAL gilt immer genau für das Muster (die Mustergruppe), vor dem OPTIONAL steht
UNION und OPTIONAL sind gleichwertig und beziehen sich beide immer auf alle links von ihnen stehende Ausdrücke
Beispiel
{ { s1 p1 o1 } OPTIONAL { s2 p2 o2 } UNION { s3 p3 o3 }   OPTIONAL { s4 p4 o4 } OPTIONAL { s5 p5 o5 } } {  {   {   {  {  s1 p1 o1  } OPTIONAL { s2 p2 o2 }   }   UNION { s3 p3 o3 }   }   OPTIONAL { s4 p4 o4 }   } OPTIONAL { s5 p5 o5 } }
SPARQL – FILTER FILTER Graphmuster-Vergleich führt zu einer Menge von Ergebnissen, bei der jedes Ergebnis (in unseren Beispielen jede Tabellenzeile) eine Menge an Variablen liefert, die an eine oder mehrere RDF Elemente gebunden sind
Mit der SPARQL Anweisung FILTER kann man die Menge der Ergebnisse weiter einschränken
FILTER wird eine Operation übergeben, die als Ergebnis einen boolschen Wert liefert
Nur Ergebnisse, für die der Wert TRUE zurückgeliefert wird, werden in die Ergebnismenge übernommen
SPARQL – FILTER - Wofür? Warum benötigt man FILTER?
Manche Anfragen mit reinem Mustervergleich nicht möglich: Welche Personen sind zwischen 18 und 23 Jahre alt?
Der Vorname welcher Personen beginnt mit einem “A”
Welche Attribute sind in deutscher Sprache vorhanden? Hierbei helfen uns FILTER weiter
SPARQL – FILTER - Beispiel Beispiel zu FILTER: PREFIX  dc:  < http://purl.org/dc/elements/1.1/ > PREFIX  ns:  < http://example.org/ns #> SELECT  ?title ?price WHERE { ?x ns:price ?price . FILTER (?price < 30.5)   ?x dc:title ?title .  }
Schlüsselwort FILTER, gefolgt von Ausdruck in Klammern
Filter liefern Wahrheitswerte
Viele Filterfunktionen aus Xquery/XPath Standard übernommen
SPARQL – FILTER – Operatoren Vergleichsoperatoren: <, <=, =, >=, >, != Vergleich von Literalen gemäß “natürlicher” Reihenfolge Numerisch nach Wert
Strings alphabetisch
Boolean (TRUE > FALSE)
… Unterstützung für: Numerische Datentypen (xsd:int …)
xsd:dateTime
xsd:string
xsd:Boolean Andere Typen und RDF-Elemente unterstützen nur = und !=
Vergleich von Literalen inkompatibler Typen nicht möglich z.B: xsd:integer und xsd:string Arithmetische Operatoren: +,-,*,/ Nur für numerische Typen
Verwendung zur Berechnung von Werten in Filterbedingungen
SPARQL – FILTER - Funktionen RDF spezifische Filterfunktionen in SPARQL Operator Beschreibung Erlaubter Typ für A BOUND( A ) Gibt an, ob die Variable A gebunden ist Variable isIRI( A )  / isURI (A) Gibt an, ob das Element eine IRI/URI ist RDF-Element isBLANK( A ) Gibt an, ob das Element ein BlankNode ist RDF-Element isLITERAL( A ) Gibt an, ob das Element ein Literal ist RDF-Element STR( A ) Darstellung von URIs und Literalen als xsd:string URI / Literal LANG( A ) Sprachangabe eines Literals (leer, wenn nicht vorhanden) Literal DATATYPE( A ) Datentyp eines Literals. Wenn Literal ungetypt und ohne Sprachangabe: xsd:string Literal
SPARQL – FILTER - Funktionen Weitere RDF spezifische Filterfunktionen in SPARQL
Mehrere Filter können mittels && bzw. || verbunden werden sowie mit ! negiert werden Operator Beschreibung sameTERM( A, B ) Prüfen, ob A und B die gleichen RDF Terme sind LangMATCHES(A,B) Prüfen, ob A und B die gleichen Sprachangaben sind REGEX( A, B ) Prüfen, ob in String A der Reguläre Ausdruck B vorkommt
SPARQL – Lösungen und Modifikatoren SELECT Anfragen generieren unsortierte Folgen von Ergebnissen
Zum Teil sind auch unerwünschte Ergebnisse enthalten
Manche Sätze können mehrfach vorhanden sein
Hier kommen Modifikatoren zum Einsatz Solution Sequence Modifiers Modifikatoren bieten uns Möglichkeiten zur Sortierung: ORDER BY

Weitere ähnliche Inhalte

PDF
Semantic Web Technologies - SS 2010 - 06 - SPARQL
PDF
Semantic Web Technologies - SS 2010 - 04 - RDFS
ODP
5 - Sprachen des Semantic Web - Formale Semantik In RDF(S)
PDF
FMK2015: Reguläre Ausdrücke by Arnold Kegebein
ODP
3 - Sprachen Des Semantic Web - RDF
PPT
Scala XML
ODP
6 - Sprachen des Semantic Web - RDF(S) Frameworks
ODP
Semantic Web und Identifikatoren
Semantic Web Technologies - SS 2010 - 06 - SPARQL
Semantic Web Technologies - SS 2010 - 04 - RDFS
5 - Sprachen des Semantic Web - Formale Semantik In RDF(S)
FMK2015: Reguläre Ausdrücke by Arnold Kegebein
3 - Sprachen Des Semantic Web - RDF
Scala XML
6 - Sprachen des Semantic Web - RDF(S) Frameworks
Semantic Web und Identifikatoren

Ähnlich wie 7 - Sprachen Des Semantic Web - SPARQL (8)

PDF
Sitzung 10
ODP
4 - Sprachen Des Semantic Web - RDFS
KEY
Sparql und Sparul
PDF
Sitzung 6
PDF
Einführung in RDF & SPARQL
PDF
Sitzung 7
PDF
Query API via GraphQL
PDF
Beyond REST and CRUD: CQRS/ES mit GraphQL
Sitzung 10
4 - Sprachen Des Semantic Web - RDFS
Sparql und Sparul
Sitzung 6
Einführung in RDF & SPARQL
Sitzung 7
Query API via GraphQL
Beyond REST and CRUD: CQRS/ES mit GraphQL
Anzeige

Mehr von Steffen Schloenvoigt (12)

PDF
Venture labs creativity course assignment 1 "Things we have in common"
PDF
SWT2011 - 01 - Motivation
PDF
SWT2011 - 02 - XML
PDF
Swt ss10 07_owl
PDF
Semantic Web Technologies - SS 2010 - 05 - RDF(S) Frameworks
PDF
Semantic Web Technologies - SS 2010 - 03 - RDF
PDF
Semantic Web Technologies - SS 2010 - 01 - Einfuehrung
PDF
Semantic Web Technologies - SS 2010 - 02 - XML und URIs
PDF
8 - Sprachen Des Semantic Web - OWL
ODP
2 - Sprachen Des Semantic Web - XML
ODP
1 - Einfuehrung
Venture labs creativity course assignment 1 "Things we have in common"
SWT2011 - 01 - Motivation
SWT2011 - 02 - XML
Swt ss10 07_owl
Semantic Web Technologies - SS 2010 - 05 - RDF(S) Frameworks
Semantic Web Technologies - SS 2010 - 03 - RDF
Semantic Web Technologies - SS 2010 - 01 - Einfuehrung
Semantic Web Technologies - SS 2010 - 02 - XML und URIs
8 - Sprachen Des Semantic Web - OWL
2 - Sprachen Des Semantic Web - XML
1 - Einfuehrung
Anzeige

7 - Sprachen Des Semantic Web - SPARQL

  • 1. Semantic Web Technologien Lehrveranstaltung Semantic Web Technologien WS 2009/10 HTWG Konstanz
  • 2. Sprachen des Semantic Web SPARQL S PARQL P rotocol A nd R DF Q uery L anguage
  • 3. SPARQL - Einführung SPARQL Protocol and RDF Query Language Offizielle W3C Recommendation vom 15. Januar 2008
  • 6. Bestandteile Query Language / Anfragesprache Wichtigster Bestandteil
  • 7. Hohe Relevanz in der Praxis SPROT – SPARQL Protocol for RDF Protokoll zur Übertragung von SPARQL Anfragen an einen SPARQL Query Processing Service und zum Empfang von Ergebnissen durch den Anfragesteller SPARQL Query Results XML Format XML Dokumentformat zur Darstellung von Ergebnissen von SPARQL SELECT und ASK Queries
  • 9. SPARQL - Einführung Einfache Anfragen: Daten: @prefix ex: < http://www.example.org/ > . ex:Volkswagen ex:hatFirmensitzIn “Wolfsburg”. ex:Audi ex:hatFirmensitzIn “Ingolstadt”. Anfrage: PREFIX ex: <http://www.example.org> SELECT ?firmensitz WHERE { ?x ex:hatFirmensitzIn ?firmensitz . } Resultat: firmensitz “Wolfsburg” “Ingolstadt”
  • 10. SPARQL - Einführung Mit mehreren Variablen: Daten: @prefix ex: < http://www.example.org/ > . _:a ex:hatFirmensitzIn “Wolfsburg” . _:a ex:hatNamen “Volkswagen” . _:b ex:hatFirmensitzIn “Ingolstadt” . _:b ex:hatNamen “Audi” . _:c ex:hatFirmensitzIn “Zuffenhausen” . Anfrage: PREFIX ex: <http://www.example.org> SELECT ?name ?firmensitz WHERE { ?x ex:hatFirmensitzIn ?firmensitz . ?x ex:hatNamen ?name . } Resultat: name firmensitz “Volkswagen” “Wolfsburg” “Audi” “Ingolstadt”
  • 11. SPARQL - Einführung Hauptbestandteile des SPARQL SELECT : Anfragemuster ( WHERE ) Verwendet TURTLE Syntax
  • 12. Kann Variablen enthalten ( ?firmensitz … )
  • 13. Muster muss vollständig passen, damit Ergebnisse zurückgeliefert werden können URIs können mit PREFIX abgekürzt werden
  • 14. Ergebnis durch “Auswahl” von Variablen ( SELECT )
  • 15. SPARQL - Einführung Anfragemuster: Einfache Graphmuster
  • 16. Menge von RDF Triplen in Turtle Syntax Auch Turtle Abkürzungen durch ; und , erlaubt Variablen werden durch ? Oder $ eingeleitet ?firmensitz gleichbedeutend mit $firmensitz
  • 17. Prinzipiell auch innerhalb ein und der selben Anfrage mischbar
  • 18. Bitte für eine Variante entscheiden, da sonst schwer bis nicht lesbar Variablen können an Stelle von Subjekt, Prädikat oder Objekt stehen
  • 19. SPARQL – Behandlung von Literalen Literale Daten: ex:w ex:p &quot;test&quot; . ex:x ex:p &quot;test&quot;@de . ex:y ex:p &quot;test&quot;^^xsd:string . ex:z ex:p &quot;42&quot;^^xsd:integer . Query SELECT ?node WHERE { ?node ex:p “test” . }
  • 20. Liefert nur Genaue Übereinstimmung gefordert Aber Ausnahme bei numerischen Typen: SELECT ?node WHERE { ?node ex:p 42 . }
  • 21. Liefert Datentyp wird aus syntaktischer Form bestimmt node ex:z node ex:w
  • 22. SPARQL – Behandlung von Blank Nodes Blank Nodes (gekennzeichnet durch _:xyz) In Anfragen Können an Stelle von Subjekt oder Objekt stehen
  • 23. ID beliebig (aber nur einmal pro Anfrage verwenden)
  • 24. Variablen, die nicht ausgewählt werden können In Ergebnissen Platzhalter für unbekannte Elemente
  • 25. Ids beliebig, aber evtl. an anderen Ergebnisteil gebunden Beispiel (basierend auf Daten des letzten Beispiels): SELECT ?node ?name WHERE { ?node ex:hatNamen ?name . } Ergebnis kann unterschiedliche Formen annehmen: node name _:b “Volkswagen” _:a “Audi” node name _:a “Volkswagen” _:b “Audi”
  • 26. SPARQL – Gruppierung Gruppierung Anfragemuster können durch { und } zu Gruppen zusammengefasst und verschachtelt werden
  • 27. Beispiel: SELECT ?name ?firmensitz WHERE { { ?x ex:hatFirmensitzIn ?firmensitz . ?x ex:hatNamen ?name . } {} ?x ex:hatGruendungsjahr . } Aber ohne zusätzliche Konstrukte nicht sonderlich sinnvoll
  • 28. SPARQL – Optionale Muster OPTIONAL: Angabe optionaler Teile eines Musters SELECT ?x ?name ?firmensitz WHERE { ?x rdf:type ex:Autohersteller . OPTIONAL { ?x ex:hatFirmensitzIn ?firmensitz . } OPTIONAL { ?x ex:hatNamen ?name . } } Ergebnis kann teilweise ungebunden sein: praktisch, wenn nicht alle Daten vorhanden sind, man aber auch nicht unbedingt alle Daten benötigt. x name firmensitz ex:Volkswagen “Volkswagen” “Wolfsburg” ex:Audi “Ingolstadt” ex:Porsche “Porsche”
  • 29. SPARQL – Alternative Muster UNION Angabe alternativer Teile eines Musters
  • 30. SELECT ?x ?firmensitz WHERE { ?x rdf:type ex:Autohersteller . { ?x ex:hatFirmensitzIn ?firmensitz . } UNION { ?x ex:hatHauptstandortIn ?firmensitz . } }
  • 31. Ergebnis ist die Vereinigung (logisches ODER) der Ergebnismengen beider möglichen Varianten
  • 32. Gelten beide Varianten (Sind für einen Autohersteller beide Triple gepflegt) werden auch beide Varianten zurückgeliefert
  • 33. Gleiche Variablennamen in beiden Teilen von UNION beeinflussen sich nicht gegenseitig.
  • 34. SPARQL - Vorrangregelung Kombination von UNION und OPTIONAL SELECT ?x ?firmensitz ?name WHERE { ?x rdf:type ex:Autohersteller . { ?x ex:hatFirmensitzIn ?firmensitz . } UNION { ?x ex:hatHauptstandortIn ?firmensitz . } OPTIONAL { ?x ex:hatNamen ?name . } }
  • 35. OPTIONAL gilt immer genau für das Muster (die Mustergruppe), vor dem OPTIONAL steht
  • 36. UNION und OPTIONAL sind gleichwertig und beziehen sich beide immer auf alle links von ihnen stehende Ausdrücke
  • 38. { { s1 p1 o1 } OPTIONAL { s2 p2 o2 } UNION { s3 p3 o3 } OPTIONAL { s4 p4 o4 } OPTIONAL { s5 p5 o5 } } { { { { { s1 p1 o1 } OPTIONAL { s2 p2 o2 } } UNION { s3 p3 o3 } } OPTIONAL { s4 p4 o4 } } OPTIONAL { s5 p5 o5 } }
  • 39. SPARQL – FILTER FILTER Graphmuster-Vergleich führt zu einer Menge von Ergebnissen, bei der jedes Ergebnis (in unseren Beispielen jede Tabellenzeile) eine Menge an Variablen liefert, die an eine oder mehrere RDF Elemente gebunden sind
  • 40. Mit der SPARQL Anweisung FILTER kann man die Menge der Ergebnisse weiter einschränken
  • 41. FILTER wird eine Operation übergeben, die als Ergebnis einen boolschen Wert liefert
  • 42. Nur Ergebnisse, für die der Wert TRUE zurückgeliefert wird, werden in die Ergebnismenge übernommen
  • 43. SPARQL – FILTER - Wofür? Warum benötigt man FILTER?
  • 44. Manche Anfragen mit reinem Mustervergleich nicht möglich: Welche Personen sind zwischen 18 und 23 Jahre alt?
  • 45. Der Vorname welcher Personen beginnt mit einem “A”
  • 46. Welche Attribute sind in deutscher Sprache vorhanden? Hierbei helfen uns FILTER weiter
  • 47. SPARQL – FILTER - Beispiel Beispiel zu FILTER: PREFIX dc: < http://purl.org/dc/elements/1.1/ > PREFIX ns: < http://example.org/ns #> SELECT ?title ?price WHERE { ?x ns:price ?price . FILTER (?price < 30.5) ?x dc:title ?title . }
  • 48. Schlüsselwort FILTER, gefolgt von Ausdruck in Klammern
  • 50. Viele Filterfunktionen aus Xquery/XPath Standard übernommen
  • 51. SPARQL – FILTER – Operatoren Vergleichsoperatoren: <, <=, =, >=, >, != Vergleich von Literalen gemäß “natürlicher” Reihenfolge Numerisch nach Wert
  • 53. Boolean (TRUE > FALSE)
  • 54. … Unterstützung für: Numerische Datentypen (xsd:int …)
  • 57. xsd:Boolean Andere Typen und RDF-Elemente unterstützen nur = und !=
  • 58. Vergleich von Literalen inkompatibler Typen nicht möglich z.B: xsd:integer und xsd:string Arithmetische Operatoren: +,-,*,/ Nur für numerische Typen
  • 59. Verwendung zur Berechnung von Werten in Filterbedingungen
  • 60. SPARQL – FILTER - Funktionen RDF spezifische Filterfunktionen in SPARQL Operator Beschreibung Erlaubter Typ für A BOUND( A ) Gibt an, ob die Variable A gebunden ist Variable isIRI( A ) / isURI (A) Gibt an, ob das Element eine IRI/URI ist RDF-Element isBLANK( A ) Gibt an, ob das Element ein BlankNode ist RDF-Element isLITERAL( A ) Gibt an, ob das Element ein Literal ist RDF-Element STR( A ) Darstellung von URIs und Literalen als xsd:string URI / Literal LANG( A ) Sprachangabe eines Literals (leer, wenn nicht vorhanden) Literal DATATYPE( A ) Datentyp eines Literals. Wenn Literal ungetypt und ohne Sprachangabe: xsd:string Literal
  • 61. SPARQL – FILTER - Funktionen Weitere RDF spezifische Filterfunktionen in SPARQL
  • 62. Mehrere Filter können mittels && bzw. || verbunden werden sowie mit ! negiert werden Operator Beschreibung sameTERM( A, B ) Prüfen, ob A und B die gleichen RDF Terme sind LangMATCHES(A,B) Prüfen, ob A und B die gleichen Sprachangaben sind REGEX( A, B ) Prüfen, ob in String A der Reguläre Ausdruck B vorkommt
  • 63. SPARQL – Lösungen und Modifikatoren SELECT Anfragen generieren unsortierte Folgen von Ergebnissen
  • 64. Zum Teil sind auch unerwünschte Ergebnisse enthalten
  • 65. Manche Sätze können mehrfach vorhanden sein
  • 66. Hier kommen Modifikatoren zum Einsatz Solution Sequence Modifiers Modifikatoren bieten uns Möglichkeiten zur Sortierung: ORDER BY
  • 67. Entfernung doppelter Ergebnisse: DISTINCT, REDUCED
  • 69. SPARQL – ORDER BY ORDER BY Sortierung von Ergebnismengen
  • 70. Variablen, nach denen sortiert werden soll, werden nacheinander aufgeführt
  • 71. Mit ASC( ) und DESC( ) kann aufsteigend bzw. absteigend sortiert werden
  • 72. URIs werden alphabetisch als Zeichenketten sortiert
  • 73. Reihenfolge zwischen unterschiedlichen Elementarten: ungebundene Variable < leerer Knoten < URIs < RDF Literale Beispiel: PREFIX foaf: < http://xmlns.com/foaf/0.1/ > PREFIX ex: < http://www.example.org/ > SELECT ?name WHERE { ?x foaf:name ?name . ?x ex:employeeId ?empID . } ORDER BY ?name DESC(?empID)
  • 74. SPARQL – DISTINCT / REDUCED DISTINCT / REDUCED Beispiel: @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:x foaf:name &quot;Alice&quot; . _:x foaf:mbox <mailto:alice@example.com> . _:y foaf:name &quot;Alice&quot; . _:y foaf:mbox <mailto:asmith@example.com> . _:z foaf:name &quot;Alice&quot; . _:z foaf:mbox <mailto:alice.smith@example.com> . SELECT ?name WHERE { ?x foaf:name ?name } SELECT DISTINCT ?name WHERE { ?x foaf:name ?name } SELECT REDUCED ?name WHERE { ?x foaf:name ?name } name “Alice” “Alice” “Alice” name “Alice” name “ Alice” name “ Alice” “ Alice” name “ Alice” “ Alice” “ Alice” v v
  • 75. SPARQL – LIMIT und OFFSET LIMIT Nur eine bestimmte Anzahl an Ergebniszeilen ausgeben
  • 77. 0: Keine Ergebnisse, negative Werte nicht erlaubt OFFSET Ergebnisausgabe erst ab angegebener Zeile beginnen
  • 78. Offset von 0 hat keinen Effekt LIMIT und OFFSET machen nur Sinn in Verbindung mit ORDER BY , da sonst Reihenfolge nicht vorhersagbar
  • 79. Beispiel: PREFIX foaf: < http://xmlns.com/foaf/0.1/ > SELECT ?name WHERE { ?x foaf:name ?name } ORDER BY ?name LIMIT 5 OFFSET 10
  • 80. Nur fünf Ergebniszeilen liefern, beginnend ab der elften (3. Seite)
  • 81. SPARQL – Modifikatoren Reihenfolge Reihenfolge der Modifikatoren bei der Verarbeitung: 1. Sortierung anhand von ORDER BY
  • 82. 2. Entfernung nicht ausgewählter Variablen
  • 83. 3. Entfernung doppelter Ergebnisse ( DISTINCT )
  • 84. 4. Entfernung der Ergebniszeilen vor dem OFFSET
  • 85. 5. Entfernung der überschüssigen Zeilen nach LIMIT Hinweis: ORDER BY wird vor Entfernung nicht ausgewählter Variablen ausgeführt -> Sortierung auch nach nicht ausgewählten Variablen möglich
  • 86. SPARQL - Anfragetypen Anfragetypen in SPARQL Bereits kennengelernt: SELECT Liefert als Ergebnis eine Tabelle mit den Variablenwerten
  • 87. Einfach sequentiell zu verarbeiten
  • 88. Struktur und Semantische Verknüpfung der Werte geht leider verloren CONSTRUCT Liefert einen RDF-Graph, der durch Ersetzung von Variablen in einer Menge von Triple-Templates konstruiert wird ASK Liefert einen Wahrheitswert, der aussagt, ob ein Anfrage-Muster in einem Graph gefunden werden kann oder nicht DESCRIBE Liefert einen RDF-Graph, der gefundene Ressourcen beschreibt
  • 89. SPARQL - CONSTRUCT CONSTRUCT Liefert einen RDF-Graph als Rückgabewert
  • 90. Auch praktisch, um Teilgraphen zu extrahieren
  • 91. Sequentielle Verarbeitung des Ergebnisses kompliziert
  • 92. Ungebundene Variablen können nicht behandelt werden
  • 93. Beispiel: @prefix foaf: <http://xmlns.com/foaf/0.1/> .
  • 94. _:a foaf:name &quot;Alice&quot; .
  • 95. _:a foaf:mbox <mailto:alice@example.org> .
  • 96. PREFIX foaf: <http://xmlns.com/foaf/0.1/>
  • 97. PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#>
  • 98. CONSTRUCT { <http://example.org/person#Alice> vcard:FN ?name }
  • 99. WHERE { ?x foaf:name ?name }
  • 102. SPARQL - ASK ASK Prüft, ob ein Muster in einem Graph vorkommt
  • 103. Rückgabe ist ein boolscher Wert (true/false)
  • 104. Beispiel: @prefix foaf: <http://xmlns.com/foaf/0.1/> . _:a foaf:name &quot;Alice&quot; . _:a foaf:homepage <http://work.example.org/alice/> . _:b foaf:name &quot;Bob&quot; . _:b foaf:mbox <mailto:bob@work.example> .
  • 105. PREFIX foaf: < http://xmlns.com/foaf/0.1/ > ASK { ?x foaf:name &quot;Alice&quot; } true Daten Anfrage Ergebnis
  • 106. SPARQL - DESCRIBE DESCRIBE Liefert einen RDF-Graph, der die in der Anfrage angegebenen Ressourcen beschreibt
  • 107. Nicht genau spezifiziert Was beschrieben wird, obliegt dem SPARQL Prozessor Beispiel: PREFIX ent: < http://org.example.com/employees #> DESCRIBE ?x WHERE { ?x ent:employeeId &quot;1234&quot; } @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix vcard: <http://www.w3.org/2001/vcard-rdf/3.0> . @prefix exOrg: <http://org.example.com/employees#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix owl: < http://www.w3.org/2002/07/owl #> _:a exOrg:employeeId &quot;1234&quot; ; foaf:mbox_sha1sum &quot;ABCD1234&quot; ; vcard:N [ vcard:Family &quot;Smith&quot; ; vcard:Given &quot;John&quot; ] . foaf:mbox_sha1sum rdf:type owl:InverseFunctionalProperty Anfrage Ergebnis
  • 108. SPARQL - Abkürzungen Es kann ein leerer PREFIX definiert werden
  • 109. Mit BASE kann ein Standard-Prefix festgelegt werden
  • 110. BASE < http://example.org/book/ > PREFIX : <http://example.org/ontology> SELECT $title WHERE { <book1> :title ?title }
  • 111. rdf:type kann mit “a” abgekürzt werden
  • 112. SELECT $x WHERE { $x a <ex:Book> }
  • 113. RDF-Collections können mit ( ) abgekürzt werden (1 ?x 3) :p &quot;w&quot; . Ist gleichbedeutend mit
  • 114. _:b0 rdf:first 1 ; rdf:rest _:b1 . _:b1 rdf:first ?x ; rdf:rest _:b2 . _:b2 rdf:first 3 ; rdf:rest rdf:nil . _:b0 :p &quot;w&quot; .
  • 115. SPARQL – RDF Dataset Viele RDF Data stores bieten die Möglichkeit, Triple über mehrere Graphen zu verteilen und Informationen zu jedem einzelnen Graph aufzunehmen Eine Menge von Graphen nennt man RDF Dataset SPARQL Queries bieten die Möglichkeit, Anfragen über mehrere Graphen verteilt zu stellen
  • 116. Jedes RDF-Dataset enthält immer einen “Default” Graph ohne Namen und
  • 117. 0 oder mehr “benamte” Graphen, die jeweils durch eine URI gekennzeichnet werden Eine Anfrage muss nicht den Default-Graph ansprechen, sondern kann sich auch rein auf die benamten Graphen beziehen
  • 118. Der “aktive” Graph wird mit GRAPH gekennzeichnet
  • 119. SPARQL – FROM (NAMED) Das RDF Dataset, das mit der Query abgefragt werden soll, wird mit den Stichworten FROM bzw. FROM NAMED zusammengesetzt Wenn weder FROM noch FROM NAMED angegeben sind, wird das Standard RDF-Dataset der Implementierung verwendet
  • 120. Werden mehrere FROM Graphen angegeben, entsteht der Default Graph durch einen Merge der mit FROM angegebenen Graphen
  • 121. Werden mehrere FROM NAMED Graphen angegeben, aber kein FROM Graph, ist der Default Graph leer Beispiel-Anfrage: (http://example.org/dft.ttl enthält hier Infos über andere Graphen) SELECT ?who ?g ?mbox FROM < http://example.org/dft.ttl > FROM NAMED < http://example.org/alice > FROM NAMED < http://example.org/bob > WHERE { ?g dc:publisher ?who . GRAPH ?g { ?x foaf:mbox ?mbox } }
  • 122. SPARQL - GRAPH Anfrage auf einen Graph beschränken
  • 123. PREFIX foaf: < http://xmlns.com/foaf/0.1/ > PREFIX data: < http://example.org/foaf/ > SELECT ?nick FROM NAMED < http://example.org/foaf/aliceFoaf > FROM NAMED < http://example.org/foaf/bobFoaf > WHERE { GRAPH data:bobFoaf { ?x foaf:mbox <mailto:bob@work.example> . ?x foaf:nick ?nick } }
  • 124. SPARQL - GRAPH Auf Graphnamen zugreifen Folgende Query matcht auf jeden der angegebenen Graphen
  • 125. Auf den Namen des Graphen kann dann mit der src Variable zugegriffen werden PPREFIX foaf: < http://xmlns.com/foaf/0.1/ > SELECT ?src ?bobNick FROM NAMED < http://example.org/foaf/aliceFoaf > FROM NAMED < http://example.org/foaf/bobFoaf > WHERE { GRAPH ?src { ?x foaf:mbox <mailto:bob@work.example> . ?x foaf:nick ?bobNick } }
  • 126. SPARQL - GRAPH Mögliche Graph URIs beschränken Auf eine Variable, die in einem GRAPH-Abschnitt verwendet wurde, kann auch in einem anderen GRAPH-Abschnitt oder in einem Muster für den Default-Graph zugegriffen werden PREFIX data: < http://example.org/foaf/ > PREFIX foaf: < http://xmlns.com/foaf/0.1/ > PREFIX rdfs: < http://www.w3.org/2000/01/rdf-schema #> SELECT ?mbox ?nick ?ppd FROM NAMED < http://example.org/foaf/aliceFoaf > FROM NAMED < http://example.org/foaf/bobFoaf > WHERE { GRAPH data:aliceFoaf { ?alice foaf:mbox <mailto:alice@work.example> ; foaf:knows ?whom . ?whom foaf:mbox ? mbox ; rdfs:seeAlso ?ppd . ?ppd a foaf:PersonalProfileDocument . } . GRAPH ?ppd { ?w foaf:mbox ?mbox ; foaf:nick ?nick } }
  • 127. SPARQL SPARQL Result XML Format
  • 128. SPARQL Wie sind Antworten auf SPARQL Queries formatiert? Antwort auf CONSTRUCT und DESCRIBE ist ein RDF Graph
  • 129. -> Antwort erfolgt z.B.: als RDF/XML
  • 130. Wie werden Antworten auf SELECT codiert? Antwort ist eine Tabelle von Variablenwerten Wie werden Antworten auf ASK Queries codiert? Antwort ist nur ein boolscher Wert Hierfür gibt es das SPARQL Query Result Format
  • 133. SPARQL Format definiert SPARQL Result Document XML Grundgerüst: <?xml version=&quot;1.0&quot;?> <sparql xmlns=&quot;http://www.w3.org/2005/sparql-results#&quot;>
  • 134. <head> … Hier stehen Header-Daten … </head> … Hier stehen die Resultate …
  • 135. </sparql> Head kann z.B. Referenz auf Metadaten enthalten:
  • 137. SPARQL Antwort-Format für SPARQL SELECT Queries Head enthält Elemente für alle angefragten Variablen
  • 138. Die Folge der Resultate (Element result ) werden im Element results zusammengefasst
  • 139. Jedes Resultat enthält ein oder mehrere binding Elemente Gebundene Variable wird mit Attribut name angegeben Binding-Typen: RDF URI Reference U
  • 143. RDF Literal S with language L
  • 145. RDF Typed Literal S with datatype URI D
  • 149. SPARQL Antwort-Format für SPARQL SELECT Queries Beispiel: <?xml version=&quot;1.0&quot;?> <sparql xmlns=&quot; http://www.w3.org/2005/sparql-results #&quot;> <head> <variable name=&quot;x&quot;/> <variable name=&quot;hpage&quot;/> <variable name=&quot;name&quot;/> ... </head> <results> <result> <binding name=&quot;x&quot;> <bnode>r2</bnode> </binding> <binding name=&quot;hpage&quot;> <uri> http://work.example.org/bob/ </uri> </binding> <binding name=&quot;name&quot;> <literal xml:lang=&quot;en&quot;>Bob</literal> </binding> … </result> <result> … </result> … </results> </sparql>
  • 150. SPARQL Antwort-Format für SPARQL ASK Queries Head kann (Referenz auf) Metadaten enthalten
  • 151. Element variable darf im Head nicht vorkommen
  • 152. Resultat wird im Element “ boolean ” zurückgeliefert <?xml version=&quot;1.0&quot;?> <sparql xmlns=&quot; http://www.w3.org/2005/sparql-results #&quot;> <head> ... head … </head> <boolean>true</boolean> </sparql>
  • 154. SPARQL Protokoll zum Transport von SPARQL Queries zwischen Query Client und Query Prozessor
  • 155. Bindings für HTTP und SOAP
  • 156. Definiert als einziges Interface SparqlQuery , welches wiederum die Methode query enthält
  • 157. Query ist definiert nach dem In-Out message exchange pattern, welches folgende 2 Nachrichten definiert 1. Nachricht Ausgezeichnet durch Label “In” mit Richtung “in”
  • 158. Empfangen von einem Knoten N 2. Nachricht Ausgezeichnet durch Label “Out” mit Richtung “out”
  • 159. Gesendet an Knoten N Bei Fehlern wird Out durch eine “Fault” Message ersetzt
  • 160. SPARQL Auszug aus der WSDL 2.0 Definition
  • 161. <!-- Abstract SparqlQuery Interface -> <interface name=&quot;SparqlQuery&quot; styleDefault=&quot; http://www.w3.org/2006/01/wsdl/style/iri &quot;> <!-- the Interface Faults --> <fault name=&quot;MalformedQuery&quot; element=&quot;st:malformed-query&quot;/> <fault name=&quot;QueryRequestRefused&quot; element=&quot;st:query-request-refused&quot;/> <!-- the Interface Operation --> <operation name=&quot;query&quot; pattern=&quot; http://www.w3.org/2006/01/wsdl/in-out &quot;> <documentation> The operation is used to convey queries and their results from clients to services and back again. </documentation> <input messageLabel=&quot; In &quot; element=&quot; st:query-request &quot;/> <output messageLabel=&quot; Out &quot; element=&quot; st:query-result &quot;/> <!-- the interface faults are out faults --> <outfault ref=&quot;tns:MalformedQuery&quot; messageLabel=&quot;Out&quot;/> <outfault ref=&quot;tns:QueryRequestRefused&quot; messageLabel=&quot;Out&quot;/> </operation> </interface>
  • 162. SPARQL Anfrage wird in einem Element vom Typ st:query-request verpackt Enthält einen Query String (Element query ) und
  • 163. 0 oder mehr RDF Dataset Beschreibungen Elemente default-graph-uri und named-graph-uri
  • 164. Dataset kann auch mit FROM (NAMED) im Query angegeben werden
  • 165. Bei Abweichungen müssen die Angaben im Protokoll verwendet werden Antwort erfolgt in einem Element vom Typ st:query-result Als SPARQL Result Document bei SELECT und ASK queries Element vbr:sparql Als RDF/XML für CONSTRUCT und DESCRIBE Element rdf:RDF Fehler als MalformedQuery und QueryRequestRefused
  • 166. SPARQL HTTP Bindings queryHttpGet und queryHttpPost für HTTP GET und POST
  • 167. Faults werden an HTTP Status codes gebunden: MalformedQuery -> HTTP 400: Bad request
  • 168. QueryRequestRefused -> HTTP 500: Internal Server Error queryHttpGet sollte immer verwendet werden außer in Fällen, in denen die URL-codierte Query an praktische Grenzen stößt
  • 169. Query wird im HTTP-Form-Parameter query übergeben Query String muss URL-encodiert sein
  • 170. Gilt gleichfalls für GET und POST Dataset kann mit Anfrageparametern default-graph-uri und named-graph-uri angegeben werden
  • 171. Über HTTP content negotiation kann erwünschtes Rückgabeformat für CONSTRUCT und DESCRIBE angegeben werden z.B.: text/turtle
  • 172. SPARQL – Protokoll - HTTP Beispiel PREFIX dc: < http://purl.org/dc/elements/1.1/ > SELECT ?book ?who WHERE { ?book dc:creator ?who } http://example.org/sparql/?query=PREFIX%20dc%3A%20%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%3E%20%0ASELECT%20%3Fbook%20%3Fwho%20%0AWHERE%20%7B%20%3Fbook%20dc%3Acreator%20%3Fwho%20%7D&default-graph-uri=http://www.example.org/graph1
  • 173. HTTP/1.1 200 OK Date: Fri, 06 May 2005 20:55:12 GMT Server: Apache/1.3.29 (Unix) PHP/4.3.4 DAV/1.0.3 Connection: close Content-Type: application/sparql-results+xml <?xml version=&quot;1.0&quot;?> <sparql xmlns=&quot; http://www.w3.org/2005/sparql-results #&quot;> <head> <variable name=&quot;book&quot;/> <variable name=&quot;who&quot;/> </head> <results distinct=&quot;false&quot; ordered=&quot;false&quot;> <result> <binding name=&quot;book&quot;><uri> http://www.example/book/book5 </uri></binding> <binding name=&quot;who&quot;><bnode>r29392923r2922</bnode></binding> </result> ... </results> </sparql> Query GET Request URL HTTP Response
  • 174. SPARQL SOAP Bindings Binding querySoap
  • 175. Verwendet HTTP POST zum Transport von Anfragen
  • 177. <binding name=&quot;querySoap&quot; interface=&quot;SparqlQuery&quot; type=&quot; http://www.w3.org/2006/01/wsdl/soap &quot; wsoap:version=&quot;1.2&quot;# wsoap:protocol=&quot; http://www.w3.org/2003/05/soap/bindings/HTTP &quot;> <fault ref=&quot;tns:MalformedQuery&quot; wsoap:code=&quot;soap:Sender&quot; /> <fault ref=&quot;tns:QueryRequestRefused&quot; wsoap:code=&quot;soap:Sender&quot; /> <operation ref=&quot;tns:query&quot; wsoap:mep=&quot;http://www.w3.org/2003/05/soap/mep/request-response&quot; /> </binding>
  • 178. SPARQL – Protokoll - SOAP Beispiel POST /services/sparql-query HTTP/1.1 Content-Type: application/soap+xml Accept: application/soap+xml, multipart/related, text/* User-Agent: Axis/1.2.1 Host: www.example SOAPAction: &quot;&quot; Content-Length: 438 <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <soapenv:Envelope xmlns:soapenv=&quot; http://www.w3.org/2003/05/soap-envelope/ &quot; xmlns:xsd=&quot; http://www.w3.org/2001/XMLSchema &quot; xmlns:xsi=&quot; http://www.w3.org/2001/XMLSchema-instance &quot;> <soapenv:Body><query-request xmlns=&quot; http://www.w3.org/2005/09/sparql-protocol-types/ #&quot;> <query>SELECT ?z {?x ?y ?z . FILTER regex(?z, 'Harry')}</query> </query-request></soapenv:Body></soapenv:Envelope> HTTP/1.1 200 OK Content-Type: application/soap+xml <?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?> <soapenv:Envelope xmlns:soapenv=&quot; http://www.w3.org/2003/05/soap-envelope/ &quot; xmlns:xsd=&quot; http://www.w3.org/2001/XMLSchema &quot; xmlns:xsi=&quot; http://www.w3.org/2001/XMLSchema-instance &quot;> <soapenv:Body><query-result xmlns=&quot; http://www.w3.org/2005/09/sparql-protocol-types/ #&quot;> <ns1:sparql xmlns:ns1=&quot;http://www.w3.org/2005/sparql-results#&quot;> <ns1:head><ns1:variable name=&quot;z&quot;/></ns1:head> <ns1:results distinct=&quot;false&quot; ordered=&quot;false&quot;> <ns1:result> <ns1:binding name=&quot;z&quot;> <ns1:literal>Harry Potter and the Chamber of Secrets</ns1:literal> </ns1:binding> </ns1:result> … </ns1:results></ns1:sparql></query-result></soapenv:Body></soapenv:Envelope> SOAP Request SOAP Response
  • 180. SPARQL – Upcoming Features Version 1.0 von SPARQL deckt nicht alles Erwünschte ab
  • 181. SPARQL soll schnell weiterentwickelt werden
  • 182. Unter http://www.w3.org/TR/sparql-features/ werden die zukünftigen Features von der SPARQL WG bekannt gegeben (Aktueller Entwurf vom 2. Juli 2009)
  • 183. Noch keine endgültige Spezifikation, aber trotzdem oft relevant
  • 184. Unterteilung in Required Features - Werden auf die ein oder andere Art mit hoher Wahrscheinlichkeit in der nächsten Version vorhanden sein
  • 185. Time permitting Features – Wenn genügend Zeit vorhanden ist, gehen diese Features in den Standard ein
  • 186. SPARQL – Upcoming Features Required features: Aggregatfunktionen
  • 191. Dienstbeschreibung Time-permitting features BGP Erweiterungen for entailment regimes (OWL, RDFS, RIF)
  • 193. Verbreitete SPARQL Funktionen (e.g. String maninpulation)
  • 196. SPARQL – Upcoming Features Aggregatfunktionen Erlauben Operationen wie Zählen, Bestimmung des numerischen Maximums/Minimums/Durchschnitts durch das Zusammenfassen von Spaltenwerten
  • 197. Anwendungsfälle z.B. in der Datenanalyse: Bestimmung der Anzahl von einander unterschiedlicher Ressourcen, die einem bestimmten Kriterium entsprechen
  • 198. Berechnung der Durchschnittsnote von Studenten gruppiert nach dem Regierungsbezirk
  • 199. Summierung der Wahlkampfspenden, gruppiert nach PLZ und Partei Muss im momentanen Standard durch externe Skripte realisiert werden
  • 200. Werden bereits zu unterschiedlichen Teilen von SPARQL Engines unterstützt: Redland -> COUNT()
  • 201. Jena ARQ -> COUNT(), SUM()
  • 202. Virtuoso -> AVG(), COUNT(), SUM(), MIN(), MAX(), +custom
  • 203. ARC -> COUNT(), MAX(), MIN(), AVG(), SUM()
  • 204. SPARQL – Upcoming Features Beispiele zu Aggregatfunktionen:
  • 205. SELECT COUNT(?person) AS ?alices WHERE { ?person :name &quot;Alice&quot; . } SELECT AVG(?value) AS ?average WHERE { ?good a :Widget ; :value ?value . }
  • 206. SPARQL – Upcoming Features Subqueries Manchmal ist es notwendig, die Resultate einer Anfrage an eine weitere Anfrage weiterzugeben
  • 207. Momentan muss man dazu Resultate der ersten Anfrage empfangen
  • 208. Mit speziellen Skripten verarbeiten
  • 209. Und sie dann für die zweite Anfrage verwenden Anwendungsfälle: Die 10 letzten Blogeinträge herausfinden, die von einem Autor verfasst worden sind
  • 210. Eine Liste von Leuten mit deren Freunden abfragen, mit jeweils nur einem Namen pro Person
  • 211. Die Anzahl eindeutiger Ergebnisse beschränken, anhand der Anzahl der Ressourcen anstatt anhand der Zahl der Lösungen Die genaue Syntax ist momentan noch nicht bestimmt
  • 212. SPARQL – Upcoming Features Beispiel zu Subqueries (wie in ARQ):
  • 213. SELECT ?person ?name WHERE { :Alice foaf:knows ?person . { SELECT ?name WHERE { ?person foaf:name ?name } LIMIT 1 } }
  • 215. Virtuoso unterstützt sowohl skalare Subqueries (an allen Stellen, an denen eine Variable auftreten kann) als auch Subqueries als abgeleitete Tabellen ARQ unterstützt eingebettete SELECTS (siehe oben)
  • 216. SPARQL – Upcoming Features Negation: Viele Aufgaben erfordern es zu überprüfen, ob bestimmte Triple in einem Graph vorkommen oder nicht.
  • 217. Die Abwesenheit von Triplen zu überprüfen ist “Negation by failure”
  • 218. Auf Umwegen auch in SPARQL 1.0 möglich: SELECT ?name WHERE { ?x foaf:givenName ?name . OPTIONAL { ?x foaf:knows ?who } . FILTER (!BOUND(?who)) }
  • 219. Anwendungsfälle: Alle Leute identifizieren, die niemanden kennen oder eine bestimmte Eigenschaft nicht besitzen
  • 220. Jeden Inhalt identifizieren, der in einem bestimmten Review Prozess noch keinem Lektor zugeordnet worden ist
  • 221. Kunden identifizieren, die ein bestimmtes Objekt nicht erstanden haben Realisierung entweder mit neuem Schlüsselwort oder mit Filterfunktion
  • 222. SPARQL – Upcoming Features Beispiele: (1. mit SeRQL MINUS und 2. mit UNSAID ) SELECT x FROM {x} foaf:givenName {name} MINUS SELECT x FROM {x} foaf:givenName {name} ; foaf:knows {who}
  • 223. SELECT ?x WHERE { ?x foaf:givenName ?name UNSAID { ?x foaf:knows ?who } } Existierende Implementierungen: RDF::Query -> UNSAID Syntax
  • 224. SeRQL -> MINUS Operator
  • 225. Jena ARQ -> NOT EXISTS (mit UNSAID als Alias) Vermutlich wird es UNSAID Bereits für Version 1.0 vorgeschlagen, aber nicht realisiert worden
  • 226. SPARQL – Upcoming Features Project Expressions Möglichkeit, die Resultate von Expressions an Variablen zu binden anstatt von lediglich RDF Termen
  • 227. Eine PE kann sein: Eine Variable, eine konstante URI, ein konstantes Literal, ein beliebiger Ausdruck (inkl. Funktionsaufrufe) über Variablen oder Konstanten
  • 228. Bei Funktionen sind auch benutzerdefinierte denkbar
  • 229. Anwendungsfälle Die Gesamtkosten einer Position in einer Bestellung als Produkt von zwei Variablen: ?unit_cost * ?quantity
  • 230. Verwendung von SPARQL Accessoren, um die in einem Dataset verwendeten Sprachen herauszufinden: LANG(?o)
  • 231. Rückliefern berechneter Werte, wie etwa der aktuelle Wochentag: ex:dayOfTheWeek(ex:Today())
  • 232. Stringverarbeitung: ex:substring(?url, 8, ex:length(?url)) In Verbindung mit Subqueries ein mächtiges Instrument für alle möglichen Anwendungsfälle
  • 233. SPARQL – Upcoming Features Beispiele: SELECT ?name (?age > 18) AS over18 WHERE { ?person :name ?name ; :age ?age . }
  • 234. SELECT fn:string-join(?givenName, ' ', ?surname) AS ?fullName WHERE { ?person foaf:givenname ?givenName ; foaf:surname ?surname ; foaf:interest :trees . }
  • 235. CONSTRUCT { ?x foaf:name ?fullName } WHERE { { SELECT fn:string-join(?gn, &quot; &quot;, ?sn) AS ?fullName WHERE { foaf:givenname ?gn ; foaf:surname ?sn . } } } Existierende Implementierungen Redland, ARQ (mit etwas anderer Syntax), Virtuoso
  • 236. SPARQL – Upcoming Features SPARQL/Update Spracherweiterung, um Veränderungen an einem Graphen auszudrücken
  • 237. Lehnt sich an SPARQL Syntax an Wer SPARQL bereits kennt, soll sich SPARQL/UPDATE schnell aneignen können Folgende Operationen sollen definiert werden: Einfügen neuer Triple in einen Graph
  • 240. Im Store einen neuen Graph erstellen
  • 241. Einen im Store vorhandenen Graph löschen Wurde als Member Submission ins W3C eingebracht Stammt ursprünglich vom Jena/ARQ Projekt Jedoch einige Bedenken vorhanden: Sicherheitsprobleme, Transaktionssicherheit, Wunsch auch nach Operationen für das Modifizieren von Daten ...
  • 242. SPARQL – Upcoming Features Beispiele: PREFIX dc: < http://purl.org/dc/elements/1.1/ > INSERT DATA { <http://example/book3> dc:title &quot;A new book&quot; ; dc:creator &quot;A.N.Other&quot; .}
  • 243. D ELETE { ?book ?p ?v } WHERE { ?book dc:date ?date . FILTER ( ?date < &quot;2000-01-01T00:00:00&quot;^^xsd:dateTime ) ?book ?p ?v } } Existierende Implementierungen: Jena/ARQ
  • 245. SPARQL – Upcoming Features Time-permitting features: Basic Graph Pattern Erweiterungen für Vererbungsordnungen Durch erweiterte Semantik in z.B. RDFS und OWL werden beim Graphvergleich weitere Lösungen als nur die direkten möglich Eigenschaftspfade Viele Anfragen an RDF-Graphen erfordern das Traversieren hierarchischer Datenstrukturen mit undefinierter Tiefe Alle Elemente einer RDF-Collection zurückgeben
  • 246. Alle Namen meiner Vorfahren (alle ex:mother und ex:father)
  • 247. Alle direkte und inderekte Oberklassen einer rdfs:Class Häufig verwendete SPARQL Funktionen Viele Implementierungen bieten neben den von SPARQL vorgeschriebenen noch weitere Funktionen. Ein Teil davon soll in den Standard übernommen werden Basic Federated Queries Gleichzeitiges Abfragen mehrerer SPARQL Endpoints Dienstbeschreibung SPARQL Endpunkte sollen die von ihnen unterstützten Fähigkeiten an Anfragende melden können Überarbeitung der SPARQL Syntax Vereinfachungen wie Kommas zwischen Variablen und Ausdrücken in SELECTS
  • 248. SPARQL – Upcoming Features
  • 250. SPARQL Literatur: Buch “Semantic Web Grundlagen”, Springer Verlag 2008 Pascal Hitzler, Markus Krötzsch, Sebastian Rudolph, York Sure ISBN: 978-3-540-33993-9
  • 251. W3C: SPARQL Query Language for RDF http://www.w3.org/TR/rdf-sparql-query/
  • 252. W3C: SPARQL Protocol for RDF http://www.w3.org/TR/rdf-sparql-protocol/
  • 253. W3C: SPARQL Query Results XML Format http://www.w3.org/TR/rdf-sparql-XMLres/
  • 254. W3C: SPARQL New Features and Rational http://www.w3.org/TR/sparql-features