https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/Head
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
http://www.nanopub.org/nschema#hasAssertion
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/assertion
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
http://www.nanopub.org/nschema#hasProvenance
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/provenance
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
http://www.nanopub.org/nschema#hasPublicationInfo
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/pubinfo
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
http://www.w3.org/1999/02/22-rdf-syntax-ns#type
http://www.nanopub.org/nschema#Nanopublication
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/assertion
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/get-view-displays
http://purl.org/dc/terms/description
Returns the views to display for a given resource: both standalone view displays and the views contributed by assigned presets (issue #302), unioned and ordered by date so latest-wins override resolution holds across both. Filtered server-side to declarations signed by an admin or maintainer of the owning space, or by the affected user themselves (for an agent's own page). Each referenced view is resolved to its latest version by following the npx:supersedes chain: among the version tree's current heads (nanopubs that are themselves neither superseded nor validly retracted via npx:invalidates), the most recent is chosen, so ?view is the latest non-retracted view definition (no separate latest-version lookup needed by the client). Choosing a current head rather than the max-timestamp node makes resolution robust to backdated supersedes and to retracted versions. Preset-derived rows have an unbound ?display and carry the resolved ?view plus the assignment's activation mode. The view-version resolution is wrapped in a run-once sub-SELECT so it is evaluated once for the whole view set rather than once per referenced view. Space-governed versions (gen:governedBy, nanodash docs/views-and-presets-as-maintained-resources.md): a referenced version declaring gen:governedBy resolves to the newest version of its (kind, space) pair signed by a current member+ (admin/maintainer/member) of that space -- with the kind validated as a maintained resource of the space -- taking precedence over the supersedes-based head; without a valid governed candidate the pinned version stands. Federation footprint (2026-08-20): the query now runs on the repo/full endpoint, so the former SERVICE hops to repo/full (preset branch) and to the ResourceView type repo (view lookups, governed candidates) are plain local patterns; only the two lookups of materialized space state (authority gate, governed-signer validation) remain federated, to repo/spaces. The previous 5-SERVICE layout was the main amplifier of a connection-pool deadlock in the query service's loopback federation (an outer query holds a pooled connection while each SERVICE hop -- one per binding under a nested-loop join -- requests another from the same pool): a thread dump during a production wedge showed all 60 route connections held by result streamers of exactly these hops. Validated byte-for-byte identical to the previous version across resources covering standalone displays, preset assignments, governed views, an agent's own page, and rival space refs. Pending accounts (nanopub-query#195, nanodash#625): the self-signed arm additionally accepts npa:PendingAccountState rows -- mirrored by the query service from authoritative introductions of users who are not trust-approved yet -- so such a user's own page shows the view displays they signed themselves. The pending class is distinct from npa:AccountState, so no authority-granting join is widened: the admin/maintainer arm and the governed-version resolution keep requiring approved accounts.
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/get-view-displays
http://purl.org/dc/terms/license
http://www.apache.org/licenses/LICENSE-2.0
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/get-view-displays
http://www.w3.org/1999/02/22-rdf-syntax-ns#type
https://w3id.org/kpxl/grlc/grlc-query
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/get-view-displays
http://www.w3.org/2000/01/rdf-schema#label
Get view displays
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/get-view-displays
https://w3id.org/kpxl/grlc/endpoint
https://w3id.org/np/l/nanopub-query-1.1/repo/full
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/get-view-displays
https://w3id.org/kpxl/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/>
select distinct ?display ?view (coalesce(?viewKindOptional, ?view) as ?viewKind)
?label ?displayType ?displayMode ?np ?pubkey ?date where {
values ?_resource_multi_iri {}
service <https://w3id.org/np/l/nanopub-query-1.1/repo/spaces> {
graph npa:graph { npa:thisRepo npa:hasCurrentSpaceState ?stateG . }
{
# Authority gate (issue #130 / nanodash#510): a single mandatory hop through the
# governing space ref, which covers both a maintained resource and a space itself
# (the reflexive self-edge), keyed on the role tier materialized on the
# RoleInstantiation since #125. Replaces the old bare-IRI isMaintainedBy? hop and the
# dead RoleDeclaration maintainer join. Non-ref variant: any ref claiming the IRI, so
# authority merges across refs (the ref variant pins a single ?passedRef instead).
graph ?stateG {
?_resource_multi_iri npa:hasGoverningSpaceRef ?spaceRef .
?ri a gen:RoleInstantiation ; npa:forSpaceRef ?spaceRef ; npa:hasRoleType ?roleType ; npa:forAgent ?authAgent .
filter(?roleType = gen:AdminRole || ?roleType = gen:MaintainerRole)
?authAcct a npa:AccountState ; npa:agent ?authAgent ; npa:pubkey ?pubkey .
}
} union {
graph ?stateG { ?selfAcct a npa:AccountState ; npa:agent ?_resource_multi_iri ; npa:pubkey ?pubkey . }
} union {
# Own page of an agent who is introduced but not trust-approved yet
# (nanopub-query#195, nanodash#625): npa:PendingAccountState rows are mirrored
# from authoritative introductions and carry a distinct class so that no
# authority join can resolve through them; this arm is display-only and scoped
# to the page's own agent, exactly like the AccountState self-arm above.
graph ?stateG { ?pendAcct a npa:PendingAccountState ; npa:agent ?_resource_multi_iri ; npa:pubkey ?pubkey . }
}
}
{
# branch (a): standalone view displays — LOCAL pattern on the endpoint repo
graph npa:graph {
?np npx:hasNanopubType gen:ViewDisplay .
?np npa:hasValidSignatureForPublicKeyHash ?pubkey .
filter not exists { ?npx npx:invalidates ?np ; npa:hasValidSignatureForPublicKeyHash ?pubkey . }
?np dct:created ?date .
?np npx:embeds ?display .
?np np:hasAssertion ?a .
optional { ?np rdfs:label ?label }
}
graph ?a {
?display gen:isDisplayOfView ?refView .
?display gen:isDisplayFor ?_resource_multi_iri .
optional { values ?displayType { gen:PartLevelViewDisplay gen:TopLevelViewDisplay } ?display a ?displayType . }
optional { values ?displayMode { gen:ActivatedViewDisplay gen:DeactivatedViewDisplay } ?display a ?displayMode . }
}
}
union
{
# branch (b): preset-supplied views — LOCAL since the endpoint moved to
# repo/full (the connection-pinning SERVICE hop this replaced was the main
# amplifier of the federation deadlock, eclipse-rdf4j/rdf4j federation +
# nanopub-query loopback route). Kept wrapped in a sub-SELECT so its
# bindings cannot collapse branch (a). ?display stays unbound.
select ?refView ?label ?displayType ?displayMode ?np ?pubkey ?date ?_resource_multi_iri {
{ # was: service repo/full — now local on the repo/full endpoint
graph npa:graph {
?np npx:hasNanopubType gen:PresetAssignment .
?np npa:hasValidSignatureForPublicKeyHash ?pubkey .
filter not exists { ?npx npx:invalidates ?np ; npa:hasValidSignatureForPublicKeyHash ?pubkey . }
?np dct:created ?date .
?np npx:embeds ?assignment .
?np np:hasAssertion ?a .
optional { ?np rdfs:label ?label }
}
graph ?a {
?assignment gen:isAssignmentFor ?_resource_multi_iri .
?assignment gen:isAssignmentOfPreset ?presetRef .
optional { values ?displayMode { gen:ActivatedPresetAssignment gen:DeactivatedPresetAssignment } ?assignment a ?displayMode . }
}
graph npa:graph { ?presetNp npx:embeds ?presetRef ; np:hasAssertion ?pa . }
graph ?pa {
?presetRef a gen:Preset .
{ ?presetRef gen:hasTopLevelView ?refView . bind(gen:TopLevelViewDisplay as ?displayType) }
union { ?presetRef gen:hasView ?refView . bind(gen:PartLevelViewDisplay as ?displayType) }
}
}
}
}
# Resolve each referenced view to its latest version: the current head of its
# supersedes version tree (a nanopub itself neither superseded nor validly
# retracted via npx:invalidates), most recent among heads on a fork. Now a
# LOCAL lookup (endpoint = repo/full; the ?ra type gate keeps it scoped to
# ResourceView nanopubs exactly as the former type-shard service did). Still
# wrapped in a run-once sub-SELECT so it is evaluated once for the whole view
# set rather than once per referenced view.
optional {
{ # was: service repo/type/ec6722… (ResourceView shard) — now local on the repo/full endpoint
select distinct ?refView ?latestView ?viewKindOptional ?pinKind ?pinSpace where {
graph npa:graph { ?rnp npx:embeds ?refView ; np:hasAssertion ?ra . }
graph ?ra { ?refView a gen:ResourceView . }
optional { graph ?ra { ?refView dct:isVersionOf ?pinKind ; gen:governedBy ?pinSpace . } }
optional {
?vnp npx:embeds ?refView .
?latestNp (npx:supersedes|^npx:supersedes)* ?vnp ; dct:created ?ldate ; npx:embeds ?latestView ; np:hasAssertion ?va ; npa:hasValidSignatureForPublicKeyHash ?invPk .
filter not exists { ?supNp npx:supersedes ?latestNp . }
filter not exists { ?invNp npx:invalidates ?latestNp ; npa:hasValidSignatureForPublicKeyHash ?invPk . }
filter not exists {
?other (npx:supersedes|^npx:supersedes)* ?vnp ; dct:created ?odate ; npa:hasValidSignatureForPublicKeyHash ?invPk2 .
filter not exists { ?supNp2 npx:supersedes ?other . }
filter not exists { ?invNp2 npx:invalidates ?other ; npa:hasValidSignatureForPublicKeyHash ?invPk2 . }
filter(?odate > ?ldate)
}
graph ?va { ?latestView a gen:ResourceView . optional { ?latestView dct:isVersionOf ?viewKindOptional . } }
}
}
}
}
# Space-governed resolution (gen:governedBy; nanodash docs/views-and-presets-as-
# maintained-resources.md): a pinned version declaring a governing space resolves to
# the newest member+-signed version of its (kind, space) pair instead of the
# supersedes head; no valid candidate -> the pin stands.
optional {
{ select ?pinKind ?pinSpace (iri(strafter(max(concat(str(?cDate), ">", str(?cver))), ">")) as ?governedLatest) where {
# Candidate versions — was a service on the ResourceView type shard, now
# local on the repo/full endpoint. The sub-select wrapper is LOAD-BEARING,
# not stylistic: on rdf4j 6.0.0, bindings produced by raw statement
# patterns are silently NOT joined into a subsequent SERVICE clause
# (empirically: identical bindings via VALUES join fine, via bare
# patterns yield zero rows, and any projecting sub-select restores the
# join — reproduced on two instances, 2026-08-20). Without this wrapper
# the spaces SERVICE below returns nothing and governed resolution
# silently falls back to the pin.
{ select ?pinKind ?pinSpace ?cver ?cpk ?cDate where {
graph npa:graph {
?cnp dct:created ?cDate ; npa:hasValidSignatureForPublicKeyHash ?cpk ; npx:embeds ?cver ; np:hasAssertion ?ca .
filter not exists { ?ci npx:invalidates ?cnp ; npa:hasValidSignatureForPublicKeyHash ?cpk . }
}
graph ?ca { ?cver dct:isVersionOf ?pinKind ; gen:governedBy ?pinSpace . }
} }
service <https://w3id.org/np/l/nanopub-query-1.1/repo/spaces> {
graph npa:graph { <http://purl.org/nanopub/admin/thisRepo> npa:hasCurrentSpaceState ?gsg . }
graph ?gsg {
?pinKind npa:isMaintainedBy ?pinSpace ; npa:hasGoverningSpaceRef ?gref .
?gri a gen:RoleInstantiation ; npa:forSpace ?pinSpace ; npa:forSpaceRef ?gref ; npa:hasRoleType ?gtier ; npa:forAgent ?gag .
filter(?gtier = gen:AdminRole || ?gtier = gen:MaintainerRole || ?gtier = gen:MemberRole)
?gacct a npa:AccountState ; npa:agent ?gag ; npa:pubkey ?cpk .
}
}
} group by ?pinKind ?pinSpace }
}
bind(if(bound(?pinSpace), coalesce(?governedLatest, ?refView), coalesce(?latestView, ?refView)) as ?view)
}
order by desc(?date)
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/provenance
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/assertion
http://www.w3.org/ns/prov#wasAttributedTo
https://orcid.org/0000-0002-1267-0234
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/pubinfo
https://orcid.org/0000-0002-1267-0234
http://xmlns.com/foaf/0.1/name
Tobias Kuhn
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
http://purl.org/dc/terms/created
2026-08-24T18:34:02Z
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
http://purl.org/dc/terms/creator
https://orcid.org/0000-0002-1267-0234
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
http://purl.org/dc/terms/license
https://creativecommons.org/licenses/by/4.0/
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
http://purl.org/nanopub/x/embeds
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/get-view-displays
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
http://purl.org/nanopub/x/supersedes
https://w3id.org/np/RAWlJqJ5afOTN0AIDP3rnSCysQer9B4pmSC6QbzssTAyc
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
http://www.w3.org/2000/01/rdf-schema#label
Get view displays
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
https://w3id.org/np/o/ntemplate/wasCreatedFromProvenanceTemplate
https://w3id.org/np/RA7lSq6MuK_TIC6JMSHvLtee3lpLoZDOqLJCLXevnrPoU
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
https://w3id.org/np/o/ntemplate/wasCreatedFromPubinfoTemplate
https://w3id.org/np/RA0J4vUn_dekg-U1kK3AOEt02p9mT2WO03uGxLDec1jLw
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
https://w3id.org/np/o/ntemplate/wasCreatedFromPubinfoTemplate
https://w3id.org/np/RAoTD7udB2KtUuOuAe74tJi1t3VzK0DyWS7rYVAq1GRvw
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
https://w3id.org/np/o/ntemplate/wasCreatedFromPubinfoTemplate
https://w3id.org/np/RAukAcWHRDlkqxk7H2XNSegc1WnHI569INvNr-xdptDGI
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
https://w3id.org/np/o/ntemplate/wasCreatedFromTemplate
https://w3id.org/np/RAEFAt-QcFK0ZhqfvlsmS10BnzGJA0xwOICZXkO-ai87k
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/sig
http://purl.org/nanopub/x/hasAlgorithm
RSA
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/sig
http://purl.org/nanopub/x/hasPublicKey
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwUtewGCpT5vIfXYE1bmf/Uqu1ojqnWdYxv+ySO80ul8Gu7m8KoyPAwuvaPj0lvPtHrg000qMmkxzKhYknEjq8v7EerxZNYp5B3/3+5ZpuWOYAs78UnQVjbHSmDdmryr4D4VvvNIiUmd0yxci47dTFUj4DvfHnGd6hVe5+goqdcwIDAQAB
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/sig
http://purl.org/nanopub/x/hasSignature
eC50lIhf0eh5k7KsQqUMqUzgSwOA7AtZucM3E/wWKz8y9nH01GBPcG1y0bLo50S9BwhEVMhUb0ISlr0vJ/xAImcOH55sBTL59uEers80pnj2Xv9+BU9nsqDPwzewrcojCI445pW3u+Xu8NLx+wVus3ANnZ978XZT1MeeuaOLbCg=
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/sig
http://purl.org/nanopub/x/hasSignatureTarget
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww
https://w3id.org/np/RA3ekD-2utY7P0ZgAHSr4HRwugzNnYhxJbkeI-3EfYfww/sig
http://purl.org/nanopub/x/signedBy
https://orcid.org/0000-0002-1267-0234