. . . . "Returns one row per direct sub-space (project) of the given space, with the number of knowledge products the project has delivered per category (all ff:has-* output relations, formal FAIR outputs as well as informal / public-engagement outputs) and a total count. Sub-spaces without any products are included with zero counts; products of deeper nested sub-spaces are rolled up to the direct sub-space. Restricted to links authored by a member, maintainer, or admin of some space in the subtree." . . . "Get knowledge product counts per project for a space" . . "prefix rdfs: \nprefix np: \nprefix npa: \nprefix npx: \nprefix gen: \nprefix ff: \n\nselect ?Project (coalesce(min(?plabel), replace(str(?project), \"^.*/\", \"\")) as ?Project_label)\n (count(distinct if(?outputProp = ff:has-article, ?output, ?undefined)) as ?Articles)\n (count(distinct if(?outputProp = ff:has-dataset, ?output, ?undefined)) as ?Datasets)\n (count(distinct if(?outputProp = ff:has-software, ?output, ?undefined)) as ?Software)\n (count(distinct if(?outputProp = ff:has-method, ?output, ?undefined)) as ?Methods)\n (count(distinct if(?outputProp = ff:has-dmp, ?output, ?undefined)) as ?DMPs)\n (count(distinct if(?outputProp = ff:has-preregistration, ?output, ?undefined)) as ?Preregistrations)\n (count(distinct if(?outputProp = ff:has-presentation, ?output, ?undefined)) as ?Presentations)\n (count(distinct if(?outputProp = ff:has-blog-post, ?output, ?undefined)) as ?Blogs)\n (count(distinct if(?outputProp = ff:has-media-coverage, ?output, ?undefined)) as ?Media)\n (count(distinct if(?outputProp = ff:has-social-post, ?output, ?undefined)) as ?Social)\n (count(distinct if(?outputProp = ff:has-podcast, ?output, ?undefined)) as ?Podcasts)\n (count(distinct if(?outputProp = ff:has-discussion, ?output, ?undefined)) as ?Discussions)\n (count(distinct concat(str(?outputProp), \"|\", str(?output))) as ?Total)\nwhere {\n service {\n select ?project ?memberPubkeys where {\n { select (group_concat(distinct ?mpk; separator=\" \") as ?memberPubkeys) where {\n graph npa:graph { npa:hasCurrentSpaceState ?stateG . }\n values ?_space_multi_iri {}\n graph ?stateG {\n ?ri a gen:RoleInstantiation ; npa:forSpace ?proj ; npa:forAgent ?agent ; npa:hasRoleType ?rt .\n filter(?rt in (gen:AdminRole, gen:MaintainerRole, gen:MemberRole))\n filter(?proj = ?_space_multi_iri || strstarts(str(?proj), concat(str(?_space_multi_iri), \"/\")))\n ?acct a npa:AccountState ; npa:agent ?agent ; npa:pubkey ?mpk .\n }\n } }\n graph npa:graph { npa:hasCurrentSpaceState ?stateG2 . }\n values ?_space_multi_iri {}\n graph ?stateG2 { ?_space_multi_iri npa:hasSubSpace ?project . }\n }\n }\n optional {\n graph npa:graph {\n ?np npa:hasValidSignatureForPublicKeyHash ?npPubkey .\n filter not exists { ?npx npx:invalidates ?np ; npa:hasValidSignatureForPublicKeyHash ?npPubkey . }\n filter not exists { ?np npx:hasNanopubType npx:ExampleNanopub . }\n ?np np:hasAssertion ?a .\n }\n filter(contains(?memberPubkeys, ?npPubkey))\n graph ?a { ?p ?outputProp ?output . }\n values ?outputProp { ff:has-article ff:has-dataset ff:has-software ff:has-method ff:has-dmp ff:has-preregistration ff:has-presentation ff:has-blog-post ff:has-media-coverage ff:has-social-post ff:has-podcast ff:has-discussion }\n filter(?p = ?project || strstarts(str(?p), concat(str(?project), \"/\")))\n }\n optional {\n graph npa:graph {\n ?lnp npa:hasValidSignatureForPublicKeyHash ?lpk .\n filter not exists { ?lnpx npx:invalidates ?lnp ; npa:hasValidSignatureForPublicKeyHash ?lpk . }\n ?lnp np:hasAssertion ?la .\n }\n filter(contains(?memberPubkeys, ?lpk))\n graph ?la { ?project rdfs:label ?plabel . }\n }\n bind(?project as ?Project)\n}\ngroup by ?project ?Project\norder by ?project" . . "Tobias Kuhn" . "2026-08-19T09:56:49Z"^^ . . . . "Get knowledge product counts per project for a space" . . . . . . . "RSA" . "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwUtewGCpT5vIfXYE1bmf/Uqu1ojqnWdYxv+ySO80ul8Gu7m8KoyPAwuvaPj0lvPtHrg000qMmkxzKhYknEjq8v7EerxZNYp5B3/3+5ZpuWOYAs78UnQVjbHSmDdmryr4D4VvvNIiUmd0yxci47dTFUj4DvfHnGd6hVe5+goqdcwIDAQAB" . "Vgc1V4qtQ/P0e9lfoyQBV26vjNjLPZvzIHSFSz/fxSiIsNAPWiEOhkZPxFdMSkVvyLXbQSn/DHpEV/1GpBmMbZXkc0pdAdrseLsyPlAJ7CSxhcoxTk3NTtPNCRRTmvd2iA8Ket9iRqZopFKlgKiN1ca9ZeOIwYAu6+KSRDxXQZk=" . . .