@prefix this: . @prefix sub: . @prefix np: . @prefix grlc: . @prefix dct: . @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:list-view-displays-space a grlc:grlc-query; dct:description "Space-scoped view displays for a single space ref. Derived from list-view-displays (RAfGpyfUX8qjSMN5-aRWOPeVqHajs3f6zUzcnMuRibk1g) but specialised for gen:Space resources: the authority gate keeps only the governing-space-ref hop -- issue #130's reflexive self-edge already exposes the space's own admins/maintainers there -- and drops the agent-self UNION branch, leaving a single non-UNION join under the variable state graph. This avoids the RDF4J planner timeout documented in nanopub-query doc/sparql-quirks.md (variable hasCurrentSpaceState pointer + multi-join + UNION => intermittent 504) that made the space View-displays view fail intermittently. ?ownClass is folded to the constant gen:Space. Takes the same two concrete inputs (resource = space IRI, root_np = ref root) and returns the same columns as list-view-displays."; dct:license ; rdfs:label "List view displays (space)"; grlc:endpoint ; grlc:sparql """prefix rdfs: prefix dct: prefix np: prefix npa: prefix npx: prefix gen: select ?view (sample(?view_label) as ?view_label) (sample(?displayed_here) as ?displayed_here) (sample(?position) as ?position) (substr(sample(?position), 1, 3) as ?position_label) (sample(?via_preset) as ?via_preset) (sample(?via_preset_label) as ?via_preset_label) (sample(?added_by) as ?added_by) (sample(?deactivateView) as ?deactivateView) (max(?date_added) as ?date_added) (iri(strafter(max(concat(str(?date_added), \"\\\\t\", str(?np))), \"\\\\t\")) as ?np) (\"^\" as ?np_label) where { select ?view ?view_label ?displayed_here ?position (if(?displayed_here = \"\", ?target_multi_iri_raw, \"\") as ?target_multi_iri) (if(?displayed_here = \"\", ?target_label_multi_raw, \"\") as ?target_label_multi) ?via_preset ?via_preset_label ?added_by ?date_added ?deactivateView ?np ?np_label where { select ?view ?view_label ?position (if(bound(?presetScope), ?presetScope, if(bound(?preset), if(?aVHasTarget > 0, if(?aVMatch > 0, \"✓\", \"\"), \"✓\"), if(?aDApplyHere > 0, \"✓\", if(?aDHasTarget > 0, if(?aDMatch > 0, \"✓\", \"\"), if(?aDHasApply > 0, \"\", if(?aVHasTarget > 0, if(?aVMatch > 0, \"✓\", \"\"), \"✓\")))))) as ?displayed_here) ?target_multi_iri_raw ?target_label_multi_raw (?preset as ?via_preset) (?preset_label as ?via_preset_label) (?user as ?added_by) (?date as ?date_added) ?deactivateView ?np (\"^\" as ?np_label) where { select ?view ?view_label ?position ?preset ?preset_label ?presetScope ?user ?date ?deactivateView ?np (max(?fDApplyHere) as ?aDApplyHere) (max(?fDHasApply) as ?aDHasApply) (max(?fDHasTarget) as ?aDHasTarget) (max(?fDMatch) as ?aDMatch) (max(?fVHasTarget) as ?aVHasTarget) (max(?fVMatch) as ?aVMatch) (group_concat(distinct ?targetIri; separator=\" \") as ?target_multi_iri_raw) (group_concat(distinct ?targetLabel; separator=\"\\\\n\") as ?target_label_multi_raw) where { { select ?_resource_multi_iri ?viewRef ?viewLatest ?view_label ?position ?preset ?preset_label ?presetScope ?user ?date ?np ?ownClass ?dApply ?dTarget ?vTarget where { values ?_resource_multi_iri {} values ?_root_np_multi_iri {} service { graph npa:graph { npa:thisRepo npa:hasCurrentSpaceState ?stateG . } graph npa:spacesGraph { ?passedRef npa:rootNanopub ?_root_np_multi_iri . } # Authority gate (space-scoped, no-UNION variant of list-view-displays): a single # mandatory hop through the governing space ref. For a gen:Space resource, issue #130's # reflexive self-edge (?space npa:hasGoverningSpaceRef ?ownRef) already exposes the # space's own admins/maintainers through this same hop, so the agent-self UNION branch # carried by the general list-view-displays is redundant here and is dropped. That leaves # a single non-UNION join under the variable ?stateG, avoiding the RDF4J planner timeout # documented in nanopub-query doc/sparql-quirks.md (variable hasCurrentSpaceState pointer # + multi-join + UNION => intermittent 504). ?ownClass is the constant gen:Space (this # query only backs gen:Space views), so the two ownClass exists-probes are folded away too. graph ?stateG { ?_resource_multi_iri npa:hasGoverningSpaceRef ?passedRef . ?ri a gen:RoleInstantiation ; npa:forSpaceRef ?passedRef ; npa:hasRoleType ?roleType ; npa:forAgent ?authAgent . filter(?roleType = gen:AdminRole || ?roleType = gen:MaintainerRole) ?authAcct a npa:AccountState ; npa:agent ?authAgent ; npa:pubkey ?pubkey . } bind(gen:Space as ?ownClass) } { graph npa:graph { ?np npx:hasNanopubType gen:ViewDisplay ; npa:hasValidSignatureForPublicKeyHash ?pubkey ; dct:created ?date ; npx:embeds ?display ; np:hasAssertion ?a . filter not exists { ?npx npx:invalidates ?np ; npa:hasValidSignatureForPublicKeyHash ?pubkey . } optional { ?np npx:signedBy ?user } } graph ?a { ?display gen:isDisplayOfView ?viewRef ; gen:isDisplayFor ?_resource_multi_iri . optional { values ?displayMode { gen:ActivatedViewDisplay gen:DeactivatedViewDisplay } ?display a ?displayMode . } optional { ?display gen:appliesTo ?dApply . } optional { ?display (gen:appliesToInstancesOf|gen:appliesToNamespace) ?dTarget . } } } union { select ?viewRef ?displayMode ?preset ?preset_label ?presetScope ?user ?date ?np ?pubkey ?_resource_multi_iri { service { graph npa:graph { ?np npx:hasNanopubType gen:PresetAssignment ; npa:hasValidSignatureForPublicKeyHash ?pubkey ; dct:created ?date ; npx:embeds ?assignment ; np:hasAssertion ?a . filter not exists { ?npx npx:invalidates ?np ; npa:hasValidSignatureForPublicKeyHash ?pubkey . } optional { ?np npx:signedBy ?user } } graph ?a { ?assignment gen:isAssignmentFor ?_resource_multi_iri ; gen:isAssignmentOfPreset ?preset . optional { values ?displayMode { gen:ActivatedPresetAssignment gen:DeactivatedPresetAssignment } ?assignment a ?displayMode . } } filter not exists { graph npa:graph { ?np2 npx:hasNanopubType gen:PresetAssignment ; npa:hasValidSignatureForPublicKeyHash ?pubkey2 ; dct:created ?date2 ; npx:embeds ?assignment2 ; np:hasAssertion ?a2 . filter not exists { ?npx2 npx:invalidates ?np2 ; npa:hasValidSignatureForPublicKeyHash ?pubkey2 . } } graph ?a2 { ?assignment2 a gen:DeactivatedPresetAssignment ; gen:isAssignmentFor ?_resource_multi_iri ; gen:isAssignmentOfPreset ?preset . } filter(?date2 > ?date) } graph npa:graph { ?presetNp npx:embeds ?preset ; np:hasAssertion ?pa . } graph ?pa { ?preset a gen:Preset . optional { ?preset rdfs:label ?preset_label . } { ?preset gen:hasTopLevelView ?viewRef . bind(\"✓\" as ?presetScope) } union { ?preset gen:hasView ?viewRef } } } } } optional { graph npa:graph { ?np np:hasAssertion ?npAssertion . } graph ?npAssertion { ?npDisplay gen:hasStructuralPosition ?dispPos . } } filter(!bound(?displayMode) || !contains(str(?displayMode), \"Deactivated\")) filter not exists { graph npa:graph { ?np2 npx:hasNanopubType gen:ViewDisplay ; npa:hasValidSignatureForPublicKeyHash ?pubkey2 ; dct:created ?date2 ; npx:embeds ?display2 ; np:hasAssertion ?a2 . filter not exists { ?npx2 npx:invalidates ?np2 ; npa:hasValidSignatureForPublicKeyHash ?pubkey2 . } } graph ?a2 { ?display2 a gen:DeactivatedViewDisplay ; gen:isDisplayOfView ?viewRef ; gen:isDisplayFor ?_resource_multi_iri . } filter(?date2 > ?date) } optional { service { graph npa:graph { ?vnp npx:embeds ?viewRef . } { select ?vnp (max(?hDate) as ?headDate) where { graph npa:networkGraph { ?h (npx:supersedes)* ?vnp . } graph npa:graph { ?vnp npa:hasValidSignatureForPublicKey ?k . ?h npa:hasValidSignatureForPublicKey ?k ; dct:created ?hDate . filter not exists { ?i npx:invalidates ?h ; npa:hasValidSignatureForPublicKey ?k . } } } group by ?vnp } graph npa:networkGraph { ?headNp (npx:supersedes)* ?vnp . } graph npa:graph { ?vnp npa:hasValidSignatureForPublicKey ?vKey . ?headNp npa:hasValidSignatureForPublicKey ?vKey ; dct:created ?headDate ; npx:embeds ?viewLatest ; np:hasAssertion ?hva . filter not exists { ?i2 npx:invalidates ?headNp ; npa:hasValidSignatureForPublicKey ?vKey . } } graph ?hva { ?viewLatest dct:title ?view_label . } optional { graph ?hva { ?viewLatest gen:hasStructuralPosition ?viewPos . } } optional { graph ?hva { ?viewLatest (gen:appliesToInstancesOf|gen:appliesToNamespace) ?vTarget . } } } } bind(coalesce(?dispPos, ?viewPos, \"\") as ?position) } } bind(if(coalesce(str(?dApply) = str(?_resource_multi_iri), false), 1, 0) as ?fDApplyHere) bind(if(bound(?dApply), 1, 0) as ?fDHasApply) bind(if(bound(?dTarget), 1, 0) as ?fDHasTarget) bind(if(coalesce(str(?dTarget) = str(?ownClass), false) || coalesce(strstarts(str(?_resource_multi_iri), str(?dTarget)), false), 1, 0) as ?fDMatch) bind(if(bound(?vTarget), 1, 0) as ?fVHasTarget) bind(if(coalesce(str(?vTarget) = str(?ownClass), false) || coalesce(strstarts(str(?_resource_multi_iri), str(?vTarget)), false), 1, 0) as ?fVMatch) bind(coalesce(?dTarget, ?vTarget) as ?targetIri) bind(replace(str(?targetIri), \"^.*[/#]\", \"\") as ?targetLocalName) bind(if(coalesce(strlen(?targetLocalName) > 0, false), ?targetLocalName, str(?targetIri)) as ?targetLabel) bind(coalesce(?viewLatest, ?viewRef) as ?view) bind(str(?viewRef) as ?deactivateView) } group by ?view ?view_label ?position ?preset ?preset_label ?presetScope ?user ?date ?deactivateView ?np } } } group by ?view order by desc(?displayed_here) ?position""" . } sub:provenance { sub:assertion prov:wasAttributedTo orcid:0000-0002-1267-0234; prov:wasDerivedFrom . } sub:pubinfo { orcid:0000-0002-1267-0234 foaf:name "Tobias Kuhn" . this: dct:created "2026-06-29T12:55:07Z"^^xsd:dateTime; dct:creator orcid:0000-0002-1267-0234; dct:license ; npx:embeds sub:list-view-displays-space . sub:sig npx:hasAlgorithm "RSA"; npx:hasPublicKey "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwUtewGCpT5vIfXYE1bmf/Uqu1ojqnWdYxv+ySO80ul8Gu7m8KoyPAwuvaPj0lvPtHrg000qMmkxzKhYknEjq8v7EerxZNYp5B3/3+5ZpuWOYAs78UnQVjbHSmDdmryr4D4VvvNIiUmd0yxci47dTFUj4DvfHnGd6hVe5+goqdcwIDAQAB"; npx:hasSignature "NJiSc/JvVt4JIEABC5W//RS6mdKyeElI1vk3GyVBpWxJMoQLfi3CwAt73PWko545gsPH9A52nAOYv+X4Hmu8QzAlhArGGCAPRwuxMPbpCE4Ok5ATRaw0TH6Pt0SUgy5CnsMYZt7VJkyfKsyxu5dookVenB8mJtpSiB9QM4LhNo8="; npx:hasSignatureTarget this:; npx:signedBy orcid:0000-0002-1267-0234 . }