В предыдущем вопросе комментарий предполагает, что
select ?x ?y where {
{?x rdf:type ex:someType}
{?x ex:someProperty ?y}
}
похож (не идентичен) на:
select ?x ?y where {
?x rdf:type ex:someType.
?x ex:someProperty ?y.
}
Используются одинаковые тройные шаблоны.Однако первый запрос содержит два BGP (каждый в шаблоне группы), а второй содержит один BGP (без шаблонов группы).Алгебра для первого запроса - JOIN
между двумя BGPs
, а алгебра второго - только BGP
.
Алгебра первого запроса (Apache Jena)
(project (?x ?y)
(join
(bgp (triple ?x <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.example.com/someType>))
(bgp (triple ?x <http://www.example.com/someProperty> ?y))))
Алгебра второго запроса (Apache Jena):
(project (?x ?y)
(bgp
(triple ?x <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.example.com/someType>)
(triple ?x <http://www.example.com/someProperty> ?y)
))
В исходном вопросе ответ предполагает, что они не идентичны, и утверждает,
- Если вложение SPARQLподдерживается, то отдельные {} оцениваются отдельно.
- если вы используете метки bnodes в запросах, то ограничения пересекают {}
- , если вы добавляете ФИЛЬТРЫ, то они не применяются за пределами {}, в которые они записаны.
- егодругое абстрактное синтаксическое дерево.Все незначительные моменты, но которые могут вступить в игру позже.
Теперь давайте отложим пустые узлы (2) и различные синтаксические деревья (4) и спросим следующее: Дадут ли два запроса в любом случае разные результаты из-за filter (3) или entailment (1) ?Я не вижу никакой возможности для этого.Ну, те, кто придерживается другого мнения, не могли бы вы, , пожалуйста, показать на каком-нибудь примере?