Есть ли способ использовать переменную, не возвращая ее с помощью SPARQL select *?

Есть ли способ использовать своего рода переменную-заполнитель со SPARQL, не возвращая ее при использовании SELECT * ?

Например:

SELECT * WHERE { 
   ?s dcterms:title ?title; 
      foaf:person ?name. 
   ?s2 :inProject ?s. 
}

Где бы я не хотел возвращать переменную ?s, только переменные ?title, ?name и ?s2, оставляя SELECT *.

Я понимаю, что могу ограничить результаты выбора, используя SELECT ?title ?name ..., но мне просто любопытно, есть ли какое-то обозначение для переменных-заполнителей или какой-то способ управлять этим.


РЕДАКТИРОВАТЬ:

Я понимаю, что в некоторых случаях для этого можно использовать пустые узлы, например:

SELECT * WHERE { 
   _:s dcterms:title ?title; 
       foaf:person ?name. 
   ?s2 :inProject _:s. 
}

Однако не вызывает ли это проблем, поскольку пустые узлы нельзя использовать в базовых шаблонах графа? Например, это ломается в случае:

SELECT * WHERE { 
   _:s dcterms:title ?title; 
       foaf:person ?name. 
   OPTIONAL { ?s2 :inProject _:s. }
}

Спасибо!


person Nick Bartlett    schedule 21.02.2013    source источник
comment
Дублирование вопроса по адресу answers.semanticweb.com/questions/21173/   -  person Jeen Broekstra    schedule 22.02.2013
comment
(Звезда Клини) Когда вы пишете select * ..., это не звезда Клини. Звезда Клини означает ноль или более повторений чего-либо. Например, (ab)* соответствует "ababab", "ab" и "". В select * * — это просто заурядный подстановочный знак.   -  person Joshua Taylor    schedule 23.10.2014
comment
@JoshuaTaylor, ты очень прав.   -  person Nick Bartlett    schedule 24.10.2014


Ответы (1)


Для переменных, относящихся к одному шаблону, да, используйте синтаксис переменной пустого узла, как вы продемонстрировали в своем вопросе.

В общем случае нет, если вы используете переменную, то SELECT * вернет ее.

Одним из возможных обходных путей является использование подзапросов, в которых вы перечисляете переменные и пропускаете переменные, которые вам не нужны, например.

SELECT * WHERE
{ 
  {
    SELECT ?title ?name ?s2 WHERE 
    {
      ?s dcterms:title ?title; 
      foaf:person ?name. 
      OPTIONAL{ ?s2 :inProject ?s. }
    }
  }
}

Но тогда я предполагаю, что это именно то, чего вы пытаетесь избежать, поскольку вы все равно перечисляете переменные.

person RobV    schedule 21.02.2013