SPARQL select не работает должным образом

Если я выполню этот запрос

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 как триплет

1 ответ

Если вы заинтересованы только в отношении между ?a а также ?g Ваш запрос может быть намного проще:

select distinct ?a ?g where {
  graph ?g { ?a [] [] }
}
Другие вопросы по тегам