[ { "@id": "https://w3id.org/np/RAw_6pyy_0Zm71cdZN56HGjS7VGYzADDlQFG953D3pzok/pubinfo", "@graph": [ { "@id": "https://orcid.org/0000-0002-1267-0234", "http://xmlns.com/foaf/0.1/name": [ { "@value": "Tobias Kuhn" } ] }, { "@id": "https://w3id.org/np/RAw_6pyy_0Zm71cdZN56HGjS7VGYzADDlQFG953D3pzok", "http://purl.org/dc/terms/created": [ { "@value": "2026-06-23T13:42:09Z", "@type": "http://www.w3.org/2001/XMLSchema#dateTime" } ], "http://purl.org/dc/terms/creator": [ { "@id": "https://orcid.org/0000-0002-1267-0234" } ], "http://purl.org/dc/terms/license": [ { "@id": "https://creativecommons.org/licenses/by/4.0/" } ], "http://purl.org/nanopub/x/embeds": [ { "@id": "https://w3id.org/np/RAw_6pyy_0Zm71cdZN56HGjS7VGYzADDlQFG953D3pzok/list-space-members" } ], "http://purl.org/nanopub/x/supersedes": [ { "@id": "https://w3id.org/np/RAXhi9zBXJ2mZVmjBm_MZk1xM6OCxxVyr5B3xNYdy6boQ" } ] }, { "@id": "https://w3id.org/np/RAw_6pyy_0Zm71cdZN56HGjS7VGYzADDlQFG953D3pzok/sig", "http://purl.org/nanopub/x/hasAlgorithm": [ { "@value": "RSA" } ], "http://purl.org/nanopub/x/hasPublicKey": [ { "@value": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwUtewGCpT5vIfXYE1bmf/Uqu1ojqnWdYxv+ySO80ul8Gu7m8KoyPAwuvaPj0lvPtHrg000qMmkxzKhYknEjq8v7EerxZNYp5B3/3+5ZpuWOYAs78UnQVjbHSmDdmryr4D4VvvNIiUmd0yxci47dTFUj4DvfHnGd6hVe5+goqdcwIDAQAB" } ], "http://purl.org/nanopub/x/hasSignature": [ { "@value": "GSqpN3Vc9coPhxPc67F+NL5LdA3uxKxtVrCLFU4Nc8iEMTihxrpJ9JVVx+Qhj8mQmshrI3JzNQxRMf76p98JMYuL5PZlKdDCoismFl0aFc1FCfDz+lz5al4lNewokB8TgRrVF/wwqKVQ5jy+v8NOnCd88mcAeWVp4wZVviL5aCY=" } ], "http://purl.org/nanopub/x/hasSignatureTarget": [ { "@id": "https://w3id.org/np/RAw_6pyy_0Zm71cdZN56HGjS7VGYzADDlQFG953D3pzok" } ], "http://purl.org/nanopub/x/signedBy": [ { "@id": "https://orcid.org/0000-0002-1267-0234" } ] } ] }, { "@id": "https://w3id.org/np/RAw_6pyy_0Zm71cdZN56HGjS7VGYzADDlQFG953D3pzok/assertion", "@graph": [ { "@id": "https://w3id.org/np/RAw_6pyy_0Zm71cdZN56HGjS7VGYzADDlQFG953D3pzok/list-space-members", "http://purl.org/dc/terms/description": [ { "@value": "Lists the members of a given space ref (space IRI + root definition) together with their highest role tier (admin, maintainer, or member, in that order) and links to the role-assignment nanopubs (labelled by the specific role name, preferring schema:name). Observer-tier roles are excluded. The tier of each membership is resolved ONLY through a role that the space's own admins authoritatively assigned to it (a gen:RoleAssignment with npa:forSpace this space and gen:hasRole), matched to the instantiation by predicate; role declarations from other spaces that merely reuse the same predicate are ignored. This fixes a bug where a predicate (e.g. gen:hasTeamMember) declared with a different tier in another space leaked into this space's member listing. When the same role is assigned to the same person by multiple nanopubs, only the latest one is linked. Pass the ref's root nanopub (root_np); the query resolves the ref via npa:rootNanopub and scopes the role instantiations by npa:forSpaceRef. Ref-scoped variant of list-space-members (which is IRI-keyed via npa:forSpace)." } ], "http://purl.org/dc/terms/license": [ { "@id": "http://www.apache.org/licenses/LICENSE-2.0" } ], "@type": [ "https://w3id.org/kpxl/grlc/grlc-query" ], "http://www.w3.org/2000/01/rdf-schema#label": [ { "@value": "List space members (ref-scoped)" } ], "https://w3id.org/kpxl/grlc/endpoint": [ { "@id": "https://w3id.org/np/l/nanopub-query-1.1/repo/spaces" } ], "https://w3id.org/kpxl/grlc/sparql": [ { "@value": "prefix rdfs: \nprefix dct: \nprefix np: \nprefix npa: \nprefix gen: \nprefix schema: \nselect ?member ?tier ?role_assignments_multi_iri ?role_assignments_label_multi where {\n {\n select ?member\n (if(min(?rank)=1,\"Admin\",if(min(?rank)=2,\"Maintainer\",\"Member\")) as ?tier)\n (min(?rank) as ?rankMin)\n (group_concat(?latestNp; separator=\" \") as ?role_assignments_multi_iri)\n (group_concat(?roleLabel; separator=\"\\n\") as ?role_assignments_label_multi)\n where {\n {\n select ?member ?roleProp\n (min(?rank0) as ?rank)\n (sample(?roleLabel0) as ?roleLabel)\n (strafter(max(concat(coalesce(str(?dateNp),\"\"), \" \", str(?grantNp))), \" \") as ?latestNp)\n where {\n values ?_root_np_multi_iri {}\n graph npa:spacesGraph { ?spaceRef npa:rootNanopub ?_root_np_multi_iri ; npa:spaceIri ?spaceIri . }\n graph npa:graph { npa:thisRepo npa:hasCurrentSpaceState ?g . }\n graph ?g {\n ?ri a gen:RoleInstantiation ; npa:forSpaceRef ?spaceRef ; npa:forAgent ?member ; npa:viaNanopub ?grantNp .\n }\n bind(exists { graph ?g { ?ri npa:inverseProperty gen:hasAdmin } } as ?isAdmin)\n optional { graph npa:spacesGraph { ?ri (npa:regularProperty|npa:inverseProperty) ?ropExt } }\n optional { graph ?g { ?ri (npa:regularProperty|npa:inverseProperty) ?ropState } }\n bind(coalesce(?ropExt,?ropState) as ?roleProp)\n optional { graph npa:graph { ?grantNp dct:created ?dateNp } }\n # AUTHORITATIVE role + tier + label: the role THIS space assigned (RoleAssignment\n # forSpace this space -> gen:hasRole) whose declared predicate matches this row.\n optional {\n graph npa:spacesGraph {\n ?assign a gen:RoleAssignment ; npa:forSpace ?spaceIri ; gen:hasRole ?assignedRole .\n ?rdScoped a npa:RoleDeclaration ; npa:role ?assignedRole ;\n (gen:hasRegularProperty|gen:hasInverseProperty) ?roleProp ;\n npa:hasRoleType ?scopedType ; npa:viaNanopub ?roleNp .\n }\n graph npa:graph { ?roleNp np:hasAssertion ?role_a . }\n optional { graph ?role_a { ?assignedRole schema:name ?rlS } }\n optional { graph ?role_a { ?assignedRole rdfs:label ?rlA } }\n optional { graph ?role_a { ?assignedRole dct:title ?rlB } }\n bind(coalesce(?rlS,?rlA,?rlB) as ?rl)\n }\n bind(if(?isAdmin,1,if(?scopedType=gen:MaintainerRole,2,if(?scopedType=gen:MemberRole,3,0))) as ?rank0)\n bind(if(?isAdmin,coalesce(?rl,\"admin\"),coalesce(?rl,\"role\")) as ?roleLabel0)\n }\n group by ?member ?roleProp\n }\n filter(?rank > 0)\n }\n group by ?member\n }\n}\norder by ?rankMin ?member" } ] } ] }, { "@id": "https://w3id.org/np/RAw_6pyy_0Zm71cdZN56HGjS7VGYzADDlQFG953D3pzok/Head", "@graph": [ { "@id": "https://w3id.org/np/RAw_6pyy_0Zm71cdZN56HGjS7VGYzADDlQFG953D3pzok", "http://www.nanopub.org/nschema#hasAssertion": [ { "@id": "https://w3id.org/np/RAw_6pyy_0Zm71cdZN56HGjS7VGYzADDlQFG953D3pzok/assertion" } ], "http://www.nanopub.org/nschema#hasProvenance": [ { "@id": "https://w3id.org/np/RAw_6pyy_0Zm71cdZN56HGjS7VGYzADDlQFG953D3pzok/provenance" } ], "http://www.nanopub.org/nschema#hasPublicationInfo": [ { "@id": "https://w3id.org/np/RAw_6pyy_0Zm71cdZN56HGjS7VGYzADDlQFG953D3pzok/pubinfo" } ], "@type": [ "http://www.nanopub.org/nschema#Nanopublication" ] } ] }, { "@id": "https://w3id.org/np/RAw_6pyy_0Zm71cdZN56HGjS7VGYzADDlQFG953D3pzok/provenance", "@graph": [ { "@id": "https://w3id.org/np/RAw_6pyy_0Zm71cdZN56HGjS7VGYzADDlQFG953D3pzok/assertion", "http://www.w3.org/ns/prov#wasAttributedTo": [ { "@id": "https://orcid.org/0000-0002-1267-0234" } ] } ] } ]