SPARQL 获取相交集
SPARQL getting an intersecting set
我关注数据:
:A :hasCity City1
:A :hasCity City2
:A :hasCity City3
:A :hasCity City4
:K :hasCity City1
:K :hasCity City2
......
我试图找到所有包含城市 1 和 2 的主题,所以我编写了查询:
select ?s
{
?s :hasCity ?city.
FILTER (?city =:City1 && ?city=:City2)
}
但是,我没有得到任何结果。
如果我这样做:
select ?s
{
?s :hasCity ?city.
FILTER (?city =:City1)
}
我得到 A、K、Q、M,如果我这样做:
select ?s
{
?s :hasCity ?city.
FILTER (?city =:City2)
}
我回来了A,K,L
所以当我使用 && 运算符时,我应该取回 A&K,对吗?我错过了什么吗?
你需要做的是询问共享同一组对象的所有主题,在相同的 属性 上使用三重模式。您最终会得到一个非常简单的查询:
SELECT ?s {?s :hasCity :City1, :City2}
使用:hasSubject
,如果你想保留单行查询,你只需要属性的倒数:
SELECT ?s { ?s ^:hasSubject :City1, :City2}
使用 =
时,您需要确保将苹果与苹果进行比较。例如 ?a = ?b
或 str(?a) = str(<b>)
.
我关注数据:
:A :hasCity City1
:A :hasCity City2
:A :hasCity City3
:A :hasCity City4
:K :hasCity City1
:K :hasCity City2
......
我试图找到所有包含城市 1 和 2 的主题,所以我编写了查询:
select ?s
{
?s :hasCity ?city.
FILTER (?city =:City1 && ?city=:City2)
}
但是,我没有得到任何结果。
如果我这样做:
select ?s
{
?s :hasCity ?city.
FILTER (?city =:City1)
}
我得到 A、K、Q、M,如果我这样做:
select ?s
{
?s :hasCity ?city.
FILTER (?city =:City2)
}
我回来了A,K,L
所以当我使用 && 运算符时,我应该取回 A&K,对吗?我错过了什么吗?
你需要做的是询问共享同一组对象的所有主题,在相同的 属性 上使用三重模式。您最终会得到一个非常简单的查询:
SELECT ?s {?s :hasCity :City1, :City2}
使用:hasSubject
,如果你想保留单行查询,你只需要属性的倒数:
SELECT ?s { ?s ^:hasSubject :City1, :City2}
使用 =
时,您需要确保将苹果与苹果进行比较。例如 ?a = ?b
或 str(?a) = str(<b>)
.