1

如果我运行此查询

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      |

因为我只对 和 之间的关系感兴趣,所以 ag猜这个查询会成功:

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 作为三重商店

4

1 回答 1

0

如果您只对两者之间的关系感兴趣,那么?a?g的查询可能会更简单:

select distinct ?a ?g where {
  graph ?g { ?a [] [] }
}
于 2015-05-10T17:28:09.030 回答