План физических запросов 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 статьи.

Другие вопросы по тегам