https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/Head
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88
http://www.nanopub.org/nschema#hasAssertion
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/assertion
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88
http://www.nanopub.org/nschema#hasProvenance
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/provenance
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88
http://www.nanopub.org/nschema#hasPublicationInfo
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/pubinfo
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88
http://www.w3.org/1999/02/22-rdf-syntax-ns#type
http://www.nanopub.org/nschema#Nanopublication
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/assertion
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/get-user-introductions
http://purl.org/dc/terms/description
Returns the introduction nanopublications of a given user (creation date, key location, declared public-key hashes), plus session-relative action targets from the viewer's local key (?__LOCALPUBKEY_multi) and site URL (?__SITEURL_multi): conditional retract/derive targets that are owner-gated (?_user_iri = ?__CURRENTUSER_multi_iri) and computed against the same notion of a 'local introduction' as the UI: an introduction SIGNED BY the local key, DECLARING the local key, whose local-key declaration has no location or matches the site URL (nanobench->nanodash). retract_target fires on a local introduction when there is more than one (duplicate cleanup); derive_target fires on a non-local introduction when there are zero local introductions. approve_target fires whenever the viewer has a local key that is NOT among the keys declared by that introduction, so that other agents can approve of somebody else's introduction, and the user themselves can approve an additional introduction from an already approved key (self-approval with the very key being introduced is pointless and therefore suppressed). The retract/derive/approve/local columns are action-mapping data (hidden from display by the result builders). The keys column annotates each declared key hash with its trust-approval status, federated from the trust repo: a checkmark when the key is loaded/approved for the user, a warning sign otherwise.
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/get-user-introductions
http://purl.org/dc/terms/license
http://www.apache.org/licenses/LICENSE-2.0
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/get-user-introductions
http://www.w3.org/1999/02/22-rdf-syntax-ns#type
https://w3id.org/kpxl/grlc/grlc-query
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/get-user-introductions
http://www.w3.org/2000/01/rdf-schema#label
Get user introductions
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/get-user-introductions
https://w3id.org/kpxl/grlc/endpoint
https://w3id.org/np/l/nanopub-query-1.1/repo/type/77757cabf6184c51c20b8b0fe5dc5e1365b7f628448335184ad54319a0affdfc
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/get-user-introductions
https://w3id.org/kpxl/grlc/sparql
prefix np: <http://www.nanopub.org/nschema#>
prefix npx: <http://purl.org/nanopub/x/>
prefix npa: <http://purl.org/nanopub/admin/>
prefix dct: <http://purl.org/dc/terms/>
select (max(?date0) as ?date) (sample(str(?keyLocation)) as ?location)
(group_concat(distinct ?keyAnnotated; separator=", ") as ?keys) ?np ("^" as ?np_label)
(if(max(?isOwner) > 0 && max(?signedByLocal) > 0 && sum(?localDeclOk) > 0 && ?localCount > 1, str(?np), "") as ?retract_target)
(if(max(?isOwner) > 0 && (max(?signedByLocal) = 0 || sum(?localDeclOk) = 0) && ?localCount = 0 && max(?lpkBound) > 0, str(?np), "") as ?derive_target)
(if(max(?lpkBound) > 0 && max(?isLocal) = 0, str(?np), "") as ?approve_target)
(sample(?lpk) as ?local_pubkey) (sample(?lpkShort) as ?local_pubkey_short)
(sample(?siteUrl) as ?site_url)
where {
values ?__LOCALPUBKEY_multi {}
values ?__SITEURL_multi {}
values ?__CURRENTUSER_multi_iri {}
graph npa:graph {
?np npa:hasValidSignatureForPublicKey ?introPubkey .
filter not exists { ?npx npx:invalidates ?np ; npa:hasValidSignatureForPublicKey ?introPubkey . }
?np dct:created ?date0 .
?np np:hasAssertion ?a .
}
graph ?a {
?keydeclaration npx:declaredBy ?_user_iri .
?keydeclaration npx:hasPublicKey ?pubkey .
optional { ?keydeclaration npx:hasKeyLocation ?keyLocation . }
bind(substr(sha256(?pubkey), 1, 10) as ?keyHash)
bind(lcase(sha256(str(?pubkey))) as ?keyHashFull)
}
bind(if(exists {
service <https://w3id.org/np/l/nanopub-query-1.1/repo/trust> {
graph npa:graph { npa:thisRepo npa:hasCurrentTrustState ?tg . }
graph ?tg { ?acct npa:agent ?_user_iri ; npa:pubkey ?keyHashFull ; npa:trustStatus npa:loaded . }
}
}, concat("✅ ", ?keyHash), concat("⚠️ ", ?keyHash)) as ?keyAnnotated)
bind(coalesce(if(str(?pubkey) = str(?__LOCALPUBKEY_multi), 1, 0), 0) as ?isLocal)
bind(if(?isLocal = 1 && (!bound(?keyLocation) || coalesce(str(?keyLocation) = str(?__SITEURL_multi), false) || coalesce(replace(str(?keyLocation), "nanobench", "nanodash") = str(?__SITEURL_multi), false)), 1, 0) as ?localDeclOk)
bind(coalesce(if(str(?introPubkey) = str(?__LOCALPUBKEY_multi), 1, 0), 0) as ?signedByLocal)
bind(if(bound(?__LOCALPUBKEY_multi), 1, 0) as ?lpkBound)
bind(coalesce(if(?_user_iri = ?__CURRENTUSER_multi_iri, 1, 0), 0) as ?isOwner)
bind(coalesce(str(?__LOCALPUBKEY_multi), "") as ?lpk)
bind(if(strlen(?lpk) >= 45, concat(substr(?lpk, 1, 1), "..", substr(?lpk, 41, 5), ".."), "") as ?lpkShort)
bind(coalesce(str(?__SITEURL_multi), "") as ?siteUrl)
{
select (count(distinct ?lnp) as ?localCount) where {
values ?__LOCALPUBKEY_multi {}
values ?__SITEURL_multi {}
graph npa:graph {
?lnp npa:hasValidSignatureForPublicKey ?lsign .
filter not exists { ?lnpx npx:invalidates ?lnp ; npa:hasValidSignatureForPublicKey ?lsign . }
?lnp np:hasAssertion ?la .
}
graph ?la {
?lkd npx:declaredBy ?_user_iri ; npx:hasPublicKey ?lpubkey .
optional { ?lkd npx:hasKeyLocation ?lloc . }
}
filter(coalesce(str(?lsign) = str(?__LOCALPUBKEY_multi), false))
filter(coalesce(str(?lpubkey) = str(?__LOCALPUBKEY_multi), false))
filter(!bound(?lloc) || coalesce(str(?lloc) = str(?__SITEURL_multi), false) || coalesce(replace(str(?lloc), "nanobench", "nanodash") = str(?__SITEURL_multi), false))
}
}
}
group by ?np ?localCount
order by desc(max(?date0))
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/provenance
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/assertion
http://www.w3.org/ns/prov#wasAttributedTo
https://orcid.org/0000-0002-1267-0234
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/pubinfo
https://orcid.org/0000-0002-1267-0234
http://xmlns.com/foaf/0.1/name
Tobias Kuhn
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88
http://purl.org/dc/terms/created
2026-08-25T12:05:38Z
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88
http://purl.org/dc/terms/creator
https://orcid.org/0000-0002-1267-0234
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88
http://purl.org/dc/terms/license
https://creativecommons.org/licenses/by/4.0/
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88
http://purl.org/nanopub/x/embeds
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/get-user-introductions
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88
http://purl.org/nanopub/x/supersedes
https://w3id.org/np/RA4k6eIjciIqSaQXv836fgVVASHm99UVIaZZhc_lF8IOU
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88
https://w3id.org/np/o/ntemplate/wasCreatedFromProvenanceTemplate
https://w3id.org/np/RA7lSq6MuK_TIC6JMSHvLtee3lpLoZDOqLJCLXevnrPoU
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88
https://w3id.org/np/o/ntemplate/wasCreatedFromPubinfoTemplate
https://w3id.org/np/RA0J4vUn_dekg-U1kK3AOEt02p9mT2WO03uGxLDec1jLw
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88
https://w3id.org/np/o/ntemplate/wasCreatedFromPubinfoTemplate
https://w3id.org/np/RAoTD7udB2KtUuOuAe74tJi1t3VzK0DyWS7rYVAq1GRvw
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88
https://w3id.org/np/o/ntemplate/wasCreatedFromPubinfoTemplate
https://w3id.org/np/RAukAcWHRDlkqxk7H2XNSegc1WnHI569INvNr-xdptDGI
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88
https://w3id.org/np/o/ntemplate/wasCreatedFromTemplate
https://w3id.org/np/RAEFAt-QcFK0ZhqfvlsmS10BnzGJA0xwOICZXkO-ai87k
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/sig
http://purl.org/nanopub/x/hasAlgorithm
RSA
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/sig
http://purl.org/nanopub/x/hasPublicKey
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwUtewGCpT5vIfXYE1bmf/Uqu1ojqnWdYxv+ySO80ul8Gu7m8KoyPAwuvaPj0lvPtHrg000qMmkxzKhYknEjq8v7EerxZNYp5B3/3+5ZpuWOYAs78UnQVjbHSmDdmryr4D4VvvNIiUmd0yxci47dTFUj4DvfHnGd6hVe5+goqdcwIDAQAB
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/sig
http://purl.org/nanopub/x/hasSignature
mskDYLwsHt9ZYRBxvblp71fe8va+Dl6MYb/lKU6baFfIrJnzmizy5iOLzG4lRIBzNyo7tR/eA0OkpePIw3GoQPFBRzd89vAG6kt6urNsL/1IxMyCF1BSI8wSdFu4Z+JvShc8OlclXMD00LaSB+Fpj4NKmBLMYi5pFRNjQT+dL6U=
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/sig
http://purl.org/nanopub/x/hasSignatureTarget
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88
https://w3id.org/np/RAfboT7Bngk5M1pOdisJaBL2xOpfQ4flLKm2rz1iQ5E88/sig
http://purl.org/nanopub/x/signedBy
https://orcid.org/0000-0002-1267-0234