Есть ли способ использовать переменную, не возвращая ее с помощью 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. }
}
Спасибо!
1 ответ
Для переменных, ограниченных одним шаблоном, да, используйте синтаксис пустой переменной узла, как вы продемонстрировали в своем вопросе
В общем случае нет, если вы используете переменную, то SELECT *
вернет это.
Одним из возможных способов решения этой проблемы является использование подзапросов, в которых вы вносите список переменных и пропускаете переменные, которые вам не нужны, например
SELECT * WHERE
{
{
SELECT ?title ?name ?s2 WHERE
{
?s dcterms:title ?title;
foaf:person ?name.
OPTIONAL{ ?s2 :inProject ?s. }
}
}
}
Но потом я предполагаю, что это именно то, чего вы пытаетесь избежать, так как в конечном итоге вы в конечном итоге перечисляете переменные.