code: def to_dict(self, short_pred=True, properties=True):
          
          qs = set(self.nodeids(quantifier=True))
          def _lnk(obj): return {'from': obj.cfrom, 'to': obj.cto}
          def _node(node, short_pred=True):
              p = node.pred.short_form() if short_pred else node.pred.string
              d = dict(nodeid=node.nodeid, predicate=p)
              if node.lnk is not None: d['lnk'] = _lnk(node)
              if properties and node.sortinfo:
                  if node.nodeid not in qs:
                      d['sortinfo'] = node.sortinfo
              if node.surface is not None: d['surface'] = node.surface
              if node.base is not None: d['base'] = node.base
              if node.carg is not None: d['carg'] = node.carg
              return d
          def _link(link): return {
              'from': link.start, 'to': link.end,
              'rargname': link.rargname, 'post': link.post
          }
  
          d = dict(
              nodes=[_node(n) for n in nodes(self)],
              links=[_link(l) for l in links(self)]
          )
          # if self.top is not None: ... currently handled by links
          if self.index is not None:
              idx = self.nodeid(self.index)
              if idx is not None:
                  d['index'] = idx
          if self.xarg is not None:
              xarg = self.nodeid(self.index)
              if xarg is not None:
                  d['index'] = xarg
          if self.lnk is not None: d['lnk'] = _lnk(self)
          if self.surface is not None: d['surface'] = self.surface
          if self.identifier is not None: d['identifier'] = self.identifier
          return d
docs: Encode the Dmrs as a dictionary suitable for JSON serialization.