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: "RAZ91VKijoZZumm8JX5BBsVD1Fb5t8Eo74WxBNg_0AVos" } } rows { namespace { name: "this" value { prefix_id: 1 } } } rows { prefix { value: "https://w3id.org/np/RAZ91VKijoZZumm8JX5BBsVD1Fb5t8Eo74WxBNg_0AVos/" } } rows { name { } } rows { namespace { name: "sub" value { prefix_id: 2 } } } rows { prefix { value: "http://www.nanopub.org/nschema#" } } rows { namespace { name: "np" value { prefix_id: 3 name_id: 2 } } } rows { prefix { value: "https://w3id.org/kpxl/grlc/" } } rows { namespace { name: "grlc" value { prefix_id: 4 name_id: 2 } } } rows { prefix { value: "http://purl.org/dc/terms/" } } rows { namespace { name: "dct" value { prefix_id: 5 name_id: 2 } } } rows { prefix { value: "https://w3id.org/np/o/ntemplate/" } } rows { namespace { name: "nt" value { prefix_id: 6 name_id: 2 } } } rows { prefix { value: "http://purl.org/nanopub/x/" } } rows { namespace { name: "npx" value { prefix_id: 7 name_id: 2 } } } rows { prefix { value: "http://www.w3.org/2001/XMLSchema#" } } rows { namespace { name: "xsd" value { prefix_id: 8 name_id: 2 } } } rows { prefix { value: "http://www.w3.org/2000/01/rdf-schema#" } } rows { namespace { name: "rdfs" value { prefix_id: 9 name_id: 2 } } } rows { prefix { value: "https://orcid.org/" } } rows { namespace { name: "orcid" 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 { prefix { value: "http://xmlns.com/foaf/0.1/" } } rows { namespace { name: "foaf" value { prefix_id: 12 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: 3 name_id: 3 } o_iri { prefix_id: 2 } g_iri { } } } rows { name { value: "hasProvenance" } } rows { name { value: "provenance" } } rows { quad { p_iri { prefix_id: 3 } o_iri { prefix_id: 2 } } } rows { name { value: "hasPublicationInfo" } } rows { name { value: "pubinfo" } } rows { quad { p_iri { prefix_id: 3 } 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: 13 } o_iri { prefix_id: 3 } } } rows { name { value: "get-presentations-grid-svg" } } rows { name { value: "description" } } rows { quad { s_iri { prefix_id: 2 } p_iri { prefix_id: 5 } o_literal { lex: "Renders the presentations of an event as a programme grid, one SVG per day: one column per room, boxes placed by clock time and split vertically when several talks share a slot. Each box links to the presentation and shows its authors and title. Reads both the http:// and https:// schema.org namespaces." } g_iri { prefix_id: 2 name_id: 4 } } } rows { name { value: "license" } } rows { prefix { value: "http://www.apache.org/licenses/" } } rows { name { value: "LICENSE-2.0" } } rows { quad { p_iri { prefix_id: 5 name_id: 14 } o_iri { prefix_id: 14 } } } rows { name { value: "grlc-query" } } rows { quad { p_iri { prefix_id: 13 name_id: 10 } o_iri { prefix_id: 4 name_id: 16 } } } rows { name { value: "label" } } rows { quad { p_iri { prefix_id: 9 } o_literal { lex: "Get the presentation programme of an event as an SVG grid" } } } rows { name { value: "endpoint" } } rows { prefix { value: "https://w3id.org/np/l/nanopub-query-1.1/repo/type/" } } rows { name { value: "3952cad1a6d2561f045d33e5e79c03e7264b0a492b8becf6c62656c596cf398c" } } rows { quad { p_iri { prefix_id: 4 } o_iri { prefix_id: 15 } } } rows { name { value: "sparql" } } rows { quad { p_iri { prefix_id: 4 } o_literal { lex: "prefix rdfs: \nprefix dct: \nprefix np: \nprefix npa: \nprefix npx: \nprefix xsd: \nprefix wd: \nprefix schema: \nprefix schemaold: \nprefix foaf: \nprefix pav: \n\nselect ?title (concat(\n \'\',\n ?frags, \'\') as ?svg)\nwhere {\n {\n select ?day (group_concat(?frag; separator=\"\") as ?frags)\n (max(?ybot) as ?maxy) (max(?xright) as ?maxx)\n where {\n # ============ talk boxes ============\n {\n select ?day ?frag (?by + ?bh as ?ybot) (?bx + 250 as ?xright)\n where {\n {\n select ?pres ?day ?room ?smin ?emin ?tlabel\n (group_concat(distinct ?aname; separator=\", \") as ?authors)\n where {\n graph npa:graph {\n ?np npa:hasValidSignatureForPublicKeyHash ?pk ;\n np:hasAssertion ?a ; npx:introduces ?pres .\n filter not exists { ?inv npx:invalidates ?np ; npa:hasValidSignatureForPublicKeyHash ?pk . }\n filter not exists { ?np npx:hasNanopubType npx:ExampleNanopub . }\n }\n filter not exists { graph ?sg { ?newer npx:supersedes ?np . } }\n values ?_event_multi_iri {}\n graph ?a { ?pres a wd:Q604733 ; dct:isPartOf ?_event_multi_iri . }\n optional { graph ?a { ?pres schema:startDate ?sdA } }\n optional { graph ?a { ?pres schemaold:startDate ?sdB } }\n optional { graph ?a { ?pres schema:endDate ?edA } }\n optional { graph ?a { ?pres schemaold:endDate ?edB } }\n optional { graph ?a { ?pres schema:location ?loA } }\n optional { graph ?a { ?pres schemaold:location ?loB } }\n optional { graph ?a { ?pres rdfs:label ?lb } }\n bind(coalesce(?sdA, ?sdB) as ?sd)\n filter(bound(?sd))\n bind(coalesce(?edA, ?edB) as ?ed)\n bind(coalesce(str(?loA), str(?loB), \"\") as ?room)\n bind(substr(str(?sd), 1, 10) as ?day)\n bind(xsd:integer(substr(str(?sd), 12, 2)) * 60 + xsd:integer(substr(str(?sd), 15, 2)) as ?smin)\n bind(coalesce(xsd:integer(substr(str(?ed), 12, 2)) * 60 + xsd:integer(substr(str(?ed), 15, 2)), ?smin + 30) as ?emin)\n bind(coalesce(str(?lb), \"(untitled)\") as ?tlabel)\n optional {\n graph ?a { ?pres pav:authoredBy ?ag }\n optional { graph ?pi2 { ?ag foaf:name ?agn } }\n bind(coalesce(?agn, replace(str(?ag), \"^.*/\", \"\")) as ?aname)\n }\n } group by ?pres ?day ?room ?smin ?emin ?tlabel\n }\n # rank inside the (day, room, slot) cell, and how many share it\n {\n select ?pres (count(distinct ?o) as ?rank) where {\n graph npa:graph {\n ?npR npa:hasValidSignatureForPublicKeyHash ?pkR ;\n np:hasAssertion ?a2 ; npx:introduces ?pres .\n filter not exists { ?invR npx:invalidates ?npR ; npa:hasValidSignatureForPublicKeyHash ?pkR . }\n filter not exists { ?npR npx:hasNanopubType npx:ExampleNanopub . }\n }\n filter not exists { graph ?sgR { ?newerR npx:supersedes ?npR . } }\n values ?_event_multi_iri {}\n graph ?a2 { ?pres a wd:Q604733 ; dct:isPartOf ?_event_multi_iri . }\n optional { graph ?a2 { ?pres schema:startDate ?sdAR } }\n optional { graph ?a2 { ?pres schemaold:startDate ?sdBR } }\n optional { graph ?a2 { ?pres schema:endDate ?edAR } }\n optional { graph ?a2 { ?pres schemaold:endDate ?edBR } }\n optional { graph ?a2 { ?pres schema:location ?loAR } }\n optional { graph ?a2 { ?pres schemaold:location ?loBR } }\n optional { graph ?a2 { ?pres rdfs:label ?lbR } }\n bind(coalesce(?sdAR, ?sdBR) as ?sdR)\n filter(bound(?sdR))\n bind(coalesce(?edAR, ?edBR) as ?edR)\n bind(coalesce(str(?loAR), str(?loBR), \"\") as ?roomR)\n bind(substr(str(?sdR), 1, 10) as ?dayR)\n bind(xsd:integer(substr(str(?sdR), 12, 2)) * 60 + xsd:integer(substr(str(?sdR), 15, 2)) as ?sminR)\n bind(coalesce(xsd:integer(substr(str(?edR), 12, 2)) * 60 + xsd:integer(substr(str(?edR), 15, 2)), ?sminR + 30) as ?eminR)\n bind(coalesce(str(?lbR), \"(untitled)\") as ?tlabelR)\n graph npa:graph {\n ?npO npa:hasValidSignatureForPublicKeyHash ?pkO ;\n np:hasAssertion ?ao ; npx:introduces ?o .\n filter not exists { ?invO npx:invalidates ?npO ; npa:hasValidSignatureForPublicKeyHash ?pkO . }\n filter not exists { ?npO npx:hasNanopubType npx:ExampleNanopub . }\n }\n filter not exists { graph ?sgO { ?newerO npx:supersedes ?npO . } }\n values ?_event_multi_iri {}\n graph ?ao { ?o a wd:Q604733 ; dct:isPartOf ?_event_multi_iri . }\n optional { graph ?ao { ?o schema:startDate ?sdAO } }\n optional { graph ?ao { ?o schemaold:startDate ?sdBO } }\n optional { graph ?ao { ?o schema:endDate ?edAO } }\n optional { graph ?ao { ?o schemaold:endDate ?edBO } }\n optional { graph ?ao { ?o schema:location ?loAO } }\n optional { graph ?ao { ?o schemaold:location ?loBO } }\n optional { graph ?ao { ?o rdfs:label ?lbO } }\n bind(coalesce(?sdAO, ?sdBO) as ?sdO)\n filter(bound(?sdO))\n bind(coalesce(?edAO, ?edBO) as ?edO)\n bind(coalesce(str(?loAO), str(?loBO), \"\") as ?roomO)\n bind(substr(str(?sdO), 1, 10) as ?dayO)\n bind(xsd:integer(substr(str(?sdO), 12, 2)) * 60 + xsd:integer(substr(str(?sdO), 15, 2)) as ?sminO)\n bind(coalesce(xsd:integer(substr(str(?edO), 12, 2)) * 60 + xsd:integer(substr(str(?edO), 15, 2)), ?sminO + 30) as ?eminO)\n bind(coalesce(str(?lbO), \"(untitled)\") as ?tlabelO)\n filter(?dayR = ?dayO && ?roomR = ?roomO && ?sminR = ?sminO && str(?tlabelO) <= str(?tlabelR))\n } group by ?pres\n }\n {\n select ?pres (count(distinct ?o2) as ?nslot) where {\n graph npa:graph {\n ?npS npa:hasValidSignatureForPublicKeyHash ?pkS ;\n np:hasAssertion ?a3 ; npx:introduces ?pres .\n filter not exists { ?invS npx:invalidates ?npS ; npa:hasValidSignatureForPublicKeyHash ?pkS . }\n filter not exists { ?npS npx:hasNanopubType npx:ExampleNanopub . }\n }\n filter not exists { graph ?sgS { ?newerS npx:supersedes ?npS . } }\n values ?_event_multi_iri {}\n graph ?a3 { ?pres a wd:Q604733 ; dct:isPartOf ?_event_multi_iri . }\n optional { graph ?a3 { ?pres schema:startDate ?sdAS } }\n optional { graph ?a3 { ?pres schemaold:startDate ?sdBS } }\n optional { graph ?a3 { ?pres schema:endDate ?edAS } }\n optional { graph ?a3 { ?pres schemaold:endDate ?edBS } }\n optional { graph ?a3 { ?pres schema:location ?loAS } }\n optional { graph ?a3 { ?pres schemaold:location ?loBS } }\n optional { graph ?a3 { ?pres rdfs:label ?lbS } }\n bind(coalesce(?sdAS, ?sdBS) as ?sdS)\n filter(bound(?sdS))\n bind(coalesce(?edAS, ?edBS) as ?edS)\n bind(coalesce(str(?loAS), str(?loBS), \"\") as ?roomS)\n bind(substr(str(?sdS), 1, 10) as ?dayS)\n bind(xsd:integer(substr(str(?sdS), 12, 2)) * 60 + xsd:integer(substr(str(?sdS), 15, 2)) as ?sminS)\n bind(coalesce(xsd:integer(substr(str(?edS), 12, 2)) * 60 + xsd:integer(substr(str(?edS), 15, 2)), ?sminS + 30) as ?eminS)\n bind(coalesce(str(?lbS), \"(untitled)\") as ?tlabelS)\n graph npa:graph {\n ?npP npa:hasValidSignatureForPublicKeyHash ?pkP ;\n np:hasAssertion ?ao2 ; npx:introduces ?o2 .\n filter not exists { ?invP npx:invalidates ?npP ; npa:hasValidSignatureForPublicKeyHash ?pkP . }\n filter not exists { ?npP npx:hasNanopubType npx:ExampleNanopub . }\n }\n filter not exists { graph ?sgP { ?newerP npx:supersedes ?npP . } }\n values ?_event_multi_iri {}\n graph ?ao2 { ?o2 a wd:Q604733 ; dct:isPartOf ?_event_multi_iri . }\n optional { graph ?ao2 { ?o2 schema:startDate ?sdAP } }\n optional { graph ?ao2 { ?o2 schemaold:startDate ?sdBP } }\n optional { graph ?ao2 { ?o2 schema:endDate ?edAP } }\n optional { graph ?ao2 { ?o2 schemaold:endDate ?edBP } }\n optional { graph ?ao2 { ?o2 schema:location ?loAP } }\n optional { graph ?ao2 { ?o2 schemaold:location ?loBP } }\n optional { graph ?ao2 { ?o2 rdfs:label ?lbP } }\n bind(coalesce(?sdAP, ?sdBP) as ?sdP)\n filter(bound(?sdP))\n bind(coalesce(?edAP, ?edBP) as ?edP)\n bind(coalesce(str(?loAP), str(?loBP), \"\") as ?roomP)\n bind(substr(str(?sdP), 1, 10) as ?dayP)\n bind(xsd:integer(substr(str(?sdP), 12, 2)) * 60 + xsd:integer(substr(str(?sdP), 15, 2)) as ?sminP)\n bind(coalesce(xsd:integer(substr(str(?edP), 12, 2)) * 60 + xsd:integer(substr(str(?edP), 15, 2)), ?sminP + 30) as ?eminP)\n bind(coalesce(str(?lbP), \"(untitled)\") as ?tlabelP)\n filter(?dayS = ?dayP && ?roomS = ?roomP && ?sminS = ?sminP)\n } group by ?pres\n }\n # column index of the room\n {\n select ?room (count(distinct ?r2) - 1 as ?col) where {\n { select distinct ?room where {\n graph npa:graph {\n ?npC npa:hasValidSignatureForPublicKeyHash ?pkC ;\n np:hasAssertion ?ac1 ; npx:introduces ?c1 .\n filter not exists { ?invC npx:invalidates ?npC ; npa:hasValidSignatureForPublicKeyHash ?pkC . }\n filter not exists { ?npC npx:hasNanopubType npx:ExampleNanopub . }\n }\n filter not exists { graph ?sgC { ?newerC npx:supersedes ?npC . } }\n values ?_event_multi_iri {}\n graph ?ac1 { ?c1 a wd:Q604733 ; dct:isPartOf ?_event_multi_iri . }\n optional { graph ?ac1 { ?c1 schema:startDate ?sdAC } }\n optional { graph ?ac1 { ?c1 schemaold:startDate ?sdBC } }\n optional { graph ?ac1 { ?c1 schema:endDate ?edAC } }\n optional { graph ?ac1 { ?c1 schemaold:endDate ?edBC } }\n optional { graph ?ac1 { ?c1 schema:location ?loAC } }\n optional { graph ?ac1 { ?c1 schemaold:location ?loBC } }\n optional { graph ?ac1 { ?c1 rdfs:label ?lbC } }\n bind(coalesce(?sdAC, ?sdBC) as ?sdC)\n filter(bound(?sdC))\n bind(coalesce(?edAC, ?edBC) as ?edC)\n bind(coalesce(str(?loAC), str(?loBC), \"\") as ?room)\n bind(substr(str(?sdC), 1, 10) as ?dayC)\n bind(xsd:integer(substr(str(?sdC), 12, 2)) * 60 + xsd:integer(substr(str(?sdC), 15, 2)) as ?sminC)\n bind(coalesce(xsd:integer(substr(str(?edC), 12, 2)) * 60 + xsd:integer(substr(str(?edC), 15, 2)), ?sminC + 30) as ?eminC)\n bind(coalesce(str(?lbC), \"(untitled)\") as ?tlabelC) } }\n { select distinct ?r2 where {\n graph npa:graph {\n ?npD npa:hasValidSignatureForPublicKeyHash ?pkD ;\n np:hasAssertion ?ac2 ; npx:introduces ?c2 .\n filter not exists { ?invD npx:invalidates ?npD ; npa:hasValidSignatureForPublicKeyHash ?pkD . }\n filter not exists { ?npD npx:hasNanopubType npx:ExampleNanopub . }\n }\n filter not exists { graph ?sgD { ?newerD npx:supersedes ?npD . } }\n values ?_event_multi_iri {}\n graph ?ac2 { ?c2 a wd:Q604733 ; dct:isPartOf ?_event_multi_iri . }\n optional { graph ?ac2 { ?c2 schema:startDate ?sdAD } }\n optional { graph ?ac2 { ?c2 schemaold:startDate ?sdBD } }\n optional { graph ?ac2 { ?c2 schema:endDate ?edAD } }\n optional { graph ?ac2 { ?c2 schemaold:endDate ?edBD } }\n optional { graph ?ac2 { ?c2 schema:location ?loAD } }\n optional { graph ?ac2 { ?c2 schemaold:location ?loBD } }\n optional { graph ?ac2 { ?c2 rdfs:label ?lbD } }\n bind(coalesce(?sdAD, ?sdBD) as ?sdD)\n filter(bound(?sdD))\n bind(coalesce(?edAD, ?edBD) as ?edD)\n bind(coalesce(str(?loAD), str(?loBD), \"\") as ?r2)\n bind(substr(str(?sdD), 1, 10) as ?dayD)\n bind(xsd:integer(substr(str(?sdD), 12, 2)) * 60 + xsd:integer(substr(str(?sdD), 15, 2)) as ?sminD)\n bind(coalesce(xsd:integer(substr(str(?edD), 12, 2)) * 60 + xsd:integer(substr(str(?edD), 15, 2)), ?sminD + 30) as ?eminD)\n bind(coalesce(str(?lbD), \"(untitled)\") as ?tlabelD) } }\n filter(str(?r2) <= str(?room))\n } group by ?room\n }\n {\n select ?day (min(?sminY) as ?dstart) where {\n graph npa:graph {\n ?npY npa:hasValidSignatureForPublicKeyHash ?pkY ;\n np:hasAssertion ?ay1 ; npx:introduces ?y1 .\n filter not exists { ?invY npx:invalidates ?npY ; npa:hasValidSignatureForPublicKeyHash ?pkY . }\n filter not exists { ?npY npx:hasNanopubType npx:ExampleNanopub . }\n }\n filter not exists { graph ?sgY { ?newerY npx:supersedes ?npY . } }\n values ?_event_multi_iri {}\n graph ?ay1 { ?y1 a wd:Q604733 ; dct:isPartOf ?_event_multi_iri . }\n optional { graph ?ay1 { ?y1 schema:startDate ?sdAY } }\n optional { graph ?ay1 { ?y1 schemaold:startDate ?sdBY } }\n optional { graph ?ay1 { ?y1 schema:endDate ?edAY } }\n optional { graph ?ay1 { ?y1 schemaold:endDate ?edBY } }\n optional { graph ?ay1 { ?y1 schema:location ?loAY } }\n optional { graph ?ay1 { ?y1 schemaold:location ?loBY } }\n optional { graph ?ay1 { ?y1 rdfs:label ?lbY } }\n bind(coalesce(?sdAY, ?sdBY) as ?sdY)\n filter(bound(?sdY))\n bind(coalesce(?edAY, ?edBY) as ?edY)\n bind(coalesce(str(?loAY), str(?loBY), \"\") as ?roomY)\n bind(substr(str(?sdY), 1, 10) as ?day)\n bind(xsd:integer(substr(str(?sdY), 12, 2)) * 60 + xsd:integer(substr(str(?sdY), 15, 2)) as ?sminY)\n bind(coalesce(xsd:integer(substr(str(?edY), 12, 2)) * 60 + xsd:integer(substr(str(?edY), 15, 2)), ?sminY + 30) as ?eminY)\n bind(coalesce(str(?lbY), \"(untitled)\") as ?tlabelY)\n } group by ?day\n }\n bind(56 + ?col * 258 as ?bx)\n bind(36 + (?smin - ?dstart + 15) * 3.0 as ?slotY)\n bind((?emin - ?smin) * 3.0 as ?slotH)\n bind(?slotY + (?rank - 1) * (?slotH / ?nslot) as ?by)\n bind(?slotH / ?nslot - 3 as ?bh)\n\n bind(replace(?tlabel, \"^(.{0,42})\\\\s.*$\", \"$1\") as ?l1)\n bind(if(strlen(?tlabel) > strlen(?l1), substr(?tlabel, strlen(?l1) + 2), \"\") as ?r1)\n bind(replace(?r1, \"^(.{0,42})\\\\s.*$\", \"$1\") as ?l2)\n bind(if(strlen(?r1) > strlen(?l2), substr(?r1, strlen(?l2) + 2), \"\") as ?r2)\n bind(if(strlen(?r2) > 42, concat(substr(?r2, 1, 41), \"\\u2026\"), ?r2) as ?l3)\n bind(if(strlen(?authors) > 44,\n concat(replace(substr(?authors, 1, 44), \",[^,]*$\", \"\"), \" \342\200\246\"),\n ?authors) as ?authShort)\n bind(concat(\n \'\',\n \'\',\n \'\',\n replace(replace(replace(?authShort, \"&\", \"&\"), \"<\", \"<\"), \">\", \">\"), \'\',\n \'\',\n \'\', replace(replace(replace(?l1, \"&\", \"&\"), \"<\", \"<\"), \">\", \">\"), \'\',\n if(strlen(?l2) > 0, concat(\'\', replace(replace(replace(?l2, \"&\", \"&\"), \"<\", \"<\"), \">\", \">\"), \'\'), \'\'),\n if(strlen(?l3) > 0, concat(\'\', replace(replace(replace(?l3, \"&\", \"&\"), \"<\", \"<\"), \">\", \">\"), \'\'), \'\'),\n \'\') as ?frag)\n }\n }\n union\n # ============ room headers ============\n {\n select ?day ?frag (0 as ?ybot) (?hx + 250 as ?xright)\n where {\n {\n select distinct ?day ?room where {\n graph npa:graph {\n ?npH npa:hasValidSignatureForPublicKeyHash ?pkH ;\n np:hasAssertion ?ah1 ; npx:introduces ?h1 .\n filter not exists { ?invH npx:invalidates ?npH ; npa:hasValidSignatureForPublicKeyHash ?pkH . }\n filter not exists { ?npH npx:hasNanopubType npx:ExampleNanopub . }\n }\n filter not exists { graph ?sgH { ?newerH npx:supersedes ?npH . } }\n values ?_event_multi_iri {}\n graph ?ah1 { ?h1 a wd:Q604733 ; dct:isPartOf ?_event_multi_iri . }\n optional { graph ?ah1 { ?h1 schema:startDate ?sdAH } }\n optional { graph ?ah1 { ?h1 schemaold:startDate ?sdBH } }\n optional { graph ?ah1 { ?h1 schema:endDate ?edAH } }\n optional { graph ?ah1 { ?h1 schemaold:endDate ?edBH } }\n optional { graph ?ah1 { ?h1 schema:location ?loAH } }\n optional { graph ?ah1 { ?h1 schemaold:location ?loBH } }\n optional { graph ?ah1 { ?h1 rdfs:label ?lbH } }\n bind(coalesce(?sdAH, ?sdBH) as ?sdH)\n filter(bound(?sdH))\n bind(coalesce(?edAH, ?edBH) as ?edH)\n bind(coalesce(str(?loAH), str(?loBH), \"\") as ?room)\n bind(substr(str(?sdH), 1, 10) as ?day)\n bind(xsd:integer(substr(str(?sdH), 12, 2)) * 60 + xsd:integer(substr(str(?sdH), 15, 2)) as ?sminH)\n bind(coalesce(xsd:integer(substr(str(?edH), 12, 2)) * 60 + xsd:integer(substr(str(?edH), 15, 2)), ?sminH + 30) as ?eminH)\n bind(coalesce(str(?lbH), \"(untitled)\") as ?tlabelH) }\n }\n {\n select ?room (count(distinct ?r3) - 1 as ?hcol) where {\n { select distinct ?room where {\n graph npa:graph {\n ?npE npa:hasValidSignatureForPublicKeyHash ?pkE ;\n np:hasAssertion ?ae1 ; npx:introduces ?e1 .\n filter not exists { ?invE npx:invalidates ?npE ; npa:hasValidSignatureForPublicKeyHash ?pkE . }\n filter not exists { ?npE npx:hasNanopubType npx:ExampleNanopub . }\n }\n filter not exists { graph ?sgE { ?newerE npx:supersedes ?npE . } }\n values ?_event_multi_iri {}\n graph ?ae1 { ?e1 a wd:Q604733 ; dct:isPartOf ?_event_multi_iri . }\n optional { graph ?ae1 { ?e1 schema:startDate ?sdAE } }\n optional { graph ?ae1 { ?e1 schemaold:startDate ?sdBE } }\n optional { graph ?ae1 { ?e1 schema:endDate ?edAE } }\n optional { graph ?ae1 { ?e1 schemaold:endDate ?edBE } }\n optional { graph ?ae1 { ?e1 schema:location ?loAE } }\n optional { graph ?ae1 { ?e1 schemaold:location ?loBE } }\n optional { graph ?ae1 { ?e1 rdfs:label ?lbE } }\n bind(coalesce(?sdAE, ?sdBE) as ?sdE)\n filter(bound(?sdE))\n bind(coalesce(?edAE, ?edBE) as ?edE)\n bind(coalesce(str(?loAE), str(?loBE), \"\") as ?room)\n bind(substr(str(?sdE), 1, 10) as ?dayE)\n bind(xsd:integer(substr(str(?sdE), 12, 2)) * 60 + xsd:integer(substr(str(?sdE), 15, 2)) as ?sminE)\n bind(coalesce(xsd:integer(substr(str(?edE), 12, 2)) * 60 + xsd:integer(substr(str(?edE), 15, 2)), ?sminE + 30) as ?eminE)\n bind(coalesce(str(?lbE), \"(untitled)\") as ?tlabelE) } }\n { select distinct ?r3 where {\n graph npa:graph {\n ?npF npa:hasValidSignatureForPublicKeyHash ?pkF ;\n np:hasAssertion ?ae2 ; npx:introduces ?e2 .\n filter not exists { ?invF npx:invalidates ?npF ; npa:hasValidSignatureForPublicKeyHash ?pkF . }\n filter not exists { ?npF npx:hasNanopubType npx:ExampleNanopub . }\n }\n filter not exists { graph ?sgF { ?newerF npx:supersedes ?npF . } }\n values ?_event_multi_iri {}\n graph ?ae2 { ?e2 a wd:Q604733 ; dct:isPartOf ?_event_multi_iri . }\n optional { graph ?ae2 { ?e2 schema:startDate ?sdAF } }\n optional { graph ?ae2 { ?e2 schemaold:startDate ?sdBF } }\n optional { graph ?ae2 { ?e2 schema:endDate ?edAF } }\n optional { graph ?ae2 { ?e2 schemaold:endDate ?edBF } }\n optional { graph ?ae2 { ?e2 schema:location ?loAF } }\n optional { graph ?ae2 { ?e2 schemaold:location ?loBF } }\n optional { graph ?ae2 { ?e2 rdfs:label ?lbF } }\n bind(coalesce(?sdAF, ?sdBF) as ?sdF)\n filter(bound(?sdF))\n bind(coalesce(?edAF, ?edBF) as ?edF)\n bind(coalesce(str(?loAF), str(?loBF), \"\") as ?r3)\n bind(substr(str(?sdF), 1, 10) as ?dayF)\n bind(xsd:integer(substr(str(?sdF), 12, 2)) * 60 + xsd:integer(substr(str(?sdF), 15, 2)) as ?sminF)\n bind(coalesce(xsd:integer(substr(str(?edF), 12, 2)) * 60 + xsd:integer(substr(str(?edF), 15, 2)), ?sminF + 30) as ?eminF)\n bind(coalesce(str(?lbF), \"(untitled)\") as ?tlabelF) } }\n filter(str(?r3) <= str(?room))\n } group by ?room\n }\n bind(56 + ?hcol * 258 as ?hx)\n bind(concat(\n \'\',\n \'\',\n replace(replace(replace(?room, \"&\", \"&\"), \"<\", \"<\"), \">\", \">\"), \'\') as ?frag)\n }\n }\n union\n # ============ hour labels on the left ============\n {\n select ?day ?frag (0 as ?ybot) (0 as ?xright)\n where {\n {\n select ?day (min(?smin) as ?first) (max(?emin) as ?last) where {\n graph npa:graph {\n ?npT npa:hasValidSignatureForPublicKeyHash ?pkT ;\n np:hasAssertion ?at1 ; npx:introduces ?t1 .\n filter not exists { ?invT npx:invalidates ?npT ; npa:hasValidSignatureForPublicKeyHash ?pkT . }\n filter not exists { ?npT npx:hasNanopubType npx:ExampleNanopub . }\n }\n filter not exists { graph ?sgT { ?newerT npx:supersedes ?npT . } }\n values ?_event_multi_iri {}\n graph ?at1 { ?t1 a wd:Q604733 ; dct:isPartOf ?_event_multi_iri . }\n optional { graph ?at1 { ?t1 schema:startDate ?sdAT } }\n optional { graph ?at1 { ?t1 schemaold:startDate ?sdBT } }\n optional { graph ?at1 { ?t1 schema:endDate ?edAT } }\n optional { graph ?at1 { ?t1 schemaold:endDate ?edBT } }\n optional { graph ?at1 { ?t1 schema:location ?loAT } }\n optional { graph ?at1 { ?t1 schemaold:location ?loBT } }\n optional { graph ?at1 { ?t1 rdfs:label ?lbT } }\n bind(coalesce(?sdAT, ?sdBT) as ?sdT)\n filter(bound(?sdT))\n bind(coalesce(?edAT, ?edBT) as ?edT)\n bind(coalesce(str(?loAT), str(?loBT), \"\") as ?roomT)\n bind(substr(str(?sdT), 1, 10) as ?day)\n bind(xsd:integer(substr(str(?sdT), 12, 2)) * 60 + xsd:integer(substr(str(?sdT), 15, 2)) as ?smin)\n bind(coalesce(xsd:integer(substr(str(?edT), 12, 2)) * 60 + xsd:integer(substr(str(?edT), 15, 2)), ?smin + 30) as ?emin)\n bind(coalesce(str(?lbT), \"(untitled)\") as ?tlabelT)\n } group by ?day\n }\n values ?hr { 8 9 10 11 12 13 14 15 16 17 18 19 20 }\n filter(?hr * 60 >= ?first - 60 && ?hr * 60 <= ?last + 60)\n bind(36 + (?hr * 60 - ?first + 15) * 3.0 as ?hy)\n bind(concat(\n \'\',\n if(?hr < 10, concat(\"0\", str(?hr)), str(?hr)), \':00\',\n \'\') as ?frag)\n }\n }\n } group by ?day\n }\n bind(?day as ?title)\n bind(?maxx + 8 as ?w)\n bind(?maxy + 16 as ?h)\n}\norder by ?title" } } } rows { name { value: "wasAttributedTo" } } rows { name { value: "0000-0002-1267-0234" } } rows { quad { s_iri { prefix_id: 2 name_id: 4 } p_iri { prefix_id: 11 name_id: 21 } o_iri { prefix_id: 10 } g_iri { prefix_id: 2 name_id: 7 } } } rows { name { value: "name" } } rows { quad { s_iri { prefix_id: 10 name_id: 22 } p_iri { prefix_id: 12 } o_literal { lex: "Tobias Kuhn" } g_iri { prefix_id: 2 name_id: 9 } } } rows { name { value: "created" } } rows { datatype { value: "http://www.w3.org/2001/XMLSchema#dateTime" } } rows { quad { s_iri { prefix_id: 1 name_id: 1 } p_iri { prefix_id: 5 name_id: 24 } o_literal { lex: "2026-08-28T16:10:41Z" datatype: 1 } } } rows { name { value: "creator" } } rows { quad { p_iri { } o_iri { prefix_id: 10 name_id: 22 } } } rows { prefix { value: "https://creativecommons.org/licenses/by/4.0/" } } rows { quad { p_iri { prefix_id: 5 name_id: 14 } o_iri { prefix_id: 16 name_id: 2 } } } rows { name { value: "embeds" } } rows { quad { p_iri { prefix_id: 7 name_id: 26 } o_iri { prefix_id: 2 name_id: 12 } } } rows { quad { p_iri { prefix_id: 9 name_id: 17 } o_literal { lex: "Get the presentation programme of an event as an SVG grid" } } } rows { name { value: "wasCreatedFromProvenanceTemplate" } } rows { prefix { id: 8 value: "http://purl.org/np/" } } rows { name { value: "RANwQa4ICWS5SOjw7gp99nBpXBasapwtZF1fIM3H2gYTM" } } rows { quad { p_iri { prefix_id: 6 name_id: 27 } o_iri { prefix_id: 8 } } } rows { name { value: "wasCreatedFromPubinfoTemplate" } } rows { name { value: "RA-N4_kFxcruvBTlo1yJv29E4SLOXsx5KO_th69PprMrA" } } rows { quad { p_iri { prefix_id: 6 } o_iri { prefix_id: 1 } } } rows { name { value: "RACJ58Gvyn91LqCKIO9zu1eijDQIeEff28iyDrJgjSJF8" } } rows { quad { o_iri { } } } rows { name { value: "RARJj78P72NR5edKOnu_f4ePE9NYYuW2m2pM-fEoobMBk" } } rows { quad { o_iri { } } } rows { name { value: "wasCreatedFromTemplate" } } rows { name { value: "RAEFAt-QcFK0ZhqfvlsmS10BnzGJA0xwOICZXkO-ai87k" } } rows { quad { p_iri { prefix_id: 6 } o_iri { prefix_id: 1 } } } rows { name { value: "sig" } } rows { name { value: "hasAlgorithm" } } rows { quad { s_iri { prefix_id: 2 } p_iri { prefix_id: 7 } o_literal { lex: "RSA" } } } rows { name { value: "hasPublicKey" } } rows { quad { p_iri { } o_literal { lex: "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwUtewGCpT5vIfXYE1bmf/Uqu1ojqnWdYxv+ySO80ul8Gu7m8KoyPAwuvaPj0lvPtHrg000qMmkxzKhYknEjq8v7EerxZNYp5B3/3+5ZpuWOYAs78UnQVjbHSmDdmryr4D4VvvNIiUmd0yxci47dTFUj4DvfHnGd6hVe5+goqdcwIDAQAB" } } } rows { name { value: "hasSignature" } } rows { quad { p_iri { } o_literal { lex: "THsJnxIQIPCICUQFjArbc9DzJAbDb9HrrkcJVMM6wVH0MbNIN/VZ76URXI2ZLcdN5d5ZiSv6COlM4DanelwlmcXrshEMK0mlHuDvODcsFmNHYnjkj+jMYkpO3SY23XPPPKj1AoWja1kOX1ZlRHVZslzK/LU1VaQI/Mb8wWfbWHU=" } } } rows { name { value: "hasSignatureTarget" } } rows { quad { p_iri { } o_iri { prefix_id: 1 name_id: 1 } } } rows { name { value: "signedBy" } } rows { quad { p_iri { prefix_id: 7 name_id: 40 } o_iri { prefix_id: 10 name_id: 22 } } }