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: "RA4vcmtu6eEea3ruVITzEEOVUwZWC2kweoJsY_HqgBW3o" } } rows { namespace { name: "this" value { prefix_id: 1 } } } rows { prefix { value: "https://w3id.org/np/RA4vcmtu6eEea3ruVITzEEOVUwZWC2kweoJsY_HqgBW3o/" } } 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 schedule of an event as one SVG per day: a grid with one column per room used that day, boxes placed at their real clock positions. Covers both the presentations that are part of the event and its workshop and tutorial sub-spaces, which are coloured differently and link to their own space pages. Reads both the http:// and https:// schema.org namespaces. Each box links with an explicit &context= naming the event, so that a talk opened from the schedule lands with the conference as its navigation context; without it Nanodash appends the context of the page the schedule happens to be rendered on, and from the schedule\'s own resource page that is the schedule, on which the part page renders none of its views." } 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 schedule of an event as an SVG grid" } } } rows { name { value: "endpoint" } } rows { prefix { value: "https://w3id.org/np/l/nanopub-query-1.1/repo/" } } rows { name { value: "full" } } 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: \nprefix gen: \nprefix conf: \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 + 170 as ?xright)\n where {\n {\n select ?pres ?day ?room ?smin ?emin ?tlabel ?path ?ctxq ?fill ?stroke\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 {\n graph ?a { ?pres a wd:Q604733 ; dct:isPartOf ?ev . }\n bind(\"/part?id=\" as ?path)\n bind(\"#eaf1f8\" as ?fill) bind(\"#9bb4cc\" as ?stroke)\n } union {\n graph ?a { ?pres a conf:Workshop ; gen:isSubSpaceOf ?ev . }\n bind(\"/space?id=\" as ?path)\n bind(\"#fdf0e2\" as ?fill) bind(\"#d9a55f\" as ?stroke)\n } union {\n graph ?a { ?pres a conf:Tutorial ; gen:isSubSpaceOf ?ev . }\n bind(\"/space?id=\" as ?path)\n bind(\"#eef7ec\" as ?fill) bind(\"#8fbf86\" as ?stroke)\n }\n bind(concat(\"&context=\", encode_for_uri(str(?ev))) as ?ctxq)\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 ?path ?ctxq ?fill ?stroke\n }\n # Rank within the (day, room, slot) cell and how many share it, in ONE\n # self-join: with the sub-space branch added, a second pass over the base\n # pattern ran the query service out of budget (HTTP 503).\n {\n select ?pres (sum(if(?keyO <= ?keyR, 1, 0)) as ?rank)\n (count(distinct ?o) as ?nslot)\n 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 {\n graph ?a2 { ?pres a wd:Q604733 ; dct:isPartOf ?evR . }\n bind(\"/part?id=\" as ?pathR)\n bind(\"#eaf1f8\" as ?fillR) bind(\"#9bb4cc\" as ?strokeR)\n } union {\n graph ?a2 { ?pres a conf:Workshop ; gen:isSubSpaceOf ?evR . }\n bind(\"/space?id=\" as ?pathR)\n bind(\"#fdf0e2\" as ?fillR) bind(\"#d9a55f\" as ?strokeR)\n } union {\n graph ?a2 { ?pres a conf:Tutorial ; gen:isSubSpaceOf ?evR . }\n bind(\"/space?id=\" as ?pathR)\n bind(\"#eef7ec\" as ?fillR) bind(\"#8fbf86\" as ?strokeR)\n }\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 optional { graph ?a2 { ?pres schema:position ?psR } }\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 bind(concat(str(1000 + coalesce(?psR, 999)), ?tlabelR) as ?keyR)\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 {\n graph ?ao { ?o a wd:Q604733 ; dct:isPartOf ?evO . }\n bind(\"/part?id=\" as ?pathO)\n bind(\"#eaf1f8\" as ?fillO) bind(\"#9bb4cc\" as ?strokeO)\n } union {\n graph ?ao { ?o a conf:Workshop ; gen:isSubSpaceOf ?evO . }\n bind(\"/space?id=\" as ?pathO)\n bind(\"#fdf0e2\" as ?fillO) bind(\"#d9a55f\" as ?strokeO)\n } union {\n graph ?ao { ?o a conf:Tutorial ; gen:isSubSpaceOf ?evO . }\n bind(\"/space?id=\" as ?pathO)\n bind(\"#eef7ec\" as ?fillO) bind(\"#8fbf86\" as ?strokeO)\n }\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 optional { graph ?ao { ?o schema:position ?psO } }\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 bind(concat(str(1000 + coalesce(?psO, 999)), ?tlabelO) as ?keyO)\n filter(?dayR = ?dayO && ?roomR = ?roomO && ?sminR = ?sminO)\n } group by ?pres\n }\n # column index of the room\n {\n select ?day ?room (count(distinct ?r2) - 1 as ?col) where {\n { select distinct ?day ?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 {\n graph ?ac1 { ?c1 a wd:Q604733 ; dct:isPartOf ?evC . }\n bind(\"/part?id=\" as ?pathC)\n bind(\"#eaf1f8\" as ?fillC) bind(\"#9bb4cc\" as ?strokeC)\n } union {\n graph ?ac1 { ?c1 a conf:Workshop ; gen:isSubSpaceOf ?evC . }\n bind(\"/space?id=\" as ?pathC)\n bind(\"#fdf0e2\" as ?fillC) bind(\"#d9a55f\" as ?strokeC)\n } union {\n graph ?ac1 { ?c1 a conf:Tutorial ; gen:isSubSpaceOf ?evC . }\n bind(\"/space?id=\" as ?pathC)\n bind(\"#eef7ec\" as ?fillC) bind(\"#8fbf86\" as ?strokeC)\n }\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 ?day)\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 ?dayD ?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 {\n graph ?ac2 { ?c2 a wd:Q604733 ; dct:isPartOf ?evD . }\n bind(\"/part?id=\" as ?pathD)\n bind(\"#eaf1f8\" as ?fillD) bind(\"#9bb4cc\" as ?strokeD)\n } union {\n graph ?ac2 { ?c2 a conf:Workshop ; gen:isSubSpaceOf ?evD . }\n bind(\"/space?id=\" as ?pathD)\n bind(\"#fdf0e2\" as ?fillD) bind(\"#d9a55f\" as ?strokeD)\n } union {\n graph ?ac2 { ?c2 a conf:Tutorial ; gen:isSubSpaceOf ?evD . }\n bind(\"/space?id=\" as ?pathD)\n bind(\"#eef7ec\" as ?fillD) bind(\"#8fbf86\" as ?strokeD)\n }\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(?dayD = ?day && str(?r2) <= str(?room))\n } group by ?day ?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 {\n graph ?ay1 { ?y1 a wd:Q604733 ; dct:isPartOf ?evY . }\n bind(\"/part?id=\" as ?pathY)\n bind(\"#eaf1f8\" as ?fillY) bind(\"#9bb4cc\" as ?strokeY)\n } union {\n graph ?ay1 { ?y1 a conf:Workshop ; gen:isSubSpaceOf ?evY . }\n bind(\"/space?id=\" as ?pathY)\n bind(\"#fdf0e2\" as ?fillY) bind(\"#d9a55f\" as ?strokeY)\n } union {\n graph ?ay1 { ?y1 a conf:Tutorial ; gen:isSubSpaceOf ?evY . }\n bind(\"/space?id=\" as ?pathY)\n bind(\"#eef7ec\" as ?fillY) bind(\"#8fbf86\" as ?strokeY)\n }\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 * 176 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,25})\\\\s.*$\", \"$1\") as ?l1raw)\n bind(if(strlen(?l1raw) > 25, substr(?l1raw, 1, 25), ?l1raw) as ?l1)\n bind(if(strlen(?tlabel) > strlen(?l1), substr(?tlabel, strlen(?l1) + 2), \"\") as ?r1)\n bind(replace(?r1, \"^(.{0,25})\\\\s.*$\", \"$1\") as ?l2raw)\n bind(if(strlen(?l2raw) > 25 || strlen(?r1) > strlen(?l2raw),\n concat(substr(?l2raw, 1, 24), \"\\u2026\"), ?l2raw) as ?l2)\n bind(if(strlen(?authors) > 25,\n concat(replace(substr(?authors, 1, 23), \",[^,]*$\", \"\"), \" \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 \'\') as ?frag)\n }\n }\n union\n # ============ room headers ============\n {\n select ?day ?frag (0 as ?ybot) (?hx + 170 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 {\n graph ?ah1 { ?h1 a wd:Q604733 ; dct:isPartOf ?evH . }\n bind(\"/part?id=\" as ?pathH)\n bind(\"#eaf1f8\" as ?fillH) bind(\"#9bb4cc\" as ?strokeH)\n } union {\n graph ?ah1 { ?h1 a conf:Workshop ; gen:isSubSpaceOf ?evH . }\n bind(\"/space?id=\" as ?pathH)\n bind(\"#fdf0e2\" as ?fillH) bind(\"#d9a55f\" as ?strokeH)\n } union {\n graph ?ah1 { ?h1 a conf:Tutorial ; gen:isSubSpaceOf ?evH . }\n bind(\"/space?id=\" as ?pathH)\n bind(\"#eef7ec\" as ?fillH) bind(\"#8fbf86\" as ?strokeH)\n }\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 ?day ?room (count(distinct ?r3) - 1 as ?hcol) where {\n { select distinct ?day ?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 {\n graph ?ae1 { ?e1 a wd:Q604733 ; dct:isPartOf ?evE . }\n bind(\"/part?id=\" as ?pathE)\n bind(\"#eaf1f8\" as ?fillE) bind(\"#9bb4cc\" as ?strokeE)\n } union {\n graph ?ae1 { ?e1 a conf:Workshop ; gen:isSubSpaceOf ?evE . }\n bind(\"/space?id=\" as ?pathE)\n bind(\"#fdf0e2\" as ?fillE) bind(\"#d9a55f\" as ?strokeE)\n } union {\n graph ?ae1 { ?e1 a conf:Tutorial ; gen:isSubSpaceOf ?evE . }\n bind(\"/space?id=\" as ?pathE)\n bind(\"#eef7ec\" as ?fillE) bind(\"#8fbf86\" as ?strokeE)\n }\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 ?day)\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 ?dayF ?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 {\n graph ?ae2 { ?e2 a wd:Q604733 ; dct:isPartOf ?evF . }\n bind(\"/part?id=\" as ?pathF)\n bind(\"#eaf1f8\" as ?fillF) bind(\"#9bb4cc\" as ?strokeF)\n } union {\n graph ?ae2 { ?e2 a conf:Workshop ; gen:isSubSpaceOf ?evF . }\n bind(\"/space?id=\" as ?pathF)\n bind(\"#fdf0e2\" as ?fillF) bind(\"#d9a55f\" as ?strokeF)\n } union {\n graph ?ae2 { ?e2 a conf:Tutorial ; gen:isSubSpaceOf ?evF . }\n bind(\"/space?id=\" as ?pathF)\n bind(\"#eef7ec\" as ?fillF) bind(\"#8fbf86\" as ?strokeF)\n }\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(?dayF = ?day && str(?r3) <= str(?room))\n } group by ?day ?room\n }\n bind(56 + ?hcol * 176 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 {\n graph ?at1 { ?t1 a wd:Q604733 ; dct:isPartOf ?evT . }\n bind(\"/part?id=\" as ?pathT)\n bind(\"#eaf1f8\" as ?fillT) bind(\"#9bb4cc\" as ?strokeT)\n } union {\n graph ?at1 { ?t1 a conf:Workshop ; gen:isSubSpaceOf ?evT . }\n bind(\"/space?id=\" as ?pathT)\n bind(\"#fdf0e2\" as ?fillT) bind(\"#d9a55f\" as ?strokeT)\n } union {\n graph ?at1 { ?t1 a conf:Tutorial ; gen:isSubSpaceOf ?evT . }\n bind(\"/space?id=\" as ?pathT)\n bind(\"#eef7ec\" as ?fillT) bind(\"#8fbf86\" as ?strokeT)\n }\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-09-07T09:53:56Z" 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 { name { value: "supersedes" } } rows { name { value: "RAZ-GrPLPsbk1dc9Jquv_id9rTpevV7J0W9xTiQq-0jns" } } rows { quad { p_iri { prefix_id: 7 name_id: 27 } o_iri { prefix_id: 1 } } } rows { quad { p_iri { prefix_id: 9 name_id: 17 } o_literal { lex: "Get the schedule 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: 29 } 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: "RAoTD7udB2KtUuOuAe74tJi1t3VzK0DyWS7rYVAq1GRvw" } } 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: "OTyieckZHoMNV5yEMGsV8kjAVl4g7yDxWaaC0pOKsCh5Kh47QcJCzWJum/TQa2vuxDkFQkb5E0l9Ds4JFffPE4wqx9nwV1olIm4J2iUB77spnuBEmmlthzser6bokyqoiSUItvEgZqqX8KqrvgHZZ/m5v3j3H1wLRULJkwkmUvM=" } } } 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: 43 } o_iri { prefix_id: 10 name_id: 22 } } }