https://w3id.org/np/RAf608SUQKgbfzIYCV12C1DnuQNOx84fiwg7L84sq0AZQ
.trig | .trig.txt | .jelly | .jelly.txt | .jsonld | .jsonld.txt | .nq | .nq.txt | .xml | .xml.txt
@prefix this: <https://w3id.org/np/RAf608SUQKgbfzIYCV12C1DnuQNOx84fiwg7L84sq0AZQ> .
@prefix sub: <https://w3id.org/np/RAf608SUQKgbfzIYCV12C1DnuQNOx84fiwg7L84sq0AZQ/> .
@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-time-limited-space-info a grlc:grlc-query;
dct:description "Returns key-value facts for display on the page of a time-limited space (project, initiative, campaign, or event): its type(s), date, location, description(s), and admins. Type, date, location, and description are read from a single winning definition nanopub: among all validly signed, non-invalidated nanopubs that introduce the resource and type it as gen:Space or gen:MaintainedResource, the one with the latest dct:created wins (ties broken by nanopub URI). This matters because successive definitions are chained by root definition rather than by npx:supersedes, and a resource IRI can be claimed by more than one space-ref, so the earlier plain not-invalidated filter merged the values of every past definition into one row. Admins are the validated admins (npa:hasRoleType gen:AdminRole) of the governing space, resolved via the spaces repository. An admin's display name is taken from the foaf:name in the spaces repository, which is only present for agents who have published an introduction; when that is absent it falls back to the foaf:name recorded in the pubinfo of the grant nanopub that materialised the role (npa:viaNanopub), and only then to the bare agent URI. Admins are grouped by agent so that each contributes exactly one value and one label, keeping the two lists aligned even when an agent holds the role through several grants naming them differently. The date row shows the start and end dates; when both fall on the same day, it shows the day with the start and end times (and the timezone offset); when the end date is absent, only the start date is shown. The location row shows the location URI as a link. Date and location rows are omitted when the corresponding values are not given, as is any row whose value is empty. Each property occupies one row; the Value column is a multi-value cell so properties with several values (multiple types or admins) list them all in a single row. Type labels are derived from the concatenated type IRIs by a single regex so the value and label lists always stay aligned. Both columns use the '_noheader' convention so the redundant header row is dropped.";
dct:license <http://www.apache.org/licenses/LICENSE-2.0>;
rdfs:label "Get time-limited space info";
grlc:endpoint <https://w3id.org/np/l/nanopub-query-1.1/repo/full>;
grlc:sparql """prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix dct: <http://purl.org/dc/terms/>
prefix foaf: <http://xmlns.com/foaf/0.1/>
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 schema: <http://schema.org/>
select distinct ?Property_noheader ?Property_label ?Value_multi_val_noheader ?Value_label_multi where {
values ?_resource_multi_iri {}
{
select ?defNpS
(group_concat(distinct ?typeIriS; separator=\"\\n\") as ?typeVal)
(group_concat(distinct ?descEsc; separator=\"\\n\") as ?descVal)
(min(?startDate0) as ?startDate)
(min(?endDate0) as ?endDate)
(min(?locationS0) as ?locationS)
where {
values ?_resource_multi_iri {}
{
select (max(?npS1) as ?defNpS) where {
{
select (max(?c0) as ?maxC) where {
values ?_resource_multi_iri {}
graph npa:graph {
?np0 npx:introduces ?_resource_multi_iri ;
npa:hasValidSignatureForPublicKeyHash ?pk0 ;
np:hasAssertion ?a0 ;
dct:created ?c0 .
filter not exists { ?inv0 npx:invalidates ?np0 ; npa:hasValidSignatureForPublicKeyHash ?pk0 . }
}
graph ?a0 { ?_resource_multi_iri a ?bt0 . filter(?bt0 in (gen:Space, gen:MaintainedResource)) }
}
}
values ?_resource_multi_iri {}
graph npa:graph {
?np1 npx:introduces ?_resource_multi_iri ;
npa:hasValidSignatureForPublicKeyHash ?pk1 ;
np:hasAssertion ?a1 ;
dct:created ?maxC .
filter not exists { ?inv1 npx:invalidates ?np1 ; npa:hasValidSignatureForPublicKeyHash ?pk1 . }
}
graph ?a1 { ?_resource_multi_iri a ?bt1 . filter(?bt1 in (gen:Space, gen:MaintainedResource)) }
bind(str(?np1) as ?npS1)
}
}
bind(iri(?defNpS) as ?defNp)
graph npa:graph { ?defNp np:hasAssertion ?a . }
optional {
graph ?a { ?_resource_multi_iri a ?typeIri . filter(?typeIri != gen:Space && ?typeIri != gen:MaintainedResource) }
bind(str(?typeIri) as ?typeIriS)
}
optional {
graph ?a { ?_resource_multi_iri dct:description ?desc . }
bind(replace(replace(str(?desc), \"\\\\\\\\\", \"\\\\\\\\\\\\\\\\\"), \"[\\r\\n]+\", \"\\\\\\\\n\") as ?descEsc)
}
optional { graph ?a { ?_resource_multi_iri schema:startDate ?startDate0 . } }
optional { graph ?a { ?_resource_multi_iri schema:endDate ?endDate0 . } }
optional { graph ?a { ?_resource_multi_iri schema:location ?location0 . } bind(str(?location0) as ?locationS0) }
} group by ?defNpS
}
bind(replace(?typeVal, \"[^\\n]*[/#]\", \"\") as ?typeLabel)
optional {
select (group_concat(?admin2; separator=\"\\n\") as ?adminVal) (group_concat(?adminName; separator=\"\\n\") as ?adminLabel) where {
select ?admin2 (min(?adminNameC) as ?adminName) where {
values ?_resource_multi_iri {}
service <https://w3id.org/np/l/nanopub-query-1.1/repo/spaces> {
graph npa:graph { <http://purl.org/nanopub/admin/thisRepo> npa:hasCurrentSpaceState ?g . }
optional { graph ?g { ?_resource_multi_iri npa:isMaintainedBy ?maint . } }
bind(coalesce(?maint, ?_resource_multi_iri) as ?adminSpace)
graph ?g { ?ri a gen:RoleInstantiation ; npa:forSpace ?adminSpace ; npa:hasRoleType gen:AdminRole ; npa:forAgent ?admin . }
optional { graph ?g { ?ri npa:viaNanopub ?viaNp . } }
optional { graph ?g { ?admin foaf:name ?adminName0 . } }
}
optional {
graph npa:graph { ?viaNp np:hasPublicationInfo ?viaPi . }
graph ?viaPi { ?admin foaf:name ?grantName . }
}
bind(coalesce(?adminName0, ?grantName, str(?admin)) as ?adminNameC)
bind(str(?admin) as ?admin2)
} group by ?admin2
} having (count(?admin2) > 0)
}
bind(coalesce(substr(str(?startDate), 1, 10), str(?startDate)) as ?sDay)
bind(coalesce(substr(str(?endDate), 1, 10), \"\") as ?eDay)
bind(coalesce(substr(str(?startDate), 12, 5), \"\") as ?sTime)
bind(coalesce(substr(str(?endDate), 12, 5), \"\") as ?eTime)
bind(coalesce(replace(substr(str(?startDate), 17), \"^(:[0-9][0-9](\\\\.[0-9]+)?)?\", \"\"), \"\") as ?tzRaw)
bind(if(?tzRaw = \"Z\", \"UTC\", if(?tzRaw != \"\", concat(\"UTC\", ?tzRaw), \"\")) as ?tzDisp)
bind(
if(?eDay != \"\",
if(?sDay = ?eDay,
if(?sTime != \"\" && ?eTime != \"\",
concat(?sDay, \", \", ?sTime, \"–\", ?eTime, if(?tzDisp != \"\", concat(\" (\", ?tzDisp, \")\"), \"\")),
?sDay),
concat(?sDay, \" – \", ?eDay)),
?sDay)
as ?dateVal)
values (?key ?Property_noheader ?Property_label) {
('Type' rdf:type 'Type:')
('Date' schema:startDate 'Date:')
('Location' schema:location 'Location:')
('Description' dct:description 'Description:')
('Admins' gen:hasAdmin 'Admins:')
}
bind(if(?key='Type', ?typeVal, if(?key='Date', ?dateVal, if(?key='Location', ?locationS, if(?key='Description', ?descVal, ?adminVal)))) as ?Value_multi_val_noheader)
filter(bound(?Value_multi_val_noheader) && ?Value_multi_val_noheader != \"\")
bind(if(?key='Type', ?typeLabel, if(?key='Admins', ?adminLabel, '')) as ?Value_label_multi)
}
order by (if(?key='Type', 1, if(?key='Date', 2, if(?key='Location', 3, if(?key='Description', 4, 5)))))""" .
}
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-09-09T09:06:54Z"^^xsd:dateTime;
dct:creator orcid:0000-0002-1267-0234;
dct:license <https://creativecommons.org/licenses/by/4.0/>;
npx:embeds sub:get-time-limited-space-info;
npx:supersedes <https://w3id.org/np/RAiBVEbfU6fUcmjiTsQfZfZ-ezTISdI2_B1EKs-XfchjI>;
rdfs:label "Get time-limited space info";
nt:wasCreatedFromProvenanceTemplate <https://w3id.org/np/RA7lSq6MuK_TIC6JMSHvLtee3lpLoZDOqLJCLXevnrPoU>;
nt:wasCreatedFromPubinfoTemplate <https://w3id.org/np/RA-N4_kFxcruvBTlo1yJv29E4SLOXsx5KO_th69PprMrA>,
<https://w3id.org/np/RACJ58Gvyn91LqCKIO9zu1eijDQIeEff28iyDrJgjSJF8>, <https://w3id.org/np/RAoTD7udB2KtUuOuAe74tJi1t3VzK0DyWS7rYVAq1GRvw>;
nt:wasCreatedFromTemplate <https://w3id.org/np/RAEFAt-QcFK0ZhqfvlsmS10BnzGJA0xwOICZXkO-ai87k> .
sub:sig npx:hasAlgorithm "RSA";
npx:hasPublicKey "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwUtewGCpT5vIfXYE1bmf/Uqu1ojqnWdYxv+ySO80ul8Gu7m8KoyPAwuvaPj0lvPtHrg000qMmkxzKhYknEjq8v7EerxZNYp5B3/3+5ZpuWOYAs78UnQVjbHSmDdmryr4D4VvvNIiUmd0yxci47dTFUj4DvfHnGd6hVe5+goqdcwIDAQAB";
npx:hasSignature "aNXofb7BB0ZpHi5TtAH5kVoUO0pbVMB3lk9+UAGiP8wOcpe3qEWYZfukfQEod8lRk8beN5iHhOuOKZqPHtmzOE8pysS/gJqR8Lafs3m90JInpyj9R8XtQViN+1GDL/VGsM/FsD0ejdb9MfsUXOKe8NgyKns6iKHkM1IULpqVRvo=";
npx:hasSignatureTarget this:;
npx:signedBy orcid:0000-0002-1267-0234 .
}