@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-openaire-project-outputs a grlc:grlc-query; dct:description "Returns the contributed links stating that a research product is an output of a funded project, with labels and contributor, excluding retracted or superseded nanopublications (example nanopublications are included, marked in the flags column). The status column links the latest valid approval or disapproval by a member of the given space."; dct:license ; rdfs:label "Get OpenAIRE project outputs"; grlc:endpoint ; grlc:sparql """prefix np: prefix npa: prefix npx: prefix nt: prefix dct: prefix foaf: prefix owl: prefix rdfs: prefix cito: prefix frbr: prefix skos: prefix frapo: prefix prov: prefix gen: prefix xsd: select ?product ?product_label ?project ?project_label ?flags ?creator ?creator_label ?date ?action_target ?np ?np_label ?status ?status_label where { { select ?product ?product_label ?project ?project_label (if(?isExample, \"example\", \"\") as ?flags) ?creator ?creator_label ?date (?np as ?action_target) ?np (\"^\" as ?np_label) (max(if(contains(?memberPubkeys, ?vKey), ?vTag, \"\")) as ?latestTag) where { values ?_space_multi_iri {} service { select (group_concat(?mpk; separator=\" \") as ?memberPubkeys) where { graph npa:graph { npa:hasCurrentSpaceState ?stateG . } values ?_space_multi_iri {} graph ?stateG { ?ri a gen:RoleInstantiation ; npa:forSpace ?_space_multi_iri ; 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 { ?np npa:hasValidSignatureForPublicKeyHash ?pk . filter not exists { ?inp npx:invalidates ?np ; npa:hasValidSignatureForPublicKeyHash ?pk . } filter not exists { ?sup npx:supersedes ?np . } ?np dct:created ?date . ?np np:hasAssertion ?a . ?np np:hasPublicationInfo ?pi . } graph ?a { ?product frapo:isOutputOf ?project . } filter( ( strstarts(str(?product), \"https://doi.org/\") || strstarts(str(?product), \"https://api.openaire.eu/\") ) && ( strstarts(str(?project), \"https://doi.org/\") || strstarts(str(?project), \"https://api.openaire.eu/\") ) ) optional { graph ?pi { ?product nt:hasLabelFromApi ?product_label . } } optional { graph ?pi { ?project nt:hasLabelFromApi ?project_label . } } optional { graph npa:graph { ?np dct:creator ?creator . } } optional { graph ?pi { ?creator foaf:name ?creator_label . } } bind(exists { graph npa:graph { ?np npx:hasNanopubType npx:ExampleNanopub . } } as ?isExample) optional { { select (?vTarget as ?np) ?vKey ?vTag where { { service { graph npa:graph { ?vnp npa:hasValidSignatureForPublicKeyHash ?vKey . filter not exists { ?vinp npx:invalidates ?vnp ; npa:hasValidSignatureForPublicKeyHash ?vKey . } filter not exists { ?vsup npx:supersedes ?vnp . } ?vnp dct:created ?vDate . ?vnp np:hasAssertion ?va . ?vnp np:hasPublicationInfo ?vpi . } graph ?va { ?vagent npx:approvesOf ?vTarget . } optional { graph ?vpi { ?vagent foaf:name ?vName . } } bind(concat(str(?vDate), \">approved|\", coalesce(?vName, str(?vagent)), \"|\", str(?vnp)) as ?vTag) } } union { service { graph npa:graph { ?vnp npa:hasValidSignatureForPublicKeyHash ?vKey . filter not exists { ?vinp npx:invalidates ?vnp ; npa:hasValidSignatureForPublicKeyHash ?vKey . } filter not exists { ?vsup npx:supersedes ?vnp . } ?vnp dct:created ?vDate . ?vnp np:hasAssertion ?va . ?vnp np:hasPublicationInfo ?vpi . } graph ?va { ?vagent npx:disapprovesOf ?vTarget . } optional { graph ?vpi { ?vagent foaf:name ?vName . } } bind(concat(str(?vDate), \">disapproved|\", coalesce(?vName, str(?vagent)), \"|\", str(?vnp)) as ?vTag) } } } } } } group by ?product ?product_label ?project ?project_label ?creator ?creator_label ?date ?np ?isExample ?memberPubkeys } bind(coalesce(?latestTag, \"\") as ?lt) bind(strbefore(strafter(?lt, \">\"), \"|\") as ?verdict) bind(strafter(?lt, \"|\") as ?vrest) bind(strbefore(?vrest, \"|\") as ?vname) bind(iri(strafter(?vrest, \"|\")) as ?status) bind(xsd:dateTime(strbefore(?lt, \">\")) as ?vdt) bind((year(now())*525600 + month(now())*43800 + day(now())*1440 + hours(now())*60 + minutes(now())) - (year(?vdt)*525600 + month(?vdt)*43800 + day(?vdt)*1440 + hours(?vdt)*60 + minutes(?vdt)) as ?minsAgo) bind(coalesce(if(?minsAgo < 1, \"just now\", if(?minsAgo < 60, concat(str(?minsAgo), if(?minsAgo = 1, \" minute ago\", \" minutes ago\")), if(?minsAgo < 1440, concat(str(xsd:integer(floor(?minsAgo / 60))), if(xsd:integer(floor(?minsAgo / 60)) = 1, \" hour ago\", \" hours ago\")), concat(str(xsd:integer(floor(?minsAgo / 1440))), if(xsd:integer(floor(?minsAgo / 1440)) = 1, \" day ago\", \" days ago\"))))), \"\") as ?ago) bind(coalesce(if(?lt != \"\", concat(?verdict, \" by \", ?vname, \" \", ?ago), \"\"), \"\") as ?status_label) } order by desc(?date)""" . } 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-07-29T17:53:26Z"^^xsd:dateTime; dct:creator orcid:0000-0002-1267-0234; dct:license ; npx:embeds sub:get-openaire-project-outputs; npx:supersedes ; rdfs:label "Get OpenAIRE project outputs"; nt:wasCreatedFromProvenanceTemplate ; nt:wasCreatedFromPubinfoTemplate , , , ; nt:wasCreatedFromTemplate . sub:sig npx:hasAlgorithm "RSA"; npx:hasPublicKey "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwUtewGCpT5vIfXYE1bmf/Uqu1ojqnWdYxv+ySO80ul8Gu7m8KoyPAwuvaPj0lvPtHrg000qMmkxzKhYknEjq8v7EerxZNYp5B3/3+5ZpuWOYAs78UnQVjbHSmDdmryr4D4VvvNIiUmd0yxci47dTFUj4DvfHnGd6hVe5+goqdcwIDAQAB"; npx:hasSignature "IGJF2Ci4U4BnY7Dgf9oYWOAokQqtdmelhfYCV+7Bijnu2wUwufsAhB6RO6wnShgc5aYaAPjQnpO5P6620Ud9DTxUPfFEzu11mBkAt0BVehsrLSEDsGQ8Fa2314e0qE6CeziOtpGQ7Pu+XbEOeSTrutDsXMbqiBWt2z65LaLW4MU="; npx:hasSignatureTarget this:; npx:signedBy orcid:0000-0002-1267-0234 . }