2012-10-24 13 views
5

Attualmente sto imparando un po 'di SPARQL e sto praticando sul seguente sito web con alcune dichiarazioni:SPARQL pattern matching

http://data.semanticweb.org/snorql

Tuttavia, sto cercando di eseguire la seguente istruzione:

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

Dice che non ci sono risultati. Quando eseguo la seguente query (senza filtro):

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

vedo che ci sono alcuni documenti con il 2006 in esso di stringa. Mi chiedo perché la prima query non restituisca queste voci dove c'è il 2006 nella stringa? Paper.

Qualcuno potrebbe aiutarmi con questo?

risposta

7

I termini RDF restituiti per ?paper sono tutti URI. La funzione filtro REGEX non funziona sugli URI; funziona solo su stringhe. È possibile trasformare un URI in una stringa utilizzando la funzione STR(…). Ciò funzionerà:

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

Si potrebbe anche interrogare specificamente per un anno utilizzando una proprietà presente nel dell'ontologia SWRC 'SELECT DISTINCT di carta l'anno dove {carta SWRC:???? Autore autore. ? Paper swrc: year? Year} '. Purtroppo i documenti del 2006 sembrano mancare di questa proprietà. – toniedzwiedz

+0

Quello era l'anaswer che stavo cercando, grazie! :) – Devos50