2015-02-16 3 views
0

Я хочу сделать запрос в SPARQL, возвращающий товар 2007 года Я попытался это:года() в SPARQL

String requete7String = 
      "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> " 
      + "PREFIX dc: <http://purl.org/dc/elements/1.1/> " 
      + "PREFIX rss: <http://purl.org/rss/1.0/> " 
      + "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> " 
      + "SELECT ?item " 
      + "FROM <http://www.w3.org/2001/sw/SW-FAQ-feed.rdf> " 
      + "WHERE { " 
      + " ?item rdf:type rss:item . " 
      + " ?item dc:date ?dateString ." 
      + " bind(strdt(?dateString, xsd:dateTime) as ?date) " 
      + " FILTER (year(?date) = 2007) " 
      + "}"; 

Но это ничего не возвращает. Строка FILTER (year(?date) = 2007) не работает. Тем не менее, я видел в документе SPARQL documentaiton, что функция year() принимает дату DateTime и возвращает целое число, поэтому вы можете сказать мне, почему это может не сработать?

+0

Не видя данных, никто из нас не может точно сказать. Мое первоначальное предположение заключалось в том, что DateString не является легальной лексической формой для xsd: dateTime, поэтому функция дала ошибку.Если вы удалите фильтр и просто посмотрите на значения? dateString, что вы получите? –

+0

Если я удалю «линию фильтра» и покажут дату и дату dateString: он возвращает: http://pastebin.com/z8FEW2KJ –

+0

И если я добавлю «bind (year (? date) as? year)»: http://pastebin.com/mx7SfiP1. Функция year() ничего не возвращает. , –

ответ

3

2007-04-12T00: 00 + 00: 00 "^^ xsd: dateTime не является законом xsd: dateTime (часть времени должна быть 00:00:00, а не 00:00). юридическое значение и год (незаконный) является ошибкой, а фильтр является ложным.