Ich möchte eine Löschung erreichen, die alle Tripel löscht, wenn weniger als x verschiedene Objekte pro Subjekt vorhanden sind.Ist es möglich, eine SPARQL DELETE {} WHERE {} mit einem FILTER (COUNT (DISTINCT? Obj)> x) in der WHERE-Klausel zu machen?
Die beabsichtigte Abfrage sollte so etwas wie dies nach meinem Gefühl aussehen:
DELETE { ?sub ?pred ?obj . }
WHERE {
{SELECT ?sub ?pred ?obj (count(?obj) as ?count)
WHERE { ?sub ?pred ?obj .
} GROUP BY ?sub
} FILTER(?count < 14)
}
Die oben funktioniert nicht.
Auch eine GROUP BY
ist notwendig, um die ?obj
pro ?sub
Teil zu erreichen, aber ich kann mir nicht vorstellen, wie dies zu tun ist.
Kann mich jemand in die richtige Richtung drängen, um diese Aufgabe zu lösen?
Was meinst du mit "funktioniert nicht"? Wenn eine Fehlermeldung angezeigt wird, fügen Sie sie bitte in die Frage ein. – chrisis
Zuerst denke ich, Sie müssen Ihr 'SELECT' richtig machen, was es nicht zu sein scheint. Wenn Sie der Meinung sind, dass Ihre Herausforderung Virtuoso-spezifisch sein könnte, fügen Sie bitte Versionsinformationen hinzu und richten Sie Ihre Frage auch an die [Virtuoso Users Mailingliste] (https://lists.sourceforge.net/lists/listinfo/virtuoso-users/), das [OpenLink Support Forum] (http://boards.openlinksw.com/support/index.php) oder einen [OpenLink Support Case] (http://support.openlinksw.com/support/online-support.vsp) . (ObDisclaimer: Ich arbeite für [OpenLink Software] (http://www.openlinkssw.com/), Hersteller von [Virtuoso] (http://virtuoso.openlinkssw.com/).) – TallTed
Möchten Sie nur die löschen '{? sub? pred? obj. } 'verdreifacht oder willst du'? sub' löschen? Wenn Sie das letztere wollen, werden Sie Referenzen auf "sub" entfernen wollen. – scotthenninger