rows { options { physical_type: PHYSICAL_STREAM_TYPE_QUADS max_name_table_size: 128 max_prefix_table_size: 16 max_datatype_table_size: 16 logical_type: LOGICAL_STREAM_TYPE_DATASETS version: 2 } } rows { prefix { value: "https://w3id.org/np/" } } rows { name { value: "RAQ-ZH3JppnROYOjPb2V2M3uALuvZ9vghNLmgyAyWKDsQ" } } rows { namespace { name: "this" value { prefix_id: 1 } } } rows { prefix { value: "https://w3id.org/np/RAQ-ZH3JppnROYOjPb2V2M3uALuvZ9vghNLmgyAyWKDsQ/" } } rows { name { } } rows { namespace { name: "sub" value { prefix_id: 2 } } } rows { prefix { value: "http://schema.org/" } } rows { namespace { name: "schema" value { prefix_id: 3 name_id: 2 } } } rows { prefix { value: "https://w3id.org/kpxl/gen/terms/" } } rows { namespace { name: "gen" value { prefix_id: 4 name_id: 2 } } } rows { prefix { value: "http://www.nanopub.org/nschema#" } } rows { namespace { name: "np" value { prefix_id: 5 name_id: 2 } } } rows { prefix { value: "http://purl.org/dc/terms/" } } rows { namespace { name: "dct" value { prefix_id: 6 name_id: 2 } } } rows { prefix { value: "https://w3id.org/np/o/ntemplate/" } } rows { namespace { name: "nt" value { prefix_id: 7 name_id: 2 } } } rows { prefix { value: "http://purl.org/nanopub/x/" } } rows { namespace { name: "npx" value { prefix_id: 8 name_id: 2 } } } rows { prefix { value: "http://www.w3.org/2001/XMLSchema#" } } rows { namespace { name: "xsd" value { prefix_id: 9 name_id: 2 } } } rows { prefix { value: "http://www.w3.org/2000/01/rdf-schema#" } } rows { namespace { name: "rdfs" value { prefix_id: 10 name_id: 2 } } } rows { prefix { value: "http://www.w3.org/ns/prov#" } } rows { namespace { name: "prov" value { prefix_id: 11 name_id: 2 } } } rows { name { value: "hasAssertion" } } rows { name { value: "assertion" } } rows { name { value: "Head" } } rows { quad { s_iri { prefix_id: 1 name_id: 1 } p_iri { prefix_id: 5 name_id: 3 } o_iri { prefix_id: 2 } g_iri { } } } rows { name { value: "hasProvenance" } } rows { name { value: "provenance" } } rows { quad { p_iri { prefix_id: 5 } o_iri { prefix_id: 2 } } } rows { name { value: "hasPublicationInfo" } } rows { name { value: "pubinfo" } } rows { quad { p_iri { prefix_id: 5 } o_iri { prefix_id: 2 } } } rows { prefix { value: "http://www.w3.org/1999/02/22-rdf-syntax-ns#" } } rows { name { value: "type" } } rows { name { value: "Nanopublication" } } rows { quad { p_iri { prefix_id: 12 } o_iri { prefix_id: 5 } } } rows { name { value: "paragraph" } } rows { name { value: "about" } } rows { prefix { value: "https://w3id.org/kpxl/grlc/" } } rows { name { value: "grlc-query" } } rows { quad { s_iri { prefix_id: 2 } p_iri { prefix_id: 3 } o_iri { prefix_id: 13 } g_iri { prefix_id: 2 name_id: 4 } } } rows { name { value: "title" } } rows { quad { p_iri { prefix_id: 3 name_id: 15 } o_literal { lex: "Session-bound parameters" } } } rows { name { value: "Paragraph" } } rows { quad { p_iri { prefix_id: 12 name_id: 10 } o_iri { prefix_id: 4 name_id: 16 } } } rows { name { value: "hasContent" } } rows { quad { p_iri { } o_literal { lex: "
Three placeholder names are reserved and filled automatically from the browser session of whoever is looking at the view, with no form field shown: LOCALPUBKEY is the viewer\'s signing public key, CURRENTUSER their agent IRI, and SITEURL the address of the Nanodash instance. They let a view react to who is viewing it, for example by offering a \"retract\" action only on rows the viewer signed.
Declare them as optional multi-value placeholders, each with its own empty values block in every scope where it is used: ?__LOCALPUBKEY_multi, ?__CURRENTUSER_multi_iri, ?__SITEURL_multi.
A logged-out visitor has none of them, so the variable is simply unbound and every comparison must tolerate that. Wrap each one in coalesce, as in coalesce(str(?pubkey) = str(?__LOCALPUBKEY_multi), false), so the query still returns its rows instead of failing or dropping them.