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