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.