https://w3id.org/np/RAuFJKlgbZ0GMUMIh9nFPyRdmX5cf48n6oW3kWgBvwhdc
.trig | .trig.txt | .jelly | .jelly.txt | .jsonld | .jsonld.txt | .nq | .nq.txt | .xml | .xml.txt
@prefix this: <https://w3id.org/np/RAuFJKlgbZ0GMUMIh9nFPyRdmX5cf48n6oW3kWgBvwhdc> .
@prefix sub: <https://w3id.org/np/RAuFJKlgbZ0GMUMIh9nFPyRdmX5cf48n6oW3kWgBvwhdc/> .
@prefix np: <http://www.nanopub.org/nschema#> .
@prefix grlc: <https://w3id.org/kpxl/grlc/> .
@prefix dct: <http://purl.org/dc/terms/> .
@prefix nt: <https://w3id.org/np/o/ntemplate/> .
@prefix npx: <http://purl.org/nanopub/x/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix orcid: <https://orcid.org/> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
sub:Head {
this: a np:Nanopublication;
np:hasAssertion sub:assertion;
np:hasProvenance sub:provenance;
np:hasPublicationInfo sub:pubinfo .
}
sub:assertion {
sub:get-nanosuggestions-for-assignee a grlc:grlc-query;
dct:description "Returns the nanosuggestions currently assigned to a given agent, for that agent's user page: title, kind, current status, the spaces the nanosuggestion is relevant for, who assigned it and when. Only the most recent assignment of each nanosuggestion counts, so a reassignment moves the entry to the new assignee instead of leaving it with both. Also returns that winning assignment nanopublication, so an assign action can open it in override mode. Unlike the space-page listing, this query is not gated on space membership: a user page has no space to resolve membership against, so every assignment naming the agent is shown.";
dct:license <http://www.apache.org/licenses/LICENSE-2.0>;
rdfs:label "Get the nanosuggestions assigned to an agent";
grlc:endpoint <https://w3id.org/np/l/nanopub-query-1.1/repo/type/29e2f808e4864fca4930806dee70c4a32df54a63ee90156244910a47d3443736>;
grlc:sparql """
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix dct: <http://purl.org/dc/terms/>
prefix foaf: <http://xmlns.com/foaf/0.1/>
prefix np: <http://www.nanopub.org/nschema#>
prefix npa: <http://purl.org/nanopub/admin/>
prefix npx: <http://purl.org/nanopub/x/>
prefix schema: <https://schema.org/>
prefix gen: <https://w3id.org/kpxl/gen/terms/>
prefix nsug: <https://w3id.org/np/RA5BAdUvlxLWMWFQN3UVKoIQEB_MYTiAoLH1klXJ7z-XI/>
select distinct ?item_multi_iri ?item_label_multi ?kind ?status ?spaces_multi_iri ?spaces_label_multi
?assigned_by ?assigned_by_label ?date ?suggestion ?np ?override_target
where {
# grlc fills this block with the page's agent IRI. A multi-valued (_multi_iri)
# parameter REQUIRES the empty values block: used bare the variable simply stays
# unbound, and the assignee pattern then matches every agent.
values ?_resource_multi_iri {}
# the most recent assignment nanopub for each nanosuggestion
{ select ?suggestion (max(concat(?ad, ' ', str(?anp))) as ?apick) where {
graph npa:graph {
?anp npa:hasValidSignatureForPublicKeyHash ?apk ; np:hasAssertion ?aa ; dct:created ?adate .
filter not exists { ?anpi npx:invalidates ?anp ; npa:hasValidSignatureForPublicKeyHash ?apk . }
}
graph ?aa { ?suggestion schema:agent ?ag . }
bind(str(?adate) as ?ad)
} group by ?suggestion }
bind(iri(strafter(?apick, ' ')) as ?assignNp)
# ...and it must name this agent, so a later reassignment removes the entry
graph npa:graph { ?assignNp np:hasAssertion ?assignA ; dct:created ?date .
optional { ?assignNp dct:creator ?assigned_by } }
graph ?assignA { ?suggestion schema:agent ?_resource_multi_iri . }
# the declaring nanopub carries the title and kind
graph npa:graph {
?np npa:hasValidSignatureForPublicKeyHash ?pubkey ; np:hasAssertion ?a .
filter not exists { ?npi npx:invalidates ?np ; npa:hasValidSignatureForPublicKeyHash ?pubkey . }
}
graph ?a {
?suggestion a nsug:Nanosuggestion ; rdfs:label ?title .
optional { ?suggestion a ?k . filter(?k != nsug:Nanosuggestion && ?k != schema:Statement) }
}
# current status: no space to anchor to on a user page, so the most recent one overall
optional {
{ select ?suggestion (max(concat(?sd, ' ', str(?s))) as ?pick) where {
graph npa:graph {
?snp npa:hasValidSignatureForPublicKeyHash ?spk ; np:hasAssertion ?sa ; dct:created ?sdate .
filter not exists { ?snpi npx:invalidates ?snp ; npa:hasValidSignatureForPublicKeyHash ?spk . }
}
graph ?sa { ?suggestion schema:actionStatus ?s . }
bind(str(?sdate) as ?sd)
} group by ?suggestion }
}
bind(coalesce(iri(strafter(?pick, ' ')), schema:PotentialActionStatus) as ?st)
bind(if(?st = schema:CompletedActionStatus, 'done',
if(?st = schema:FailedActionStatus, 'rejected',
if(?st = schema:ActiveActionStatus, 'in progress', 'open'))) as ?status)
# which spaces the nanosuggestion is relevant for
optional {
{ select ?suggestion (group_concat(distinct str(?sp); separator=' ') as ?spaces_multi_iri)
(group_concat(distinct ?splabel; separator='\\n') as ?spaces_label_multi) where {
graph npa:graph {
?lnp npa:hasValidSignatureForPublicKeyHash ?lpk ; np:hasAssertion ?la .
filter not exists { ?lnpi npx:invalidates ?lnp ; npa:hasValidSignatureForPublicKeyHash ?lpk . }
}
graph ?la { ?suggestion gen:isRelevantFor ?sp . }
optional { ?sp rdfs:label ?spl . filter(lang(?spl) = '') }
bind(coalesce(?spl, replace(str(?sp), '^.*/', '')) as ?splabel)
} group by ?suggestion }
}
optional { ?assigned_by foaf:name ?assigned_by_label }
# see the list query: lets \"assign...\" open the winning assignment nanopub in override mode
bind(coalesce(?assignNp, ?np) as ?override_target)
bind(?suggestion as ?item_multi_iri)
bind(?title as ?item_label_multi)
bind(coalesce(lcase(strafter(str(?k), 'RA5BAdUvlxLWMWFQN3UVKoIQEB_MYTiAoLH1klXJ7z-XI/')), '') as ?kind)
bind(if(?st in (schema:CompletedActionStatus, schema:FailedActionStatus), '2', '1') as ?openRank)
}
order by ?openRank desc(?date)
""" .
}
sub:provenance {
sub:assertion prov:wasAttributedTo orcid:0000-0002-1267-0234 .
}
sub:pubinfo {
orcid:0000-0002-1267-0234 foaf:name "Tobias Kuhn" .
this: dct:created "2026-08-27T07:20:40Z"^^xsd:dateTime;
dct:creator orcid:0000-0002-1267-0234;
dct:license <https://creativecommons.org/licenses/by/4.0/>;
npx:embeds sub:get-nanosuggestions-for-assignee;
npx:supersedes <https://w3id.org/np/RACnCOsWYkV_ybk7qBKAGc8khKn6Vb6xOxGTEsrZhySXI>;
rdfs:label "Get the nanosuggestions assigned to an agent";
nt:wasCreatedFromProvenanceTemplate <https://w3id.org/np/RA7lSq6MuK_TIC6JMSHvLtee3lpLoZDOqLJCLXevnrPoU>;
nt:wasCreatedFromPubinfoTemplate <https://w3id.org/np/RA0J4vUn_dekg-U1kK3AOEt02p9mT2WO03uGxLDec1jLw>,
<https://w3id.org/np/RAoTD7udB2KtUuOuAe74tJi1t3VzK0DyWS7rYVAq1GRvw>, <https://w3id.org/np/RAukAcWHRDlkqxk7H2XNSegc1WnHI569INvNr-xdptDGI>;
nt:wasCreatedFromTemplate <https://w3id.org/np/RAEFAt-QcFK0ZhqfvlsmS10BnzGJA0xwOICZXkO-ai87k> .
sub:sig npx:hasAlgorithm "RSA";
npx:hasPublicKey "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwUtewGCpT5vIfXYE1bmf/Uqu1ojqnWdYxv+ySO80ul8Gu7m8KoyPAwuvaPj0lvPtHrg000qMmkxzKhYknEjq8v7EerxZNYp5B3/3+5ZpuWOYAs78UnQVjbHSmDdmryr4D4VvvNIiUmd0yxci47dTFUj4DvfHnGd6hVe5+goqdcwIDAQAB";
npx:hasSignature "NreIu8LmKaTwX92k5joAUw+3oW4LAw/O7h/xFTTg0J4ViKbKxRu4EikMfKGyu5NOqk2BwW6wMoEBUADO5WESkYgshU6HwZ6OZ/G8Ib2ILzIe1wA0LWgHLpLv0dGAKubxSiiZI/brUBeLq0Gwhbk4uqZrucdaBZRTKJIkaMluUVw=";
npx:hasSignatureTarget this:;
npx:signedBy orcid:0000-0002-1267-0234 .
}