Nanopublication

< Home

ID

https://w3id.org/np/RAB0A48STv6efzv1khghLrvl-hMh88-1hBl6vOMJvzM2I

Formats

.trig | .trig.txt | .jelly | .jelly.txt | .jsonld | .jsonld.txt | .nq | .nq.txt | .xml | .xml.txt

Content

@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 &#8212; 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 &#8212; 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 &#8212; 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, \"&\", \"&amp;\"), \"<\", \"&lt;\"), \">\", \"&gt;\") 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, \"&\", \"&amp;\"), \"<\", \"&lt;\"), \">\", \"&gt;\") 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, \"&\", \"&amp;\"), \"<\", \"&lt;\"), \">\", \"&gt;\") 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, \"&\", \"&amp;\"), \"<\", \"&lt;\"), \">\", \"&gt;\") 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, \"&\", \"&amp;\"), \"<\", \"&lt;\"), \">\", \"&gt;\") 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, \"&\", \"&amp;\"), \"<\", \"&lt;\"), \">\", \"&gt;\") 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 .
}