code: def __gen_tokenization_file(self):
          
          paula_id = '{0}.{1}.tok'.format(self.corpus_name, self.name)
          E, tree = gen_paula_etree(paula_id)
          self.paulamap['tokenization'] = paula_id
  
          base_paula_id = '{0}.{1}.text'.format(self.corpus_name, self.name)
          mlist = E('markList',
                    {'type': 'tok',
                     XMLBASE: base_paula_id+'.xml'})
          tok_tuples = self.dg.get_tokens()
          for (tid, onset, tlen) in get_onsets(tok_tuples):
              # even SaltNPepper still uses xpointers for string-ranges!
              xp = "#xpointer(string-range(//body,'',{0},{1}))".format(onset, tlen)
              mlist.append(E('mark', {'id': tid,
                                      XLINKHREF: xp}))
          tree.append(mlist)
          self.files[paula_id] = tree
          self.file2dtd[paula_id] = PaulaDTDs.mark
          return paula_id
docs: generate the PAULA file that contains the tokenization of the document
          graph. (In general, a PAULA document may contain more than one
          tokenization, but in discoursegraphs we'll only work with documents
          that have exactly one tokenization.)
  
          Example
          -------
          <?xml version="1.0" standalone="no"?>
          <!DOCTYPE paula SYSTEM "paula_mark.dtd">
          <paula version="1.1">
              <header paula_id="nolayer.maz-1423.tok"/>
              <markList xmlns:xlink="http://www.w3.org/1999/xlink" type="tok"
                  xml:base="maz-1423.text.xml">
                  <mark id="sTok1"
                      xlink:href="#xpointer(string-range(//body,'',1,3))" />
                  <mark id="sTok2"
                      xlink:href="#xpointer(string-range(//body,'',5,10))" />
                  ...
              </markList>
          </paula>