docs: private String emitDataTypes() {
      StringBuilder dtDefs = new StringBuilder();
      while (emittedDatatypes.size() < datatypes.size()) {
        for (String dt : new HashSet<String>(datatypes)) {
          if (!emittedDatatypes.contains(dt)) {
            StructureDefinition sd = context.fetchResource(StructureDefinition.class,
                ProfileUtilities.sdNs(dt, null));
            // TODO: Figure out why the line below doesn't work
            // if (sd != null && !uniq_structures.contains(sd))
            if(sd != null && !uniq_structure_urls.contains(sd.getUrl()))
              dtDefs.append("\n").append(genShapeDefinition(sd, false));
            emittedDatatypes.add(dt);
          }
        }
      }
      return dtDefs.toString();
    }