Фильтр в запросе sparql не работает при использовании с minus

У меня есть запрос SPARQL, в котором я хочу выбрать все реки, которые не протекают через штаты Миссисипи или Нью-Йорк. Первый работает нормально, но второй выбирает все реки. Может кто-нибудь объяснить почему

запрос 1

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

    SELECT  ?y ?k
    WHERE
    {
      ?y owl:flow_through ?k
        MINUS
      {
          {?y owl:flow_through <file://c/fakepath/geo.owl#Newyork_state>}
        UNION 
      {?y owl:flow_through <file://c/fakepath/geo.owl#Mississippi_state>}
        
      }

запрос 2

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT  ?y ?k
WHERE
{
  ?y owl:flow_through ?k
    MINUS
  {
   
   FILTER (?k IN (<file://c/fakepath/geo.owl#Newyork_state>,
                  <file://c/fakepath/geo.owl#Alaska_state>))  
  }
}
FILTER основан на результате BGP, который в вашем случае пуст внутри MINUS. Вместо этого вы должны использовать VALUES для предоставления встроенных данных, то есть VALUES {<file://c/fakepath/geo.owl#Newyork_state> <file://c/fakepath/geo.owl#Alaska_state>}
UninformedUser 26.10.2018 08:48

или, что еще проще, просто удалите MINUS и просто используйте FILTER с NOT: PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT ?y ?k WHERE { ?y owl:flow_through ?k FILTER (?k NOT IN (<file://c/fakepath/geo.owl#Newyork_state>,<file://c/fakepat‌​h/geo.owl#Alaska_sta‌​te>)) }

UninformedUser 26.10.2018 08:49
0
2
194
0

Другие вопросы по теме