Используйте COUNT внутри функции CONSTRUCT в SPARQL

Я пытаюсь написать SPIN-правило, которое будет подсчитывать количество входящих ссылок и устанавливать это число как значение свойства. Например, подсчитайте количество проблем, возникших на конкретной машине. Поэтому мне нужно подсчитать количество входящих ссылок типа rdfs:occuredOn (домен: Issue, диапазон: Machine).

CONSTRUCT {
?machine rdfs:numberOfIssues ?n .
}

WHERE {
?machine a ex:Machine .
?issue a ex:Issue .
?issue ?r ?machine .
(COUNT(?r) AS ?n) //Error
}       

Заранее спасибо!


person Grapheneer    schedule 27.08.2017    source источник
comment
Я не понимаю, почему вы используете префиксы rdfs и owl для своих собственных сущностей.   -  person UninformedUser    schedule 27.08.2017
comment
Я на самом деле нет, думал, что это будет легче читать ..   -  person Grapheneer    schedule 27.08.2017
comment
Я предлагаю изменить префиксы rdfs: и owl: в вашем примере на ex:   -  person TallTed    schedule 28.08.2017


Ответы (1)


Разрешен только GroupGraphPattern, т. е. вы должны использовать суб-SELECT запрос в предложении WHERE:

CONSTRUCT 
  { 
    ?machine rdfs:numberOfIssues ?n .
  }
WHERE
  { { SELECT  ?machine (COUNT(?r) AS ?n)
      WHERE
        { ?machine  a  owl:Machine .
          ?issue    a  owl:Issue ;
                    ?r        ?machine
        }
      GROUP BY ?machine
    }
  } 

Обратите внимание: вы никогда не должны использовать встроенные пространства имен/префиксы (такие как owl:, rdfs:, rdf:, xsd: и т. д.) для онтологии вашего домена!

person UninformedUser    schedule 27.08.2017
comment
спасибо за помощь и совет! - person Grapheneer; 27.08.2017