2017-08-27 4 views
1

J'essaie d'écrire une règle SPIN qui comptera le nombre de références entrantes et définira ce nombre comme valeur de propriété. Par exemple, compte le nombre de problèmes survenus sur une machine particulière. Par conséquent, j'ai besoin de compter le nombre de références entrantes de type rdfs:occuredOn (domaine: problème, plage: machine).Utilisez COUNT dans une fonction CONSTRUCT dans SPARQL

CONSTRUCT { 
?machine rdfs:numberOfIssues ?n . 
} 

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

Merci d'avance!

+0

Je ne comprends pas pourquoi vous utilisez les préfixes rdfs et owl pour vos propres entités. – AKSW

+0

En fait, je pense que ce sera plus facile à lire .. – Boris

+0

Je suggère de changer les préfixes 'rdfs:' et 'owl:' dans votre exemple pour 'ex:' – TallTed

Répondre

4

seulement GroupGraphPattern est autorisé, par exemple, vous devez utiliser un sous-requête SELECT dans la WHERE clause:

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 
    } 
    } 

Note, vous devez jamais utilisateur/préfixes des espaces de noms intégrés (tels que owl:, rdfs:, rdf:, xsd:, etc.) pour votre ontologie de domaine!

+0

je vous remercie pour l'aide et le conseil! – Boris