このクエリを実行すると
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 をトリプルストアとして使用しています