2016-02-25 1 views
3

У меня есть запрос, который включает в себя множество подзапросов, которые также содержат некоторые подзапросы. Я хочу знать объем предложения values ​​в запросе SPARQL. Сходит ли он и с подзапросами?Какова область значений в столбце запроса SPARQL

Если я определил предложение значений в подзапросе и использовал одну и ту же переменную в запросе отцов, будет ли эта переменная иметь только значения, указанные в запросе на сынок? (? Как насчет наоборот)

Я смотрел на SPARQL 1.1 spec, но все, что я нашел, состоит в следующем, который не появляется, чтобы ответить на мой вопрос:

А Значение блока данных могут появиться в шаблон запроса или в конце запроса SELECT, включая подзапрос.

ответ

7

Подзапросы SPARQL оцениваются от самого внутреннего до внешнего. A значения блок во внешнем запросе недоступен для внутренних запросов. В качестве примера:

select ?x ?y ?z { 
    values ?x { "x" } 

    { select (?x as ?y) ("z" as ?z) {} } 
} 
----------------- 
| x | y | z | 
================= 
| "x" | | "z" | 
----------------- 

Если значение х были доступны во внутреннем запросе, то у будет иметь значение «х», но это не так? ,

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

select ?x ?y { 
    { 
    select ?x { 
     values ?x { "x" } 
     values ?y { "y" } 
    } 
    } 
} 
----------- 
| x | y | 
=========== 
| "x" | | 
----------- 

Официальный ответ в спецификации, но не в части около значения. Он находится в 18.2.1 Variable Scope. Это не самая простая таблица, но следует отметить такие правила, как:

Группа {P1 P2 & hellip; }: v - это область видимости, если она находится в области видимости в одном или нескольких P1, P2, & hellip;

, что означает, что множество переменных в области видимости для шаблона { ... } определяется как объединение переменных в области видимости вещей, которые появляются внутри в. Переменные получить «прошел» наружу к их вмещающим формам , А не наоборот.

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

select ?x ?y ?yy { 
    { select (?y as ?yy) {} } 
} 
values (?x ?y) { (1 2) } 
-------------- 
| x | y | yy | 
============== 
| 1 | 2 | | 
-------------- 
Смежные вопросы