@prefix this: . @prefix sub: . @prefix np: . @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:get-spaces-and-roles-for-user a ; dct:description "Returns all the spaces a given user belongs to, together with the role names the user has in each space."; dct:license ; rdfs:label "Get Spaces and roles for user"; ; """prefix rdfs: prefix dct: prefix np: prefix npa: prefix npx: prefix gen: prefix schema: select ?space ?space_label (group_concat(distinct str(?role); separator=\" \") as ?roles_multi_iri) (group_concat(distinct replace(replace(?roleLabel, \"\\\\\\\\\", \"\\\\\\\\\\\\\\\\\"), \"\\\\n\", \"\\\\\\\\n\"); separator=\"\\\\n\") as ?roles_label_multi) where { { { graph npa:graph { ?spaceRole_np npx:hasNanopubType gen:SpaceMemberRole . ?spaceRole_np npa:hasValidSignatureForPublicKeyHash ?spaceRole_pubkey . filter not exists { ?spaceRole_npx npx:invalidates ?spaceRole_np ; npa:hasValidSignatureForPublicKeyHash ?spaceRole_pubkey . } ?spaceRole_np np:hasAssertion ?spaceRole_a . } graph ?spaceRole_a { ?space gen:hasRole ?role . } } union { bind( as ?role) } } graph ?role_a { ?role a gen:SpaceMemberRole . ?role rdfs:label ?roleLabel . ?role dct:title ?roleTitle . ?role schema:name ?roleName . } graph npa:graph { ?role_np npx:embeds ?role . ?role_np np:hasAssertion ?role_a . } { { graph ?role_a { ?role gen:hasRegularProperty ?reg . } graph ?link_a { ?_agent_iri ?reg ?space . } } union { graph ?role_a { ?role gen:hasInverseProperty ?inv . } graph ?link_a { ?space ?inv ?_agent_iri . } } } graph npa:graph { ?link_np np:hasAssertion ?link_a . ?link_np npa:hasValidSignatureForPublicKeyHash ?link_pubkey . filter not exists { ?link_npx npx:invalidates ?link_np ; npa:hasValidSignatureForPublicKeyHash ?link_pubkey . } } optional { graph npa:graph { ?space_np npx:introduces ?space . ?space_np npa:hasValidSignatureForPublicKeyHash ?space_pubkey . filter not exists { ?space_npx npx:invalidates ?space_np ; npa:hasValidSignatureForPublicKeyHash ?space_pubkey . } ?space_np rdfs:label ?space_label . } } } group by ?space ?space_label order by ?space_label""" . } sub:provenance { sub:assertion prov:wasAttributedTo orcid:0000-0002-1267-0234 . } sub:pubinfo { this: dct:created "2026-03-24T14:30:06Z"^^xsd:dateTime; dct:creator orcid:0000-0002-1267-0234; dct:license ; npx:embeds sub:get-spaces-and-roles-for-user; rdfs:label "Get Spaces and roles for user"; nt:wasCreatedFromProvenanceTemplate ; nt:wasCreatedFromPubinfoTemplate , ; nt:wasCreatedFromTemplate . sub:sig npx:hasAlgorithm "RSA"; npx:hasPublicKey "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwUtewGCpT5vIfXYE1bmf/Uqu1ojqnWdYxv+ySO80ul8Gu7m8KoyPAwuvaPj0lvPtHrg000qMmkxzKhYknEjq8v7EerxZNYp5B3/3+5ZpuWOYAs78UnQVjbHSmDdmryr4D4VvvNIiUmd0yxci47dTFUj4DvfHnGd6hVe5+goqdcwIDAQAB"; npx:hasSignature "Dr144aQ+VerTDJ43R1VXt+3Ei7Vu8Cv+ZVmWJaadWemuK7y3UwCf/fj9ThH/JyUnWtqnJBMifokrnDhMFSE0xIL4yA9mW3J5OpBNv1Z2o4E9cGdcXz3cYu8dGo9sT1UEFF+N9CzOGm9MMvvDvzvwzDbjczWu4me3ge0OJHajOpI="; npx:hasSignatureTarget this:; npx:signedBy orcid:0000-0002-1267-0234 . }