The data
Two languages, one shape
What is null for which language and why. A client renders both with one component because the fields are the same.
By field
| Field | English entry | Japanese entry |
|---|---|---|
pronunciations[].ipa | "wɔk" | null |
pronunciations[].reading | null | "たべる", kana |
pronunciations[].accent | null | 2: the pitch drops after the second mora. 0 is heiban, no drop. |
pronunciations[].dialect | "AmE" | null |
sounds[].alphabet | "ipa" | "phonetic" |
inflections[].tone | null | "plain" or "polite", null on forms with no distinction |
inflections[].polarity | null on all but a few negative forms | "positive" or "negative" |
inflections[].pronunciations | [] on most forms | one row with the form's reading |
inflections[].form | "past tense", English | "過去形", Japanese, with form_translations.eng |
senses[].translations | keyed "jpn", glosses carry readings | keyed "eng", readings empty |
senses[].pos | "verb" | "動詞", with pos_translations.eng |
spellings | usually [] | other written forms, labelled |
Why null and not missing
A client written against a Japanese entry parses an English one unchanged, and the reverse. Nothing is conditional on the language except what to show, and the entry says what to show by which fields are filled. It is also what makes the additive promise cheap to keep: the shape never forks by language.
Two samples
eng · walk · abridged
jpn · 食べる · abridged