Structure:
<kvtml>
<identifiers>
<!-- Language: gets l10n by looking up the twoAlpha code with KLocale -->
<!-- Also permit a note to make a difference between same language twice (Chinese Traditional/Simplified) -->
<language id="0" twoAlpha="zh" note="Traditional">
<article/> <!--article as before?-->
<conjugation/>
</language>
<!-- User defined identifier is completely free. Can contain language stuff if needed -->
<userDefined id="1" name="Definition"/>
</identifiers>
<!-- unchanged so far: types and usage labels -->
<types>
<desc no="1" >My Type 1</desc>
</types>
<usage>
<desc no="1">My usage 1</desc>
<desc no="2">My usage 2</desc>
</usage>
<lessons>
<lesson>
<desc>Lesson 1</desc>
<!-- I don't like the short tags, but it's probably worth it to keep file size down. -->
<e> <!--entry-->
<t id="0">Erbse</o> <!-- this is a translation into language 0 (see identifiers)-->
<t id="1">pea</t>
<t id="2">pois</t>
</e>
<!--LESSONS MAY CONTAIN SUBLESSONS-->
<lesson>
<desc>Lesson 1.1</desc>
        <e><!--see above--></e>
</lesson>
<lesson>
<desc>Lesson with grades example</desc>
        <e>
<t id="0">Kniebeugen
<g from="1" g="1" c="1" d="949757271"/>
<g from="2" g="1" c="1" b="1" d="1234(date-UnixTime)">
</t>
<t id="1">genuflect
<g from="0" g="3" c="2" d="934731856"/>
                <!-- this has been asked from 0(=Kniebeugen).
grade is %g=3, never answered wrong (%b=0),
it was asked %c=1 time, last at %d (QDateTime::toTime_t()) -->
</i1>
<t id="2">flexion de genoux
<g from="0" g="4" c="1" b="1" d="1234">
</t>
</e>
</lesson>
</lessons>
</kvtml>
shortnames:
<e entry>
<t Translation id=Which language>
<g(grading information)
        from=LanguageId
        g=grade(int)
        c=count(how often asked)
        b=bad count(how often false)
        d=lastQueryDate />
The from should be seen as grade, when asked to answer this FROM language xy! So the current id is the TO id - that is what the user had to enter.
I would kill this without replacement unless it is used anywhere (?)
<options>
<sort on="1"/>
</options>
In KVocTrain handling vocab without lesson is a pain, so it will stuff them all into a default lesson if none is defined.
Other programs will still be able to use it as before.