@prefix this: . @prefix sub: . @prefix np: . @prefix grlc: . @prefix dct: . @prefix nt: . @prefix npx: . @prefix xsd: . @prefix rdfs: . @prefix orcid: . @prefix prov: . sub:Head { this: a np:Nanopublication; np:hasAssertion sub:assertion; np:hasProvenance sub:provenance; np:hasPublicationInfo sub:pubinfo . } sub:assertion { sub:list-space-participants a grlc:grlc-query; dct:description "Lists the participants of a given space (one row per agent). Two kinds of rows are merged: (1) validated role instantiations in the current space state for the general participant role, the planned-attendance role, or the regrets role, and (2) self-declarations (wikidata P1344, 3pff participatedAsParticipantIn, gen:plansToAttend, gen:unableToAttend) by an agent whose signing key has no registered account, so no role instantiation exists for it. The latter are marked with a warning icon (hover text 'unverified identity') in the status column, are dropped when self-retracted, and are only taken from keys bound to no other agent. The status column holds '(regrets)' when the agent declared to be unable to attend, '(planned)' when the agent only plans to attend (no participant role), plus the warning icon as described, otherwise empty. Regrets take precedence over participation and planned attendance, and regrets rows are sorted last. The np column points to the regrets declaration if present, otherwise to the participant grant/declaration, otherwise to the planned-attendance one. IRI-keyed by npa:forSpace (param space)."; dct:license ; rdfs:label "List space participants"; grlc:endpoint ; grlc:sparql """prefix rdfs: prefix dct: prefix np: prefix npa: prefix npx: prefix gen: prefix foaf: select ?user_iri ?user_iri_label ?status ?np ?np_label where { { select ?user_iri (sample(?name) as ?name) (max(?partNpV0) as ?partNpV) (max(?partNpU0) as ?partNpU) (max(?planNpV0) as ?planNpV) (max(?planNpU0) as ?planNpU) (max(?regrNpV0) as ?regrNpV) (max(?regrNpU0) as ?regrNpU) where { values ?_space_multi_iri {} graph npa:graph { npa:thisRepo npa:hasCurrentSpaceState ?g . } { values ?role { } graph ?g { ?ri a gen:RoleInstantiation ; npa:forSpace ?_space_multi_iri ; npa:forAgent ?user_iri ; npa:viaNanopub ?grantNp ; gen:hasRole ?role . } optional { graph ?g { ?user_iri foaf:name ?name } } bind(\"v\" as ?tier) } union { values ( ?prop ?role ) { ( ) ( ) ( gen:plansToAttend ) ( gen:unableToAttend ) } graph npa:graph { ?grantNp npx:signedBy ?user_iri ; np:hasAssertion ?a ; npa:hasValidSignatureForPublicKeyHash ?pubkey . } graph ?a { ?user_iri ?prop ?_space_multi_iri . } filter not exists { graph npa:graph { ?inv npx:invalidates ?grantNp ; npa:hasValidSignatureForPublicKeyHash ?pubkey . } } filter not exists { graph ?g { ?acc a npa:AccountState ; npa:pubkey ?pubkey } } optional { graph npa:graph { ?grantNp np:hasPublicationInfo ?pi . } graph ?pi { ?user_iri foaf:name ?name . } } bind(\"u\" as ?tier) } bind(if(?role = && ?tier = \"v\", str(?grantNp), \"\") as ?partNpV0) bind(if(?role = && ?tier = \"u\", str(?grantNp), \"\") as ?partNpU0) bind(if(?role = && ?tier = \"v\", str(?grantNp), \"\") as ?planNpV0) bind(if(?role = && ?tier = \"u\", str(?grantNp), \"\") as ?planNpU0) bind(if(?role = && ?tier = \"v\", str(?grantNp), \"\") as ?regrNpV0) bind(if(?role = && ?tier = \"u\", str(?grantNp), \"\") as ?regrNpU0) } group by ?user_iri } bind(?regrNpV != \"\" || ?regrNpU != \"\" as ?regrets) bind(!?regrets && ?partNpV = \"\" && ?partNpU = \"\" as ?planned) bind(?partNpV = \"\" && ?planNpV = \"\" && ?regrNpV = \"\" as ?unverified) bind(if(?regrets, if(?regrNpV != \"\", ?regrNpV, ?regrNpU), if(?partNpV != \"\", ?partNpV, if(?partNpU != \"\", ?partNpU, if(?planNpV != \"\", ?planNpV, ?planNpU)))) as ?npStr) bind(iri(?npStr) as ?np) bind(\"^\" as ?np_label) bind(if(bound(?name), str(?name), \"\") as ?user_iri_label) bind('unverified identity⚠' as ?warnIcon) bind(if(?regrets, '(regrets)', if(?planned, '(planned)', '')) as ?statusText) bind(if(?unverified, if(?statusText != \"\", concat('', ?statusText, ' ', ?warnIcon, ''), ?warnIcon), ?statusText) as ?status) } order by if(?regrets, 1, 0) lcase(?user_iri_label)""" . } sub:provenance { sub:assertion prov:wasAttributedTo orcid:0000-0002-1267-0234 . } sub:pubinfo { this: dct:created "2026-10-08T05:39:44Z"^^xsd:dateTime; dct:creator orcid:0000-0002-1267-0234; dct:license ; npx:embeds sub:list-space-participants; npx:supersedes ; rdfs:label "List space participants"; nt:wasCreatedFromProvenanceTemplate ; nt:wasCreatedFromPubinfoTemplate , , ; nt:wasCreatedFromTemplate . sub:sig npx:hasAlgorithm "RSA"; npx:hasPublicKey "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwUtewGCpT5vIfXYE1bmf/Uqu1ojqnWdYxv+ySO80ul8Gu7m8KoyPAwuvaPj0lvPtHrg000qMmkxzKhYknEjq8v7EerxZNYp5B3/3+5ZpuWOYAs78UnQVjbHSmDdmryr4D4VvvNIiUmd0yxci47dTFUj4DvfHnGd6hVe5+goqdcwIDAQAB"; npx:hasSignature "WkAQDKDPFwRvddsLjKP3PdvK6GfLBirQ6hBg0tPLAp64zNpqCfOLe/EMqhZRLmb5AhPHv+4paqWV77/5zs8kvooI+Kpxrt30gdT7t6OhW9wdzPYq8gqzyasrQUax/s9YwKLofqMVgaWLRS/NvZdw2CGmAFkPkXP4QVStUMDFELQ="; npx:hasSignatureTarget this:; npx:signedBy orcid:0000-0002-1267-0234 . }