@prefix this: . @prefix sub: . @prefix np: . @prefix grlc: . @prefix dct: . @prefix nt: . @prefix npx: . @prefix xsd: . @prefix rdfs: . @prefix orcid: . @prefix prov: . @prefix foaf: . sub:Head { this: a np:Nanopublication; np:hasAssertion sub:assertion; np:hasProvenance sub:provenance; np:hasPublicationInfo sub:pubinfo . } sub:assertion { sub:get-community-recommended-fsrs a grlc:grlc-query; dct:description "For a FAIR Implementation Community, lists the FAIR Supporting Resources (FSRs) it recommends (fip:recommended-by), with the FSR types and a checkmark when the latest metadata nanopublication of the FSR is curated by the GO FAIR Foundation. An FSR whose newest nanopublication a GO FAIR Foundation curator has disapproved of (npx:disapprovesOf, signed with a key from the curators list and not invalidated) is left out, as in the Recommended FSRs list of the space."; dct:license ; rdfs:label "Get the FSRs recommended by a community"; grlc:endpoint ; grlc:sparql """prefix rdf: prefix rdfs: prefix np: prefix npa: prefix npx: prefix xsd: prefix dct: prefix owl: prefix foaf: prefix prov: prefix skos: prefix schema: prefix gen: prefix fip: prefix tpff: prefix search: select ?fsr (coalesce(min(?fsr_label_x), replace(str(?fsr), \"^.*[/#]\", \"\")) as ?fsr_label) (group_concat(distinct str(?type); separator=\" \") as ?types_multi_iri) (group_concat(distinct ?type_label; separator=\"\\n\") as ?types_label_multi) (max(?curated_x) as ?curated) (min(?rnp) as ?np) (\"^\" as ?np_label) where { { select ?curators_a where { graph npa:graph { npa:hasValidSignatureForPublicKey ?curators_pk . ?curators_np npa:hasValidSignatureForPublicKey ?curators_pk ; np:hasAssertion ?curators_a . filter not exists { ?curators_x npx:invalidates ?curators_np ; npa:hasValidSignatureForPublicKey ?curators_pk . } } graph npa:networkGraph { ?curators_np (npx:supersedes)* . filter not exists { ?curators_y npx:supersedes ?curators_np } } } } graph npa:graph { ?rnp npx:hasNanopubType fip:recommended-by ; np:hasAssertion ?ra ; npa:hasValidSignatureForPublicKey ?rpk . filter not exists { ?rx npx:invalidates ?rnp ; npa:hasValidSignatureForPublicKey ?rpk . } } graph ?ra { ?fsr fip:recommended-by ?_community_iri . } optional { graph npa:graph { ?fsrnp npx:introduces|npx:describes ?fsr ; rdfs:label ?fsr_label_x ; npa:hasValidSignatureForPublicKey ?spk ; dct:created ?sdate . ?fsrnp npx:hasNanopubType ?sft . values ?sft { fip:FAIR-Enabling-Resource fip:FAIR-Supporting-Resource } filter not exists { ?fsrnp npx:hasNanopubType npx:ExampleNanopub . } filter not exists { ?sx npx:invalidates ?fsrnp ; npa:hasValidSignatureForPublicKey ?spk . } } } optional { graph npa:graph { ?fsrnp npx:hasNanopubType ?type . } filter(strstarts(str(?type), \"https://w3id.org/fair/fip/terms/\")) filter(?type not in (fip:FAIR-Enabling-Resource, fip:FAIR-Supporting-Resource, fip:Available-FAIR-Enabling-Resource, fip:Available-FAIR-Supporting-Resource, fip:FAIR-Enabling-Resource-to-be-Developed, fip:FAIR-Supporting-Resource-to-be-Developed)) bind(replace(replace(str(?type), \"^.*/\", \"\"), \"-\", \" \") as ?type_label) } optional { graph ?qa { ?qualifier npx:qualifies ?fsrnp . } values ?qualifier { } graph npa:graph { ?qnp np:hasAssertion ?qa ; npa:hasValidSignatureForPublicKey ?qpk . filter not exists { ?qx npx:invalidates ?qnp ; npa:hasValidSignatureForPublicKey ?qpk . } } graph ?curators_a { ?qk npx:hasPublicKey ?qpk . } } # Left out when the newest nanopublication of the FSR is curator-disapproved, as in the space's Recommended FSRs. filter not exists { graph npa:graph { ?ndn npx:introduces|npx:describes ?fsr . } graph ?dan { ?disapprovern npx:disapprovesOf ?ndn . } graph npa:graph { ?dnpn np:hasAssertion ?dan ; npa:hasValidSignatureForPublicKey ?dpkn . filter not exists { ?dxn npx:invalidates ?dnpn ; npa:hasValidSignatureForPublicKey ?dpkn . } } graph ?curators_a { ?dkn npx:hasPublicKey ?dpkn . } graph npa:graph { ?ndn npx:hasNanopubType ?ndtn ; npa:hasValidSignatureForPublicKey ?ndpkn ; dct:created ?nddn . filter(?ndtn in (fip:FAIR-Enabling-Resource, fip:FAIR-Supporting-Resource)) filter not exists { ?ndxn npx:invalidates ?ndn ; npa:hasValidSignatureForPublicKey ?ndpkn . } filter not exists { ?ndn npx:hasNanopubType npx:ExampleNanopub . } filter not exists { ?nnn npx:introduces|npx:describes ?fsr ; npx:hasNanopubType ?nntn ; npa:hasValidSignatureForPublicKey ?nnpkn ; dct:created ?nndn . filter(?nntn in (fip:FAIR-Enabling-Resource, fip:FAIR-Supporting-Resource)) filter(?nndn > ?nddn) filter not exists { ?nnxn npx:invalidates ?nnn ; npa:hasValidSignatureForPublicKey ?nnpkn . } filter not exists { ?nnn npx:hasNanopubType npx:ExampleNanopub . } } } } bind(if(bound(?qnp), \"✓\", \"\") as ?curated_x) } group by ?fsr order by ?fsr_label """ . } 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-11-04T09:46:28Z"^^xsd:dateTime; dct:creator ; dct:license ; npx:embeds sub:get-community-recommended-fsrs; npx:supersedes ; rdfs:label "Get the FSRs recommended by a community"; nt:wasCreatedFromProvenanceTemplate ; nt:wasCreatedFromPubinfoTemplate , ; nt:wasCreatedFromTemplate . sub:sig npx:hasAlgorithm "RSA"; npx:hasPublicKey "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzZAkv4Mu1YSUxQMriBnhYunqosX5wpuQ3FjUyzW8wTC51wjCmhsChyhS+mCx7Od+2MTDpdhxDWA+pH1r9AX508X2rIY/sbpMS+pd56e0qKPQ0t4folln1TgamPN9iOlY/yLc2x27AdipWIGXUdtL2iAcb+P/Y5dQS2AkHMS3lP2e5JBL5/bD/10qvTLKvdsqIKts8qjuLpxr9CFbsS2gLjMkXL5D2IsJ0cL5sgmIfS1inLVxIfXrS/OgqYNFqeNznUYCVWfo0g7DKjnjiICz3omeQeJFLYwlJ6PhUhYDQS6O318DGwUCwhnuXbBbwL9evZa2I/0Pwu5xpZdNLYJ5UwIDAQAB"; npx:hasSignature "o8EZ+wRfTYrywbj89h3VNWY05mNUINrknuXo+FP5ersVMgugVIVcO10rkdtG5CjzlR2jcZSZKo6+t0R+hS4z2iV2ExAZAAdv51ZdNAt9a/c3qIOpG4youQnxHZGOLIiWxnE4cga1vtI1cUeYCl/s8vqRAlBeDNKJTDQz1P2Kx3cs6oxd5zWanZctaKzK4wqh5TH7aRFB6V06CwESDxbCnqyt/idxA7HI9KJjPwl1ZB2cG8hn0Rww9lumU57MnO3P3w1+MAQa3qevrmOpVFao3PPMH2OlKithoAZS6FoQMUxjccHZeRVX62iYNN6avNq9rICNR6UmaAKLl7Wrqyo2uQ=="; npx:hasSignatureTarget this:; npx:signedBy . }