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

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

CONSTRUCT {
?machine rdfs:numberOfIssues ?n .
}

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

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

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: и т. д.) для вашей доменной онтологии!

Другие вопросы по тегам