Можно ли использовать операторы if, чтобы определить, какой графовый шаблон использовать в предложении where в SPARQL? - PullRequest
1 голос
/ 21 апреля 2020

Так что я довольно новичок в SPARQL. Я знаю, что если операторы не могут быть использованы таким образом в SPARQL, но мне было интересно, есть ли какой-нибудь способ сделать то, что я хочу сделать, sh, который заключается в сопоставлении с другим графовым шаблоном на основе значения привязки.

SELECT ...
WHERE {
    // ...set ?x to some count
    IF (?x = 0) {
       // series of graph patterns
    }
    ELSE {
       // different series of graph patterns
    }
}

Большинство примеров, которые я видел, просто состояли из установки значения специфической привязки c на основе оператора if, что я не пытаюсь сделать. Графовый шаблон в else является дорогим в вычислительном отношении, и я не хочу его запускать, если в этом нет необходимости.

1 Ответ

1 голос
/ 22 апреля 2020

Вы не можете сделать это так, как показано в вашем примере, но вы можете использовать шаблон UNION, как показано ниже:

SELECT ...
WHERE {
  {
     // ... set ?x to some value
     // series of graph patterns
     FILTER(?x = 0)
  }
UNION
  {
     // ... set ?x to some value
     // different series of graph patterns
     FILTER(?x != 0)
  }
}

Обратите внимание, что если вы хотите, чтобы фильтр работал внутри шаблонов подграфа, вы * необходимо иметь ?x внутри шаблона. Если механизм SPARQL хорошо оптимизирован, фильтр должен быть оценен до сопоставления с графическим шаблоном, но вы также можете поиграть с размещением фильтра, например, между связыванием? X и графическим шаблоном.

...