SPARQL代数:如果任何三元组不存在,则从命名图中询问
以这两个命名图为例:SPARQL代数:如果任何三元组不存在,则从命名图中询问,sparql,semantic-web,linked-data,triples,named-graphs,Sparql,Semantic Web,Linked Data,Triples,Named Graphs,以这两个命名图为例: # graph :yesterday :Foo :likes :Bar ; :likes :Qux . # graph :today :Foo :likes :Bar ; :likes :Baz . 现在,假设您想找出graph:Dayed中的三元组中是否有一个不在graph:today中。您将如何询问此查询 ASK FROM NAMED :yesterday FROM NAMED :today { GRAPH :yeste
# graph :yesterday
:Foo
:likes :Bar ;
:likes :Qux .
# graph :today
:Foo
:likes :Bar ;
:likes :Baz .
现在,假设您想找出graph:Dayed
中的三元组中是否有一个不在graph:today
中。您将如何询问此查询
ASK
FROM NAMED :yesterday
FROM NAMED :today
{
GRAPH :yesterday {
?s ?p ?o .
...
}
}
SPARQL有两个否定操作:使用最自然的一个。当我阅读问题描述时,它读起来更像下面的第一个,但在这个问题的情况下,它们非常相似。当模式的一部分或另一部分不匹配或没有共同的变量时,它们的效果不同
不存在
测试是否存在模式(也存在存在
)。它是应用于第一个模式的每个解决方案的过滤器。这就像一个嵌套的ASK
,其中变量也被替换为过滤器的传入变量
前缀:
选择*{
图表:昨天{s?p?o}
筛选器不存在{图:今天{s?p?o}
}
减号
执行两个模式(左侧和右侧),然后返回左侧没有匹配行的行。这是一种反加入
前缀:
选择*{
图表:昨天{s?p?o}
负{图:今天{s?p?o}
}
对于这两种情况,我得到:
------------------------
| s | p | o |
========================
| :Foo | :likes | :Qux |
------------------------
触发器:
@前缀:。
:昨天{
:Foo
:喜欢:酒吧;
字体喜欢:Qux。
}
:今天{
:Foo
:喜欢:酒吧;
:喜欢:Baz。
}
SPARQL有两种否定操作:使用您认为最自然的操作。当我阅读问题描述时,它读起来更像下面的第一个,但在这个问题的情况下,它们非常相似。当模式的一部分或另一部分不匹配或没有共同的变量时,它们的效果不同
不存在
测试是否存在模式(也存在存在
)。它是应用于第一个模式的每个解决方案的过滤器。这就像一个嵌套的ASK
,其中变量也被替换为过滤器的传入变量
前缀:
选择*{
图表:昨天{s?p?o}
筛选器不存在{图:今天{s?p?o}
}
减号
执行两个模式(左侧和右侧),然后返回左侧没有匹配行的行。这是一种反加入
前缀:
选择*{
图表:昨天{s?p?o}
负{图:今天{s?p?o}
}
对于这两种情况,我得到:
------------------------
| s | p | o |
========================
| :Foo | :likes | :Qux |
------------------------
触发器:
@前缀:。
:昨天{
:Foo
:喜欢:酒吧;
字体喜欢:Qux。
}
:今天{
:Foo
:喜欢:酒吧;
:喜欢:Baz。
}
当我试图弄清楚为什么我的过滤器不存在块没有过滤掉时,我现在觉得有点愚蠢,因为我忘记了正确命名的图形:Bar
。感谢您抽出时间来回答,我希望其他人在将来会发现这一点有用。当我试图找出我的过滤器不存在的原因时,忘记了正确命名的图形,现在感觉有点愚蠢。:Bar
。无论如何,谢谢你花时间回答,我希望其他人在将来会觉得这很有用。