如果我运行此查询
SELECT ?a ?b ?c ?g ?maxtrust
WHERE
{
{
SELECT ?a (MAX(?t) AS ?maxtrust)
WHERE{
GRAPH ?g { ?a a gr:productorservicemodel }
GRAPH <uri:trust> { ?g exepo:trust ?t}
}
GROUP BY ?a
}
GRAPH ?g {?a ?b ?c}
GRAPH <uri:trust> { ?g exepo:trust ?maxtrust}
}
我得到这个回应:
| a | b | c | g | maxtrust |
|-----------|------------------|--------------------------|-----------|----------|
| uri:prodA | rdf:type | gr:ProductOrServiceModel | uri:alice | 1.0 |
| uri:prodA | exe:EarCoupling | Intraaural | uri:alice | 1.0 |
| uri:prodA | exe:WearingStyle | In-ear | uri:alice | 1.0 |
| uri:prodB | rdf:type | gr:ProductOrServiceModel | uri:bob | 0.5 |
| uri:prodB | exe:EarCoupling | Extraauricolare | uri:bob | 0.5 |
因为我只对 和 之间的关系感兴趣,所以 a
我 g
猜这个查询会成功:
SELECT ?a ?g
WHERE
{
{
SELECT ?a (MAX(?t) AS ?maxtrust)
WHERE{
GRAPH ?g { ?a a gr:productorservicemodel }
GRAPH <uri:trust> { ?g exepo:trust ?t}
}
GROUP BY ?a
}
GRAPH ?g {?a ?b ?c}
GRAPH <uri:trust> { ?g exepo:trust ?maxtrust}
}
我希望得到这样的结果:
| a | g |
|-----------|-----------|
| uri:prodA | uri:alice |
| uri:prodA | uri:alice |
| uri:prodA | uri:alice |
| uri:prodB | uri:bob |
| uri:prodB | uri:bob |
相反,我得到了这个:
| a | g |
|-----------|-----------|
| uri:prodA | uri:alice |
| uri:prodA | uri:alice |
| uri:prodA | uri:alice |
到底是怎么回事?我对 SPARQL 逻辑的理解完全错误吗?
编辑:更多信息
数据集是:
爱丽丝 ( GRAPH uri:alice
):
uri:prodA
a gr:ProductOrServiceModel;
exe:EarCoupling "Intraaural"^^xsd:string ;
exe:WearingStyle "In-ear"^^xsd:string .
鲍勃(GRAPH uri:bob
):
uri:prodA
a gr:ProductOrServiceModel;
exe:EarCoupling "Intraauricolare"^^xsd:string .
uri:prodB
exe:WearingStyle "extraauricolare"^^xsd:string .
信任(GRAPH uri:trust
):
uri:alice exe:trust "1.0"^^xsd:float .
uri:bob exe:trust "0.5"^^xsd:float .
我正在使用 stardog 作为三重商店