. . . . "Renders the presentations of an event as a program 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. The given resource may be the event itself or a resource maintained by it, so the same view serves an event page and a dedicated program page. Reads both the http:// and https:// schema.org namespaces." . . . "Get the presentation program of an event as an SVG grid" . . "prefix rdfs: \nprefix dct: \nprefix np: \nprefix npa: \nprefix npx: \nprefix xsd: \nprefix wd: \nprefix schema: \nprefix schemaold: \nprefix foaf: \nprefix pav: \nprefix gen: \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 {\n values ?_resource_multi_iri {}\n bind(?_resource_multi_iri as ?ev)\n } union {\n values ?_resource_multi_iri {}\n graph ?mg { ?_resource_multi_iri gen:isMaintainedBy ?ev }\n }\n graph ?a { ?pres a wd:Q604733 ; dct:isPartOf ?ev . }\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 {\n values ?_resource_multi_iri {}\n bind(?_resource_multi_iri as ?evR)\n } union {\n values ?_resource_multi_iri {}\n graph ?mgR { ?_resource_multi_iri gen:isMaintainedBy ?evR }\n }\n graph ?a2 { ?pres a wd:Q604733 ; dct:isPartOf ?evR . }\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 {\n values ?_resource_multi_iri {}\n bind(?_resource_multi_iri as ?evO)\n } union {\n values ?_resource_multi_iri {}\n graph ?mgO { ?_resource_multi_iri gen:isMaintainedBy ?evO }\n }\n graph ?ao { ?o a wd:Q604733 ; dct:isPartOf ?evO . }\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 {\n values ?_resource_multi_iri {}\n bind(?_resource_multi_iri as ?evS)\n } union {\n values ?_resource_multi_iri {}\n graph ?mgS { ?_resource_multi_iri gen:isMaintainedBy ?evS }\n }\n graph ?a3 { ?pres a wd:Q604733 ; dct:isPartOf ?evS . }\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 {\n values ?_resource_multi_iri {}\n bind(?_resource_multi_iri as ?evP)\n } union {\n values ?_resource_multi_iri {}\n graph ?mgP { ?_resource_multi_iri gen:isMaintainedBy ?evP }\n }\n graph ?ao2 { ?o2 a wd:Q604733 ; dct:isPartOf ?evP . }\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 {\n values ?_resource_multi_iri {}\n bind(?_resource_multi_iri as ?evC)\n } union {\n values ?_resource_multi_iri {}\n graph ?mgC { ?_resource_multi_iri gen:isMaintainedBy ?evC }\n }\n graph ?ac1 { ?c1 a wd:Q604733 ; dct:isPartOf ?evC . }\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 {\n values ?_resource_multi_iri {}\n bind(?_resource_multi_iri as ?evD)\n } union {\n values ?_resource_multi_iri {}\n graph ?mgD { ?_resource_multi_iri gen:isMaintainedBy ?evD }\n }\n graph ?ac2 { ?c2 a wd:Q604733 ; dct:isPartOf ?evD . }\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 {\n values ?_resource_multi_iri {}\n bind(?_resource_multi_iri as ?evY)\n } union {\n values ?_resource_multi_iri {}\n graph ?mgY { ?_resource_multi_iri gen:isMaintainedBy ?evY }\n }\n graph ?ay1 { ?y1 a wd:Q604733 ; dct:isPartOf ?evY . }\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), \",[^,]*$\", \"\"), \" …\"),\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 {\n values ?_resource_multi_iri {}\n bind(?_resource_multi_iri as ?evH)\n } union {\n values ?_resource_multi_iri {}\n graph ?mgH { ?_resource_multi_iri gen:isMaintainedBy ?evH }\n }\n graph ?ah1 { ?h1 a wd:Q604733 ; dct:isPartOf ?evH . }\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 {\n values ?_resource_multi_iri {}\n bind(?_resource_multi_iri as ?evE)\n } union {\n values ?_resource_multi_iri {}\n graph ?mgE { ?_resource_multi_iri gen:isMaintainedBy ?evE }\n }\n graph ?ae1 { ?e1 a wd:Q604733 ; dct:isPartOf ?evE . }\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 {\n values ?_resource_multi_iri {}\n bind(?_resource_multi_iri as ?evF)\n } union {\n values ?_resource_multi_iri {}\n graph ?mgF { ?_resource_multi_iri gen:isMaintainedBy ?evF }\n }\n graph ?ae2 { ?e2 a wd:Q604733 ; dct:isPartOf ?evF . }\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 {\n values ?_resource_multi_iri {}\n bind(?_resource_multi_iri as ?evT)\n } union {\n values ?_resource_multi_iri {}\n graph ?mgT { ?_resource_multi_iri gen:isMaintainedBy ?evT }\n }\n graph ?at1 { ?t1 a wd:Q604733 ; dct:isPartOf ?evT . }\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" . . "Tobias Kuhn" . "2026-08-28T17:43:01Z"^^ . . . . . "Get the presentation program of an event as an SVG grid" . . . . . . . "RSA" . "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwUtewGCpT5vIfXYE1bmf/Uqu1ojqnWdYxv+ySO80ul8Gu7m8KoyPAwuvaPj0lvPtHrg000qMmkxzKhYknEjq8v7EerxZNYp5B3/3+5ZpuWOYAs78UnQVjbHSmDdmryr4D4VvvNIiUmd0yxci47dTFUj4DvfHnGd6hVe5+goqdcwIDAQAB" . "nQap8WT+jF4kzmKrxbuxrOkFnXonbBZ1C2MXrv9HABoMvZZhIyjGP/gWn39o0yUL8WL7LOQ2FStF3c0uALiIUzaVZiiSsWjfpfz6E4Jlzog6zj6ANuzhcTwXt2J5sry90ZX8bVf/Zb7ClZzI91jxZJAYrmtYTz0FovAXCz/mGY8=" . . .