我在RDF知识库中有多个图表
for example
<123> <hasValue> "23" <graph1>
<234> <hasValue> "47" <graph1>
<374> <hasValue> "23" <graph1>
-----------
----------
<456> <hasFeature> "50" <graph2>
<244> <hasFeature> "23" <graph2>
<123> <hasFeature> "23" <graph2>
---------------------
现在我想运行SPARQL查询来获得两个图中常见的结果。
假设如果我对一个图运行以下查询,我得到以下结果
SELECT ?subject
FROM Named <http://www.xyz.com/namespace/graph1>
WHERE {GRAPH ?graph
{?subject prefix:hasValue "23" .}}
<123>
<374>
---
---
---
如果对graph2运行以下第二个查询,我会得到以下内容
SELECT ?subject
FROM Named <http://www.xyz.com/namespace/graph2>
WHERE {GRAPH ?graph
{?subject prefix:hasFeature "23" .}}
<244>
<123>
-----
但是我想要主题&lt; 123&gt;这在两个查询中都很常见。我们可以通过任何方式组合两个查询来获得两个查询中常见的唯一主题。 提前谢谢。
答案 0 :(得分:4)
是的,加入SPARQL只是说明具有公共变量的多个模式。所以我们大多只能将你的两个问题一起剪掉并过去:
SELECT ?subject
FROM NAMED <http://www.xyz.com/namespace/graph1>
FROM NAMED <http://www.xyz.com/namespace/graph2>
WHERE
{
GRAPH <http://www.xyz.com/namespace/graph1>
{
?subject prefix:hasValue "23" .
}
GRAPH <http://www.xyz.com/namespace/graph2>
{
?subject prefix:hasFeature "23" .
}
}
请注意,由于您现在需要单独查询这两个图表,因此我们需要为每个GRAPH
子句明确命名图表。我们不能只使用单个GRAPH ?graph
模式,因为它会单独匹配每个命名图形,并将结果组合在一起,而这些结果没有您想要的语义。
使用此查询,两个图形的结果现在将连接在一起,因此您只能获得两个图形中模式匹配的结果。