Proposal of a new entry format
The format is intended to:
The template format is basically a subset of JSON rewritten in a way that better fits the Mediawiki template syntax. Translating between JSON and the template format can be done in both directions without ambiguity and without any knowledge about the template being parsed. JSON Schema can be used for validation, documentation and form generation.
The root node of a document expressed by the template format is a JSON object. Properties on this object can be expressed with template parameters in the form key: value
.
Template{{example | first name: John | last name: Doe }} |
JSON{ "first_name": "John", "last_name": "Doe" } |
In this example, spaces in property keys are transformed to underscores when translating to JSON. This is an optional possibility that may be enabled to make properties more conveniently accessible in some programming languages.
JSON objects can be expressed with the template parameter key {
, followed by parameters to apply inside the object, followed by the parameter }
.
Template{{example | person { | first name: John | last name: Doe | } }} |
JSON{ "person": { "first_name": "John", "last_name": "Doe" } } |
For brevity, the start of an object can be in the form key { value
, which adds a property with the empty string as key.
Template{{example | word { vlak | gender: m | } }} |
JSON{ "word": { "": "vlak", "gender": "m" } } |
Arrays can be created with one or more parameters in the form +: value
following a parameter with a key. The parameter with the key may contain the value of the first item of the array or may be empty.
Template{{example | names: Alice | +: Bob }} |
JSON{ "names": [ "Alice", "Bob" ] } |
Template{{example | names: | +: Alice | +: Bob }} |
JSON{ "names": [ "Alice", "Bob" ] } |
Objects can also be added to arrays using the syntax + {
or + { value
.
Whitespace is not necessary for unambiguous parsing of the template format, but is recommended to be exact, so machines don't have to worry about subjective use of whitespace by human editors when modifying the code.
A parser for the template parameter format is implemented in the module Modul:wton. Compare this to the parameter parser module at English Wiktionary, which is twice as long, doesn't support nested structures and allows mistakes to go unnoticed.
Below is an example of a long dictionary entry for the word člověk. It may look complicated, but think of how much easier it is in comparison to the current system of codes!
{{viz|človek}} == {{jazyk|cs}} == === {{kategorie|substantivum}} === {{substantivum | jazyk: cs | výslovnost { | ipa: t͡ʃlɔvjɛk | audio: Cs-člověk.ogg | } | dělení: člo-věk | varianty: | etymologie: | skloňování { | rod: mužský životný | snom: člověk | sgen: člověka | sdat: člověku | +: člověkovi | sacc: člověka | svoc: člověče | sloc: člověku | +: člověkovi | sins: člověkem | pnom: lidé | + { lidi | příznak: ob. | } | pgen: lidí | pdat: lidem | pacc: lidi | pvoc: lidé | + { lidi | příznak: ob. | } | ploc: lidech | pins: lidmi | } | význam { | definice: ] ] ]m ], ]mi ]mi ] ] ] | příklad: Podle mě je Lucie naprosto spolehlivý člověk. | +: Zařadil jsem se do fronty, kde bylo nejméně lidí. | synonyma: lidstvo | +: člověk rozumný | antonyma: | překlady { | ar { إِنْسَان | rod: m | } | da: menneske | de { Mensch | rod = m | } | el { άνθρωπος | rod: m | } | en: man | +: person | +: human | eo: homo | es { hombre | rod m | } | + { persona | rod: f | } | fi: ihminen | fr { homme | rod: m | } | + { personne | rod: f | } | grc { ἄνθρωπος | rod: m | } | he { אָדָם | rod: m | } | hr { čovjek | rod: m | } | hsb { čłowjek | rod: m | } | hu: ember | hy: մարդ | is { manneskja | rod: f | } | it { persona | rod: f | } | + { essere umano | rod: m | } | + { uomo | rod: m | } | ja: 人 | kl: inuit | ko { 사람 | přepis: saram | } | la { homo | rod: m | } | lv: cilvēks | nl: mens | oc { òme | rod: m | } | pl { człowiek | rod: m | } | qu: runa | rom: manuš | ro: om | ru { человек | rod: m | } | sah: киһи | sk { človek | rod: m | } | sq: njeri | sr-Cyrl { човек | rod: m | } | sv { människa | rod: f | } | yi { מענש | rod: m | } | + { מענטש | rod: m | } | } | } | + { | užití: jen v singuláru | definice: ] ] ]i | příklad: Člověk zbytečně vyhubil mnoho rostlinných i živočišných druhů. | synonyma: ty | + { my | upřesnění: často ale vyjádřené jen slovesným tvarem | } | +: se | antonyma: | } | + { | vysvětlení: obecný, zevšeobecňující podmět zastupující např. reflexivní či trpné vazby | příklad: Takovouhle nenávist člověk nikdy nepochopí. | +: Nemůžeš k člověku jen tak přijít a tohle po něm chtít. | + { Člověk si zvykne na všechno, i na šibenici. | poznámka: Lze si zvyknout na všechno. | } | synonyma: | antonyma: | překlady { | de: man | el { άνθρωπος | rod: m | } | en: you | +: one | es: se | + { gente | rod: f | } | fr: on | ko { 사람 | přepis: saram | } | } | } | související { | substantiva: | +: člověčina | +: člověčenství | +: člověctví | adjektiva: | +: člověčí | složeniny: | +: bohočlověk | +: opočlověk | +: podčlověk | +: pračlověk | +: nadčlověk | +: člověkoden | zdrobněliny: | +: človíček | slovní spojení: | +: člověče, nezlob se | +: člověk rozumný | fráze: | idiomy: | přísloví: | +: Kolik jazyků umíš, tolikrát jsi člověkem. | úsloví: | +: být jenom člověk | +: člověk člověku vlkem | pořekadla: | +: Člověk si zvykne na všechno. | } | wikipedie článek: Člověk }}