rows { options { physical_type: PHYSICAL_STREAM_TYPE_QUADS max_name_table_size: 128 max_prefix_table_size: 16 max_datatype_table_size: 16 logical_type: LOGICAL_STREAM_TYPE_DATASETS version: 2 } } rows { prefix { value: "https://w3id.org/np/" } } rows { name { value: "RAxalHKqqmcBFOWdbRk-93jpm9lRh6Q2M537MR436QyV0" } } rows { namespace { name: "this" value { prefix_id: 1 } } } rows { prefix { value: "https://w3id.org/np/RAxalHKqqmcBFOWdbRk-93jpm9lRh6Q2M537MR436QyV0/" } } rows { name { } } rows { namespace { name: "sub" value { prefix_id: 2 } } } rows { prefix { value: "http://www.nanopub.org/nschema#" } } rows { namespace { name: "np" value { prefix_id: 3 name_id: 2 } } } rows { prefix { value: "https://w3id.org/kpxl/grlc/" } } rows { namespace { name: "grlc" value { prefix_id: 4 name_id: 2 } } } rows { prefix { value: "http://purl.org/dc/terms/" } } rows { namespace { name: "dct" value { prefix_id: 5 name_id: 2 } } } rows { prefix { value: "https://w3id.org/np/o/ntemplate/" } } rows { namespace { name: "nt" value { prefix_id: 6 name_id: 2 } } } rows { prefix { value: "http://purl.org/nanopub/x/" } } rows { namespace { name: "npx" value { prefix_id: 7 name_id: 2 } } } rows { prefix { value: "http://www.w3.org/2001/XMLSchema#" } } rows { namespace { name: "xsd" value { prefix_id: 8 name_id: 2 } } } rows { prefix { value: "http://www.w3.org/2000/01/rdf-schema#" } } rows { namespace { name: "rdfs" value { prefix_id: 9 name_id: 2 } } } rows { prefix { value: "http://www.w3.org/ns/prov#" } } rows { namespace { name: "prov" value { prefix_id: 10 name_id: 2 } } } rows { name { value: "hasAssertion" } } rows { name { value: "assertion" } } rows { name { value: "Head" } } rows { quad { s_iri { prefix_id: 1 name_id: 1 } p_iri { prefix_id: 3 name_id: 3 } o_iri { prefix_id: 2 } g_iri { } } } rows { name { value: "hasProvenance" } } rows { name { value: "provenance" } } rows { quad { p_iri { prefix_id: 3 } o_iri { prefix_id: 2 } } } rows { name { value: "hasPublicationInfo" } } rows { name { value: "pubinfo" } } rows { quad { p_iri { prefix_id: 3 } o_iri { prefix_id: 2 } } } rows { prefix { value: "http://www.w3.org/1999/02/22-rdf-syntax-ns#" } } rows { name { value: "type" } } rows { name { value: "Nanopublication" } } rows { quad { p_iri { prefix_id: 11 } o_iri { prefix_id: 3 } } } rows { name { value: "list-space-non-approved" } } rows { name { value: "description" } } rows { quad { s_iri { prefix_id: 2 } p_iri { prefix_id: 5 } o_literal { lex: "Lists the non-approved role claims of a given space ref (space IRI + root definition): agents who hold a higher-tier role instantiation (admin/maintainer/member) that is NOT in the trust-validated current state, i.e. a self-assigned or otherwise ungranted claim awaiting approval by an equal-or-higher-tier member. Pass the ref\'s root nanopub (root_np). Observer-tier roles are excluded: they are self-assignable, so a self-declared observer needs no approval and is shown by list-space-observers instead. The higher-tier test is generic \342\200\224 the built-in admin property (gen:hasAdmin) OR a RoleDeclaration whose npa:hasRoleType is gen:AdminRole/gen:MaintainerRole/gen:MemberRole \342\200\224 but because the live spaces repo currently materialises every declaration as gen:ObserverRole, only admin claims are detectable today; maintainer/member claims appear automatically once real tier subclasses exist. Per (member, role) only the latest role-instantiation nanopub is returned (by dct:created). Returns the claimed tier, the role-assignment grant nanopub(s) with the claimed role\'s label (role_assignments_multi_iri + role_assignments_label_multi), and the role-assignment template (for the approve action, which re-asserts the same triple), plus a hidden agent_iri column the approve action maps into the template\'s agent placeholder. v2: adds the role_assignments columns. v3: resolves owl:sameAs space aliases (via the ref\'s validated npa:sameAsSpace edges in the current-state graph), so a higher-tier claim made against an alias IRI of the space is detected. v4: the invalidation filter now honours an npx:invalidates edge only when the invalidating nanopub shares a signing pubkey (npa:hasValidSignatureForPublicKeyHash) with the grant it targets, so a foreign-key retraction can no longer suppress another agent\'s claim (issue #487 / same gate as the materializer\'s #112). v5: BUGFIX \342\200\224 the v3/v4 space-alias resolution used a `{ bind(?spaceIri as ?inSpace) } union { ... npa:sameAsSpace ... }` pattern, but RDF4J does not propagate the outer ?spaceIri into a BIND inside a UNION branch, so ?inSpace was left unbound and the query returned ZERO rows for every space (no pending claim could ever surface). Replaced with a non-union `filter( ?inSpace = ?spaceIri || exists { ... npa:sameAsSpace ... } )` that binds ?inSpace from the role-instantiation triple, restoring detection while keeping alias resolution. Returns an approve_np column holding the granting nanopublication for each pending row, so an approve action can re-publish that same grant under the approver\'s key. This works for every tier: the previous version bound an assignment template only for admin grants, which left maintainer- and member-tier rows with an empty required value and therefore no approve button." } g_iri { prefix_id: 2 name_id: 4 } } } rows { name { value: "license" } } rows { prefix { value: "http://www.apache.org/licenses/" } } rows { name { value: "LICENSE-2.0" } } rows { quad { p_iri { prefix_id: 5 name_id: 14 } o_iri { prefix_id: 12 } } } rows { name { value: "grlc-query" } } rows { quad { p_iri { prefix_id: 11 name_id: 10 } o_iri { prefix_id: 4 name_id: 16 } } } rows { name { value: "label" } } rows { quad { p_iri { prefix_id: 9 } o_literal { lex: "List space non-approved role claims (ref-scoped)" } } } rows { name { value: "endpoint" } } rows { prefix { value: "https://w3id.org/np/l/nanopub-query-1.1/repo/" } } rows { name { value: "spaces" } } rows { quad { p_iri { prefix_id: 4 } o_iri { prefix_id: 13 } } } rows { name { value: "sparql" } } rows { quad { p_iri { prefix_id: 4 } o_literal { lex: "prefix rdfs: \nprefix dct: \nprefix np: \nprefix npa: \nprefix npx: \nprefix gen: \nprefix schema: \n\nselect ?member\n (sample(?tierX) as ?tier)\n (group_concat(distinct ?latestNp; separator=\" \") as ?role_assignments_multi_iri)\n (sample(?latestNp) as ?approve_np)\n (group_concat(distinct ?roleLabel; separator=\"\\n\") as ?role_assignments_label_multi)\nwhere {\n {\n select ?member ?roleProp\n (max(?val0) as ?val)\n (strafter(max(concat(coalesce(str(?dateNp),\"\"), \" \", str(?grantNp))), \" \") as ?latestNp)\n (sample(?member) as ?agentX)\n (sample(?tier0) as ?tierX)\n (sample(?rtmpl0) as ?rtmplX)\n (sample(?rl) as ?rlRaw)\n where {\n values ?_root_np_multi_iri {}\n graph npa:spacesGraph { ?ref npa:rootNanopub ?_root_np_multi_iri ; npa:spaceIri ?spaceIri . }\n graph npa:graph { npa:thisRepo npa:hasCurrentSpaceState ?g . }\n graph npa:spacesGraph {\n ?ri a gen:RoleInstantiation ; npa:forSpace ?inSpace ; npa:forAgent ?member ; npa:viaNanopub ?grantNp ;\n (npa:regularProperty|npa:inverseProperty) ?roleProp .\n }\n filter( ?inSpace = ?spaceIri || exists { graph ?g { ?inSpace npa:sameAsSpace ?ref } } )\n bind(?roleProp = gen:hasAdmin as ?isAdminProp)\n bind(exists { graph npa:spacesGraph { ?rdA a npa:RoleDeclaration ; npa:hasRoleType gen:AdminRole ; (gen:hasRegularProperty|gen:hasInverseProperty) ?roleProp } } as ?isAdminDecl)\n bind(exists { graph npa:spacesGraph { ?rdM a npa:RoleDeclaration ; npa:hasRoleType gen:MaintainerRole ; (gen:hasRegularProperty|gen:hasInverseProperty) ?roleProp } } as ?isMaint)\n bind(exists { graph npa:spacesGraph { ?rdMe a npa:RoleDeclaration ; npa:hasRoleType gen:MemberRole ; (gen:hasRegularProperty|gen:hasInverseProperty) ?roleProp } } as ?isMemb)\n filter(?isAdminProp || ?isAdminDecl || ?isMaint || ?isMemb)\n filter not exists { graph npa:graph { ?invNp npx:invalidates ?grantNp ; npa:hasValidSignatureForPublicKeyHash ?invpk . ?grantNp npa:hasValidSignatureForPublicKeyHash ?invpk . } }\n bind(if(exists { graph ?g { ?vri npa:forSpaceRef ?ref ; npa:forAgent ?member ; (npa:regularProperty|npa:inverseProperty) ?roleProp } }, 1, 0) as ?val0)\n optional { graph npa:graph { ?grantNp dct:created ?dateNp } }\n bind(if(?isAdminProp || ?isAdminDecl, \"Admin\", if(?isMaint, \"Maintainer\", \"Member\")) as ?tier0)\n bind(if(?isAdminProp, , ?undefTmpl) as ?rtmpl0)\n optional {\n graph ?g { ?raRole a gen:RoleAssignment ; npa:forSpaceRef ?ref ; gen:hasRole ?role . }\n graph npa:spacesGraph { ?rd2 a npa:RoleDeclaration ; npa:role ?role ; (gen:hasRegularProperty|gen:hasInverseProperty) ?roleProp ; npa:viaNanopub ?roleNp . }\n graph npa:graph { ?roleNp np:hasAssertion ?role_a . }\n optional { graph ?role_a { ?role schema:name ?rlS } }\n optional { graph ?role_a { ?role rdfs:label ?rlA } }\n optional { graph ?role_a { ?role dct:title ?rlB } }\n bind(coalesce(?rlS, ?rlA, ?rlB) as ?rlResolved)\n }\n bind(if(?isAdminProp, \"admin\", ?rlResolved) as ?rl)\n }\n group by ?member ?roleProp\n having (max(?val0) = 0)\n }\n bind(coalesce(?rlRaw, \"role\") as ?roleLabel)\n}\ngroup by ?member\norder by ?member" } } } rows { name { value: "wasAttributedTo" } } rows { prefix { value: "https://w3id.org/np/RA0SDqJIc3dtX2AihcvcSzBR7QIWfVl5lwk6U_MbH5RoA/" } } rows { name { value: "nanopub-ecosystem-paper-bot" } } rows { quad { s_iri { prefix_id: 2 name_id: 4 } p_iri { prefix_id: 10 name_id: 21 } o_iri { prefix_id: 14 } g_iri { prefix_id: 2 name_id: 7 } } } rows { name { value: "wasDerivedFrom" } } rows { name { value: "RA-yP1hmDE4Txn6LL6z-r9q12X9bnyKrOsHruAG5f3CcY" } } rows { quad { p_iri { prefix_id: 10 name_id: 23 } o_iri { prefix_id: 1 } } } rows { name { value: "created" } } rows { datatype { value: "http://www.w3.org/2001/XMLSchema#dateTime" } } rows { quad { s_iri { name_id: 1 } p_iri { prefix_id: 5 name_id: 25 } o_literal { lex: "2026-08-18T12:16:26Z" datatype: 1 } g_iri { prefix_id: 2 name_id: 9 } } } rows { name { value: "creator" } } rows { quad { p_iri { prefix_id: 5 name_id: 26 } o_iri { prefix_id: 14 name_id: 22 } } } rows { prefix { value: "https://creativecommons.org/licenses/by/4.0/" } } rows { quad { p_iri { prefix_id: 5 name_id: 14 } o_iri { prefix_id: 15 name_id: 2 } } } rows { name { value: "embeds" } } rows { quad { p_iri { prefix_id: 7 name_id: 27 } o_iri { prefix_id: 2 name_id: 12 } } } rows { quad { p_iri { prefix_id: 9 name_id: 17 } o_literal { lex: "List space non-approved role claims (ref-scoped)" } } } rows { name { value: "wasCreatedFromProvenanceTemplate" } } rows { prefix { value: "http://purl.org/np/" } } rows { name { value: "RAmRxSMXuHZWtDXqTXqTK_aM1KBPauATJg4_KqixamLiE" } } rows { quad { p_iri { prefix_id: 6 name_id: 28 } o_iri { prefix_id: 16 } } } rows { name { value: "wasCreatedFromPubinfoTemplate" } } rows { name { value: "RA0J4vUn_dekg-U1kK3AOEt02p9mT2WO03uGxLDec1jLw" } } rows { quad { p_iri { prefix_id: 6 } o_iri { prefix_id: 1 } } } rows { name { value: "RAukAcWHRDlkqxk7H2XNSegc1WnHI569INvNr-xdptDGI" } } rows { quad { o_iri { } } } rows { name { value: "wasCreatedFromTemplate" } } rows { name { value: "RAEFAt-QcFK0ZhqfvlsmS10BnzGJA0xwOICZXkO-ai87k" } } rows { quad { p_iri { prefix_id: 6 } o_iri { prefix_id: 1 } } } rows { name { value: "sig" } } rows { name { value: "hasAlgorithm" } } rows { quad { s_iri { prefix_id: 2 } p_iri { prefix_id: 7 } o_literal { lex: "RSA" } } } rows { name { value: "hasPublicKey" } } rows { quad { p_iri { } o_literal { lex: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxxo+arlpyxYYoHYYVTNSOWe/es90yVMBA8vaDyaAQk4pnOjTlpPptP5IkGg6zuCRIlm11QrHKkiU536witBT6gdh9kP9ay3S6m7wZ3iM7YcPMfhVHUXN6TBnuiKHHyJdVeK6RxMZlfXRKEz9HYcND+PGCXMVp8BofpKBKke3y4m8FTt+8aMEcgVcFBHFdrkWXoIIvkMlodtXkMgSwuGK8yXt/9lXqChIWpsbzu2juuX6pktMkfexkfQTwIH7oNSr/ma4KzZXERuLrCSO6IH5SfWXwjQUery6rKHiEMyie58mgBf0ssKh+uJoaZOqgbmj0f+EDwTIzq0dNsPA0A+n2QIDAQAB" } } } rows { name { value: "hasSignature" } } rows { quad { p_iri { } o_literal { lex: "f/WdOPOmAFa+QQKfhjOA9H7hpXIkXc/y4vRT4bBMaJdtKhNqkOYqx9Urm4DGLB8/crmMGBS0XIez24WZZ6WyOC94i1cf7ooYwU3FijGNT5c9M22IVgp/hT+u2BMqicBHYbAvxprGMvNJ5XW8uprY1046GwHMnxiYsyQubALXdYF16pB02lyBmCazBDGpscYPYEunWa2lfLH1C7Kkxc1BproYqdPRWed9K51MuMc6vqUEkWgVhHFPO37X6LxxiXAPmpIt9arwINENOWHQvneFelcJtEHR61a+Qsr5ijSGo+ubd4aov5/hzupt3QiGbiB6s9yzp5D/wXKRes/EEgkjvQ==" } } } rows { name { value: "hasSignatureTarget" } } rows { quad { p_iri { } o_iri { prefix_id: 1 name_id: 1 } } } rows { name { value: "signedBy" } } rows { quad { p_iri { prefix_id: 7 name_id: 40 } o_iri { prefix_id: 14 name_id: 22 } } }