План физических запросов Jena TDB с несколькими предложениями FROM
Я пытаюсь выяснить, как Jena TDB обрабатывает запросы SPARQL с несколькими FROM
пункты на уровне физического плана запроса. Я хотел бы знать, как Jena TDB обрабатывает выполнение запроса по различным графикам.
Я провел несколько небольших экспериментов и посмотрел на алгебру запросов, однако мне не ясно, как FROM
пункты влияют на алгебру. Похоже, что предложения FROM отбрасываются в алгебре. Я ожидаю, что алгебра оценивается по объединению графов, но я хотел бы быть уверен.
У меня есть следующие четырехугольники:
<http://example.com/book2/> <http://example.com/price> "5"^^<http://www.w3.org/2001/XMLSchema#integer> <http://example.com/A> .
<http://example.com/book2/> <http://example.com/title> "Lord of the Rings" <http://example.com/B> .
и следующий запрос:
SELECT (AVG(?price) as ?total)
FROM <http://example.com/A>
FROM <http://example.com/B>
WHERE {
?book <http://example.com/price> ?price .
?book <http://example.com/title> ?title .
}
./tdbquery --loc test --query test.sparql --explain
Алгебра запросов выглядит следующим образом:
INFO exec :: ALGEBRA
(project (?total)
(extend ((?total ?.0))
(group () ((?.0 (avg ?price)))
(bgp (triple ?book <http://example.com/price> ?price)))))
Когда я выполняю запрос к данным, я получаю ожидаемый результат.
1 ответ
FROM
(а также FROM NAMED
) на самом деле не являются частью запроса, но должны указывать, какой набор данных должен быть запрошен. Эти пункты не изменяют то, что будет делать запрос, а только то, над чем он работает, поэтому вы не видите их в алгебре.
То, что конкретный процессор делает с этой информацией, варьируется:
- некоторые процессоры будут создавать запрашиваемый набор данных (даже загружая данные)
- но также распространено явное предоставление набора данных в API (например,
query(query_string, dataset)
) в этом случае процессор будет игнорировать его, поскольку был предоставлен набор данных. - набор данных также может быть предоставлен в запросе протокола SPARQL, и в этом случае, как и при вызове API, процессор будет игнорировать
NAMED
пункт.
Теперь база данных TDB является набором данных, но TDB имеет специальную функцию, называемую "динамические наборы данных", которая использовала FROM
а также FROM NAMED
для формирования действующего под-набора данных, ограничивая графики, запрашиваемые в FROM
статьи.