[ { "@id": "https://w3id.org/np/RAy49uUd2fPLHJAZ_7QKDtIDVgqaQ589OgQhMwNamKy-4/pubinfo", "@graph": [ { "@id": "https://orcid.org/0000-0002-1267-0234", "http://xmlns.com/foaf/0.1/name": [ { "@value": "Tobias Kuhn" } ] }, { "@id": "https://w3id.org/np/RAy49uUd2fPLHJAZ_7QKDtIDVgqaQ589OgQhMwNamKy-4", "http://purl.org/dc/terms/created": [ { "@value": "2026-06-05T07:58:51Z", "@type": "http://www.w3.org/2001/XMLSchema#dateTime" } ], "http://purl.org/dc/terms/creator": [ { "@id": "https://orcid.org/0000-0002-1267-0234" } ], "http://purl.org/dc/terms/license": [ { "@id": "https://creativecommons.org/licenses/by/4.0/" } ], "http://purl.org/nanopub/x/embeds": [ { "@id": "https://w3id.org/np/RAy49uUd2fPLHJAZ_7QKDtIDVgqaQ589OgQhMwNamKy-4/get-view-displays" } ], "http://purl.org/nanopub/x/supersedes": [ { "@id": "https://w3id.org/np/RAJtBiC42q8RCd8yaTI5KwFTm7nPiBgzWD-DHHQiCt57A" } ], "http://www.w3.org/2000/01/rdf-schema#label": [ { "@value": "Get view displays" } ], "https://w3id.org/np/o/ntemplate/wasCreatedFromProvenanceTemplate": [ { "@id": "https://w3id.org/np/RA7lSq6MuK_TIC6JMSHvLtee3lpLoZDOqLJCLXevnrPoU" } ], "https://w3id.org/np/o/ntemplate/wasCreatedFromPubinfoTemplate": [ { "@id": "https://w3id.org/np/RA0J4vUn_dekg-U1kK3AOEt02p9mT2WO03uGxLDec1jLw" }, { "@id": "https://w3id.org/np/RAoTD7udB2KtUuOuAe74tJi1t3VzK0DyWS7rYVAq1GRvw" }, { "@id": "https://w3id.org/np/RAukAcWHRDlkqxk7H2XNSegc1WnHI569INvNr-xdptDGI" } ], "https://w3id.org/np/o/ntemplate/wasCreatedFromTemplate": [ { "@id": "https://w3id.org/np/RAEFAt-QcFK0ZhqfvlsmS10BnzGJA0xwOICZXkO-ai87k" } ] }, { "@id": "https://w3id.org/np/RAy49uUd2fPLHJAZ_7QKDtIDVgqaQ589OgQhMwNamKy-4/sig", "http://purl.org/nanopub/x/hasAlgorithm": [ { "@value": "RSA" } ], "http://purl.org/nanopub/x/hasPublicKey": [ { "@value": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwUtewGCpT5vIfXYE1bmf/Uqu1ojqnWdYxv+ySO80ul8Gu7m8KoyPAwuvaPj0lvPtHrg000qMmkxzKhYknEjq8v7EerxZNYp5B3/3+5ZpuWOYAs78UnQVjbHSmDdmryr4D4VvvNIiUmd0yxci47dTFUj4DvfHnGd6hVe5+goqdcwIDAQAB" } ], "http://purl.org/nanopub/x/hasSignature": [ { "@value": "P6OKEVafpfJmoxXFQN7+XhI02batKm60qJpVd5Udz0jPl5KVxVdVgI+XTl4l8ENA5C+mh/vfslLQk5I4NjF4ystdn3PtsfAaU9l5MgtX8+J0kveOx9B2ITFp8eqWM2YJvXi+iH6j29horFy5YZXQnhFQQtySSwUoWTMUs8OYAhA=" } ], "http://purl.org/nanopub/x/hasSignatureTarget": [ { "@id": "https://w3id.org/np/RAy49uUd2fPLHJAZ_7QKDtIDVgqaQ589OgQhMwNamKy-4" } ], "http://purl.org/nanopub/x/signedBy": [ { "@id": "https://orcid.org/0000-0002-1267-0234" } ] } ] }, { "@id": "https://w3id.org/np/RAy49uUd2fPLHJAZ_7QKDtIDVgqaQ589OgQhMwNamKy-4/Head", "@graph": [ { "@id": "https://w3id.org/np/RAy49uUd2fPLHJAZ_7QKDtIDVgqaQ589OgQhMwNamKy-4", "http://www.nanopub.org/nschema#hasAssertion": [ { "@id": "https://w3id.org/np/RAy49uUd2fPLHJAZ_7QKDtIDVgqaQ589OgQhMwNamKy-4/assertion" } ], "http://www.nanopub.org/nschema#hasProvenance": [ { "@id": "https://w3id.org/np/RAy49uUd2fPLHJAZ_7QKDtIDVgqaQ589OgQhMwNamKy-4/provenance" } ], "http://www.nanopub.org/nschema#hasPublicationInfo": [ { "@id": "https://w3id.org/np/RAy49uUd2fPLHJAZ_7QKDtIDVgqaQ589OgQhMwNamKy-4/pubinfo" } ], "@type": [ "http://www.nanopub.org/nschema#Nanopublication" ] } ] }, { "@id": "https://w3id.org/np/RAy49uUd2fPLHJAZ_7QKDtIDVgqaQ589OgQhMwNamKy-4/assertion", "@graph": [ { "@id": "https://w3id.org/np/RAy49uUd2fPLHJAZ_7QKDtIDVgqaQ589OgQhMwNamKy-4/get-view-displays", "http://purl.org/dc/terms/description": [ { "@value": "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 the cross-repo lookup is evaluated once for the whole view set rather than once per referenced view." } ], "http://purl.org/dc/terms/license": [ { "@id": "http://www.apache.org/licenses/LICENSE-2.0" } ], "@type": [ "https://w3id.org/kpxl/grlc/grlc-query" ], "http://www.w3.org/2000/01/rdf-schema#label": [ { "@value": "Get view displays" } ], "https://w3id.org/kpxl/grlc/endpoint": [ { "@id": "https://w3id.org/np/l/nanopub-query-1.1/repo/type/11daee46fdfff957dc17b46f5dc1a618045afd4f5634d5334ce9db19c3689a3c" } ], "https://w3id.org/kpxl/grlc/sparql": [ { "@value": "prefix rdfs: \nprefix dct: \nprefix np: \nprefix npa: \nprefix npx: \nprefix gen: \n\nselect distinct ?display ?view (coalesce(?viewKindOptional, ?view) as ?viewKind)\n ?label ?displayType ?displayMode ?np ?pubkey ?date where {\n values ?_resource_multi_iri {}\n service {\n graph npa:graph { npa:thisRepo npa:hasCurrentSpaceState ?stateG . }\n {\n graph ?stateG {\n ?_resource_multi_iri npa:isMaintainedBy? ?space .\n ?ri a gen:RoleInstantiation ; npa:forSpace ?space ; npa:forAgent ?authAgent ;\n (npa:inverseProperty|npa:regularProperty) ?roleProp .\n ?authAcct a npa:AccountState ; npa:agent ?authAgent ; npa:pubkey ?pubkey .\n }\n optional {\n graph npa:spacesGraph {\n ?rd a npa:RoleDeclaration ; npa:forSpace ?space ;\n npa:hasRoleType gen:MaintainerRole ;\n (npa:inverseProperty|npa:regularProperty) ?roleProp .\n bind(true as ?isMaintainer)\n }\n }\n filter(?roleProp = gen:hasAdmin || bound(?isMaintainer))\n } union {\n graph ?stateG { ?selfAcct a npa:AccountState ; npa:agent ?_resource_multi_iri ; npa:pubkey ?pubkey . }\n }\n }\n {\n # branch (a): standalone view displays — LOCAL pattern on the endpoint repo\n graph npa:graph {\n ?np npx:hasNanopubType gen:ViewDisplay .\n ?np npa:hasValidSignatureForPublicKeyHash ?pubkey .\n filter not exists { ?npx npx:invalidates ?np ; npa:hasValidSignatureForPublicKeyHash ?pubkey . }\n ?np dct:created ?date .\n ?np npx:embeds ?display .\n ?np np:hasAssertion ?a .\n optional { ?np rdfs:label ?label }\n }\n graph ?a {\n ?display gen:isDisplayOfView ?refView .\n ?display gen:isDisplayFor ?_resource_multi_iri .\n optional { values ?displayType { gen:PartLevelViewDisplay gen:TopLevelViewDisplay } ?display a ?displayType . }\n optional { values ?displayMode { gen:ActivatedViewDisplay gen:DeactivatedViewDisplay } ?display a ?displayMode . }\n }\n }\n union\n {\n # branch (b): preset-supplied views — wrapped in a sub-SELECT so the remote\n # service does not collapse branch (a). ?display stays unbound.\n select ?refView ?label ?displayType ?displayMode ?np ?pubkey ?date ?_resource_multi_iri {\n service {\n graph npa:graph {\n ?np npx:hasNanopubType gen:PresetAssignment .\n ?np npa:hasValidSignatureForPublicKeyHash ?pubkey .\n filter not exists { ?npx npx:invalidates ?np ; npa:hasValidSignatureForPublicKeyHash ?pubkey . }\n ?np dct:created ?date .\n ?np npx:embeds ?assignment .\n ?np np:hasAssertion ?a .\n optional { ?np rdfs:label ?label }\n }\n graph ?a {\n ?assignment gen:isAssignmentFor ?_resource_multi_iri .\n ?assignment gen:isAssignmentOfPreset ?presetRef .\n optional { values ?displayMode { gen:ActivatedPresetAssignment gen:DeactivatedPresetAssignment } ?assignment a ?displayMode . }\n }\n graph npa:graph { ?presetNp npx:embeds ?presetRef ; np:hasAssertion ?pa . }\n graph ?pa {\n ?presetRef a gen:Preset .\n { ?presetRef gen:hasTopLevelView ?refView . bind(gen:TopLevelViewDisplay as ?displayType) }\n union { ?presetRef gen:hasView ?refView . bind(gen:PartLevelViewDisplay as ?displayType) }\n }\n }\n }\n }\n # Resolve each referenced view to its latest version: the current head of its\n # supersedes version tree (a nanopub itself neither superseded nor validly\n # retracted via npx:invalidates), most recent among heads on a fork. Wrapped in\n # a run-once sub-SELECT so this cross-repo service is evaluated once for the\n # whole view set rather than once per referenced view -- the per-view federation\n # round-trips were the dominant cost of earlier versions.\n optional {\n service {\n select distinct ?refView ?latestView ?viewKindOptional where {\n graph npa:graph { ?rnp npx:embeds ?refView ; np:hasAssertion ?ra . }\n graph ?ra { ?refView a gen:ResourceView . }\n optional {\n ?vnp npx:embeds ?refView .\n ?latestNp (npx:supersedes|^npx:supersedes)* ?vnp ; dct:created ?ldate ; npx:embeds ?latestView ; np:hasAssertion ?va .\n filter not exists { ?supNp npx:supersedes ?latestNp . }\n filter not exists { ?invNp npx:invalidates ?latestNp ; npa:hasValidSignatureForPublicKeyHash ?invPk . }\n filter not exists {\n ?other (npx:supersedes|^npx:supersedes)* ?vnp ; dct:created ?odate .\n filter not exists { ?supNp2 npx:supersedes ?other . }\n filter not exists { ?invNp2 npx:invalidates ?other ; npa:hasValidSignatureForPublicKeyHash ?invPk2 . }\n filter(?odate > ?ldate)\n }\n graph ?va { ?latestView a gen:ResourceView . optional { ?latestView dct:isVersionOf ?viewKindOptional . } }\n }\n }\n }\n }\n bind(coalesce(?latestView, ?refView) as ?view)\n}\norder by desc(?date)" } ] } ] }, { "@id": "https://w3id.org/np/RAy49uUd2fPLHJAZ_7QKDtIDVgqaQ589OgQhMwNamKy-4/provenance", "@graph": [ { "@id": "https://w3id.org/np/RAy49uUd2fPLHJAZ_7QKDtIDVgqaQ589OgQhMwNamKy-4/assertion", "http://www.w3.org/ns/prov#wasAttributedTo": [ { "@id": "https://orcid.org/0000-0002-1267-0234" } ] } ] } ]