https://w3id.org/np/RAB0A48STv6efzv1khghLrvl-hMh88-1hBl6vOMJvzM2I
.trig | .trig.txt | .jelly | .jelly.txt | .jsonld | .jsonld.txt | .nq | .nq.txt | .xml | .xml.txt
@prefix this: <https://w3id.org/np/RAB0A48STv6efzv1khghLrvl-hMh88-1hBl6vOMJvzM2I> .
@prefix sub: <https://w3id.org/np/RAB0A48STv6efzv1khghLrvl-hMh88-1hBl6vOMJvzM2I/> .
@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-project-summary-svg a grlc:grlc-query;
dct:description "Computes an SVG summary diagram of a FAIR project: the studies and other activities in the middle, the reused datasets that feed them on the left, the outputs they produce on the right, the findings and insights they yield above, and the people and their institutions below. Every box links to the resource it stands for.";
dct:license <http://www.apache.org/licenses/LICENSE-2.0>;
rdfs:label "Get project summary diagram as SVG";
grlc:endpoint <https://w3id.org/np/l/nanopub-query-1.1/repo/full>;
grlc:sparql """prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix dct: <http://purl.org/dc/terms/>
prefix np: <http://www.nanopub.org/nschema#>
prefix npa: <http://purl.org/nanopub/admin/>
prefix npx: <http://purl.org/nanopub/x/>
prefix gen: <https://w3id.org/kpxl/gen/terms/>
prefix ff: <https://w3id.org/fair/ff/terms/>
prefix obo: <http://purl.obolibrary.org/obo/>
prefix hycl: <http://purl.org/petapico/o/hycl#>
prefix cito: <http://purl.org/spar/cito/>
prefix foaf: <http://xmlns.com/foaf/0.1/>
select (concat(
'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 1120 ', str(((((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) + 46) + (?nppl * 16 + 14) + 30) + (?ninst * 16 + 14) + 24)),
'\" width=\"1120\" height=\"', str(((((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) + 46) + (?nppl * 16 + 14) + 30) + (?ninst * 16 + 14) + 24)), '\" font-family=\"sans-serif\">',
'<text x=\"34\" y=\"', str(48 - 10), '\" font-size=\"11\" font-weight=\"bold\" fill=\"#333\">Knowledge — findings and insights</text>',
'<rect x=\"20\" y=\"', str(48), '\" width=\"1080\" height=\"', str((?nkno * 16 + 14)),
'\" rx=\"4\" fill=\"#fff7cc\" stroke=\"#888\"></rect>',
'<text x=\"34\" y=\"', str(48), '\" font-size=\"10\" fill=\"#111\">', ?lineskno, '</text>',
'<text x=\"30\" y=\"', str((48 + (?nkno * 16 + 14) + 46) - 10), '\" font-size=\"11\" font-weight=\"bold\" fill=\"#333\">Inputs — reused data</text>',
'<rect x=\"20\" y=\"', str((48 + (?nkno * 16 + 14) + 46)), '\" width=\"400\" height=\"', str(((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14)),
'\" rx=\"4\" fill=\"#dcecf7\" stroke=\"#888\"></rect>',
'<text x=\"30\" y=\"', str((48 + (?nkno * 16 + 14) + 46)), '\" font-size=\"10\" fill=\"#111\">', ?linesin, '</text>',
'<text x=\"440\" y=\"', str((48 + (?nkno * 16 + 14) + 46) - 10), '\" font-size=\"11\" font-weight=\"bold\" fill=\"#333\">Activities — studies</text>',
'<rect x=\"430\" y=\"', str((48 + (?nkno * 16 + 14) + 46)), '\" width=\"420\" height=\"', str(((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14)),
'\" rx=\"4\" fill=\"#ffffff\" stroke=\"#888\"></rect>',
'<text x=\"440\" y=\"', str((48 + (?nkno * 16 + 14) + 46)), '\" font-size=\"10\" fill=\"#111\">', ?linesact, '</text>',
'<text x=\"860\" y=\"', str((48 + (?nkno * 16 + 14) + 46) - 10), '\" font-size=\"11\" font-weight=\"bold\" fill=\"#333\">Outputs</text>',
'<rect x=\"850\" y=\"', str((48 + (?nkno * 16 + 14) + 46)), '\" width=\"250\" height=\"', str(((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14)),
'\" rx=\"4\" fill=\"#dff0d8\" stroke=\"#888\"></rect>',
'<text x=\"860\" y=\"', str((48 + (?nkno * 16 + 14) + 46)), '\" font-size=\"10\" fill=\"#111\">', ?linesout, '</text>',
'<text x=\"30\" y=\"', str(((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) + 46) - 10), '\" font-size=\"11\" font-weight=\"bold\" fill=\"#333\">People</text>',
'<rect x=\"20\" y=\"', str(((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) + 46)), '\" width=\"1080\" height=\"', str((?nppl * 16 + 14)),
'\" rx=\"4\" fill=\"#ece4f5\" stroke=\"#888\"></rect>',
'<text x=\"30\" y=\"', str(((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) + 46)), '\" font-size=\"10\" fill=\"#111\">', ?linesppl, '</text>',
'<text x=\"30\" y=\"', str((((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) + 46) + (?nppl * 16 + 14) + 30) - 10), '\" font-size=\"11\" font-weight=\"bold\" fill=\"#333\">Institutions</text>',
'<rect x=\"20\" y=\"', str((((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) + 46) + (?nppl * 16 + 14) + 30)), '\" width=\"1080\" height=\"', str((?ninst * 16 + 14)),
'\" rx=\"4\" fill=\"#e8e8e8\" stroke=\"#888\"></rect>',
'<text x=\"30\" y=\"', str((((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) + 46) + (?nppl * 16 + 14) + 30)), '\" font-size=\"10\" fill=\"#111\">', ?linesinst, '</text>',
'<line x1=\"420\" y1=\"', str(((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) / 2)), '\" x2=\"424\" y2=\"', str(((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) / 2)), '\" stroke=\"#777\" stroke-width=\"2\"></line>',
'<path d=\"M 430 ', str(((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) / 2)), ' L 416 ', str(((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) / 2) - 6), ' L 416 ', str(((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) / 2) + 6), ' Z\" fill=\"#777\"></path>',
'<path d=\"M 850 ', str(((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) / 2)), ' L 836 ', str(((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) / 2) - 6), ' L 836 ', str(((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) / 2) + 6), ' Z\" fill=\"#777\"></path>',
'<path d=\"M 560 ', str((48 + (?nkno * 16 + 14) + 46) - 34), ' L 554 ', str((48 + (?nkno * 16 + 14) + 46) - 20), ' L 566 ', str((48 + (?nkno * 16 + 14) + 46) - 20), ' Z\" fill=\"#777\"></path>',
'<line x1=\"560\" y1=\"', str((48 + (?nkno * 16 + 14) + 46) - 20), '\" x2=\"560\" y2=\"', str(48 + (?nkno * 16 + 14)), '\" stroke=\"#777\" stroke-width=\"2\"></line>',
'<line x1=\"560\" y1=\"', str(((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) + 46) - 30), '\" x2=\"560\" y2=\"', str((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14)), '\" stroke=\"#777\" stroke-width=\"2\" stroke-dasharray=\"4 3\"></line>',
'<line x1=\"560\" y1=\"', str((((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) + 46) + (?nppl * 16 + 14) + 30) - 14), '\" x2=\"560\" y2=\"', str(((48 + (?nkno * 16 + 14) + 46) + ((if(?nin > ?nact, if(?nin > ?nout, ?nin, ?nout), if(?nact > ?nout, ?nact, ?nout))) * 16 + 14) + 46) + (?nppl * 16 + 14)), '\" stroke=\"#777\" stroke-width=\"2\" stroke-dasharray=\"4 3\"></line>',
'</svg>') as ?svg) (\"FAIR project summary\" as ?title)
where {
{
select (group_concat(distinct ?linekno; separator=\"\") as ?lineskno) (count(*) as ?nkno) where {
{
select ?irikno (min(?labelkno) as ?lblkno) where {
values ?_project_multi_iri {}
service <https://w3id.org/np/l/nanopub-query-1.1/repo/spaces> {
select (group_concat(?mpk; separator=\" \") as ?memberPubkeys) where {
graph npa:graph { <http://purl.org/nanopub/admin/thisRepo> npa:hasCurrentSpaceState ?stateG . }
values ?_project_multi_iri {}
graph ?stateG {
?_project_multi_iri npa:isMaintainedBy? ?space .
?ri a gen:RoleInstantiation ; npa:forSpace ?space ; npa:forAgent ?agent ; npa:hasRoleType ?roleType .
filter(?roleType in (gen:AdminRole, gen:MaintainerRole, gen:MemberRole))
?acct a npa:AccountState ; npa:agent ?agent ; npa:pubkey ?mpk .
}
}
}
graph npa:graph {
?nps npa:hasValidSignatureForPublicKeyHash ?pks ;
np:hasAssertion ?as ;
np:hasPublicationInfo ?pis .
filter not exists { ?ixs npx:invalidates ?nps ; npa:hasValidSignatureForPublicKeyHash ?pks . }
filter not exists { ?sxs npx:supersedes ?nps . }
}
filter(contains(?memberPubkeys, ?pks))
graph ?as {
?study a obo:OBI_0000066 ; dct:isPartOf ?_project_multi_iri .
}
graph npa:graph {
?npkno npa:hasValidSignatureForPublicKeyHash ?pkkno ;
np:hasAssertion ?akno ;
np:hasPublicationInfo ?pikno .
filter not exists { ?ixkno npx:invalidates ?npkno ; npa:hasValidSignatureForPublicKeyHash ?pkkno . }
filter not exists { ?sxkno npx:supersedes ?npkno . }
}
filter(contains(?memberPubkeys, ?pkkno))
graph ?akno {
?irikno a hycl:AIDA-Sentence ; cito:obtainsSupportFrom ?study .
}
optional { graph ?pikno { ?npkno rdfs:label ?lpkno } }
bind(coalesce(?lpkno, \"(finding)\") as ?labelkno)
} group by ?irikno
}
bind(if(strlen(?lblkno) > 168, concat(substr(?lblkno, 1, 165), \"...\"), ?lblkno) as ?tkno)
bind(replace(replace(replace(?tkno, \"&\", \"&\"), \"<\", \"<\"), \">\", \">\") as ?esckno)
bind(concat('<a href=\"/part?id=', encode_for_uri(str(?irikno)),
'\"><tspan x=\"34\" dy=\"16\">', ?esckno, '</tspan></a>') as ?linekno)
}
}
{
select (group_concat(distinct ?linein; separator=\"\") as ?linesin) (count(*) as ?nin) where {
{
select ?iriin (min(?labelin) as ?lblin) where {
values ?_project_multi_iri {}
service <https://w3id.org/np/l/nanopub-query-1.1/repo/spaces> {
select (group_concat(?mpk; separator=\" \") as ?memberPubkeys) where {
graph npa:graph { <http://purl.org/nanopub/admin/thisRepo> npa:hasCurrentSpaceState ?stateG . }
values ?_project_multi_iri {}
graph ?stateG {
?_project_multi_iri npa:isMaintainedBy? ?space .
?ri a gen:RoleInstantiation ; npa:forSpace ?space ; npa:forAgent ?agent ; npa:hasRoleType ?roleType .
filter(?roleType in (gen:AdminRole, gen:MaintainerRole, gen:MemberRole))
?acct a npa:AccountState ; npa:agent ?agent ; npa:pubkey ?mpk .
}
}
}
graph npa:graph {
?npin npa:hasValidSignatureForPublicKeyHash ?pkin ;
np:hasAssertion ?ain ;
np:hasPublicationInfo ?piin .
filter not exists { ?ixin npx:invalidates ?npin ; npa:hasValidSignatureForPublicKeyHash ?pkin . }
filter not exists { ?sxin npx:supersedes ?npin . }
}
filter(contains(?memberPubkeys, ?pkin))
graph ?ain {
?_project_multi_iri ff:reuses ?iriin .
}
optional { graph ?ain { ?iriin rdfs:label ?lain } }
optional { graph ?piin { ?iriin foaf:name ?lfin } }
optional { graph ?piin { ?iriin rdfs:label ?lqin } }
bind(coalesce(?lain, ?lfin, ?lqin, replace(str(?iriin), \"^.*[/#]\", \"\")) as ?labelin)
} group by ?iriin
}
bind(if(strlen(?lblin) > 42, concat(substr(?lblin, 1, 39), \"...\"), ?lblin) as ?tin)
bind(replace(replace(replace(?tin, \"&\", \"&\"), \"<\", \"<\"), \">\", \">\") as ?escin)
bind(concat('<a href=\"/part?id=', encode_for_uri(str(?iriin)),
'\"><tspan x=\"30\" dy=\"16\">', ?escin, '</tspan></a>') as ?linein)
}
}
{
select (group_concat(distinct ?lineact; separator=\"\") as ?linesact) (count(*) as ?nact) where {
{
select ?iriact (min(?labelact) as ?lblact) where {
values ?_project_multi_iri {}
service <https://w3id.org/np/l/nanopub-query-1.1/repo/spaces> {
select (group_concat(?mpk; separator=\" \") as ?memberPubkeys) where {
graph npa:graph { <http://purl.org/nanopub/admin/thisRepo> npa:hasCurrentSpaceState ?stateG . }
values ?_project_multi_iri {}
graph ?stateG {
?_project_multi_iri npa:isMaintainedBy? ?space .
?ri a gen:RoleInstantiation ; npa:forSpace ?space ; npa:forAgent ?agent ; npa:hasRoleType ?roleType .
filter(?roleType in (gen:AdminRole, gen:MaintainerRole, gen:MemberRole))
?acct a npa:AccountState ; npa:agent ?agent ; npa:pubkey ?mpk .
}
}
}
graph npa:graph {
?npact npa:hasValidSignatureForPublicKeyHash ?pkact ;
np:hasAssertion ?aact ;
np:hasPublicationInfo ?piact .
filter not exists { ?ixact npx:invalidates ?npact ; npa:hasValidSignatureForPublicKeyHash ?pkact . }
filter not exists { ?sxact npx:supersedes ?npact . }
}
filter(contains(?memberPubkeys, ?pkact))
graph ?aact {
?iriact a obo:OBI_0000066 ; dct:isPartOf ?_project_multi_iri .
}
optional { graph ?aact { ?iriact rdfs:label ?laact } }
optional { graph ?piact { ?iriact foaf:name ?lfact } }
optional { graph ?piact { ?iriact rdfs:label ?lqact } }
bind(coalesce(?laact, ?lfact, ?lqact, replace(str(?iriact), \"^.*[/#]\", \"\")) as ?labelact)
} group by ?iriact
}
bind(if(strlen(?lblact) > 44, concat(substr(?lblact, 1, 41), \"...\"), ?lblact) as ?tact)
bind(replace(replace(replace(?tact, \"&\", \"&\"), \"<\", \"<\"), \">\", \">\") as ?escact)
bind(concat('<a href=\"/part?id=', encode_for_uri(str(?iriact)),
'\"><tspan x=\"440\" dy=\"16\">', ?escact, '</tspan></a>') as ?lineact)
}
}
{
select (group_concat(distinct ?lineout; separator=\"\") as ?linesout) (count(*) as ?nout) where {
{
select ?iriout (min(?labelout) as ?lblout) where {
values ?_project_multi_iri {}
service <https://w3id.org/np/l/nanopub-query-1.1/repo/spaces> {
select (group_concat(?mpk; separator=\" \") as ?memberPubkeys) where {
graph npa:graph { <http://purl.org/nanopub/admin/thisRepo> npa:hasCurrentSpaceState ?stateG . }
values ?_project_multi_iri {}
graph ?stateG {
?_project_multi_iri npa:isMaintainedBy? ?space .
?ri a gen:RoleInstantiation ; npa:forSpace ?space ; npa:forAgent ?agent ; npa:hasRoleType ?roleType .
filter(?roleType in (gen:AdminRole, gen:MaintainerRole, gen:MemberRole))
?acct a npa:AccountState ; npa:agent ?agent ; npa:pubkey ?mpk .
}
}
}
graph npa:graph {
?npout npa:hasValidSignatureForPublicKeyHash ?pkout ;
np:hasAssertion ?aout ;
np:hasPublicationInfo ?piout .
filter not exists { ?ixout npx:invalidates ?npout ; npa:hasValidSignatureForPublicKeyHash ?pkout . }
filter not exists { ?sxout npx:supersedes ?npout . }
}
filter(contains(?memberPubkeys, ?pkout))
graph ?aout {
?_project_multi_iri ?relout ?iriout .
values ?relout { ff:has-article ff:has-dataset ff:has-software ff:has-method ff:has-dmp ff:has-presentation ff:has-blog-post ff:has-media-coverage ff:has-social-post ff:has-podcast ff:has-discussion }
}
optional { graph ?aout { ?iriout rdfs:label ?laout } }
optional { graph ?piout { ?iriout foaf:name ?lfout } }
optional { graph ?piout { ?iriout rdfs:label ?lqout } }
bind(coalesce(?laout, ?lfout, ?lqout, replace(str(?iriout), \"^.*[/#]\", \"\")) as ?labelout)
} group by ?iriout
}
bind(if(strlen(?lblout) > 42, concat(substr(?lblout, 1, 39), \"...\"), ?lblout) as ?tout)
bind(replace(replace(replace(?tout, \"&\", \"&\"), \"<\", \"<\"), \">\", \">\") as ?escout)
bind(concat('<a href=\"/part?id=', encode_for_uri(str(?iriout)),
'\"><tspan x=\"860\" dy=\"16\">', ?escout, '</tspan></a>') as ?lineout)
}
}
{
select (group_concat(distinct ?lineppl; separator=\"\") as ?linesppl) (count(*) as ?nppl) where {
{
select ?irippl (min(?labelppl) as ?lblppl) where {
values ?_project_multi_iri {}
service <https://w3id.org/np/l/nanopub-query-1.1/repo/spaces> {
select (group_concat(?mpk; separator=\" \") as ?memberPubkeys) where {
graph npa:graph { <http://purl.org/nanopub/admin/thisRepo> npa:hasCurrentSpaceState ?stateG . }
values ?_project_multi_iri {}
graph ?stateG {
?_project_multi_iri npa:isMaintainedBy? ?space .
?ri a gen:RoleInstantiation ; npa:forSpace ?space ; npa:forAgent ?agent ; npa:hasRoleType ?roleType .
filter(?roleType in (gen:AdminRole, gen:MaintainerRole, gen:MemberRole))
?acct a npa:AccountState ; npa:agent ?agent ; npa:pubkey ?mpk .
}
}
}
graph npa:graph {
?npppl npa:hasValidSignatureForPublicKeyHash ?pkppl ;
np:hasAssertion ?appl ;
np:hasPublicationInfo ?pippl .
filter not exists { ?ixppl npx:invalidates ?npppl ; npa:hasValidSignatureForPublicKeyHash ?pkppl . }
filter not exists { ?sxppl npx:supersedes ?npppl . }
}
filter(contains(?memberPubkeys, ?pkppl))
graph ?appl {
?_project_multi_iri ?relppl ?irippl .
values ?relppl { ff:has-principal-investigator ff:has-participant ff:has-data-steward gen:hasProjectLead }
}
optional { graph ?appl { ?irippl rdfs:label ?lappl } }
optional { graph ?pippl { ?irippl foaf:name ?lfppl } }
optional { graph ?pippl { ?irippl rdfs:label ?lqppl } }
bind(coalesce(?lappl, ?lfppl, ?lqppl, replace(str(?irippl), \"^.*[/#]\", \"\")) as ?labelppl)
} group by ?irippl
}
bind(if(strlen(?lblppl) > 78, concat(substr(?lblppl, 1, 75), \"...\"), ?lblppl) as ?tppl)
bind(replace(replace(replace(?tppl, \"&\", \"&\"), \"<\", \"<\"), \">\", \">\") as ?escppl)
bind(concat('<a href=\"/part?id=', encode_for_uri(str(?irippl)),
'\"><tspan x=\"30\" dy=\"16\">', ?escppl, '</tspan></a>') as ?lineppl)
}
}
{
select (group_concat(distinct ?lineinst; separator=\"\") as ?linesinst) (count(*) as ?ninst) where {
{
select ?iriinst (min(?labelinst) as ?lblinst) where {
values ?_project_multi_iri {}
service <https://w3id.org/np/l/nanopub-query-1.1/repo/spaces> {
select (group_concat(?mpk; separator=\" \") as ?memberPubkeys) where {
graph npa:graph { <http://purl.org/nanopub/admin/thisRepo> npa:hasCurrentSpaceState ?stateG . }
values ?_project_multi_iri {}
graph ?stateG {
?_project_multi_iri npa:isMaintainedBy? ?space .
?ri a gen:RoleInstantiation ; npa:forSpace ?space ; npa:forAgent ?agent ; npa:hasRoleType ?roleType .
filter(?roleType in (gen:AdminRole, gen:MaintainerRole, gen:MemberRole))
?acct a npa:AccountState ; npa:agent ?agent ; npa:pubkey ?mpk .
}
}
}
graph npa:graph {
?npinst npa:hasValidSignatureForPublicKeyHash ?pkinst ;
np:hasAssertion ?ainst ;
np:hasPublicationInfo ?piinst .
filter not exists { ?ixinst npx:invalidates ?npinst ; npa:hasValidSignatureForPublicKeyHash ?pkinst . }
filter not exists { ?sxinst npx:supersedes ?npinst . }
}
filter(contains(?memberPubkeys, ?pkinst))
graph ?ainst {
?_project_multi_iri ?relinst ?iriinst .
values ?relinst { ff:has-lead-institution ff:has-partner-institution ff:has-funder }
}
optional { graph ?ainst { ?iriinst rdfs:label ?lainst } }
optional { graph ?piinst { ?iriinst foaf:name ?lfinst } }
optional { graph ?piinst { ?iriinst rdfs:label ?lqinst } }
bind(coalesce(?lainst, ?lfinst, ?lqinst, replace(str(?iriinst), \"^.*[/#]\", \"\")) as ?labelinst)
} group by ?iriinst
}
bind(if(strlen(?lblinst) > 78, concat(substr(?lblinst, 1, 75), \"...\"), ?lblinst) as ?tinst)
bind(replace(replace(replace(?tinst, \"&\", \"&\"), \"<\", \"<\"), \">\", \">\") as ?escinst)
bind(concat('<a href=\"/part?id=', encode_for_uri(str(?iriinst)),
'\"><tspan x=\"30\" dy=\"16\">', ?escinst, '</tspan></a>') as ?lineinst)
}
}
}""" .
}
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-14T09:00:00Z"^^xsd:dateTime;
dct:creator orcid:0000-0002-1267-0234;
dct:license <https://creativecommons.org/licenses/by/4.0/>;
npx:embeds sub:get-project-summary-svg;
rdfs:label "Get project summary diagram as SVG";
nt:wasCreatedFromProvenanceTemplate <http://purl.org/np/RAcm8OurwUk15WOgBM9wySo-T3a5h6as4K8YR5MBrrxUc>;
nt:wasCreatedFromPubinfoTemplate <https://w3id.org/np/RACJ58Gvyn91LqCKIO9zu1eijDQIeEff28iyDrJgjSJF8>,
<https://w3id.org/np/RARW4MsFkHuwjycNElvEVtuMjpf4yWDL10-0C5l2MqqRQ>, <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 "RaBtF/Och70Ssh7fjSgp8k+8awAywZdy94EaJy63+5MiFTzbauz9rH77PLU+4hIMP6QyGd7JOcOclDA8eBmy6Jzm5Iz1wanUoKIkJN8Wc5lJLdhDnXk6SYcf/QopIHlWyi3N8vhUWbQGMbX1cnRoU/1eYWdiRDwOPn5J507M+Ng=";
npx:hasSignatureTarget this:;
npx:signedBy orcid:0000-0002-1267-0234 .
}