https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/Head https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU http://www.nanopub.org/nschema#hasAssertion https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/assertion https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU http://www.nanopub.org/nschema#hasProvenance https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/provenance https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU http://www.nanopub.org/nschema#hasPublicationInfo https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/pubinfo https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://www.nanopub.org/nschema#Nanopublication https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/assertion https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/get-trust-network-overview-svg http://purl.org/dc/terms/description Returns a single result row with one 'svg' column holding a complete SVG diagram of the endorsement backbone of the whole nanopublication trust network, computed entirely from the trust state of the network. This is the query behind the 'Trust network overview' SVG view (gen:SvgView). Every agent that has endorsed at least one other agent is drawn as a node, arranged in horizontal bands by its minimum depth from the trust seed and ordered within each band by the number of agents it endorsed; the node radius grows with that number, which is also printed below the agent's name. Lines connect an endorsing agent to each agent it endorsed, and a dashed amber ring marks an agent that endorsed itself across two of its own keys. Node color encodes depth, with contested agents in red and skipped (rejected) agents in gray. Each node links root-relatively (/user?id=...) to that agent's user page. The query reads npa:EndorsementLink nodes (npa:fromAgent / npa:toAgent) together with the npa:AccountState rows of the current trust state, so it needs no federated SERVICE call and no scan of the full repository; agent-level names come from the canonical foaf:name in the trust state itself. Per-pubkey duplicate rows are collapsed, and positions are computed via rank subqueries, so the output is deterministic. The 'resource' parameter is the page the view is shown on; it is not used by the diagram, which always shows the whole network. https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/get-trust-network-overview-svg http://purl.org/dc/terms/license http://www.apache.org/licenses/LICENSE-2.0 https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/get-trust-network-overview-svg http://www.w3.org/1999/02/22-rdf-syntax-ns#type https://w3id.org/kpxl/grlc/grlc-query https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/get-trust-network-overview-svg http://www.w3.org/2000/01/rdf-schema#label Get trust network overview diagram as SVG https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/get-trust-network-overview-svg https://w3id.org/kpxl/grlc/endpoint https://w3id.org/np/l/nanopub-query-1.1/repo/trust https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/get-trust-network-overview-svg https://w3id.org/kpxl/grlc/sparql prefix npa: <http://purl.org/nanopub/admin/> prefix foaf: <http://xmlns.com/foaf/0.1/> select (concat("<svg xmlns='http://www.w3.org/2000/svg' width='100%' viewBox='0 0 1600 725' font-family='sans-serif'><text x='8' y='20' font-size='14' font-weight='bold' fill='#222'>Trust network \u2014 endorsement backbone</text><text x='8' y='36' font-size='10' fill='#666'>Each node is an agent who has endorsed at least one other agent; the number below the name is how many agents they endorsed. Lines are endorsements; dashed ring = self-endorsement across keys.</text><text x='8' y='68' font-family='sans-serif' font-size='10' fill='#999'>depth 1</text><line x1='0' y1='72' x2='1600' y2='72' stroke='#e4e4e4' stroke-width='1'></line><text x='8' y='243' font-family='sans-serif' font-size='10' fill='#999'>depth 2</text><line x1='0' y1='247' x2='1600' y2='247' stroke='#e4e4e4' stroke-width='1'></line><text x='8' y='418' font-family='sans-serif' font-size='10' fill='#999'>depth 3</text><line x1='0' y1='422' x2='1600' y2='422' stroke='#e4e4e4' stroke-width='1'></line><text x='8' y='593' font-family='sans-serif' font-size='10' fill='#999'>depth 4</text><line x1='0' y1='597' x2='1600' y2='597' stroke='#e4e4e4' stroke-width='1'></line>", ?edgesvg, ?selfsvg, ?nodesvg, "</svg>") as ?svg) where { bind(?_resource_iri as ?pageResource) { select (group_concat(?eline; separator="") as ?edgesvg) where { { select ?aF ?depF ?outF ((round(40 + ((1600-80) * (?rankF - 0.5)) / ?bnF)) as ?xF) ((110 + (?depF - 1) * 175) as ?yF) where { { select ?aF ?depF ?outF (count(distinct ?a2F) as ?rankF) where { { select ?aF (min(?dF1) as ?depF) (count(distinct ?toF1) as ?outF) where { npa:thisRepo npa:hasCurrentTrustState ?tsF1 . graph ?tsF1 { ?lF1 a npa:EndorsementLink ; npa:fromAgent ?aF ; npa:toAgent ?toF1 . ?sF1 a npa:AccountState ; npa:agent ?aF ; npa:depth ?dF1 } } group by ?aF } { select ?a2F (min(?dF2) as ?dep2F) (count(distinct ?toF2) as ?out2F) where { npa:thisRepo npa:hasCurrentTrustState ?tsF2 . graph ?tsF2 { ?lF2 a npa:EndorsementLink ; npa:fromAgent ?a2F ; npa:toAgent ?toF2 . ?sF2 a npa:AccountState ; npa:agent ?a2F ; npa:depth ?dF2 } } group by ?a2F } filter(?dep2F = ?depF && (?out2F > ?outF || (?out2F = ?outF && str(?a2F) <= str(?aF)))) } group by ?aF ?depF ?outF } { select ?depBF (count(*) as ?bnF) where { { select ?aBF (min(?dF3) as ?depBF) (count(distinct ?toF3) as ?outBF) where { npa:thisRepo npa:hasCurrentTrustState ?tsF3 . graph ?tsF3 { ?lF3 a npa:EndorsementLink ; npa:fromAgent ?aBF ; npa:toAgent ?toF3 . ?sF3 a npa:AccountState ; npa:agent ?aBF ; npa:depth ?dF3 } } group by ?aBF } } group by ?depBF } filter(?depBF = ?depF) } } { select ?aT ?depT ?outT ((round(40 + ((1600-80) * (?rankT - 0.5)) / ?bnT)) as ?xT) ((110 + (?depT - 1) * 175) as ?yT) where { { select ?aT ?depT ?outT (count(distinct ?a2T) as ?rankT) where { { select ?aT (min(?dT1) as ?depT) (count(distinct ?toT1) as ?outT) where { npa:thisRepo npa:hasCurrentTrustState ?tsT1 . graph ?tsT1 { ?lT1 a npa:EndorsementLink ; npa:fromAgent ?aT ; npa:toAgent ?toT1 . ?sT1 a npa:AccountState ; npa:agent ?aT ; npa:depth ?dT1 } } group by ?aT } { select ?a2T (min(?dT2) as ?dep2T) (count(distinct ?toT2) as ?out2T) where { npa:thisRepo npa:hasCurrentTrustState ?tsT2 . graph ?tsT2 { ?lT2 a npa:EndorsementLink ; npa:fromAgent ?a2T ; npa:toAgent ?toT2 . ?sT2 a npa:AccountState ; npa:agent ?a2T ; npa:depth ?dT2 } } group by ?a2T } filter(?dep2T = ?depT && (?out2T > ?outT || (?out2T = ?outT && str(?a2T) <= str(?aT)))) } group by ?aT ?depT ?outT } { select ?depBT (count(*) as ?bnT) where { { select ?aBT (min(?dT3) as ?depBT) (count(distinct ?toT3) as ?outBT) where { npa:thisRepo npa:hasCurrentTrustState ?tsT3 . graph ?tsT3 { ?lT3 a npa:EndorsementLink ; npa:fromAgent ?aBT ; npa:toAgent ?toT3 . ?sT3 a npa:AccountState ; npa:agent ?aBT ; npa:depth ?dT3 } } group by ?aBT } } group by ?depBT } filter(?depBT = ?depT) } } { select distinct ?aF ?aT where { npa:thisRepo npa:hasCurrentTrustState ?tsE . graph ?tsE { ?lE a npa:EndorsementLink ; npa:fromAgent ?aF ; npa:toAgent ?aT } filter(?aF != ?aT) } } bind(concat("<line x1='", str(?xF), "' y1='", str(?yF + 13), "' x2='", str(?xT), "' y2='", str(?yT - 15), "' stroke='#7aa7d0' stroke-opacity='0.45' stroke-width='1'></line>") as ?eline) } } { select (group_concat(?sline; separator="") as ?selfsvg) where { { select ?aS ?depS ?outS ((round(40 + ((1600-80) * (?rankS - 0.5)) / ?bnS)) as ?xS) ((110 + (?depS - 1) * 175) as ?yS) where { { select ?aS ?depS ?outS (count(distinct ?a2S) as ?rankS) where { { select ?aS (min(?dS1) as ?depS) (count(distinct ?toS1) as ?outS) where { npa:thisRepo npa:hasCurrentTrustState ?tsS1 . graph ?tsS1 { ?lS1 a npa:EndorsementLink ; npa:fromAgent ?aS ; npa:toAgent ?toS1 . ?sS1 a npa:AccountState ; npa:agent ?aS ; npa:depth ?dS1 } } group by ?aS } { select ?a2S (min(?dS2) as ?dep2S) (count(distinct ?toS2) as ?out2S) where { npa:thisRepo npa:hasCurrentTrustState ?tsS2 . graph ?tsS2 { ?lS2 a npa:EndorsementLink ; npa:fromAgent ?a2S ; npa:toAgent ?toS2 . ?sS2 a npa:AccountState ; npa:agent ?a2S ; npa:depth ?dS2 } } group by ?a2S } filter(?dep2S = ?depS && (?out2S > ?outS || (?out2S = ?outS && str(?a2S) <= str(?aS)))) } group by ?aS ?depS ?outS } { select ?depBS (count(*) as ?bnS) where { { select ?aBS (min(?dS3) as ?depBS) (count(distinct ?toS3) as ?outBS) where { npa:thisRepo npa:hasCurrentTrustState ?tsS3 . graph ?tsS3 { ?lS3 a npa:EndorsementLink ; npa:fromAgent ?aBS ; npa:toAgent ?toS3 . ?sS3 a npa:AccountState ; npa:agent ?aBS ; npa:depth ?dS3 } } group by ?aBS } } group by ?depBS } filter(?depBS = ?depS) } } { select distinct ?aS where { npa:thisRepo npa:hasCurrentTrustState ?tsS . graph ?tsS { ?lS a npa:EndorsementLink ; npa:fromAgent ?aS ; npa:toAgent ?aS } } } bind(concat("<circle cx='", str(?xS), "' cy='", str(?yS), "' r='", str(round(10 * (6 + 1.7 * (?outS * 1.0) / (1 + ?outS * 0.06))) / 10), "' fill='none' stroke='#d08a3a' stroke-width='1.4' stroke-dasharray='2 2'></circle>") as ?sline) } } { select (group_concat(?nline; separator="") as ?nodesvg) where { { select ?aN ?depN ?outN ((round(40 + ((1600-80) * (?rankN - 0.5)) / ?bnN)) as ?xN) ((110 + (?depN - 1) * 175) as ?yN) where { { select ?aN ?depN ?outN (count(distinct ?a2N) as ?rankN) where { { select ?aN (min(?dN1) as ?depN) (count(distinct ?toN1) as ?outN) where { npa:thisRepo npa:hasCurrentTrustState ?tsN1 . graph ?tsN1 { ?lN1 a npa:EndorsementLink ; npa:fromAgent ?aN ; npa:toAgent ?toN1 . ?sN1 a npa:AccountState ; npa:agent ?aN ; npa:depth ?dN1 } } group by ?aN } { select ?a2N (min(?dN2) as ?dep2N) (count(distinct ?toN2) as ?out2N) where { npa:thisRepo npa:hasCurrentTrustState ?tsN2 . graph ?tsN2 { ?lN2 a npa:EndorsementLink ; npa:fromAgent ?a2N ; npa:toAgent ?toN2 . ?sN2 a npa:AccountState ; npa:agent ?a2N ; npa:depth ?dN2 } } group by ?a2N } filter(?dep2N = ?depN && (?out2N > ?outN || (?out2N = ?outN && str(?a2N) <= str(?aN)))) } group by ?aN ?depN ?outN } { select ?depBN (count(*) as ?bnN) where { { select ?aBN (min(?dN3) as ?depBN) (count(distinct ?toN3) as ?outBN) where { npa:thisRepo npa:hasCurrentTrustState ?tsN3 . graph ?tsN3 { ?lN3 a npa:EndorsementLink ; npa:fromAgent ?aBN ; npa:toAgent ?toN3 . ?sN3 a npa:AccountState ; npa:agent ?aBN ; npa:depth ?dN3 } } group by ?aBN } } group by ?depBN } filter(?depBN = ?depN) } } { select ?aN (min(?nmN0) as ?nmN) (min(?statN0) as ?statN) where { npa:thisRepo npa:hasCurrentTrustState ?tsN . graph ?tsN { ?stN0 a npa:AccountState ; npa:agent ?aN ; npa:trustStatus ?statN0 . optional { ?aN foaf:name ?nmN0 } } } group by ?aN } bind(coalesce(?nmN, replace(str(?aN), "^.*/", "")) as ?label) bind(if(strlen(?label) > 17, concat(substr(?label, 1, 16), "\u2026"), ?label) as ?lab) bind(round(10 * (2.5 + 1.35 * (?outN * 1.0) / (1 + ?outN * 0.055))) / 10 as ?r) bind(if(?statN = npa:contested, "#c8553d", if(?statN = npa:skipped, "#8a8a8a", if(?depN = 1, "#1f6cb0", if(?depN = 2, "#3d8fd1", if(?depN = 3, "#6fb0e0", "#a9cdec"))))) as ?fill) bind(concat( "<a href='/user?id=", encode_for_uri(str(?aN)), "'>", "<circle cx='", str(?xN), "' cy='", str(?yN), "' r='", str(?r), "' fill='", ?fill, "' stroke='#0d3c61' stroke-width='0.8'></circle>", "<text x='", str(?xN), "' y='", str(?yN + ?r + 11), "' text-anchor='middle' font-family='sans-serif' font-size='9' fill='#0b73da'>", ?lab, "</text>", "<text x='", str(?xN), "' y='", str(?yN + ?r + 21), "' text-anchor='middle' font-family='sans-serif' font-size='8' fill='#666'>", str(?outN), "</text>", "</a>") as ?nline) } } } https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/provenance https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/assertion http://www.w3.org/ns/prov#wasAttributedTo https://orcid.org/0000-0002-1267-0234 https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/pubinfo https://orcid.org/0000-0002-1267-0234 http://xmlns.com/foaf/0.1/name Tobias Kuhn https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU http://purl.org/dc/terms/created 2026-08-25T14:08:00Z https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU http://purl.org/dc/terms/creator https://orcid.org/0000-0002-1267-0234 https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU http://purl.org/dc/terms/license https://creativecommons.org/licenses/by/4.0/ https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU http://purl.org/nanopub/x/embeds https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/get-trust-network-overview-svg https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU http://www.w3.org/2000/01/rdf-schema#label Get trust network overview diagram as SVG https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU https://w3id.org/np/o/ntemplate/wasCreatedFromProvenanceTemplate https://w3id.org/np/RA7lSq6MuK_TIC6JMSHvLtee3lpLoZDOqLJCLXevnrPoU https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU https://w3id.org/np/o/ntemplate/wasCreatedFromPubinfoTemplate https://w3id.org/np/RACJ58Gvyn91LqCKIO9zu1eijDQIeEff28iyDrJgjSJF8 https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU https://w3id.org/np/o/ntemplate/wasCreatedFromPubinfoTemplate https://w3id.org/np/RAukAcWHRDlkqxk7H2XNSegc1WnHI569INvNr-xdptDGI https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU https://w3id.org/np/o/ntemplate/wasCreatedFromTemplate https://w3id.org/np/RAEFAt-QcFK0ZhqfvlsmS10BnzGJA0xwOICZXkO-ai87k https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/sig http://purl.org/nanopub/x/hasAlgorithm RSA https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/sig http://purl.org/nanopub/x/hasPublicKey MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwUtewGCpT5vIfXYE1bmf/Uqu1ojqnWdYxv+ySO80ul8Gu7m8KoyPAwuvaPj0lvPtHrg000qMmkxzKhYknEjq8v7EerxZNYp5B3/3+5ZpuWOYAs78UnQVjbHSmDdmryr4D4VvvNIiUmd0yxci47dTFUj4DvfHnGd6hVe5+goqdcwIDAQAB https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/sig http://purl.org/nanopub/x/hasSignature GtE6eJ0eajxQxo1MAV9ruT+z/eYChK0kNJii31+xWtcYF+oTogHOrEL1vQBWKGzQqjxULvjhLdZMaIU4SDpvRhJQVOXIyr9okCN9wGPEd5s2t3bjwKf1zPUnqmuQ5kQJ5o1OXpJODwwUcQhEECxTiV2r2qNVC4AV1pJIcKRNjWI= https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/sig http://purl.org/nanopub/x/hasSignatureTarget https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU https://w3id.org/np/RAReI5TwNByIwqmZ7poMBf18cg5sCxVh2Sxjx1v6hHEEU/sig http://purl.org/nanopub/x/signedBy https://orcid.org/0000-0002-1267-0234