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