2012-10-24 12 views
5

Ich bin derzeit etwas sparql lernen, und ich bin mit einigen Aussagen auf der folgenden Webseite zu üben:sparql Pattern-Matching

http://data.semanticweb.org/snorql

aber ich versuche, die folgende Anweisung auszuführen:

SELECT DISTINCT ?author WHERE { ?paper swrc:author ?author FILTER(regex(?paper, "2006")) . } . 

Es heißt, dass es keine Ergebnisse gibt. Wenn ich die folgende Abfrage (ohne Filter) laufen:

SELECT DISTINCT ?paper WHERE { ?paper swrc:author ?author . } 

ich sehen, dass es mit 2006 einige Papiere in seiner Zeichenfolge. Ich frage mich, warum die erste Abfrage diese Einträge nicht zurückgibt, wenn 2006 in der Papierzeichenfolge steht.

Könnte mir jemand dabei helfen?

Antwort

7

Die für ?paper zurückgegebenen RDF-Terme sind alle URIs. Die Filterfunktion REGEX funktioniert nicht auf URIs; Es funktioniert nur mit Strings. Sie können einen URI mithilfe der Funktion STR(…) in eine Zeichenfolge umwandeln. Dies funktioniert:

FILTER(regex(STR(?paper), "2006")) 
+3

Man könnte auch speziell für ein Jahr abfragen, um eine Eigenschaft, die in der SWRC Ontologie mit 'DISTINCT Papier SELECT Jahr WHERE {Papier SWRC:? Autor Autor. ? Papier swrc: Jahr? Jahr} '. Leider scheinen die Papiere von 2006 diese Eigenschaft zu haben. – toniedzwiedz

+0

Das war der Anaswer, den ich suchte, danke! :) – Devos50