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
orrc3-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
, notcccamp15-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>
- 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"] }
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-
- csv → schedule.xml
- csv → schedule.json
-
- schedule.json → schedule.xml
-
- Semantic Mediawiki + schedule.json → schedule.xml, schedule.json, halfnarp
-
- HTML (wiki) table (e.g. from Dokuwiki at https://di.c3voc.de) → schedule.xml, schedule.json
- c3data GraphQL export
- rC3hub JSON API export
-
-
- csv → schedule.xml + schedule.json
- json → schedule.xml + schedule.json
- plugin support for new inputs
-
- csv → schedule.xml
- schedule.xml → xcal
- schedule.xml → ical
- schedule.xml schedule2.xml → schedule-merged.xml
- Sessionize JSON → schedule.xml
-
- ical → schedule.xml
- 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/Wilm0r/giggity (Android, Java)
- https://github.com/EventFahrplan/EventFahrplan (Android, Kotlin/Java)
- https://github.com/saschalalala/pyfahrplan (CLI, Python)
- https://github.com/crs-tools/tracker (Video processing system)
- https://github.com/engelsystem/engelsystem (Volunteer planning system) (PHP)
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.xml e.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>