| Both sides previous revision Previous revision Next revision | Previous revision |
| schedule [2021/04/07 18:56] – andi | schedule [2025/12/04 10:23] (current) – [Schedule] andi |
|---|
| = Schedule | = Schedule |
| |
| To interexchange the conference data between the different systems and tools we are using the schedule.xml format known from pentabarf/[[http://frab.github.io/frab/|frab]]/[[https://pretalx.com/p/about/|pretalx]]. | To exchange the scheduled conference data between the different systems and tools we are using the schedule.xml format known from [[https://github.com/nevs/pentabarf|pentabarf]]/[[http://frab.github.io/frab/|frab]]/[[https://pretalx.com/p/about/|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. |
| | ** |
| | |
| | If you prefer the contents of this page in video form with some anecdotes, see https://media.ccc.de/v/eh20-14-ids-warum-integer-eine-schlechte-idee-sind |
| | |
| | |
| | <WRAP group> |
| | <WRAP column> |
| | {{drawio>schedule-overview.png}} |
| | </WRAP> |
| | <WRAP quarter column> |
| | Historie Congress/Camp: |
| | * [[events:39c3:schedule|2025]] |
| | * [[events:38c3:schedule|2024]] |
| | * [[events:37c3:schedule|2023]] |
| | * [[events:camp23:schedule|#CCCamp23]] |
| | * [[events:jev22:schedule|2022]] |
| | * [[events:jahresendveranstaltung2021:schedule|2021]] |
| | * [[events:rc3:schedule|2020]] |
| | * [[https://events.ccc.de/congress/2019/wiki/index.php/Static:Schedule#Merged_schedules_.28XML_.2F_JSON.29|2019]] |
| | * [[https://events.ccc.de/congress/2018/wiki/index.php/Static:Schedule#Merged_schedules_.28XML_.2F_JSON.29|2018]] |
| | * [[https://events.ccc.de/congress/2017/wiki/index.php/Static:Schedule#Merged_schedules_.28XML_.2F_JSON.29|2017]] |
| | * [[https://wiki.cccv.de/general/services/system|2015]] |
| | </WRAP> |
| | </WRAP> |
| | |
| | |
| | |
| | <!-- |
| | <WRAP center round important 60%> |
| | If you want to provide schedule for JEV22 please provide a **schedule.json** file, not schedule.xml! |
| | </WRAP> |
| | --> |
| | |
| | == Usage |
| | |
| | === Producers |
| | |
| | The following systems able to produce schedule.xml/.json/etc |
| | |
| | ^ software ^ output formats ^ used by ^ example instances ^ |
| | | [[https://pretalx.com/p/about/|pretalx]] | xml, json | CCC, … | https://pretalx.c3voc.de \\ https://cfp.cccv.de | |
| | | [[http://frab.github.io/frab/|frab]] | xml, json | CCC till 2023 | https://frab.cccv.de | |
| | | [[https://osem.io|osem]] | xml | openSUSE, GNOME, ownCloud | |
| | | [[https://github.com/nevs/pentabarf|pentabarf]] | xml | CCC till switch to frab, \\ FOSDEM till 2023 | https://penta.fosdem.org/ | |
| | |
| | === Clients |
| | |
| | * giggity https://github.com/Wilm0r/giggity (Android, Java) |
| | * EventFahrplan https://github.com/EventFahrplan/EventFahrplan (Android, Kotlin/Java) |
| | * iOS Fahrplan App https://congress.conference.systems (iOS) |
| | * [[c3tracker:start]] https://github.com/crs-tools/tracker (Video processing system) |
| | * [[Engelsystem]] https://github.com/engelsystem/engelsystem (Volunteer planning system) ([[https://github.com/engelsystem/engelsystem/tree/main/src/Helpers/Schedule|PHP]]) |
| | * [[hardware:infobeamer]] (digital signage) https://info-beamer.com/raspberry-pi-digital-signage-scheduled-player-4765.html |
| | * pyfahrplan (CLI, Python) https://github.com/saschalalala/pyfahrplan |
| | |
| | |
| | |
| | == Schedule2 |
| | |
| | We are currently working on the next generation of our schedule schema, which will be available in a first beta / release candidate for 39C3. See https://github.com/voc/schedule/pull/146 and [[events:39c3:schedule]] for more details. |
| | |
| | Goals: |
| | |
| | * drop nesting: publish pre-release versions even when a talk is not assigned to a room |
| | * allow multiple events in the same room/area |
| | * allow multiple instances of the same event, e.g. for recurring workshops |
| | * fix issues with time & durations for multi-day events |
| | * … |
| | |
| | == Schedule XML |
| |
| Minimal example: | 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. | 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 |
| | |
| | |
| |
| <code> | <code> |
| <schedule> | <schedule xsi:noNamespaceSchemaLocation="https://c3voc.de/schedule/schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> |
| <generator name="human" /> | <generator name="human" /> |
| <version>1.0</version> | <version>1.0</version> |
| </conference> | </conference> |
| <day index="1" date="2016-11-23" start="2016-11-23T09:00:00+01:00" end="2016-11-24T03:00:00+01:00"> | <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"> | <room name="darmstadtium" guid="0c00f935-e861-4e0c-ba43-7eb53ee189e4"> |
| <event id="4001" guid="385033fe-dda1-555a-aca6-28dd05677c66"> | <event id="4001" guid="385033fe-dda1-555a-aca6-28dd05677c66"> |
| <date>2016-11-23T13:00:00+01:00</date> | <date>2016-11-23T13:00:00+01:00</date> |
| <description/> | <description/> |
| <persons> | <persons> |
| <person id="0">DENOG ORGA</person> | <person guid="211fd9e8-eebd-4657-8a70-07614b0bdfea">DENOG ORGA</person> |
| </persons> | </persons> |
| <links/> | <links/> |
| </code> | </code> |
| |
| == XML | * XSD: https://raw.githubusercontent.com/voc/schedule/master/validator/xsd/schedule.xml.xsd |
| * XSD: https://raw.githubusercontent.com/voc/schedule/master/validator/xsd/schedule.xml.xsd | |
| * Validator: https://c3voc.de/schedulexml/ , [[https://github.com/voc/schedule/tree/master/validator|sourcecode]] | * Validator: https://c3voc.de/schedulexml/ , [[https://github.com/voc/schedule/tree/master/validator|sourcecode]] |
| * [[https://github.com/frab/schedule.xml|Coordination between different projects producing/consuming schedule.xml]] (under construction) | * [[https://github.com/frab/schedule.xml|Coordination between different projects producing/consuming schedule.xml]] (under construction) |
| |
| |
| == Tools | == 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 [[https://docs.pretalx.org/en/latest/api/resources/submissions.html#resource-description|pretalx extensions]]: |
| | |
| | <code> |
| | { |
| | "$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"] |
| | } |
| | </code> |
| | |
| | * 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 <del>and vice verca</del> | * Some examples and converters to generate a schedule.xml file: [[https://github.com/voc/schedule]], includes converter from schedule.json to schedule.xml <del>and vice verca</del> |
| * [[https://github.com/voc/schedule/blob/master/csv2schedule_deu.py|csv2schedule]] e.g. from a [[https://github.com/voc/schedule/blob/master/example_deu/schedule-example.ods|LibreOffice]] or [[https://docs.google.com/spreadsheets/d/1ncDFREf7sO2lB_7meCLlLroQOCpEGqMjzCoO6tFLJZQ/edit?usp=sharing|Google Spreadsheet]] document [ [[https://docs.google.com/spreadsheets/d/1zisANFAdEQtJ5YT0_6t4n_cGvIY2jsYQyGkI8TT_I-c/edit?usp=sharing|simple]], [[https://docs.google.com/spreadsheets/d/1Y3_x6uaBWx6-s1WP79R92QBWiGLkm-vbZkgYvFgDMK0/edit?usp=sharing|advanced]] ] | * [[https://github.com/voc/schedule/blob/master/csv2schedule_deu.py|csv2schedule]] e.g. from a [[https://github.com/voc/schedule/blob/master/example_deu/schedule-example.ods|LibreOffice]] or [[https://docs.google.com/spreadsheets/d/1ncDFREf7sO2lB_7meCLlLroQOCpEGqMjzCoO6tFLJZQ/edit?usp=sharing|Google Spreadsheet]] document [ [[https://docs.google.com/spreadsheets/d/1zisANFAdEQtJ5YT0_6t4n_cGvIY2jsYQyGkI8TT_I-c/edit?usp=sharing|simple]], [[https://docs.google.com/spreadsheets/d/1Y3_x6uaBWx6-s1WP79R92QBWiGLkm-vbZkgYvFgDMK0/edit?usp=sharing|advanced]] ] |
| * [[https://github.com/voc/schedule/blob/master/wikitable2schedule.py|wikitable2schedule]] | * [[https://github.com/voc/schedule/blob/master/wikitable2schedule.py|wikitable2schedule]] |
| * HTML (wiki) table (e.g. from Dokuwiki at https://di.c3voc.de) -> schedule.xml, schedule.json | * 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 | * https://github.com/voc/voctosched |
| * csv -> schedule.xml + schedule.json | * csv -> schedule.xml + schedule.json |
| * https://github.com/verschwoerhaus/ical2schedule | * https://github.com/verschwoerhaus/ical2schedule |
| * ical -> schedule.xml | * ical -> schedule.xml |
| | * https://github.com/toto/conference-import/ |
| | * schedule.json -> ocdata (aka re-data) |
| * https://github.com/linux-audio-berlin/LAC16/blob/master/schedule/sexport.py | * https://github.com/linux-audio-berlin/LAC16/blob/master/schedule/sexport.py |
| * statistics related to [[software:auphonic#tools|Auphonic]] | * statistics related to [[software:auphonic#tools|Auphonic]] |
| |
| |
| == Useful Invocations: | === Useful Invocations: |
| * Get talk IDs for a certain day (intro rendering): | * 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 | xmlstarlet sel -T -t -m '/schedule/day[@index=1]/room/event/@id' -v . -n schedule.xml |
| | ``` |
| | == Full XML example |
| == Full example | |
| |
| from https://fahrplan.events.ccc.de/ -> schedule.xml | from https://fahrplan.events.ccc.de/ -> schedule.xml |