Schedule

To exchange the scheduled conference data between the different systems and tools we are using the schedule.xml format known from pentabarf/frab/pretalx.

If you want create a small schedule with only a few events, and don't have a structured document yet – please talk to us so we can create an account at https://import.c3voc.de for your space/event.

Schedule XML

Minimal example:

Title is required, subtitle is one sentence when the title is too long. Abstract is a summary of the talk (no html allowed, only one paragraph). Description can be longer, contain HTML or Markdown but should not contain the same content as the abstract; as both are displayed below each other when there is enough display space.

The XSD enforces the following rules

conference acronym denog16 has to match [a-z0-9_-]{4,}

- should only be used for subconferences (e.g. cccamp15-ber) or years when main part ends with number (e.g. foss4g-2016 or rc3-2021)

_ can be used instead, e.g. divoc, divoc_r2r, divoc_bb3

event slug denog16-4001-opening is used as media.ccc.de URL and has to match [a-z0-9]{4,}-[0-9]{1,6}-[a-z0-9\-_]{4,} and should match [a-z0-9]{3,}(-2[0-9]{3}-[a-z]+)?-[0-9]{1,6}-[a-z0-9\-_]{4,}[a-z0-9]

first component has to be the main conference acronym, see above – so cccamp15, not cccamp15-ber

for conferences: second component has to be the local integer ID in the conference planning system

the last is a condensed version of the title

trailing dashes should be removed

<schedule xsi:noNamespaceSchemaLocation="https://c3voc.de/schedule/schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<generator name="human" />
<version>1.0</version>
<conference>
<title>DENOG8</title>
<acronym>denog16</acronym>
<days>2</days>
<start>2016-11-23</start>
<end>2016-11-24</end>
<timeslot_duration>00:10</timeslot_duration>
<time_zone_name>Europe/Amsterdam</time_zone_name>
</conference>
<day index="1" date="2016-11-23" start="2016-11-23T09:00:00+01:00" end="2016-11-24T03:00:00+01:00">
<room name="darmstadtium" guid="0c00f935-e861-4e0c-ba43-7eb53ee189e4">
<event id="4001" guid="385033fe-dda1-555a-aca6-28dd05677c66">
<date>2016-11-23T13:00:00+01:00</date>
<start>13:00</start>
<duration>0:15</duration>
<room>darmstadtium</room>
<slug>denog16-4001-opening</slug>
<title>Opening</title>
<subtitle/>
<track/>
<type/>
<language>en</language>
<abstract/>
<description/>
<persons>
<person guid="211fd9e8-eebd-4657-8a70-07614b0bdfea">DENOG ORGA</person>
</persons>
<links/>
</event>
…
</room>
</day>
<day index="2" date="2016-11-24" start="2016-11-24T09:00:00+01:00" end="2016-11-25T03:00:00+01:00"/>…</day>
</schedule>

XSD: https://raw.githubusercontent.com/voc/schedule/master/validator/xsd/schedule.xml.xsd * Validator: https://c3voc.de/schedulexml/ , sourcecode

Coordination between different projects producing/consuming schedule.xml (under construction)

Interexchange JSON

One problem with the nested XML structure is that you can only exchange events once they are assigned to a room and a time slot. To circumvent this issue we propose following JSON structure based on the language/terms used in the schedule.xml format, combined with the recent pretalx extensions:

{
"$schema": "https://c3voc.de/schedule/submission",
"guid": "83ae8aec-0724-4eef-9b5a-6ead8698e629",
"title": "A example talk",
"type": "talk",
"abstract": "A good talk.",
"description": "I will expand upon the properties of the talk, primarily its high quality.",
"duration": 30,
"do_not_record": false,
"image": "https://domain.tld/img/submission.png",
"speakers": [
{
"name": "Jane",
"guid": "09ab9fae-5c45-55a1-ac3b-4cff3d94547d",
"email": "jane.doe@example.net",
"biography": "A speaker",
"avatar": "https://domain.tld/img/avatar.png"
}
],
"slot": {
"start": "2017-12-27T10:00:00Z",
"end": "2017-12-27T10:30:00Z",
"room": "R101"
},
"answers": [
{
"id": 1,
"question": {
"id": 1,
"question": {
"en": "How much do you like green, on a scale from 1-10?"
},
"required": false,
"target": "submission",
"options": []
},
"answer": "11",
"answer_file": null,
"submission": "ABCDE",
"person": null,
"options": []
}
],
"notes": "Please make sure you give me red M&Ms",
"internal_notes": "Absolutely no M&Ms, but cool proposal otherwise!",
"tags": ["science"]
}

JSON-Schema: https://github.com/voc/schedule/tree/master/validator/submission-json

Conversion tools

Some examples and converters to generate a schedule.xml file: https://github.com/voc/schedule, includes converter from schedule.json to schedule.xml and vice verca

csv2schedule e.g. from a LibreOffice or Google Spreadsheet document [ simple, advanced ]

csv → schedule.xml

csv → schedule.json

schedule_json2xml

schedule.json → schedule.xml

wiki2schedule

Semantic Mediawiki + schedule.json → schedule.xml, schedule.json, halfnarp

wikitable2schedule

HTML (wiki) table (e.g. from Dokuwiki at https://di.c3voc.de) → schedule.xml, schedule.json

c3data GraphQL export

rC3hub JSON API export

https://github.com/voc/voctosched

csv → schedule.xml + schedule.json

json → schedule.xml + schedule.json

plugin support for new inputs

https://github.com/Zverik/schedule-convert

csv → schedule.xml

schedule.xml → xcal

schedule.xml → ical

schedule.xml schedule2.xml → schedule-merged.xml

Sessionize JSON → schedule.xml

https://github.com/verschwoerhaus/ical2schedule

ical → schedule.xml

https://github.com/linux-audio-berlin/LAC16/blob/master/schedule/sexport.py

statistics related to Auphonic

Planning systems able to produce schedule.xml

software	output formats	used by	example instances
pretalx	xml, json	CCC	https://pretalx.c3voc.de
frab	xml, json	CCC	https://frab.cccv.de
osem	xml	openSUSE, GNOME, ownCloud
pentabarf	xml	2023: only by fosdem	https://penta.fosdem.org/

Clients consuming schedule.xml

https://github.com/EventFahrplan/EventFahrplan (Android, Kotlin/Java)

https://github.com/Wilm0r/giggity (Android, Java)

https://github.com/saschalalala/pyfahrplan (CLI, Python)

Useful Invocations:

Get talk IDs for a certain day (intro rendering):

xmlstarlet sel -T -t -m '/schedule/day[@index=1]/room/event/@id' -v . -n schedule.xml

Full XML example

from https://fahrplan.events.ccc.de/ → schedule.xmle.g. https://fahrplan.events.ccc.de/congress/2018/Fahrplan/schedule.xml

<schedule>
<generator name="frab" version="0.7" url="https://github.com/frab/frab" />
<version>1.3</version>
<conference>
<acronym>33c3</acronym>
<title>33. Chaos Communication Congress</title>
<start>2016-12-27</start>
<end>2016-12-30</end>
<days>4</days>
<timeslot_duration>00:15</timeslot_duration>
<time_zone_name>Europe/Amsterdam</time_zone_name>
<base_url>https://fahrplan.events.ccc.de/congress/2016/Fahrplan/</base_url>
</conference>
<day date="2016-12-27" end="2016-12-28T04:00:00+01:00" index="1" start="2016-12-27T10:00:00+01:00">
<room name="Saal 1">
<event guid="c06dd4c2-c637-445d-9c72-92204a35eeff" id="8264">
<date>2016-12-27T20:30:00+01:00</date>
<start>20:30</start>
<duration>01:00</duration>
<room>Saal 6</room>
<slug>33c3-8264-netzpolitik_in_der_schweiz_2016</slug>
<url>https://fahrplan.events.ccc.de/congress/2016/Fahrplan/events/8264.html</url>
<recording>
<license>CC BY 4.0</license>
<optout>false</optout>
</recording>
<title>Netzpolitik in der Schweiz 2016</title>
<subtitle>Grundrechte per Volksentscheid versenken</subtitle>
<track>CCC</track>
<type>lecture</type>
<language>de</language>
<abstract>
Ein Überblick zur netzpolitischen Situation in der Schweiz. Wir geben einen umfassenden Rückblick auf das ereignissreiche Jahr 2016, in dem die Schweizer Bevölkerung über gleich zwei Massenüberwachungsgesetze entschieden hat. Die netzpolitischen Gruppierungen haben mit viel Einsatz gegen die Gesetze gekämpft . Wir berichten darüber, wie wir das angengangen sind, wie es ausgegangen ist und was wir dabei gelernt haben. Zudem machen wir einen Ausblick auf kommende netzpolitische Herausforderungen.
</abstract>
<description>
In Sachen Netzpolitik hat sich im Jahr 2016, seit unserem letzten Vortrag zu dem Thema, viel getan. Gleich zu Beginn 2016 kam die Nachricht, dass das Referendum zum NDG erfolgreich war. Damit hat das Schweizer Stimmvolk die Chance erhalten, über das Geheimdienstgesetz (NDG) abzustimmen. Mit dem Zustandekommen des Referendums war aber erst die halbe Arbeit getan. Es galt nun der in Gang gesetzten staatlichen Propagandamaschinerie sowie einigen, insbesondere bürgerlichen, Parteien entgegenzuwirken. Die netzpolitischen Gruppierungen waren also gefragt, sich aktiv, parteipolitisch unabhängig und mit technischen Fakten in den Abstimmungskampf einzubringen. Am 25. September 2016 hat dann das Schweizer Stimmvolk über das neue Nachrichtendienstgesetz entschieden: 65% der Bevölkerung hat das gesetz angenommen, nur gerade 35 % teilten unsere Meinung. Im Frühling hat das Parlament gleich das nächste fragwürdige Gesetz verabschiedet - das revidierte Bundesgesetz betreffend die Überwachung des Post- und Fernmeldeverkehrs (BÜPF). Auch gegen dieses Gesetz hat die Schweizer Netzgemeinde, unterstützt von einer ganzen Reihe Jungparteien, umgehend das Referendum ergriffen. Das Sammeln der Unterschriften wurde diesmal aus den Räumen des CCC Zürich (CCCZH) koordiniert, da es sich abgesehen von der stark netzpolitisch verankerten Pirtatenpartei, nicht um eine parteipolitische Initiative handelte. Auch wenn das Referendum gegen das BÜPF leider nicht erfolgreich war, so haben wir bei der Zusammenarbeit mit einem gross gestreuten Kommittee, beim Sammeln auf der Strasse und dem Auszählen und bescheinigen der Unterschriften viel gelernt und somit nicht Gold, aber immerhin Silber und Bronze abgeräumt. Auch wenn mit 2016 ein - mit Bezug auf die Schweizer Netzpolitik - besonders düsters Jahr zu Ende geht, so ist für die Zukunft noch einiges ausstehend. Zum Schluss wollen wir einen kurzen Überblick geben über das was kommt. Detaillierte Erklärungen zum politischen System in der Schweiz und der (damals) aktuellen Lage haben wir im Vortrag am 32c3 gegeben: https://media.ccc.de/v/32c3-7205-netzpolitik_in_der_schweiz Im Anschluss an den Talk gibt es eine ausgedehnte Diskussions- und Fragesession zu den behandelten Themen im Raum A.1: Siehe hier: https://events.ccc.de/congress/2016/wiki/Session:Netzpolitik_in_der_Schweiz_2017
</description>
<logo>/system/events/logos/000/008/264/large/buepf_tux.jpg</logo>
<persons>
<person id="6379">Hakuna MaMate</person>
</persons>
<links>
<link href="https://www.ccc-ch.ch/">Chaos Computer Club Schweiz</link>
<link href="https://www.digitale-gesellschaft.ch">Digitale Gesellschaft Schweiz</link>
<link href="https://stopbuepf.ch/">Referendumsplattform BÜPF</link>
<link href="https://www.nachrichtendienstgesetz.ch">Referendumsplattform NDG</link>
</links>
<attachments>
<attachment href="/system/event_attachments/attachments/000/003/131/original/talk_33c3_netzpolitik.pdf?1482965202">Slides</attachment>
</attachments>
</event>
…
</room>
<room name="Saal 2">…</room>
…
</day>
<day date="2016-12-28" end="2016-12-29T04:00:00+01:00" index="2" start="2016-12-28T10:00:00+01:00">…</day>
<day date="2016-12-29" end="2016-12-30T04:00:00+01:00" index="3" start="2016-12-29T10:00:00+01:00">…</day>
<day date="2016-12-30" end="2016-12-30T23:00:00+01:00" index="4" start="2016-12-30T10:00:00+01:00">…</day>
</schedule>