summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2022-04-04 18:26:38 +0200
committerGitHub <noreply@github.com>2022-04-04 18:26:38 +0200
commit8c25dd8f1eee02a34e45c026924434a0b551a2ae (patch)
tree2d77a90068481269fed1147b379cc470c5e8988a
parentc6ab8e56a77e12a1318cc6897db575f755785f38 (diff)
Revert "produce new "doctype" config for document types"
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java216
-rw-r--r--config-model/src/test/configmodel/types/documenttypes.cfg895
-rw-r--r--config-model/src/test/configmodel/types/documenttypes_with_doc_field.cfg110
-rw-r--r--config-model/src/test/configmodel/types/references/documenttypes_multiple_imported_fields.cfg191
-rw-r--r--config-model/src/test/configmodel/types/references/documenttypes_refs_to_other_types.cfg158
-rw-r--r--config-model/src/test/configmodel/types/references/documenttypes_refs_to_same_type.cfg124
-rw-r--r--config-model/src/test/derived/duplicate_struct/documenttypes.cfg184
-rw-r--r--config-model/src/test/derived/imported_fields_inherited_reference/documenttypes.cfg205
-rw-r--r--config-model/src/test/derived/inheritfromparent/documenttypes.cfg155
-rw-r--r--config-model/src/test/derived/multi_struct/documenttypes.cfg318
-rw-r--r--config-model/src/test/derived/structinheritance/documenttypes.cfg179
-rw-r--r--config-model/src/test/derived/tensor/documenttypes.cfg136
12 files changed, 1687 insertions, 1184 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java
index ba41fa0f5b3..630e9f0c097 100644
--- a/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java
+++ b/config-model/src/main/java/com/yahoo/vespa/configmodel/producers/DocumentTypes.java
@@ -27,16 +27,29 @@ public class DocumentTypes {
}
public DocumenttypesConfig.Builder produce(DocumentModel model, DocumenttypesConfig.Builder builder) {
+ /* later:
+ if (some flag) {
+ return produceDocTypes(model, builder);
+ }
+ */
builder.usev8geopositions(this.useV8GeoPositions);
Map<NewDocumentType.Name, NewDocumentType> produced = new HashMap<>();
- var indexMap = new IdxMap();
for (NewDocumentType documentType : model.getDocumentManager().getTypes()) {
- docTypeInheritOrder(documentType, builder, produced, indexMap);
+ produceInheritOrder(documentType, builder, produced);
}
- indexMap.verifyAllDone();
return builder;
}
+ private void produceInheritOrder(NewDocumentType documentType, DocumenttypesConfig.Builder builder, Map<NewDocumentType.Name, NewDocumentType> produced) {
+ if (!produced.containsKey(documentType.getFullName())) {
+ for (NewDocumentType inherited : documentType.getInherited()) {
+ produceInheritOrder(inherited, builder, produced);
+ }
+ buildConfig(documentType, builder);
+ produced.put(documentType.getFullName(), documentType);
+ }
+ }
+
static private <T> List<T> sortedList(Collection<T> unsorted, Comparator<T> cmp) {
var list = new ArrayList<T>();
list.addAll(unsorted);
@@ -44,6 +57,203 @@ public class DocumentTypes {
return list;
}
+ private void buildConfig(NewDocumentType documentType, DocumenttypesConfig.Builder builder) {
+ if (documentType == VespaDocumentType.INSTANCE) {
+ return;
+ }
+ DocumenttypesConfig.Documenttype.Builder db = new DocumenttypesConfig.Documenttype.Builder();
+ db.
+ id(documentType.getId()).
+ name(documentType.getName()).
+ headerstruct(documentType.getContentStruct().getId());
+ Set<Integer> built = new HashSet<>();
+ for (NewDocumentType inherited : documentType.getInherited()) {
+ db.inherits(new DocumenttypesConfig.Documenttype.Inherits.Builder().id(inherited.getId()));
+ markAsBuilt(built, inherited.getAllTypes());
+ }
+ for (DataType dt : sortedList(documentType.getTypes(), (a,b) -> a.getName().compareTo(b.getName()))) {
+ buildConfig(dt, db, built);
+ }
+ for (AnnotationType annotation : sortedList(documentType.getAnnotations(), (a,b) -> a.getName().compareTo(b.getName()))) {
+ DocumenttypesConfig.Documenttype.Annotationtype.Builder atb = new DocumenttypesConfig.Documenttype.Annotationtype.Builder();
+ db.annotationtype(atb);
+ buildConfig(annotation, atb);
+ }
+ buildConfig(documentType.getFieldSets(), db);
+ buildImportedFieldsConfig(documentType.getImportedFieldNames(), db);
+ builder.documenttype(db);
+ }
+
+ private void buildConfig(Set<FieldSet> fieldSets, DocumenttypesConfig.Documenttype.Builder db) {
+ for (FieldSet fs : fieldSets) {
+ buildConfig(fs, db);
+ }
+ }
+
+ private void buildConfig(FieldSet fs, DocumenttypesConfig.Documenttype.Builder db) {
+ db.fieldsets(fs.getName(), new DocumenttypesConfig.Documenttype.Fieldsets.Builder().fields(fs.getFieldNames()));
+ }
+
+ private void markAsBuilt(Set<Integer> built, DataTypeCollection typeCollection) {
+ for (DataType type : typeCollection.getTypes()) {
+ built.add(type.getId());
+ }
+ }
+
+ private void buildConfig(AnnotationType annotation, DocumenttypesConfig.Documenttype.Annotationtype.Builder builder) {
+ builder.
+ id(annotation.getId()).
+ name(annotation.getName());
+ DataType dt = annotation.getDataType();
+ if (dt != null) {
+ builder.datatype(dt.getId());
+ }
+ for (AnnotationType inherited : annotation.getInheritedTypes()) {
+ builder.inherits(new DocumenttypesConfig.Documenttype.Annotationtype.Inherits.Builder().id(inherited.getId()));
+ }
+ }
+
+ private void buildConfig(DataType type, DocumenttypesConfig.Documenttype.Builder documentBuilder, Set<Integer> built) {
+ if ((VespaDocumentType.INSTANCE.getDataType(type.getId()) == null) && !built.contains(type.getId())) {
+ built.add(type.getId());
+ DocumenttypesConfig.Documenttype.Datatype.Builder dataTypeBuilder = new DocumenttypesConfig.Documenttype.Datatype.Builder();
+ dataTypeBuilder.id(type.getId());
+ if (type instanceof TemporaryUnknownType) {
+ throw new IllegalArgumentException("Can not create config for temporary data type: " + type.getName());
+ }
+ if (type instanceof OwnedTemporaryType) {
+ throw new IllegalArgumentException("Can not create config for temporary data type: " + type.getName());
+ }
+ if (type instanceof StructDataType) {
+ buildConfig((StructDataType) type, dataTypeBuilder, documentBuilder, built);
+ } else if (type instanceof ArrayDataType) {
+ buildConfig((ArrayDataType) type, dataTypeBuilder, documentBuilder, built);
+ } else if (type instanceof WeightedSetDataType) {
+ buildConfig((WeightedSetDataType) type, dataTypeBuilder, documentBuilder, built);
+ } else if (type instanceof MapDataType) {
+ buildConfig((MapDataType) type, dataTypeBuilder, documentBuilder, built);
+ } else if (type instanceof AnnotationReferenceDataType) {
+ buildConfig((AnnotationReferenceDataType) type, dataTypeBuilder);
+ } else if (type instanceof TensorDataType) {
+ // The type of the tensor is not stored here but instead in each field as detailed type information
+ // to provide better compatibility. A tensor field can have its tensorType changed (in compatible ways)
+ // without changing the field type and thus requiring data refeed
+ return;
+ } else if (type instanceof NewDocumentReferenceDataType) {
+ var refType = (NewDocumentReferenceDataType) type;
+ if (refType.isTemporary()) {
+ throw new IllegalArgumentException("Still temporary: " + refType);
+ }
+ buildConfig(refType, documentBuilder);
+ return;
+ } else {
+ return;
+ }
+ documentBuilder.datatype(dataTypeBuilder);
+ }
+ }
+
+ private void buildImportedFieldsConfig(Collection<String> fieldNames, DocumenttypesConfig.Documenttype.Builder builder) {
+ for (String fieldName : fieldNames) {
+ var ib = new DocumenttypesConfig.Documenttype.Importedfield.Builder();
+ ib.name(fieldName);
+ builder.importedfield(ib);
+ }
+ }
+
+ private void buildConfig(StructDataType type,
+ DocumenttypesConfig.Documenttype.Datatype.Builder dataTypeBuilder,
+ DocumenttypesConfig.Documenttype.Builder documentBuilder,
+ Set<Integer> built) {
+ dataTypeBuilder.type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.STRUCT);
+ DocumenttypesConfig.Documenttype.Datatype.Sstruct.Builder structBuilder = new DocumenttypesConfig.Documenttype.Datatype.Sstruct.Builder();
+ dataTypeBuilder.sstruct(structBuilder);
+ structBuilder.name(type.getName());
+ for (com.yahoo.document.Field field : type.getFields()) {
+ DocumenttypesConfig.Documenttype.Datatype.Sstruct.Field.Builder builder =
+ new DocumenttypesConfig.Documenttype.Datatype.Sstruct.Field.Builder();
+ builder.name(field.getName()).
+ id(field.getId()).
+ datatype(field.getDataType().getId());
+ if (field.getDataType() instanceof TensorDataType) {
+ builder.detailedtype(((TensorDataType) field.getDataType()).getTensorType().toString());
+ }
+ structBuilder.field(builder);
+ buildConfig(field.getDataType(), documentBuilder, built);
+ }
+ }
+
+ private void buildConfig(ArrayDataType type,
+ DocumenttypesConfig.Documenttype.Datatype.Builder dataTypeBuilder,
+ DocumenttypesConfig.Documenttype.Builder documentBuilder,
+ Set<Integer> built) {
+ dataTypeBuilder.
+ type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.ARRAY).
+ array(new DocumenttypesConfig.Documenttype.Datatype.Array.Builder().
+ element(new DocumenttypesConfig.Documenttype.Datatype.Array.Element.Builder().id(type.getNestedType().getId())));
+ buildConfig(type.getNestedType(), documentBuilder, built);
+ }
+
+ private void buildConfig(WeightedSetDataType type,
+ DocumenttypesConfig.Documenttype.Datatype.Builder dataTypeBuilder,
+ DocumenttypesConfig.Documenttype.Builder documentBuilder,
+ Set<Integer> built) {
+ dataTypeBuilder.type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.WSET).
+ wset(new DocumenttypesConfig.Documenttype.Datatype.Wset.Builder().
+ key(new DocumenttypesConfig.Documenttype.Datatype.Wset.Key.Builder().
+ id(type.getNestedType().getId())).
+ createifnonexistent(type.createIfNonExistent()).
+ removeifzero(type.removeIfZero()));
+ buildConfig(type.getNestedType(), documentBuilder, built);
+ }
+
+ private void buildConfig(MapDataType type,
+ DocumenttypesConfig.Documenttype.Datatype.Builder dataTypeBuilder,
+ DocumenttypesConfig.Documenttype.Builder documentBuilder,
+ Set<Integer> built) {
+ dataTypeBuilder.
+ type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.MAP).
+ map(new DocumenttypesConfig.Documenttype.Datatype.Map.Builder().
+ key(new DocumenttypesConfig.Documenttype.Datatype.Map.Key.Builder().
+ id(type.getKeyType().getId())).
+ value(new DocumenttypesConfig.Documenttype.Datatype.Map.Value.Builder().
+ id(type.getValueType().getId())));
+ buildConfig(type.getKeyType(), documentBuilder, built);
+ buildConfig(type.getValueType(), documentBuilder, built);
+ }
+
+ private void buildConfig(AnnotationReferenceDataType type,
+ DocumenttypesConfig.Documenttype.Datatype.Builder dataTypeBuilder) {
+ dataTypeBuilder.
+ type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.ANNOTATIONREF).
+ annotationref(new DocumenttypesConfig.Documenttype.Datatype.Annotationref.Builder().
+ annotation(new DocumenttypesConfig.Documenttype.Datatype.Annotationref.Annotation.Builder().
+ id(type.getAnnotationType().getId())));
+ }
+
+ private void buildConfig(NewDocumentReferenceDataType type,
+ DocumenttypesConfig.Documenttype.Builder documentBuilder) {
+ NewDocumentReferenceDataType refType = type;
+ DocumenttypesConfig.Documenttype.Referencetype.Builder refBuilder =
+ new DocumenttypesConfig.Documenttype.Referencetype.Builder();
+ refBuilder.id(refType.getId());
+ refBuilder.target_type_id(type.getTargetTypeId());
+ documentBuilder.referencetype(refBuilder);
+ }
+
+ // Alternate (new) way to build config:
+
+ private DocumenttypesConfig.Builder produceDocTypes(DocumentModel model, DocumenttypesConfig.Builder builder) {
+ builder.usev8geopositions(this.useV8GeoPositions);
+ Map<NewDocumentType.Name, NewDocumentType> produced = new HashMap<>();
+ var indexMap = new IdxMap();
+ for (NewDocumentType documentType : model.getDocumentManager().getTypes()) {
+ docTypeInheritOrder(documentType, builder, produced, indexMap);
+ }
+ indexMap.verifyAllDone();
+ return builder;
+ }
+
private void docTypeInheritOrder(NewDocumentType documentType,
DocumenttypesConfig.Builder builder,
Map<NewDocumentType.Name, NewDocumentType> produced,
diff --git a/config-model/src/test/configmodel/types/documenttypes.cfg b/config-model/src/test/configmodel/types/documenttypes.cfg
index 7ea2fa42a2a..0501aa58784 100644
--- a/config-model/src/test/configmodel/types/documenttypes.cfg
+++ b/config-model/src/test/configmodel/types/documenttypes.cfg
@@ -1,322 +1,577 @@
enablecompression false
usev8geopositions false
-doctype[0].name "document"
-doctype[0].idx 10000
-doctype[0].internalid 8
-doctype[0].contentstruct 10001
-doctype[0].primitivetype[0].idx 10002
-doctype[0].primitivetype[0].name "bool"
-doctype[0].primitivetype[1].idx 10003
-doctype[0].primitivetype[1].name "byte"
-doctype[0].primitivetype[2].idx 10004
-doctype[0].primitivetype[2].name "double"
-doctype[0].primitivetype[3].idx 10005
-doctype[0].primitivetype[3].name "float"
-doctype[0].primitivetype[4].idx 10006
-doctype[0].primitivetype[4].name "float16"
-doctype[0].primitivetype[5].idx 10007
-doctype[0].primitivetype[5].name "int"
-doctype[0].primitivetype[6].idx 10008
-doctype[0].primitivetype[6].name "long"
-doctype[0].primitivetype[7].idx 10010
-doctype[0].primitivetype[7].name "predicate"
-doctype[0].primitivetype[8].idx 10011
-doctype[0].primitivetype[8].name "raw"
-doctype[0].primitivetype[9].idx 10012
-doctype[0].primitivetype[9].name "string"
-doctype[0].primitivetype[10].idx 10014
-doctype[0].primitivetype[10].name "uri"
-doctype[0].wsettype[0].idx 10013
-doctype[0].wsettype[0].elementtype 10012
-doctype[0].wsettype[0].createifnonexistent true
-doctype[0].wsettype[0].removeifzero true
-doctype[0].wsettype[0].internalid 18
-doctype[0].structtype[0].idx 10001
-doctype[0].structtype[0].name "document.header"
-doctype[0].structtype[0].internalid -284186494
-doctype[0].structtype[1].idx 10009
-doctype[0].structtype[1].name "position"
-doctype[0].structtype[1].field[0].name "x"
-doctype[0].structtype[1].field[0].internalid 914677694
-doctype[0].structtype[1].field[0].type 10007
-doctype[0].structtype[1].field[1].name "y"
-doctype[0].structtype[1].field[1].internalid 900009410
-doctype[0].structtype[1].field[1].type 10007
-doctype[0].structtype[1].internalid 1381038251
-doctype[1].name "types"
-doctype[1].idx 10015
-doctype[1].internalid -853072901
-doctype[1].inherits[0].idx 10000
-doctype[1].contentstruct 10016
-doctype[1].fieldsets{[document]}.fields[0] "Folders"
-doctype[1].fieldsets{[document]}.fields[1] "abyte"
-doctype[1].fieldsets{[document]}.fields[2] "album0"
-doctype[1].fieldsets{[document]}.fields[3] "album1"
-doctype[1].fieldsets{[document]}.fields[4] "along"
-doctype[1].fieldsets{[document]}.fields[5] "arrarr"
-doctype[1].fieldsets{[document]}.fields[6] "arrayfield"
-doctype[1].fieldsets{[document]}.fields[7] "arraymapfield"
-doctype[1].fieldsets{[document]}.fields[8] "complexarray"
-doctype[1].fieldsets{[document]}.fields[9] "doublemapfield"
-doctype[1].fieldsets{[document]}.fields[10] "floatmapfield"
-doctype[1].fieldsets{[document]}.fields[11] "intmapfield"
-doctype[1].fieldsets{[document]}.fields[12] "juletre"
-doctype[1].fieldsets{[document]}.fields[13] "longmapfield"
-doctype[1].fieldsets{[document]}.fields[14] "maparr"
-doctype[1].fieldsets{[document]}.fields[15] "mystructarr"
-doctype[1].fieldsets{[document]}.fields[16] "mystructfield"
-doctype[1].fieldsets{[document]}.fields[17] "mystructmap"
-doctype[1].fieldsets{[document]}.fields[18] "pos"
-doctype[1].fieldsets{[document]}.fields[19] "setfield"
-doctype[1].fieldsets{[document]}.fields[20] "setfield2"
-doctype[1].fieldsets{[document]}.fields[21] "setfield3"
-doctype[1].fieldsets{[document]}.fields[22] "setfield4"
-doctype[1].fieldsets{[document]}.fields[23] "stringmapfield"
-doctype[1].fieldsets{[document]}.fields[24] "structarrayfield"
-doctype[1].fieldsets{[document]}.fields[25] "structfield"
-doctype[1].fieldsets{[document]}.fields[26] "tagfield"
-doctype[1].arraytype[0].idx 10017
-doctype[1].arraytype[0].elementtype 10007
-doctype[1].arraytype[0].internalid -1245117006
-doctype[1].arraytype[1].idx 10024
-doctype[1].arraytype[1].elementtype 10023
-doctype[1].arraytype[1].internalid -1244829667
-doctype[1].arraytype[2].idx 10031
-doctype[1].arraytype[2].elementtype 10007
-doctype[1].arraytype[2].internalid -1245117006
-doctype[1].arraytype[3].idx 10032
-doctype[1].arraytype[3].elementtype 10033
-doctype[1].arraytype[3].internalid -794985308
-doctype[1].arraytype[4].idx 10033
-doctype[1].arraytype[4].elementtype 10034
-doctype[1].arraytype[4].internalid 1707615575
-doctype[1].arraytype[5].idx 10034
-doctype[1].arraytype[5].elementtype 10012
-doctype[1].arraytype[5].internalid -1486737430
-doctype[1].arraytype[6].idx 10035
-doctype[1].arraytype[6].elementtype 10036
-doctype[1].arraytype[6].internalid 69621385
-doctype[1].arraytype[7].idx 10037
-doctype[1].arraytype[7].elementtype 10038
-doctype[1].arraytype[7].internalid 1416345047
-doctype[1].arraytype[8].idx 10039
-doctype[1].arraytype[8].elementtype 10040
-doctype[1].arraytype[8].internalid 1707615575
-doctype[1].arraytype[9].idx 10040
-doctype[1].arraytype[9].elementtype 10012
-doctype[1].arraytype[9].internalid -1486737430
-doctype[1].arraytype[10].idx 10042
-doctype[1].arraytype[10].elementtype 10003
-doctype[1].arraytype[10].internalid 49942803
-doctype[1].arraytype[11].idx 10045
-doctype[1].arraytype[11].elementtype 10041
-doctype[1].arraytype[11].internalid 759956026
-doctype[1].maptype[0].idx 10025
-doctype[1].maptype[0].keytype 10012
-doctype[1].maptype[0].valuetype 10012
-doctype[1].maptype[0].internalid 339965458
-doctype[1].maptype[1].idx 10026
-doctype[1].maptype[1].keytype 10012
-doctype[1].maptype[1].valuetype 10007
-doctype[1].maptype[1].internalid -1584287606
-doctype[1].maptype[2].idx 10027
-doctype[1].maptype[2].keytype 10012
-doctype[1].maptype[2].valuetype 10005
-doctype[1].maptype[2].internalid 2125154557
-doctype[1].maptype[3].idx 10028
-doctype[1].maptype[3].keytype 10007
-doctype[1].maptype[3].valuetype 10008
-doctype[1].maptype[3].internalid -1715531035
-doctype[1].maptype[4].idx 10029
-doctype[1].maptype[4].keytype 10007
-doctype[1].maptype[4].valuetype 10004
-doctype[1].maptype[4].internalid 2138385264
-doctype[1].maptype[5].idx 10030
-doctype[1].maptype[5].keytype 10012
-doctype[1].maptype[5].valuetype 10031
-doctype[1].maptype[5].internalid 435886609
-doctype[1].maptype[6].idx 10036
-doctype[1].maptype[6].keytype 10012
-doctype[1].maptype[6].valuetype 10012
-doctype[1].maptype[6].internalid 339965458
-doctype[1].maptype[7].idx 10038
-doctype[1].maptype[7].keytype 10007
-doctype[1].maptype[7].valuetype 10039
-doctype[1].maptype[7].internalid -372512406
-doctype[1].maptype[8].idx 10043
-doctype[1].maptype[8].keytype 10012
-doctype[1].maptype[8].valuetype 10012
-doctype[1].maptype[8].internalid 339965458
-doctype[1].maptype[9].idx 10044
-doctype[1].maptype[9].keytype 10007
-doctype[1].maptype[9].valuetype 10041
-doctype[1].maptype[9].internalid 1901258752
-doctype[1].maptype[10].idx 10046
-doctype[1].maptype[10].keytype 10007
-doctype[1].maptype[10].valuetype 10047
-doctype[1].maptype[10].internalid -389833101
-doctype[1].maptype[11].idx 10048
-doctype[1].maptype[11].keytype 10012
-doctype[1].maptype[11].valuetype 10008
-doctype[1].maptype[11].internalid -1865479609
-doctype[1].wsettype[0].idx 10018
-doctype[1].wsettype[0].elementtype 10012
-doctype[1].wsettype[0].createifnonexistent false
-doctype[1].wsettype[0].removeifzero false
-doctype[1].wsettype[0].internalid 1328286588
-doctype[1].wsettype[1].idx 10019
-doctype[1].wsettype[1].elementtype 10012
-doctype[1].wsettype[1].createifnonexistent true
-doctype[1].wsettype[1].removeifzero true
-doctype[1].wsettype[1].internalid 18
-doctype[1].wsettype[2].idx 10020
-doctype[1].wsettype[2].elementtype 10012
-doctype[1].wsettype[2].createifnonexistent false
-doctype[1].wsettype[2].removeifzero true
-doctype[1].wsettype[2].internalid 2125328771
-doctype[1].wsettype[3].idx 10021
-doctype[1].wsettype[3].elementtype 10012
-doctype[1].wsettype[3].createifnonexistent true
-doctype[1].wsettype[3].removeifzero false
-doctype[1].wsettype[3].internalid 2065577986
-doctype[1].wsettype[4].idx 10022
-doctype[1].wsettype[4].elementtype 10012
-doctype[1].wsettype[4].createifnonexistent true
-doctype[1].wsettype[4].removeifzero true
-doctype[1].wsettype[4].internalid 18
-doctype[1].wsettype[5].idx 10049
-doctype[1].wsettype[5].elementtype 10012
-doctype[1].wsettype[5].createifnonexistent true
-doctype[1].wsettype[5].removeifzero true
-doctype[1].wsettype[5].internalid 18
-doctype[1].wsettype[6].idx 10050
-doctype[1].wsettype[6].elementtype 10012
-doctype[1].wsettype[6].createifnonexistent true
-doctype[1].wsettype[6].removeifzero true
-doctype[1].wsettype[6].internalid 18
-doctype[1].structtype[0].idx 10023
-doctype[1].structtype[0].name "sct"
-doctype[1].structtype[0].field[0].name "s1"
-doctype[1].structtype[0].field[0].internalid 2146820765
-doctype[1].structtype[0].field[0].type 10012
-doctype[1].structtype[0].field[1].name "s2"
-doctype[1].structtype[0].field[1].internalid 45366795
-doctype[1].structtype[0].field[1].type 10012
-doctype[1].structtype[0].internalid 109267174
-doctype[1].structtype[1].idx 10041
-doctype[1].structtype[1].name "mystruct"
-doctype[1].structtype[1].field[0].name "bytearr"
-doctype[1].structtype[1].field[0].internalid 1079701754
-doctype[1].structtype[1].field[0].type 10042
-doctype[1].structtype[1].field[1].name "mymap"
-doctype[1].structtype[1].field[1].internalid 1954178122
-doctype[1].structtype[1].field[1].type 10043
-doctype[1].structtype[1].field[2].name "title"
-doctype[1].structtype[1].field[2].internalid 567626448
-doctype[1].structtype[1].field[2].type 10012
-doctype[1].structtype[1].field[3].name "structfield"
-doctype[1].structtype[1].field[3].internalid 1726890940
-doctype[1].structtype[1].field[3].type 10012
-doctype[1].structtype[1].internalid -2092985853
-doctype[1].structtype[2].idx 10047
-doctype[1].structtype[2].name "folder"
-doctype[1].structtype[2].field[0].name "Version"
-doctype[1].structtype[2].field[0].internalid 64430502
-doctype[1].structtype[2].field[0].type 10007
-doctype[1].structtype[2].field[1].name "Name"
-doctype[1].structtype[2].field[1].internalid 2002760220
-doctype[1].structtype[2].field[1].type 10012
-doctype[1].structtype[2].field[2].name "FlagsCounter"
-doctype[1].structtype[2].field[2].internalid 1741227606
-doctype[1].structtype[2].field[2].type 10048
-doctype[1].structtype[2].field[3].name "anotherfolder"
-doctype[1].structtype[2].field[3].internalid 1582421848
-doctype[1].structtype[2].field[3].type 10047
-doctype[1].structtype[2].internalid 294108848
-doctype[1].structtype[3].idx 10016
-doctype[1].structtype[3].name "types.header"
-doctype[1].structtype[3].field[0].name "abyte"
-doctype[1].structtype[3].field[0].internalid 110138156
-doctype[1].structtype[3].field[0].type 10003
-doctype[1].structtype[3].field[1].name "along"
-doctype[1].structtype[3].field[1].internalid 1206464520
-doctype[1].structtype[3].field[1].type 10008
-doctype[1].structtype[3].field[2].name "arrayfield"
-doctype[1].structtype[3].field[2].internalid 965790107
-doctype[1].structtype[3].field[2].type 10017
-doctype[1].structtype[3].field[3].name "setfield"
-doctype[1].structtype[3].field[3].internalid 761581914
-doctype[1].structtype[3].field[3].type 10018
-doctype[1].structtype[3].field[4].name "pos"
-doctype[1].structtype[3].field[4].internalid 1041567475
-doctype[1].structtype[3].field[4].type 10009
-doctype[1].structtype[3].field[5].name "setfield2"
-doctype[1].structtype[3].field[5].internalid 1066659198
-doctype[1].structtype[3].field[5].type 10019
-doctype[1].structtype[3].field[6].name "setfield3"
-doctype[1].structtype[3].field[6].internalid 1180155772
-doctype[1].structtype[3].field[6].type 10020
-doctype[1].structtype[3].field[7].name "setfield4"
-doctype[1].structtype[3].field[7].internalid 1254131631
-doctype[1].structtype[3].field[7].type 10021
-doctype[1].structtype[3].field[8].name "tagfield"
-doctype[1].structtype[3].field[8].internalid 1653562069
-doctype[1].structtype[3].field[8].type 10022
-doctype[1].structtype[3].field[9].name "structfield"
-doctype[1].structtype[3].field[9].internalid 486207386
-doctype[1].structtype[3].field[9].type 10023
-doctype[1].structtype[3].field[10].name "structarrayfield"
-doctype[1].structtype[3].field[10].internalid 335048518
-doctype[1].structtype[3].field[10].type 10024
-doctype[1].structtype[3].field[11].name "stringmapfield"
-doctype[1].structtype[3].field[11].internalid 117465687
-doctype[1].structtype[3].field[11].type 10025
-doctype[1].structtype[3].field[12].name "intmapfield"
-doctype[1].structtype[3].field[12].internalid 121004462
-doctype[1].structtype[3].field[12].type 10026
-doctype[1].structtype[3].field[13].name "floatmapfield"
-doctype[1].structtype[3].field[13].internalid 1239120925
-doctype[1].structtype[3].field[13].type 10027
-doctype[1].structtype[3].field[14].name "longmapfield"
-doctype[1].structtype[3].field[14].internalid 477718745
-doctype[1].structtype[3].field[14].type 10028
-doctype[1].structtype[3].field[15].name "doublemapfield"
-doctype[1].structtype[3].field[15].internalid 877047192
-doctype[1].structtype[3].field[15].type 10029
-doctype[1].structtype[3].field[16].name "arraymapfield"
-doctype[1].structtype[3].field[16].internalid 1670805928
-doctype[1].structtype[3].field[16].type 10030
-doctype[1].structtype[3].field[17].name "arrarr"
-doctype[1].structtype[3].field[17].internalid 1962567166
-doctype[1].structtype[3].field[17].type 10032
-doctype[1].structtype[3].field[18].name "maparr"
-doctype[1].structtype[3].field[18].internalid 904375219
-doctype[1].structtype[3].field[18].type 10035
-doctype[1].structtype[3].field[19].name "complexarray"
-doctype[1].structtype[3].field[19].internalid 795629533
-doctype[1].structtype[3].field[19].type 10037
-doctype[1].structtype[3].field[20].name "mystructfield"
-doctype[1].structtype[3].field[20].internalid 1348513378
-doctype[1].structtype[3].field[20].type 10041
-doctype[1].structtype[3].field[21].name "mystructmap"
-doctype[1].structtype[3].field[21].internalid 1511423250
-doctype[1].structtype[3].field[21].type 10044
-doctype[1].structtype[3].field[22].name "mystructarr"
-doctype[1].structtype[3].field[22].internalid 595856991
-doctype[1].structtype[3].field[22].type 10045
-doctype[1].structtype[3].field[23].name "Folders"
-doctype[1].structtype[3].field[23].internalid 34575524
-doctype[1].structtype[3].field[23].type 10046
-doctype[1].structtype[3].field[24].name "juletre"
-doctype[1].structtype[3].field[24].internalid 1039981530
-doctype[1].structtype[3].field[24].type 10008
-doctype[1].structtype[3].field[25].name "album0"
-doctype[1].structtype[3].field[25].internalid 764312262
-doctype[1].structtype[3].field[25].type 10049
-doctype[1].structtype[3].field[26].name "album1"
-doctype[1].structtype[3].field[26].internalid 1967160809
-doctype[1].structtype[3].field[26].type 10050
-doctype[1].structtype[3].field[27].name "other"
-doctype[1].structtype[3].field[27].internalid 2443357
-doctype[1].structtype[3].field[27].type 10008
-doctype[1].structtype[3].internalid 1328581348
+documenttype[0].id -853072901
+documenttype[0].name "types"
+documenttype[0].version 0
+documenttype[0].headerstruct 1328581348
+documenttype[0].bodystruct 0
+documenttype[0].inherits[0].id 8
+documenttype[0].datatype[0].id -1486737430
+documenttype[0].datatype[0].type ARRAY
+documenttype[0].datatype[0].array.element.id 2
+documenttype[0].datatype[0].map.key.id 0
+documenttype[0].datatype[0].map.value.id 0
+documenttype[0].datatype[0].wset.key.id 0
+documenttype[0].datatype[0].wset.createifnonexistent false
+documenttype[0].datatype[0].wset.removeifzero false
+documenttype[0].datatype[0].annotationref.annotation.id 0
+documenttype[0].datatype[0].sstruct.name ""
+documenttype[0].datatype[0].sstruct.version 0
+documenttype[0].datatype[0].sstruct.compression.type NONE
+documenttype[0].datatype[0].sstruct.compression.level 0
+documenttype[0].datatype[0].sstruct.compression.threshold 95
+documenttype[0].datatype[0].sstruct.compression.minsize 200
+documenttype[0].datatype[1].id 1707615575
+documenttype[0].datatype[1].type ARRAY
+documenttype[0].datatype[1].array.element.id -1486737430
+documenttype[0].datatype[1].map.key.id 0
+documenttype[0].datatype[1].map.value.id 0
+documenttype[0].datatype[1].wset.key.id 0
+documenttype[0].datatype[1].wset.createifnonexistent false
+documenttype[0].datatype[1].wset.removeifzero false
+documenttype[0].datatype[1].annotationref.annotation.id 0
+documenttype[0].datatype[1].sstruct.name ""
+documenttype[0].datatype[1].sstruct.version 0
+documenttype[0].datatype[1].sstruct.compression.type NONE
+documenttype[0].datatype[1].sstruct.compression.level 0
+documenttype[0].datatype[1].sstruct.compression.threshold 95
+documenttype[0].datatype[1].sstruct.compression.minsize 200
+documenttype[0].datatype[2].id -794985308
+documenttype[0].datatype[2].type ARRAY
+documenttype[0].datatype[2].array.element.id 1707615575
+documenttype[0].datatype[2].map.key.id 0
+documenttype[0].datatype[2].map.value.id 0
+documenttype[0].datatype[2].wset.key.id 0
+documenttype[0].datatype[2].wset.createifnonexistent false
+documenttype[0].datatype[2].wset.removeifzero false
+documenttype[0].datatype[2].annotationref.annotation.id 0
+documenttype[0].datatype[2].sstruct.name ""
+documenttype[0].datatype[2].sstruct.version 0
+documenttype[0].datatype[2].sstruct.compression.type NONE
+documenttype[0].datatype[2].sstruct.compression.level 0
+documenttype[0].datatype[2].sstruct.compression.threshold 95
+documenttype[0].datatype[2].sstruct.compression.minsize 200
+documenttype[0].datatype[3].id -372512406
+documenttype[0].datatype[3].type MAP
+documenttype[0].datatype[3].array.element.id 0
+documenttype[0].datatype[3].map.key.id 0
+documenttype[0].datatype[3].map.value.id 1707615575
+documenttype[0].datatype[3].wset.key.id 0
+documenttype[0].datatype[3].wset.createifnonexistent false
+documenttype[0].datatype[3].wset.removeifzero false
+documenttype[0].datatype[3].annotationref.annotation.id 0
+documenttype[0].datatype[3].sstruct.name ""
+documenttype[0].datatype[3].sstruct.version 0
+documenttype[0].datatype[3].sstruct.compression.type NONE
+documenttype[0].datatype[3].sstruct.compression.level 0
+documenttype[0].datatype[3].sstruct.compression.threshold 95
+documenttype[0].datatype[3].sstruct.compression.minsize 200
+documenttype[0].datatype[4].id 1416345047
+documenttype[0].datatype[4].type ARRAY
+documenttype[0].datatype[4].array.element.id -372512406
+documenttype[0].datatype[4].map.key.id 0
+documenttype[0].datatype[4].map.value.id 0
+documenttype[0].datatype[4].wset.key.id 0
+documenttype[0].datatype[4].wset.createifnonexistent false
+documenttype[0].datatype[4].wset.removeifzero false
+documenttype[0].datatype[4].annotationref.annotation.id 0
+documenttype[0].datatype[4].sstruct.name ""
+documenttype[0].datatype[4].sstruct.version 0
+documenttype[0].datatype[4].sstruct.compression.type NONE
+documenttype[0].datatype[4].sstruct.compression.level 0
+documenttype[0].datatype[4].sstruct.compression.threshold 95
+documenttype[0].datatype[4].sstruct.compression.minsize 200
+documenttype[0].datatype[5].id 339965458
+documenttype[0].datatype[5].type MAP
+documenttype[0].datatype[5].array.element.id 0
+documenttype[0].datatype[5].map.key.id 2
+documenttype[0].datatype[5].map.value.id 2
+documenttype[0].datatype[5].wset.key.id 0
+documenttype[0].datatype[5].wset.createifnonexistent false
+documenttype[0].datatype[5].wset.removeifzero false
+documenttype[0].datatype[5].annotationref.annotation.id 0
+documenttype[0].datatype[5].sstruct.name ""
+documenttype[0].datatype[5].sstruct.version 0
+documenttype[0].datatype[5].sstruct.compression.type NONE
+documenttype[0].datatype[5].sstruct.compression.level 0
+documenttype[0].datatype[5].sstruct.compression.threshold 95
+documenttype[0].datatype[5].sstruct.compression.minsize 200
+documenttype[0].datatype[6].id 69621385
+documenttype[0].datatype[6].type ARRAY
+documenttype[0].datatype[6].array.element.id 339965458
+documenttype[0].datatype[6].map.key.id 0
+documenttype[0].datatype[6].map.value.id 0
+documenttype[0].datatype[6].wset.key.id 0
+documenttype[0].datatype[6].wset.createifnonexistent false
+documenttype[0].datatype[6].wset.removeifzero false
+documenttype[0].datatype[6].annotationref.annotation.id 0
+documenttype[0].datatype[6].sstruct.name ""
+documenttype[0].datatype[6].sstruct.version 0
+documenttype[0].datatype[6].sstruct.compression.type NONE
+documenttype[0].datatype[6].sstruct.compression.level 0
+documenttype[0].datatype[6].sstruct.compression.threshold 95
+documenttype[0].datatype[6].sstruct.compression.minsize 200
+documenttype[0].datatype[7].id 49942803
+documenttype[0].datatype[7].type ARRAY
+documenttype[0].datatype[7].array.element.id 16
+documenttype[0].datatype[7].map.key.id 0
+documenttype[0].datatype[7].map.value.id 0
+documenttype[0].datatype[7].wset.key.id 0
+documenttype[0].datatype[7].wset.createifnonexistent false
+documenttype[0].datatype[7].wset.removeifzero false
+documenttype[0].datatype[7].annotationref.annotation.id 0
+documenttype[0].datatype[7].sstruct.name ""
+documenttype[0].datatype[7].sstruct.version 0
+documenttype[0].datatype[7].sstruct.compression.type NONE
+documenttype[0].datatype[7].sstruct.compression.level 0
+documenttype[0].datatype[7].sstruct.compression.threshold 95
+documenttype[0].datatype[7].sstruct.compression.minsize 200
+documenttype[0].datatype[8].id -1245117006
+documenttype[0].datatype[8].type ARRAY
+documenttype[0].datatype[8].array.element.id 0
+documenttype[0].datatype[8].map.key.id 0
+documenttype[0].datatype[8].map.value.id 0
+documenttype[0].datatype[8].wset.key.id 0
+documenttype[0].datatype[8].wset.createifnonexistent false
+documenttype[0].datatype[8].wset.removeifzero false
+documenttype[0].datatype[8].annotationref.annotation.id 0
+documenttype[0].datatype[8].sstruct.name ""
+documenttype[0].datatype[8].sstruct.version 0
+documenttype[0].datatype[8].sstruct.compression.type NONE
+documenttype[0].datatype[8].sstruct.compression.level 0
+documenttype[0].datatype[8].sstruct.compression.threshold 95
+documenttype[0].datatype[8].sstruct.compression.minsize 200
+documenttype[0].datatype[9].id -2092985853
+documenttype[0].datatype[9].type STRUCT
+documenttype[0].datatype[9].array.element.id 0
+documenttype[0].datatype[9].map.key.id 0
+documenttype[0].datatype[9].map.value.id 0
+documenttype[0].datatype[9].wset.key.id 0
+documenttype[0].datatype[9].wset.createifnonexistent false
+documenttype[0].datatype[9].wset.removeifzero false
+documenttype[0].datatype[9].annotationref.annotation.id 0
+documenttype[0].datatype[9].sstruct.name "mystruct"
+documenttype[0].datatype[9].sstruct.version 0
+documenttype[0].datatype[9].sstruct.compression.type NONE
+documenttype[0].datatype[9].sstruct.compression.level 0
+documenttype[0].datatype[9].sstruct.compression.threshold 95
+documenttype[0].datatype[9].sstruct.compression.minsize 200
+documenttype[0].datatype[9].sstruct.field[0].name "bytearr"
+documenttype[0].datatype[9].sstruct.field[0].id 1079701754
+documenttype[0].datatype[9].sstruct.field[0].datatype 49942803
+documenttype[0].datatype[9].sstruct.field[0].detailedtype ""
+documenttype[0].datatype[9].sstruct.field[1].name "mymap"
+documenttype[0].datatype[9].sstruct.field[1].id 1954178122
+documenttype[0].datatype[9].sstruct.field[1].datatype 339965458
+documenttype[0].datatype[9].sstruct.field[1].detailedtype ""
+documenttype[0].datatype[9].sstruct.field[2].name "title"
+documenttype[0].datatype[9].sstruct.field[2].id 567626448
+documenttype[0].datatype[9].sstruct.field[2].datatype 2
+documenttype[0].datatype[9].sstruct.field[2].detailedtype ""
+documenttype[0].datatype[9].sstruct.field[3].name "structfield"
+documenttype[0].datatype[9].sstruct.field[3].id 1726890940
+documenttype[0].datatype[9].sstruct.field[3].datatype 2
+documenttype[0].datatype[9].sstruct.field[3].detailedtype ""
+documenttype[0].datatype[10].id 759956026
+documenttype[0].datatype[10].type ARRAY
+documenttype[0].datatype[10].array.element.id -2092985853
+documenttype[0].datatype[10].map.key.id 0
+documenttype[0].datatype[10].map.value.id 0
+documenttype[0].datatype[10].wset.key.id 0
+documenttype[0].datatype[10].wset.createifnonexistent false
+documenttype[0].datatype[10].wset.removeifzero false
+documenttype[0].datatype[10].annotationref.annotation.id 0
+documenttype[0].datatype[10].sstruct.name ""
+documenttype[0].datatype[10].sstruct.version 0
+documenttype[0].datatype[10].sstruct.compression.type NONE
+documenttype[0].datatype[10].sstruct.compression.level 0
+documenttype[0].datatype[10].sstruct.compression.threshold 95
+documenttype[0].datatype[10].sstruct.compression.minsize 200
+documenttype[0].datatype[11].id 109267174
+documenttype[0].datatype[11].type STRUCT
+documenttype[0].datatype[11].array.element.id 0
+documenttype[0].datatype[11].map.key.id 0
+documenttype[0].datatype[11].map.value.id 0
+documenttype[0].datatype[11].wset.key.id 0
+documenttype[0].datatype[11].wset.createifnonexistent false
+documenttype[0].datatype[11].wset.removeifzero false
+documenttype[0].datatype[11].annotationref.annotation.id 0
+documenttype[0].datatype[11].sstruct.name "sct"
+documenttype[0].datatype[11].sstruct.version 0
+documenttype[0].datatype[11].sstruct.compression.type NONE
+documenttype[0].datatype[11].sstruct.compression.level 0
+documenttype[0].datatype[11].sstruct.compression.threshold 95
+documenttype[0].datatype[11].sstruct.compression.minsize 200
+documenttype[0].datatype[11].sstruct.field[0].name "s1"
+documenttype[0].datatype[11].sstruct.field[0].id 2146820765
+documenttype[0].datatype[11].sstruct.field[0].datatype 2
+documenttype[0].datatype[11].sstruct.field[0].detailedtype ""
+documenttype[0].datatype[11].sstruct.field[1].name "s2"
+documenttype[0].datatype[11].sstruct.field[1].id 45366795
+documenttype[0].datatype[11].sstruct.field[1].datatype 2
+documenttype[0].datatype[11].sstruct.field[1].detailedtype ""
+documenttype[0].datatype[12].id -1244829667
+documenttype[0].datatype[12].type ARRAY
+documenttype[0].datatype[12].array.element.id 109267174
+documenttype[0].datatype[12].map.key.id 0
+documenttype[0].datatype[12].map.value.id 0
+documenttype[0].datatype[12].wset.key.id 0
+documenttype[0].datatype[12].wset.createifnonexistent false
+documenttype[0].datatype[12].wset.removeifzero false
+documenttype[0].datatype[12].annotationref.annotation.id 0
+documenttype[0].datatype[12].sstruct.name ""
+documenttype[0].datatype[12].sstruct.version 0
+documenttype[0].datatype[12].sstruct.compression.type NONE
+documenttype[0].datatype[12].sstruct.compression.level 0
+documenttype[0].datatype[12].sstruct.compression.threshold 95
+documenttype[0].datatype[12].sstruct.compression.minsize 200
+documenttype[0].datatype[13].id 2138385264
+documenttype[0].datatype[13].type MAP
+documenttype[0].datatype[13].array.element.id 0
+documenttype[0].datatype[13].map.key.id 0
+documenttype[0].datatype[13].map.value.id 5
+documenttype[0].datatype[13].wset.key.id 0
+documenttype[0].datatype[13].wset.createifnonexistent false
+documenttype[0].datatype[13].wset.removeifzero false
+documenttype[0].datatype[13].annotationref.annotation.id 0
+documenttype[0].datatype[13].sstruct.name ""
+documenttype[0].datatype[13].sstruct.version 0
+documenttype[0].datatype[13].sstruct.compression.type NONE
+documenttype[0].datatype[13].sstruct.compression.level 0
+documenttype[0].datatype[13].sstruct.compression.threshold 95
+documenttype[0].datatype[13].sstruct.compression.minsize 200
+documenttype[0].datatype[14].id -1865479609
+documenttype[0].datatype[14].type MAP
+documenttype[0].datatype[14].array.element.id 0
+documenttype[0].datatype[14].map.key.id 2
+documenttype[0].datatype[14].map.value.id 4
+documenttype[0].datatype[14].wset.key.id 0
+documenttype[0].datatype[14].wset.createifnonexistent false
+documenttype[0].datatype[14].wset.removeifzero false
+documenttype[0].datatype[14].annotationref.annotation.id 0
+documenttype[0].datatype[14].sstruct.name ""
+documenttype[0].datatype[14].sstruct.version 0
+documenttype[0].datatype[14].sstruct.compression.type NONE
+documenttype[0].datatype[14].sstruct.compression.level 0
+documenttype[0].datatype[14].sstruct.compression.threshold 95
+documenttype[0].datatype[14].sstruct.compression.minsize 200
+documenttype[0].datatype[15].id 294108848
+documenttype[0].datatype[15].type STRUCT
+documenttype[0].datatype[15].array.element.id 0
+documenttype[0].datatype[15].map.key.id 0
+documenttype[0].datatype[15].map.value.id 0
+documenttype[0].datatype[15].wset.key.id 0
+documenttype[0].datatype[15].wset.createifnonexistent false
+documenttype[0].datatype[15].wset.removeifzero false
+documenttype[0].datatype[15].annotationref.annotation.id 0
+documenttype[0].datatype[15].sstruct.name "folder"
+documenttype[0].datatype[15].sstruct.version 0
+documenttype[0].datatype[15].sstruct.compression.type NONE
+documenttype[0].datatype[15].sstruct.compression.level 0
+documenttype[0].datatype[15].sstruct.compression.threshold 95
+documenttype[0].datatype[15].sstruct.compression.minsize 200
+documenttype[0].datatype[15].sstruct.field[0].name "Version"
+documenttype[0].datatype[15].sstruct.field[0].id 64430502
+documenttype[0].datatype[15].sstruct.field[0].datatype 0
+documenttype[0].datatype[15].sstruct.field[0].detailedtype ""
+documenttype[0].datatype[15].sstruct.field[1].name "Name"
+documenttype[0].datatype[15].sstruct.field[1].id 2002760220
+documenttype[0].datatype[15].sstruct.field[1].datatype 2
+documenttype[0].datatype[15].sstruct.field[1].detailedtype ""
+documenttype[0].datatype[15].sstruct.field[2].name "FlagsCounter"
+documenttype[0].datatype[15].sstruct.field[2].id 1741227606
+documenttype[0].datatype[15].sstruct.field[2].datatype -1865479609
+documenttype[0].datatype[15].sstruct.field[2].detailedtype ""
+documenttype[0].datatype[15].sstruct.field[3].name "anotherfolder"
+documenttype[0].datatype[15].sstruct.field[3].id 1582421848
+documenttype[0].datatype[15].sstruct.field[3].datatype 294108848
+documenttype[0].datatype[15].sstruct.field[3].detailedtype ""
+documenttype[0].datatype[16].id -389833101
+documenttype[0].datatype[16].type MAP
+documenttype[0].datatype[16].array.element.id 0
+documenttype[0].datatype[16].map.key.id 0
+documenttype[0].datatype[16].map.value.id 294108848
+documenttype[0].datatype[16].wset.key.id 0
+documenttype[0].datatype[16].wset.createifnonexistent false
+documenttype[0].datatype[16].wset.removeifzero false
+documenttype[0].datatype[16].annotationref.annotation.id 0
+documenttype[0].datatype[16].sstruct.name ""
+documenttype[0].datatype[16].sstruct.version 0
+documenttype[0].datatype[16].sstruct.compression.type NONE
+documenttype[0].datatype[16].sstruct.compression.level 0
+documenttype[0].datatype[16].sstruct.compression.threshold 95
+documenttype[0].datatype[16].sstruct.compression.minsize 200
+documenttype[0].datatype[17].id -1715531035
+documenttype[0].datatype[17].type MAP
+documenttype[0].datatype[17].array.element.id 0
+documenttype[0].datatype[17].map.key.id 0
+documenttype[0].datatype[17].map.value.id 4
+documenttype[0].datatype[17].wset.key.id 0
+documenttype[0].datatype[17].wset.createifnonexistent false
+documenttype[0].datatype[17].wset.removeifzero false
+documenttype[0].datatype[17].annotationref.annotation.id 0
+documenttype[0].datatype[17].sstruct.name ""
+documenttype[0].datatype[17].sstruct.version 0
+documenttype[0].datatype[17].sstruct.compression.type NONE
+documenttype[0].datatype[17].sstruct.compression.level 0
+documenttype[0].datatype[17].sstruct.compression.threshold 95
+documenttype[0].datatype[17].sstruct.compression.minsize 200
+documenttype[0].datatype[18].id 1901258752
+documenttype[0].datatype[18].type MAP
+documenttype[0].datatype[18].array.element.id 0
+documenttype[0].datatype[18].map.key.id 0
+documenttype[0].datatype[18].map.value.id -2092985853
+documenttype[0].datatype[18].wset.key.id 0
+documenttype[0].datatype[18].wset.createifnonexistent false
+documenttype[0].datatype[18].wset.removeifzero false
+documenttype[0].datatype[18].annotationref.annotation.id 0
+documenttype[0].datatype[18].sstruct.name ""
+documenttype[0].datatype[18].sstruct.version 0
+documenttype[0].datatype[18].sstruct.compression.type NONE
+documenttype[0].datatype[18].sstruct.compression.level 0
+documenttype[0].datatype[18].sstruct.compression.threshold 95
+documenttype[0].datatype[18].sstruct.compression.minsize 200
+documenttype[0].datatype[19].id 435886609
+documenttype[0].datatype[19].type MAP
+documenttype[0].datatype[19].array.element.id 0
+documenttype[0].datatype[19].map.key.id 2
+documenttype[0].datatype[19].map.value.id -1245117006
+documenttype[0].datatype[19].wset.key.id 0
+documenttype[0].datatype[19].wset.createifnonexistent false
+documenttype[0].datatype[19].wset.removeifzero false
+documenttype[0].datatype[19].annotationref.annotation.id 0
+documenttype[0].datatype[19].sstruct.name ""
+documenttype[0].datatype[19].sstruct.version 0
+documenttype[0].datatype[19].sstruct.compression.type NONE
+documenttype[0].datatype[19].sstruct.compression.level 0
+documenttype[0].datatype[19].sstruct.compression.threshold 95
+documenttype[0].datatype[19].sstruct.compression.minsize 200
+documenttype[0].datatype[20].id 2125154557
+documenttype[0].datatype[20].type MAP
+documenttype[0].datatype[20].array.element.id 0
+documenttype[0].datatype[20].map.key.id 2
+documenttype[0].datatype[20].map.value.id 1
+documenttype[0].datatype[20].wset.key.id 0
+documenttype[0].datatype[20].wset.createifnonexistent false
+documenttype[0].datatype[20].wset.removeifzero false
+documenttype[0].datatype[20].annotationref.annotation.id 0
+documenttype[0].datatype[20].sstruct.name ""
+documenttype[0].datatype[20].sstruct.version 0
+documenttype[0].datatype[20].sstruct.compression.type NONE
+documenttype[0].datatype[20].sstruct.compression.level 0
+documenttype[0].datatype[20].sstruct.compression.threshold 95
+documenttype[0].datatype[20].sstruct.compression.minsize 200
+documenttype[0].datatype[21].id -1584287606
+documenttype[0].datatype[21].type MAP
+documenttype[0].datatype[21].array.element.id 0
+documenttype[0].datatype[21].map.key.id 2
+documenttype[0].datatype[21].map.value.id 0
+documenttype[0].datatype[21].wset.key.id 0
+documenttype[0].datatype[21].wset.createifnonexistent false
+documenttype[0].datatype[21].wset.removeifzero false
+documenttype[0].datatype[21].annotationref.annotation.id 0
+documenttype[0].datatype[21].sstruct.name ""
+documenttype[0].datatype[21].sstruct.version 0
+documenttype[0].datatype[21].sstruct.compression.type NONE
+documenttype[0].datatype[21].sstruct.compression.level 0
+documenttype[0].datatype[21].sstruct.compression.threshold 95
+documenttype[0].datatype[21].sstruct.compression.minsize 200
+documenttype[0].datatype[22].id 1328286588
+documenttype[0].datatype[22].type WSET
+documenttype[0].datatype[22].array.element.id 0
+documenttype[0].datatype[22].map.key.id 0
+documenttype[0].datatype[22].map.value.id 0
+documenttype[0].datatype[22].wset.key.id 2
+documenttype[0].datatype[22].wset.createifnonexistent false
+documenttype[0].datatype[22].wset.removeifzero false
+documenttype[0].datatype[22].annotationref.annotation.id 0
+documenttype[0].datatype[22].sstruct.name ""
+documenttype[0].datatype[22].sstruct.version 0
+documenttype[0].datatype[22].sstruct.compression.type NONE
+documenttype[0].datatype[22].sstruct.compression.level 0
+documenttype[0].datatype[22].sstruct.compression.threshold 95
+documenttype[0].datatype[22].sstruct.compression.minsize 200
+documenttype[0].datatype[23].id 2065577986
+documenttype[0].datatype[23].type WSET
+documenttype[0].datatype[23].array.element.id 0
+documenttype[0].datatype[23].map.key.id 0
+documenttype[0].datatype[23].map.value.id 0
+documenttype[0].datatype[23].wset.key.id 2
+documenttype[0].datatype[23].wset.createifnonexistent true
+documenttype[0].datatype[23].wset.removeifzero false
+documenttype[0].datatype[23].annotationref.annotation.id 0
+documenttype[0].datatype[23].sstruct.name ""
+documenttype[0].datatype[23].sstruct.version 0
+documenttype[0].datatype[23].sstruct.compression.type NONE
+documenttype[0].datatype[23].sstruct.compression.level 0
+documenttype[0].datatype[23].sstruct.compression.threshold 95
+documenttype[0].datatype[23].sstruct.compression.minsize 200
+documenttype[0].datatype[24].id 2125328771
+documenttype[0].datatype[24].type WSET
+documenttype[0].datatype[24].array.element.id 0
+documenttype[0].datatype[24].map.key.id 0
+documenttype[0].datatype[24].map.value.id 0
+documenttype[0].datatype[24].wset.key.id 2
+documenttype[0].datatype[24].wset.createifnonexistent false
+documenttype[0].datatype[24].wset.removeifzero true
+documenttype[0].datatype[24].annotationref.annotation.id 0
+documenttype[0].datatype[24].sstruct.name ""
+documenttype[0].datatype[24].sstruct.version 0
+documenttype[0].datatype[24].sstruct.compression.type NONE
+documenttype[0].datatype[24].sstruct.compression.level 0
+documenttype[0].datatype[24].sstruct.compression.threshold 95
+documenttype[0].datatype[24].sstruct.compression.minsize 200
+documenttype[0].datatype[25].id 1328581348
+documenttype[0].datatype[25].type STRUCT
+documenttype[0].datatype[25].array.element.id 0
+documenttype[0].datatype[25].map.key.id 0
+documenttype[0].datatype[25].map.value.id 0
+documenttype[0].datatype[25].wset.key.id 0
+documenttype[0].datatype[25].wset.createifnonexistent false
+documenttype[0].datatype[25].wset.removeifzero false
+documenttype[0].datatype[25].annotationref.annotation.id 0
+documenttype[0].datatype[25].sstruct.name "types.header"
+documenttype[0].datatype[25].sstruct.version 0
+documenttype[0].datatype[25].sstruct.compression.type NONE
+documenttype[0].datatype[25].sstruct.compression.level 0
+documenttype[0].datatype[25].sstruct.compression.threshold 95
+documenttype[0].datatype[25].sstruct.compression.minsize 200
+documenttype[0].datatype[25].sstruct.field[0].name "abyte"
+documenttype[0].datatype[25].sstruct.field[0].id 110138156
+documenttype[0].datatype[25].sstruct.field[0].datatype 16
+documenttype[0].datatype[25].sstruct.field[0].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[1].name "along"
+documenttype[0].datatype[25].sstruct.field[1].id 1206464520
+documenttype[0].datatype[25].sstruct.field[1].datatype 4
+documenttype[0].datatype[25].sstruct.field[1].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[2].name "arrayfield"
+documenttype[0].datatype[25].sstruct.field[2].id 965790107
+documenttype[0].datatype[25].sstruct.field[2].datatype -1245117006
+documenttype[0].datatype[25].sstruct.field[2].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[3].name "setfield"
+documenttype[0].datatype[25].sstruct.field[3].id 761581914
+documenttype[0].datatype[25].sstruct.field[3].datatype 1328286588
+documenttype[0].datatype[25].sstruct.field[3].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[4].name "pos"
+documenttype[0].datatype[25].sstruct.field[4].id 1041567475
+documenttype[0].datatype[25].sstruct.field[4].datatype 1381038251
+documenttype[0].datatype[25].sstruct.field[4].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[5].name "setfield2"
+documenttype[0].datatype[25].sstruct.field[5].id 1066659198
+documenttype[0].datatype[25].sstruct.field[5].datatype 18
+documenttype[0].datatype[25].sstruct.field[5].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[6].name "setfield3"
+documenttype[0].datatype[25].sstruct.field[6].id 1180155772
+documenttype[0].datatype[25].sstruct.field[6].datatype 2125328771
+documenttype[0].datatype[25].sstruct.field[6].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[7].name "setfield4"
+documenttype[0].datatype[25].sstruct.field[7].id 1254131631
+documenttype[0].datatype[25].sstruct.field[7].datatype 2065577986
+documenttype[0].datatype[25].sstruct.field[7].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[8].name "tagfield"
+documenttype[0].datatype[25].sstruct.field[8].id 1653562069
+documenttype[0].datatype[25].sstruct.field[8].datatype 18
+documenttype[0].datatype[25].sstruct.field[8].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[9].name "structfield"
+documenttype[0].datatype[25].sstruct.field[9].id 486207386
+documenttype[0].datatype[25].sstruct.field[9].datatype 109267174
+documenttype[0].datatype[25].sstruct.field[9].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[10].name "structarrayfield"
+documenttype[0].datatype[25].sstruct.field[10].id 335048518
+documenttype[0].datatype[25].sstruct.field[10].datatype -1244829667
+documenttype[0].datatype[25].sstruct.field[10].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[11].name "stringmapfield"
+documenttype[0].datatype[25].sstruct.field[11].id 117465687
+documenttype[0].datatype[25].sstruct.field[11].datatype 339965458
+documenttype[0].datatype[25].sstruct.field[11].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[12].name "intmapfield"
+documenttype[0].datatype[25].sstruct.field[12].id 121004462
+documenttype[0].datatype[25].sstruct.field[12].datatype -1584287606
+documenttype[0].datatype[25].sstruct.field[12].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[13].name "floatmapfield"
+documenttype[0].datatype[25].sstruct.field[13].id 1239120925
+documenttype[0].datatype[25].sstruct.field[13].datatype 2125154557
+documenttype[0].datatype[25].sstruct.field[13].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[14].name "longmapfield"
+documenttype[0].datatype[25].sstruct.field[14].id 477718745
+documenttype[0].datatype[25].sstruct.field[14].datatype -1715531035
+documenttype[0].datatype[25].sstruct.field[14].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[15].name "doublemapfield"
+documenttype[0].datatype[25].sstruct.field[15].id 877047192
+documenttype[0].datatype[25].sstruct.field[15].datatype 2138385264
+documenttype[0].datatype[25].sstruct.field[15].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[16].name "arraymapfield"
+documenttype[0].datatype[25].sstruct.field[16].id 1670805928
+documenttype[0].datatype[25].sstruct.field[16].datatype 435886609
+documenttype[0].datatype[25].sstruct.field[16].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[17].name "arrarr"
+documenttype[0].datatype[25].sstruct.field[17].id 1962567166
+documenttype[0].datatype[25].sstruct.field[17].datatype -794985308
+documenttype[0].datatype[25].sstruct.field[17].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[18].name "maparr"
+documenttype[0].datatype[25].sstruct.field[18].id 904375219
+documenttype[0].datatype[25].sstruct.field[18].datatype 69621385
+documenttype[0].datatype[25].sstruct.field[18].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[19].name "complexarray"
+documenttype[0].datatype[25].sstruct.field[19].id 795629533
+documenttype[0].datatype[25].sstruct.field[19].datatype 1416345047
+documenttype[0].datatype[25].sstruct.field[19].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[20].name "mystructfield"
+documenttype[0].datatype[25].sstruct.field[20].id 1348513378
+documenttype[0].datatype[25].sstruct.field[20].datatype -2092985853
+documenttype[0].datatype[25].sstruct.field[20].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[21].name "mystructmap"
+documenttype[0].datatype[25].sstruct.field[21].id 1511423250
+documenttype[0].datatype[25].sstruct.field[21].datatype 1901258752
+documenttype[0].datatype[25].sstruct.field[21].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[22].name "mystructarr"
+documenttype[0].datatype[25].sstruct.field[22].id 595856991
+documenttype[0].datatype[25].sstruct.field[22].datatype 759956026
+documenttype[0].datatype[25].sstruct.field[22].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[23].name "Folders"
+documenttype[0].datatype[25].sstruct.field[23].id 34575524
+documenttype[0].datatype[25].sstruct.field[23].datatype -389833101
+documenttype[0].datatype[25].sstruct.field[23].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[24].name "juletre"
+documenttype[0].datatype[25].sstruct.field[24].id 1039981530
+documenttype[0].datatype[25].sstruct.field[24].datatype 4
+documenttype[0].datatype[25].sstruct.field[24].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[25].name "album0"
+documenttype[0].datatype[25].sstruct.field[25].id 764312262
+documenttype[0].datatype[25].sstruct.field[25].datatype 18
+documenttype[0].datatype[25].sstruct.field[25].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[26].name "album1"
+documenttype[0].datatype[25].sstruct.field[26].id 1967160809
+documenttype[0].datatype[25].sstruct.field[26].datatype 18
+documenttype[0].datatype[25].sstruct.field[26].detailedtype ""
+documenttype[0].datatype[25].sstruct.field[27].name "other"
+documenttype[0].datatype[25].sstruct.field[27].id 2443357
+documenttype[0].datatype[25].sstruct.field[27].datatype 4
+documenttype[0].datatype[25].sstruct.field[27].detailedtype ""
+documenttype[0].fieldsets{[document]}.fields[0] "Folders"
+documenttype[0].fieldsets{[document]}.fields[1] "abyte"
+documenttype[0].fieldsets{[document]}.fields[2] "album0"
+documenttype[0].fieldsets{[document]}.fields[3] "album1"
+documenttype[0].fieldsets{[document]}.fields[4] "along"
+documenttype[0].fieldsets{[document]}.fields[5] "arrarr"
+documenttype[0].fieldsets{[document]}.fields[6] "arrayfield"
+documenttype[0].fieldsets{[document]}.fields[7] "arraymapfield"
+documenttype[0].fieldsets{[document]}.fields[8] "complexarray"
+documenttype[0].fieldsets{[document]}.fields[9] "doublemapfield"
+documenttype[0].fieldsets{[document]}.fields[10] "floatmapfield"
+documenttype[0].fieldsets{[document]}.fields[11] "intmapfield"
+documenttype[0].fieldsets{[document]}.fields[12] "juletre"
+documenttype[0].fieldsets{[document]}.fields[13] "longmapfield"
+documenttype[0].fieldsets{[document]}.fields[14] "maparr"
+documenttype[0].fieldsets{[document]}.fields[15] "mystructarr"
+documenttype[0].fieldsets{[document]}.fields[16] "mystructfield"
+documenttype[0].fieldsets{[document]}.fields[17] "mystructmap"
+documenttype[0].fieldsets{[document]}.fields[18] "pos"
+documenttype[0].fieldsets{[document]}.fields[19] "setfield"
+documenttype[0].fieldsets{[document]}.fields[20] "setfield2"
+documenttype[0].fieldsets{[document]}.fields[21] "setfield3"
+documenttype[0].fieldsets{[document]}.fields[22] "setfield4"
+documenttype[0].fieldsets{[document]}.fields[23] "stringmapfield"
+documenttype[0].fieldsets{[document]}.fields[24] "structarrayfield"
+documenttype[0].fieldsets{[document]}.fields[25] "structfield"
+documenttype[0].fieldsets{[document]}.fields[26] "tagfield"
diff --git a/config-model/src/test/configmodel/types/documenttypes_with_doc_field.cfg b/config-model/src/test/configmodel/types/documenttypes_with_doc_field.cfg
index 15430101553..61c92eee8d1 100644
--- a/config-model/src/test/configmodel/types/documenttypes_with_doc_field.cfg
+++ b/config-model/src/test/configmodel/types/documenttypes_with_doc_field.cfg
@@ -1,65 +1,49 @@
enablecompression false
usev8geopositions false
-doctype[0].name "document"
-doctype[0].idx 10000
-doctype[0].internalid 8
-doctype[0].contentstruct 10001
-doctype[0].primitivetype[0].idx 10002
-doctype[0].primitivetype[0].name "bool"
-doctype[0].primitivetype[1].idx 10003
-doctype[0].primitivetype[1].name "byte"
-doctype[0].primitivetype[2].idx 10004
-doctype[0].primitivetype[2].name "double"
-doctype[0].primitivetype[3].idx 10005
-doctype[0].primitivetype[3].name "float"
-doctype[0].primitivetype[4].idx 10006
-doctype[0].primitivetype[4].name "float16"
-doctype[0].primitivetype[5].idx 10007
-doctype[0].primitivetype[5].name "int"
-doctype[0].primitivetype[6].idx 10008
-doctype[0].primitivetype[6].name "long"
-doctype[0].primitivetype[7].idx 10010
-doctype[0].primitivetype[7].name "predicate"
-doctype[0].primitivetype[8].idx 10011
-doctype[0].primitivetype[8].name "raw"
-doctype[0].primitivetype[9].idx 10012
-doctype[0].primitivetype[9].name "string"
-doctype[0].primitivetype[10].idx 10014
-doctype[0].primitivetype[10].name "uri"
-doctype[0].wsettype[0].idx 10013
-doctype[0].wsettype[0].elementtype 10012
-doctype[0].wsettype[0].createifnonexistent true
-doctype[0].wsettype[0].removeifzero true
-doctype[0].wsettype[0].internalid 18
-doctype[0].structtype[0].idx 10001
-doctype[0].structtype[0].name "document.header"
-doctype[0].structtype[0].internalid -284186494
-doctype[0].structtype[1].idx 10009
-doctype[0].structtype[1].name "position"
-doctype[0].structtype[1].field[0].name "x"
-doctype[0].structtype[1].field[0].internalid 914677694
-doctype[0].structtype[1].field[0].type 10007
-doctype[0].structtype[1].field[1].name "y"
-doctype[0].structtype[1].field[1].internalid 900009410
-doctype[0].structtype[1].field[1].type 10007
-doctype[0].structtype[1].internalid 1381038251
-doctype[1].name "other_doc"
-doctype[1].idx 10015
-doctype[1].internalid -1368624373
-doctype[1].inherits[0].idx 10000
-doctype[1].contentstruct 10016
-doctype[1].structtype[0].idx 10016
-doctype[1].structtype[0].name "other_doc.header"
-doctype[1].structtype[0].internalid 1631005140
-doctype[2].name "types"
-doctype[2].idx 10017
-doctype[2].internalid -853072901
-doctype[2].inherits[0].idx 10000
-doctype[2].contentstruct 10018
-doctype[2].fieldsets{[document]}.fields[0] "doc_field"
-doctype[2].structtype[0].idx 10018
-doctype[2].structtype[0].name "types.header"
-doctype[2].structtype[0].field[0].name "doc_field"
-doctype[2].structtype[0].field[0].internalid 819293364
-doctype[2].structtype[0].field[0].type 10015
-doctype[2].structtype[0].internalid 1328581348
+documenttype[0].id -1368624373
+documenttype[0].name "other_doc"
+documenttype[0].version 0
+documenttype[0].headerstruct 1631005140
+documenttype[0].bodystruct 0
+documenttype[0].inherits[0].id 8
+documenttype[0].datatype[0].id 1631005140
+documenttype[0].datatype[0].type STRUCT
+documenttype[0].datatype[0].array.element.id 0
+documenttype[0].datatype[0].map.key.id 0
+documenttype[0].datatype[0].map.value.id 0
+documenttype[0].datatype[0].wset.key.id 0
+documenttype[0].datatype[0].wset.createifnonexistent false
+documenttype[0].datatype[0].wset.removeifzero false
+documenttype[0].datatype[0].annotationref.annotation.id 0
+documenttype[0].datatype[0].sstruct.name "other_doc.header"
+documenttype[0].datatype[0].sstruct.version 0
+documenttype[0].datatype[0].sstruct.compression.type NONE
+documenttype[0].datatype[0].sstruct.compression.level 0
+documenttype[0].datatype[0].sstruct.compression.threshold 95
+documenttype[0].datatype[0].sstruct.compression.minsize 200
+documenttype[1].id -853072901
+documenttype[1].name "types"
+documenttype[1].version 0
+documenttype[1].headerstruct 1328581348
+documenttype[1].bodystruct 0
+documenttype[1].inherits[0].id 8
+documenttype[1].datatype[0].id 1328581348
+documenttype[1].datatype[0].type STRUCT
+documenttype[1].datatype[0].array.element.id 0
+documenttype[1].datatype[0].map.key.id 0
+documenttype[1].datatype[0].map.value.id 0
+documenttype[1].datatype[0].wset.key.id 0
+documenttype[1].datatype[0].wset.createifnonexistent false
+documenttype[1].datatype[0].wset.removeifzero false
+documenttype[1].datatype[0].annotationref.annotation.id 0
+documenttype[1].datatype[0].sstruct.name "types.header"
+documenttype[1].datatype[0].sstruct.version 0
+documenttype[1].datatype[0].sstruct.compression.type NONE
+documenttype[1].datatype[0].sstruct.compression.level 0
+documenttype[1].datatype[0].sstruct.compression.threshold 95
+documenttype[1].datatype[0].sstruct.compression.minsize 200
+documenttype[1].datatype[0].sstruct.field[0].name "doc_field"
+documenttype[1].datatype[0].sstruct.field[0].id 819293364
+documenttype[1].datatype[0].sstruct.field[0].datatype -1368624373
+documenttype[1].datatype[0].sstruct.field[0].detailedtype ""
+documenttype[1].fieldsets{[document]}.fields[0] "doc_field"
diff --git a/config-model/src/test/configmodel/types/references/documenttypes_multiple_imported_fields.cfg b/config-model/src/test/configmodel/types/references/documenttypes_multiple_imported_fields.cfg
index 1b5817e6f39..d992839d5d9 100644
--- a/config-model/src/test/configmodel/types/references/documenttypes_multiple_imported_fields.cfg
+++ b/config-model/src/test/configmodel/types/references/documenttypes_multiple_imported_fields.cfg
@@ -1,98 +1,97 @@
enablecompression false
usev8geopositions false
-doctype[0].name "document"
-doctype[0].idx 10000
-doctype[0].internalid 8
-doctype[0].contentstruct 10001
-doctype[0].primitivetype[0].idx 10002
-doctype[0].primitivetype[0].name "bool"
-doctype[0].primitivetype[1].idx 10003
-doctype[0].primitivetype[1].name "byte"
-doctype[0].primitivetype[2].idx 10004
-doctype[0].primitivetype[2].name "double"
-doctype[0].primitivetype[3].idx 10005
-doctype[0].primitivetype[3].name "float"
-doctype[0].primitivetype[4].idx 10006
-doctype[0].primitivetype[4].name "float16"
-doctype[0].primitivetype[5].idx 10007
-doctype[0].primitivetype[5].name "int"
-doctype[0].primitivetype[6].idx 10008
-doctype[0].primitivetype[6].name "long"
-doctype[0].primitivetype[7].idx 10010
-doctype[0].primitivetype[7].name "predicate"
-doctype[0].primitivetype[8].idx 10011
-doctype[0].primitivetype[8].name "raw"
-doctype[0].primitivetype[9].idx 10012
-doctype[0].primitivetype[9].name "string"
-doctype[0].primitivetype[10].idx 10014
-doctype[0].primitivetype[10].name "uri"
-doctype[0].wsettype[0].idx 10013
-doctype[0].wsettype[0].elementtype 10012
-doctype[0].wsettype[0].createifnonexistent true
-doctype[0].wsettype[0].removeifzero true
-doctype[0].wsettype[0].internalid 18
-doctype[0].structtype[0].idx 10001
-doctype[0].structtype[0].name "document.header"
-doctype[0].structtype[0].internalid -284186494
-doctype[0].structtype[1].idx 10009
-doctype[0].structtype[1].name "position"
-doctype[0].structtype[1].field[0].name "x"
-doctype[0].structtype[1].field[0].internalid 914677694
-doctype[0].structtype[1].field[0].type 10007
-doctype[0].structtype[1].field[1].name "y"
-doctype[0].structtype[1].field[1].internalid 900009410
-doctype[0].structtype[1].field[1].type 10007
-doctype[0].structtype[1].internalid 1381038251
-doctype[1].name "ad"
-doctype[1].idx 10015
-doctype[1].internalid 2987301
-doctype[1].inherits[0].idx 10000
-doctype[1].contentstruct 10016
-doctype[1].fieldsets{[document]}.fields[0] "campaign_ref"
-doctype[1].fieldsets{[document]}.fields[1] "person_ref"
-doctype[1].importedfield[0].name "my_cool_field"
-doctype[1].importedfield[1].name "my_swag_field"
-doctype[1].importedfield[2].name "my_name"
-doctype[1].documentref[0].idx 10017
-doctype[1].documentref[0].targettype 10018
-doctype[1].documentref[0].internalid 595216861
-doctype[1].documentref[1].idx 10019
-doctype[1].documentref[1].targettype 10020
-doctype[1].documentref[1].internalid 542332920
-doctype[1].structtype[0].idx 10016
-doctype[1].structtype[0].name "ad.header"
-doctype[1].structtype[0].field[0].name "campaign_ref"
-doctype[1].structtype[0].field[0].internalid 23963250
-doctype[1].structtype[0].field[0].type 10017
-doctype[1].structtype[0].field[1].name "person_ref"
-doctype[1].structtype[0].field[1].internalid 100779805
-doctype[1].structtype[0].field[1].type 10019
-doctype[1].structtype[0].internalid 959075962
-doctype[2].name "campaign"
-doctype[2].idx 10018
-doctype[2].internalid -1318255918
-doctype[2].inherits[0].idx 10000
-doctype[2].contentstruct 10021
-doctype[2].fieldsets{[document]}.fields[0] "cool_field"
-doctype[2].fieldsets{[document]}.fields[1] "swag_field"
-doctype[2].structtype[0].idx 10021
-doctype[2].structtype[0].name "campaign.header"
-doctype[2].structtype[0].field[0].name "cool_field"
-doctype[2].structtype[0].field[0].internalid 1588702436
-doctype[2].structtype[0].field[0].type 10012
-doctype[2].structtype[0].field[1].name "swag_field"
-doctype[2].structtype[0].field[1].internalid 1691224741
-doctype[2].structtype[0].field[1].type 10008
-doctype[2].structtype[0].internalid -2041471955
-doctype[3].name "person"
-doctype[3].idx 10020
-doctype[3].internalid 443162583
-doctype[3].inherits[0].idx 10000
-doctype[3].contentstruct 10022
-doctype[3].fieldsets{[document]}.fields[0] "name"
-doctype[3].structtype[0].idx 10022
-doctype[3].structtype[0].name "person.header"
-doctype[3].structtype[0].field[0].name "name"
-doctype[3].structtype[0].field[0].internalid 1160796772
-doctype[3].structtype[0].field[0].type 10012
-doctype[3].structtype[0].internalid 3129224
+documenttype[0].id 2987301
+documenttype[0].name "ad"
+documenttype[0].version 0
+documenttype[0].headerstruct 959075962
+documenttype[0].bodystruct 0
+documenttype[0].inherits[0].id 8
+documenttype[0].datatype[0].id 959075962
+documenttype[0].datatype[0].type STRUCT
+documenttype[0].datatype[0].array.element.id 0
+documenttype[0].datatype[0].map.key.id 0
+documenttype[0].datatype[0].map.value.id 0
+documenttype[0].datatype[0].wset.key.id 0
+documenttype[0].datatype[0].wset.createifnonexistent false
+documenttype[0].datatype[0].wset.removeifzero false
+documenttype[0].datatype[0].annotationref.annotation.id 0
+documenttype[0].datatype[0].sstruct.name "ad.header"
+documenttype[0].datatype[0].sstruct.version 0
+documenttype[0].datatype[0].sstruct.compression.type NONE
+documenttype[0].datatype[0].sstruct.compression.level 0
+documenttype[0].datatype[0].sstruct.compression.threshold 95
+documenttype[0].datatype[0].sstruct.compression.minsize 200
+documenttype[0].datatype[0].sstruct.field[0].name "campaign_ref"
+documenttype[0].datatype[0].sstruct.field[0].id 23963250
+documenttype[0].datatype[0].sstruct.field[0].datatype 595216861
+documenttype[0].datatype[0].sstruct.field[0].detailedtype ""
+documenttype[0].datatype[0].sstruct.field[1].name "person_ref"
+documenttype[0].datatype[0].sstruct.field[1].id 100779805
+documenttype[0].datatype[0].sstruct.field[1].datatype 542332920
+documenttype[0].datatype[0].sstruct.field[1].detailedtype ""
+documenttype[0].fieldsets{[document]}.fields[0] "campaign_ref"
+documenttype[0].fieldsets{[document]}.fields[1] "person_ref"
+documenttype[0].referencetype[0].id 595216861
+documenttype[0].referencetype[0].target_type_id -1318255918
+documenttype[0].referencetype[1].id 542332920
+documenttype[0].referencetype[1].target_type_id 443162583
+documenttype[0].importedfield[0].name "my_cool_field"
+documenttype[0].importedfield[1].name "my_swag_field"
+documenttype[0].importedfield[2].name "my_name"
+documenttype[1].id -1318255918
+documenttype[1].name "campaign"
+documenttype[1].version 0
+documenttype[1].headerstruct -2041471955
+documenttype[1].bodystruct 0
+documenttype[1].inherits[0].id 8
+documenttype[1].datatype[0].id -2041471955
+documenttype[1].datatype[0].type STRUCT
+documenttype[1].datatype[0].array.element.id 0
+documenttype[1].datatype[0].map.key.id 0
+documenttype[1].datatype[0].map.value.id 0
+documenttype[1].datatype[0].wset.key.id 0
+documenttype[1].datatype[0].wset.createifnonexistent false
+documenttype[1].datatype[0].wset.removeifzero false
+documenttype[1].datatype[0].annotationref.annotation.id 0
+documenttype[1].datatype[0].sstruct.name "campaign.header"
+documenttype[1].datatype[0].sstruct.version 0
+documenttype[1].datatype[0].sstruct.compression.type NONE
+documenttype[1].datatype[0].sstruct.compression.level 0
+documenttype[1].datatype[0].sstruct.compression.threshold 95
+documenttype[1].datatype[0].sstruct.compression.minsize 200
+documenttype[1].datatype[0].sstruct.field[0].name "cool_field"
+documenttype[1].datatype[0].sstruct.field[0].id 1588702436
+documenttype[1].datatype[0].sstruct.field[0].datatype 2
+documenttype[1].datatype[0].sstruct.field[0].detailedtype ""
+documenttype[1].datatype[0].sstruct.field[1].name "swag_field"
+documenttype[1].datatype[0].sstruct.field[1].id 1691224741
+documenttype[1].datatype[0].sstruct.field[1].datatype 4
+documenttype[1].datatype[0].sstruct.field[1].detailedtype ""
+documenttype[1].fieldsets{[document]}.fields[0] "cool_field"
+documenttype[1].fieldsets{[document]}.fields[1] "swag_field"
+documenttype[2].id 443162583
+documenttype[2].name "person"
+documenttype[2].version 0
+documenttype[2].headerstruct 3129224
+documenttype[2].bodystruct 0
+documenttype[2].inherits[0].id 8
+documenttype[2].datatype[0].id 3129224
+documenttype[2].datatype[0].type STRUCT
+documenttype[2].datatype[0].array.element.id 0
+documenttype[2].datatype[0].map.key.id 0
+documenttype[2].datatype[0].map.value.id 0
+documenttype[2].datatype[0].wset.key.id 0
+documenttype[2].datatype[0].wset.createifnonexistent false
+documenttype[2].datatype[0].wset.removeifzero false
+documenttype[2].datatype[0].annotationref.annotation.id 0
+documenttype[2].datatype[0].sstruct.name "person.header"
+documenttype[2].datatype[0].sstruct.version 0
+documenttype[2].datatype[0].sstruct.compression.type NONE
+documenttype[2].datatype[0].sstruct.compression.level 0
+documenttype[2].datatype[0].sstruct.compression.threshold 95
+documenttype[2].datatype[0].sstruct.compression.minsize 200
+documenttype[2].datatype[0].sstruct.field[0].name "name"
+documenttype[2].datatype[0].sstruct.field[0].id 1160796772
+documenttype[2].datatype[0].sstruct.field[0].datatype 2
+documenttype[2].datatype[0].sstruct.field[0].detailedtype ""
+documenttype[2].fieldsets{[document]}.fields[0] "name"
diff --git a/config-model/src/test/configmodel/types/references/documenttypes_refs_to_other_types.cfg b/config-model/src/test/configmodel/types/references/documenttypes_refs_to_other_types.cfg
index 1c5d4d41819..68ed924615f 100644
--- a/config-model/src/test/configmodel/types/references/documenttypes_refs_to_other_types.cfg
+++ b/config-model/src/test/configmodel/types/references/documenttypes_refs_to_other_types.cfg
@@ -1,83 +1,79 @@
enablecompression false
usev8geopositions false
-doctype[0].name "document"
-doctype[0].idx 10000
-doctype[0].internalid 8
-doctype[0].contentstruct 10001
-doctype[0].primitivetype[0].idx 10002
-doctype[0].primitivetype[0].name "bool"
-doctype[0].primitivetype[1].idx 10003
-doctype[0].primitivetype[1].name "byte"
-doctype[0].primitivetype[2].idx 10004
-doctype[0].primitivetype[2].name "double"
-doctype[0].primitivetype[3].idx 10005
-doctype[0].primitivetype[3].name "float"
-doctype[0].primitivetype[4].idx 10006
-doctype[0].primitivetype[4].name "float16"
-doctype[0].primitivetype[5].idx 10007
-doctype[0].primitivetype[5].name "int"
-doctype[0].primitivetype[6].idx 10008
-doctype[0].primitivetype[6].name "long"
-doctype[0].primitivetype[7].idx 10010
-doctype[0].primitivetype[7].name "predicate"
-doctype[0].primitivetype[8].idx 10011
-doctype[0].primitivetype[8].name "raw"
-doctype[0].primitivetype[9].idx 10012
-doctype[0].primitivetype[9].name "string"
-doctype[0].primitivetype[10].idx 10014
-doctype[0].primitivetype[10].name "uri"
-doctype[0].wsettype[0].idx 10013
-doctype[0].wsettype[0].elementtype 10012
-doctype[0].wsettype[0].createifnonexistent true
-doctype[0].wsettype[0].removeifzero true
-doctype[0].wsettype[0].internalid 18
-doctype[0].structtype[0].idx 10001
-doctype[0].structtype[0].name "document.header"
-doctype[0].structtype[0].internalid -284186494
-doctype[0].structtype[1].idx 10009
-doctype[0].structtype[1].name "position"
-doctype[0].structtype[1].field[0].name "x"
-doctype[0].structtype[1].field[0].internalid 914677694
-doctype[0].structtype[1].field[0].type 10007
-doctype[0].structtype[1].field[1].name "y"
-doctype[0].structtype[1].field[1].internalid 900009410
-doctype[0].structtype[1].field[1].type 10007
-doctype[0].structtype[1].internalid 1381038251
-doctype[1].name "ad"
-doctype[1].idx 10015
-doctype[1].internalid 2987301
-doctype[1].inherits[0].idx 10000
-doctype[1].contentstruct 10016
-doctype[1].fieldsets{[document]}.fields[0] "campaign_ref"
-doctype[1].fieldsets{[document]}.fields[1] "person_ref"
-doctype[1].documentref[0].idx 10017
-doctype[1].documentref[0].targettype 10018
-doctype[1].documentref[0].internalid 595216861
-doctype[1].documentref[1].idx 10019
-doctype[1].documentref[1].targettype 10020
-doctype[1].documentref[1].internalid 542332920
-doctype[1].structtype[0].idx 10016
-doctype[1].structtype[0].name "ad.header"
-doctype[1].structtype[0].field[0].name "campaign_ref"
-doctype[1].structtype[0].field[0].internalid 23963250
-doctype[1].structtype[0].field[0].type 10017
-doctype[1].structtype[0].field[1].name "person_ref"
-doctype[1].structtype[0].field[1].internalid 100779805
-doctype[1].structtype[0].field[1].type 10019
-doctype[1].structtype[0].internalid 959075962
-doctype[2].name "campaign"
-doctype[2].idx 10018
-doctype[2].internalid -1318255918
-doctype[2].inherits[0].idx 10000
-doctype[2].contentstruct 10021
-doctype[2].structtype[0].idx 10021
-doctype[2].structtype[0].name "campaign.header"
-doctype[2].structtype[0].internalid -2041471955
-doctype[3].name "person"
-doctype[3].idx 10020
-doctype[3].internalid 443162583
-doctype[3].inherits[0].idx 10000
-doctype[3].contentstruct 10022
-doctype[3].structtype[0].idx 10022
-doctype[3].structtype[0].name "person.header"
-doctype[3].structtype[0].internalid 3129224
+documenttype[0].id 2987301
+documenttype[0].name "ad"
+documenttype[0].version 0
+documenttype[0].headerstruct 959075962
+documenttype[0].bodystruct 0
+documenttype[0].inherits[0].id 8
+documenttype[0].datatype[0].id 959075962
+documenttype[0].datatype[0].type STRUCT
+documenttype[0].datatype[0].array.element.id 0
+documenttype[0].datatype[0].map.key.id 0
+documenttype[0].datatype[0].map.value.id 0
+documenttype[0].datatype[0].wset.key.id 0
+documenttype[0].datatype[0].wset.createifnonexistent false
+documenttype[0].datatype[0].wset.removeifzero false
+documenttype[0].datatype[0].annotationref.annotation.id 0
+documenttype[0].datatype[0].sstruct.name "ad.header"
+documenttype[0].datatype[0].sstruct.version 0
+documenttype[0].datatype[0].sstruct.compression.type NONE
+documenttype[0].datatype[0].sstruct.compression.level 0
+documenttype[0].datatype[0].sstruct.compression.threshold 95
+documenttype[0].datatype[0].sstruct.compression.minsize 200
+documenttype[0].datatype[0].sstruct.field[0].name "campaign_ref"
+documenttype[0].datatype[0].sstruct.field[0].id 23963250
+documenttype[0].datatype[0].sstruct.field[0].datatype 595216861
+documenttype[0].datatype[0].sstruct.field[0].detailedtype ""
+documenttype[0].datatype[0].sstruct.field[1].name "person_ref"
+documenttype[0].datatype[0].sstruct.field[1].id 100779805
+documenttype[0].datatype[0].sstruct.field[1].datatype 542332920
+documenttype[0].datatype[0].sstruct.field[1].detailedtype ""
+documenttype[0].fieldsets{[document]}.fields[0] "campaign_ref"
+documenttype[0].fieldsets{[document]}.fields[1] "person_ref"
+documenttype[0].referencetype[0].id 595216861
+documenttype[0].referencetype[0].target_type_id -1318255918
+documenttype[0].referencetype[1].id 542332920
+documenttype[0].referencetype[1].target_type_id 443162583
+documenttype[1].id -1318255918
+documenttype[1].name "campaign"
+documenttype[1].version 0
+documenttype[1].headerstruct -2041471955
+documenttype[1].bodystruct 0
+documenttype[1].inherits[0].id 8
+documenttype[1].datatype[0].id -2041471955
+documenttype[1].datatype[0].type STRUCT
+documenttype[1].datatype[0].array.element.id 0
+documenttype[1].datatype[0].map.key.id 0
+documenttype[1].datatype[0].map.value.id 0
+documenttype[1].datatype[0].wset.key.id 0
+documenttype[1].datatype[0].wset.createifnonexistent false
+documenttype[1].datatype[0].wset.removeifzero false
+documenttype[1].datatype[0].annotationref.annotation.id 0
+documenttype[1].datatype[0].sstruct.name "campaign.header"
+documenttype[1].datatype[0].sstruct.version 0
+documenttype[1].datatype[0].sstruct.compression.type NONE
+documenttype[1].datatype[0].sstruct.compression.level 0
+documenttype[1].datatype[0].sstruct.compression.threshold 95
+documenttype[1].datatype[0].sstruct.compression.minsize 200
+documenttype[2].id 443162583
+documenttype[2].name "person"
+documenttype[2].version 0
+documenttype[2].headerstruct 3129224
+documenttype[2].bodystruct 0
+documenttype[2].inherits[0].id 8
+documenttype[2].datatype[0].id 3129224
+documenttype[2].datatype[0].type STRUCT
+documenttype[2].datatype[0].array.element.id 0
+documenttype[2].datatype[0].map.key.id 0
+documenttype[2].datatype[0].map.value.id 0
+documenttype[2].datatype[0].wset.key.id 0
+documenttype[2].datatype[0].wset.createifnonexistent false
+documenttype[2].datatype[0].wset.removeifzero false
+documenttype[2].datatype[0].annotationref.annotation.id 0
+documenttype[2].datatype[0].sstruct.name "person.header"
+documenttype[2].datatype[0].sstruct.version 0
+documenttype[2].datatype[0].sstruct.compression.type NONE
+documenttype[2].datatype[0].sstruct.compression.level 0
+documenttype[2].datatype[0].sstruct.compression.threshold 95
+documenttype[2].datatype[0].sstruct.compression.minsize 200
diff --git a/config-model/src/test/configmodel/types/references/documenttypes_refs_to_same_type.cfg b/config-model/src/test/configmodel/types/references/documenttypes_refs_to_same_type.cfg
index 2f178c55bfd..6415e62cd7e 100644
--- a/config-model/src/test/configmodel/types/references/documenttypes_refs_to_same_type.cfg
+++ b/config-model/src/test/configmodel/types/references/documenttypes_refs_to_same_type.cfg
@@ -1,72 +1,56 @@
enablecompression false
usev8geopositions false
-doctype[0].name "document"
-doctype[0].idx 10000
-doctype[0].internalid 8
-doctype[0].contentstruct 10001
-doctype[0].primitivetype[0].idx 10002
-doctype[0].primitivetype[0].name "bool"
-doctype[0].primitivetype[1].idx 10003
-doctype[0].primitivetype[1].name "byte"
-doctype[0].primitivetype[2].idx 10004
-doctype[0].primitivetype[2].name "double"
-doctype[0].primitivetype[3].idx 10005
-doctype[0].primitivetype[3].name "float"
-doctype[0].primitivetype[4].idx 10006
-doctype[0].primitivetype[4].name "float16"
-doctype[0].primitivetype[5].idx 10007
-doctype[0].primitivetype[5].name "int"
-doctype[0].primitivetype[6].idx 10008
-doctype[0].primitivetype[6].name "long"
-doctype[0].primitivetype[7].idx 10010
-doctype[0].primitivetype[7].name "predicate"
-doctype[0].primitivetype[8].idx 10011
-doctype[0].primitivetype[8].name "raw"
-doctype[0].primitivetype[9].idx 10012
-doctype[0].primitivetype[9].name "string"
-doctype[0].primitivetype[10].idx 10014
-doctype[0].primitivetype[10].name "uri"
-doctype[0].wsettype[0].idx 10013
-doctype[0].wsettype[0].elementtype 10012
-doctype[0].wsettype[0].createifnonexistent true
-doctype[0].wsettype[0].removeifzero true
-doctype[0].wsettype[0].internalid 18
-doctype[0].structtype[0].idx 10001
-doctype[0].structtype[0].name "document.header"
-doctype[0].structtype[0].internalid -284186494
-doctype[0].structtype[1].idx 10009
-doctype[0].structtype[1].name "position"
-doctype[0].structtype[1].field[0].name "x"
-doctype[0].structtype[1].field[0].internalid 914677694
-doctype[0].structtype[1].field[0].type 10007
-doctype[0].structtype[1].field[1].name "y"
-doctype[0].structtype[1].field[1].internalid 900009410
-doctype[0].structtype[1].field[1].type 10007
-doctype[0].structtype[1].internalid 1381038251
-doctype[1].name "ad"
-doctype[1].idx 10015
-doctype[1].internalid 2987301
-doctype[1].inherits[0].idx 10000
-doctype[1].contentstruct 10016
-doctype[1].fieldsets{[document]}.fields[0] "campaign_ref"
-doctype[1].fieldsets{[document]}.fields[1] "other_campaign_ref"
-doctype[1].documentref[0].idx 10017
-doctype[1].documentref[0].targettype 10018
-doctype[1].documentref[0].internalid 595216861
-doctype[1].structtype[0].idx 10016
-doctype[1].structtype[0].name "ad.header"
-doctype[1].structtype[0].field[0].name "campaign_ref"
-doctype[1].structtype[0].field[0].internalid 23963250
-doctype[1].structtype[0].field[0].type 10017
-doctype[1].structtype[0].field[1].name "other_campaign_ref"
-doctype[1].structtype[0].field[1].internalid 874751172
-doctype[1].structtype[0].field[1].type 10017
-doctype[1].structtype[0].internalid 959075962
-doctype[2].name "campaign"
-doctype[2].idx 10018
-doctype[2].internalid -1318255918
-doctype[2].inherits[0].idx 10000
-doctype[2].contentstruct 10019
-doctype[2].structtype[0].idx 10019
-doctype[2].structtype[0].name "campaign.header"
-doctype[2].structtype[0].internalid -2041471955
+documenttype[0].id 2987301
+documenttype[0].name "ad"
+documenttype[0].version 0
+documenttype[0].headerstruct 959075962
+documenttype[0].bodystruct 0
+documenttype[0].inherits[0].id 8
+documenttype[0].datatype[0].id 959075962
+documenttype[0].datatype[0].type STRUCT
+documenttype[0].datatype[0].array.element.id 0
+documenttype[0].datatype[0].map.key.id 0
+documenttype[0].datatype[0].map.value.id 0
+documenttype[0].datatype[0].wset.key.id 0
+documenttype[0].datatype[0].wset.createifnonexistent false
+documenttype[0].datatype[0].wset.removeifzero false
+documenttype[0].datatype[0].annotationref.annotation.id 0
+documenttype[0].datatype[0].sstruct.name "ad.header"
+documenttype[0].datatype[0].sstruct.version 0
+documenttype[0].datatype[0].sstruct.compression.type NONE
+documenttype[0].datatype[0].sstruct.compression.level 0
+documenttype[0].datatype[0].sstruct.compression.threshold 95
+documenttype[0].datatype[0].sstruct.compression.minsize 200
+documenttype[0].datatype[0].sstruct.field[0].name "campaign_ref"
+documenttype[0].datatype[0].sstruct.field[0].id 23963250
+documenttype[0].datatype[0].sstruct.field[0].datatype 595216861
+documenttype[0].datatype[0].sstruct.field[0].detailedtype ""
+documenttype[0].datatype[0].sstruct.field[1].name "other_campaign_ref"
+documenttype[0].datatype[0].sstruct.field[1].id 874751172
+documenttype[0].datatype[0].sstruct.field[1].datatype 595216861
+documenttype[0].datatype[0].sstruct.field[1].detailedtype ""
+documenttype[0].fieldsets{[document]}.fields[0] "campaign_ref"
+documenttype[0].fieldsets{[document]}.fields[1] "other_campaign_ref"
+documenttype[0].referencetype[0].id 595216861
+documenttype[0].referencetype[0].target_type_id -1318255918
+documenttype[1].id -1318255918
+documenttype[1].name "campaign"
+documenttype[1].version 0
+documenttype[1].headerstruct -2041471955
+documenttype[1].bodystruct 0
+documenttype[1].inherits[0].id 8
+documenttype[1].datatype[0].id -2041471955
+documenttype[1].datatype[0].type STRUCT
+documenttype[1].datatype[0].array.element.id 0
+documenttype[1].datatype[0].map.key.id 0
+documenttype[1].datatype[0].map.value.id 0
+documenttype[1].datatype[0].wset.key.id 0
+documenttype[1].datatype[0].wset.createifnonexistent false
+documenttype[1].datatype[0].wset.removeifzero false
+documenttype[1].datatype[0].annotationref.annotation.id 0
+documenttype[1].datatype[0].sstruct.name "campaign.header"
+documenttype[1].datatype[0].sstruct.version 0
+documenttype[1].datatype[0].sstruct.compression.type NONE
+documenttype[1].datatype[0].sstruct.compression.level 0
+documenttype[1].datatype[0].sstruct.compression.threshold 95
+documenttype[1].datatype[0].sstruct.compression.minsize 200
diff --git a/config-model/src/test/derived/duplicate_struct/documenttypes.cfg b/config-model/src/test/derived/duplicate_struct/documenttypes.cfg
index 867e1e70e7a..1b897214d73 100644
--- a/config-model/src/test/derived/duplicate_struct/documenttypes.cfg
+++ b/config-model/src/test/derived/duplicate_struct/documenttypes.cfg
@@ -1,88 +1,100 @@
enablecompression false
usev8geopositions false
-doctype[].name "document"
-doctype[].idx 10000
-doctype[].internalid 8
-doctype[].contentstruct 10001
-doctype[].primitivetype[].idx 10002
-doctype[].primitivetype[].name "bool"
-doctype[].primitivetype[].idx 10003
-doctype[].primitivetype[].name "byte"
-doctype[].primitivetype[].idx 10004
-doctype[].primitivetype[].name "double"
-doctype[].primitivetype[].idx 10005
-doctype[].primitivetype[].name "float"
-doctype[].primitivetype[].idx 10006
-doctype[].primitivetype[].name "float16"
-doctype[].primitivetype[].idx 10007
-doctype[].primitivetype[].name "int"
-doctype[].primitivetype[].idx 10008
-doctype[].primitivetype[].name "long"
-doctype[].primitivetype[].idx 10010
-doctype[].primitivetype[].name "predicate"
-doctype[].primitivetype[].idx 10011
-doctype[].primitivetype[].name "raw"
-doctype[].primitivetype[].idx 10012
-doctype[].primitivetype[].name "string"
-doctype[].primitivetype[].idx 10014
-doctype[].primitivetype[].name "uri"
-doctype[].wsettype[].idx 10013
-doctype[].wsettype[].elementtype 10012
-doctype[].wsettype[].createifnonexistent true
-doctype[].wsettype[].removeifzero true
-doctype[].wsettype[].internalid 18
-doctype[].structtype[].idx 10001
-doctype[].structtype[].name "document.header"
-doctype[].structtype[].internalid -284186494
-doctype[].structtype[].idx 10009
-doctype[].structtype[].name "position"
-doctype[].structtype[].field[].name "x"
-doctype[].structtype[].field[].internalid 914677694
-doctype[].structtype[].field[].type 10007
-doctype[].structtype[].field[].name "y"
-doctype[].structtype[].field[].internalid 900009410
-doctype[].structtype[].field[].type 10007
-doctype[].structtype[].internalid 1381038251
-doctype[].name "foo"
-doctype[].idx 10015
-doctype[].internalid 97614088
-doctype[].inherits[].idx 10000
-doctype[].contentstruct 10016
-doctype[].fieldsets{[document]}.fields[] "mystuff"
-doctype[].fieldsets{[document]}.fields[] "timestamp"
-doctype[].arraytype[].idx 10017
-doctype[].arraytype[].elementtype 10018
-doctype[].arraytype[].internalid 759956026
-doctype[].structtype[].idx 10018
-doctype[].structtype[].name "mystruct"
-doctype[].structtype[].field[].name "name"
-doctype[].structtype[].field[].internalid 1160796772
-doctype[].structtype[].field[].type 10012
-doctype[].structtype[].field[].name "company"
-doctype[].structtype[].field[].internalid 2010814026
-doctype[].structtype[].field[].type 10012
-doctype[].structtype[].internalid -2092985853
-doctype[].structtype[].idx 10016
-doctype[].structtype[].name "foo.header"
-doctype[].structtype[].field[].name "timestamp"
-doctype[].structtype[].field[].internalid 808678733
-doctype[].structtype[].field[].type 10008
-doctype[].structtype[].field[].name "mystuff"
-doctype[].structtype[].field[].internalid 885106505
-doctype[].structtype[].field[].type 10017
-doctype[].structtype[].internalid -308552393
-doctype[].name "foobar"
-doctype[].idx 10019
-doctype[].internalid 378030095
-doctype[].inherits[].idx 10000
-doctype[].inherits[].idx 10015
-doctype[].contentstruct 10020
-doctype[].fieldsets{[document]}.fields[] "mystuff"
-doctype[].fieldsets{[document]}.fields[] "timestamp"
-doctype[].fieldsets{[document]}.fields[] "title"
-doctype[].structtype[].idx 10020
-doctype[].structtype[].name "foobar.header"
-doctype[].structtype[].field[].name "title"
-doctype[].structtype[].field[].internalid 567626448
-doctype[].structtype[].field[].type 10012
-doctype[].structtype[].internalid -1365874608
+documenttype[].id 97614088
+documenttype[].name "foo"
+documenttype[].version 0
+documenttype[].headerstruct -308552393
+documenttype[].bodystruct 0
+documenttype[].inherits[].id 8
+documenttype[].datatype[].id -2092985853
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "mystruct"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "name"
+documenttype[].datatype[].sstruct.field[].id 1160796772
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "company"
+documenttype[].datatype[].sstruct.field[].id 2010814026
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].id 759956026
+documenttype[].datatype[].type ARRAY
+documenttype[].datatype[].array.element.id -2092985853
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name ""
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].id -308552393
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "foo.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "timestamp"
+documenttype[].datatype[].sstruct.field[].id 808678733
+documenttype[].datatype[].sstruct.field[].datatype 4
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "mystuff"
+documenttype[].datatype[].sstruct.field[].id 885106505
+documenttype[].datatype[].sstruct.field[].datatype 759956026
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].fieldsets{[document]}.fields[] "mystuff"
+documenttype[].fieldsets{[document]}.fields[] "timestamp"
+documenttype[].id 378030095
+documenttype[].name "foobar"
+documenttype[].version 0
+documenttype[].headerstruct -1365874608
+documenttype[].bodystruct 0
+documenttype[].inherits[].id 8
+documenttype[].inherits[].id 97614088
+documenttype[].datatype[].id -1365874608
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "foobar.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "title"
+documenttype[].datatype[].sstruct.field[].id 567626448
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].fieldsets{[document]}.fields[] "mystuff"
+documenttype[].fieldsets{[document]}.fields[] "timestamp"
+documenttype[].fieldsets{[document]}.fields[] "title"
diff --git a/config-model/src/test/derived/imported_fields_inherited_reference/documenttypes.cfg b/config-model/src/test/derived/imported_fields_inherited_reference/documenttypes.cfg
index 7a67640adfe..c3ea1318d33 100644
--- a/config-model/src/test/derived/imported_fields_inherited_reference/documenttypes.cfg
+++ b/config-model/src/test/derived/imported_fields_inherited_reference/documenttypes.cfg
@@ -1,99 +1,110 @@
enablecompression false
usev8geopositions false
-doctype[].name "document"
-doctype[].idx 10000
-doctype[].internalid 8
-doctype[].contentstruct 10001
-doctype[].primitivetype[].idx 10002
-doctype[].primitivetype[].name "bool"
-doctype[].primitivetype[].idx 10003
-doctype[].primitivetype[].name "byte"
-doctype[].primitivetype[].idx 10004
-doctype[].primitivetype[].name "double"
-doctype[].primitivetype[].idx 10005
-doctype[].primitivetype[].name "float"
-doctype[].primitivetype[].idx 10006
-doctype[].primitivetype[].name "float16"
-doctype[].primitivetype[].idx 10007
-doctype[].primitivetype[].name "int"
-doctype[].primitivetype[].idx 10008
-doctype[].primitivetype[].name "long"
-doctype[].primitivetype[].idx 10010
-doctype[].primitivetype[].name "predicate"
-doctype[].primitivetype[].idx 10011
-doctype[].primitivetype[].name "raw"
-doctype[].primitivetype[].idx 10012
-doctype[].primitivetype[].name "string"
-doctype[].primitivetype[].idx 10014
-doctype[].primitivetype[].name "uri"
-doctype[].wsettype[].idx 10013
-doctype[].wsettype[].elementtype 10012
-doctype[].wsettype[].createifnonexistent true
-doctype[].wsettype[].removeifzero true
-doctype[].wsettype[].internalid 18
-doctype[].structtype[].idx 10001
-doctype[].structtype[].name "document.header"
-doctype[].structtype[].internalid -284186494
-doctype[].structtype[].idx 10009
-doctype[].structtype[].name "position"
-doctype[].structtype[].field[].name "x"
-doctype[].structtype[].field[].internalid 914677694
-doctype[].structtype[].field[].type 10007
-doctype[].structtype[].field[].name "y"
-doctype[].structtype[].field[].internalid 900009410
-doctype[].structtype[].field[].type 10007
-doctype[].structtype[].internalid 1381038251
-doctype[].name "child_a"
-doctype[].idx 10015
-doctype[].internalid -94853056
-doctype[].inherits[].idx 10000
-doctype[].contentstruct 10016
-doctype[].fieldsets{[document]}.fields[] "ref_from_a"
-doctype[].documentref[].idx 10017
-doctype[].documentref[].targettype 10018
-doctype[].documentref[].internalid 427398467
-doctype[].structtype[].idx 10016
-doctype[].structtype[].name "child_a.header"
-doctype[].structtype[].field[].name "ref_from_a"
-doctype[].structtype[].field[].internalid 300427062
-doctype[].structtype[].field[].type 10017
-doctype[].structtype[].internalid 867409663
-doctype[].name "child_b"
-doctype[].idx 10019
-doctype[].internalid -94852095
-doctype[].inherits[].idx 10000
-doctype[].inherits[].idx 10015
-doctype[].contentstruct 10020
-doctype[].fieldsets{[document]}.fields[] "ref_from_a"
-doctype[].fieldsets{[document]}.fields[] "ref_from_b"
-doctype[].structtype[].idx 10020
-doctype[].structtype[].name "child_b.header"
-doctype[].structtype[].field[].name "ref_from_b"
-doctype[].structtype[].field[].internalid 185778735
-doctype[].structtype[].field[].type 10017
-doctype[].structtype[].internalid 670896158
-doctype[].name "child_c"
-doctype[].idx 10021
-doctype[].internalid -94851134
-doctype[].inherits[].idx 10000
-doctype[].inherits[].idx 10019
-doctype[].contentstruct 10022
-doctype[].fieldsets{[document]}.fields[] "ref_from_a"
-doctype[].fieldsets{[document]}.fields[] "ref_from_b"
-doctype[].importedfield[].name "from_a_int_field"
-doctype[].importedfield[].name "from_b_int_field"
-doctype[].structtype[].idx 10022
-doctype[].structtype[].name "child_c.header"
-doctype[].structtype[].internalid 474382653
-doctype[].name "parent"
-doctype[].idx 10018
-doctype[].internalid 1175161836
-doctype[].inherits[].idx 10000
-doctype[].contentstruct 10023
-doctype[].fieldsets{[document]}.fields[] "int_field"
-doctype[].structtype[].idx 10023
-doctype[].structtype[].name "parent.header"
-doctype[].structtype[].field[].name "int_field"
-doctype[].structtype[].field[].internalid 2128822283
-doctype[].structtype[].field[].type 10007
-doctype[].structtype[].internalid 836075987
+documenttype[].id -94853056
+documenttype[].name "child_a"
+documenttype[].version 0
+documenttype[].headerstruct 867409663
+documenttype[].bodystruct 0
+documenttype[].inherits[].id 8
+documenttype[].datatype[].id 867409663
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "child_a.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "ref_from_a"
+documenttype[].datatype[].sstruct.field[].id 300427062
+documenttype[].datatype[].sstruct.field[].datatype 427398467
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].fieldsets{[document]}.fields[] "ref_from_a"
+documenttype[].referencetype[].id 427398467
+documenttype[].referencetype[].target_type_id 1175161836
+documenttype[].id -94852095
+documenttype[].name "child_b"
+documenttype[].version 0
+documenttype[].headerstruct 670896158
+documenttype[].bodystruct 0
+documenttype[].inherits[].id 8
+documenttype[].inherits[].id -94853056
+documenttype[].datatype[].id 670896158
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "child_b.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "ref_from_b"
+documenttype[].datatype[].sstruct.field[].id 185778735
+documenttype[].datatype[].sstruct.field[].datatype 427398467
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].fieldsets{[document]}.fields[] "ref_from_a"
+documenttype[].fieldsets{[document]}.fields[] "ref_from_b"
+documenttype[].id -94851134
+documenttype[].name "child_c"
+documenttype[].version 0
+documenttype[].headerstruct 474382653
+documenttype[].bodystruct 0
+documenttype[].inherits[].id 8
+documenttype[].inherits[].id -94852095
+documenttype[].datatype[].id 474382653
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "child_c.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].fieldsets{[document]}.fields[] "ref_from_a"
+documenttype[].fieldsets{[document]}.fields[] "ref_from_b"
+documenttype[].importedfield[].name "from_a_int_field"
+documenttype[].importedfield[].name "from_b_int_field"
+documenttype[].id 1175161836
+documenttype[].name "parent"
+documenttype[].version 0
+documenttype[].headerstruct 836075987
+documenttype[].bodystruct 0
+documenttype[].inherits[].id 8
+documenttype[].datatype[].id 836075987
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "parent.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "int_field"
+documenttype[].datatype[].sstruct.field[].id 2128822283
+documenttype[].datatype[].sstruct.field[].datatype 0
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].fieldsets{[document]}.fields[] "int_field"
diff --git a/config-model/src/test/derived/inheritfromparent/documenttypes.cfg b/config-model/src/test/derived/inheritfromparent/documenttypes.cfg
index e8fd97671ff..da65510ee5a 100644
--- a/config-model/src/test/derived/inheritfromparent/documenttypes.cfg
+++ b/config-model/src/test/derived/inheritfromparent/documenttypes.cfg
@@ -1,80 +1,79 @@
enablecompression false
usev8geopositions false
-doctype[].name "document"
-doctype[].idx 10000
-doctype[].internalid 8
-doctype[].contentstruct 10001
-doctype[].primitivetype[].idx 10002
-doctype[].primitivetype[].name "bool"
-doctype[].primitivetype[].idx 10003
-doctype[].primitivetype[].name "byte"
-doctype[].primitivetype[].idx 10004
-doctype[].primitivetype[].name "double"
-doctype[].primitivetype[].idx 10005
-doctype[].primitivetype[].name "float"
-doctype[].primitivetype[].idx 10006
-doctype[].primitivetype[].name "float16"
-doctype[].primitivetype[].idx 10007
-doctype[].primitivetype[].name "int"
-doctype[].primitivetype[].idx 10008
-doctype[].primitivetype[].name "long"
-doctype[].primitivetype[].idx 10010
-doctype[].primitivetype[].name "predicate"
-doctype[].primitivetype[].idx 10011
-doctype[].primitivetype[].name "raw"
-doctype[].primitivetype[].idx 10012
-doctype[].primitivetype[].name "string"
-doctype[].primitivetype[].idx 10014
-doctype[].primitivetype[].name "uri"
-doctype[].wsettype[].idx 10013
-doctype[].wsettype[].elementtype 10012
-doctype[].wsettype[].createifnonexistent true
-doctype[].wsettype[].removeifzero true
-doctype[].wsettype[].internalid 18
-doctype[].structtype[].idx 10001
-doctype[].structtype[].name "document.header"
-doctype[].structtype[].internalid -284186494
-doctype[].structtype[].idx 10009
-doctype[].structtype[].name "position"
-doctype[].structtype[].field[].name "x"
-doctype[].structtype[].field[].internalid 914677694
-doctype[].structtype[].field[].type 10007
-doctype[].structtype[].field[].name "y"
-doctype[].structtype[].field[].internalid 900009410
-doctype[].structtype[].field[].type 10007
-doctype[].structtype[].internalid 1381038251
-doctype[].name "parent"
-doctype[].idx 10015
-doctype[].internalid 1175161836
-doctype[].inherits[].idx 10000
-doctype[].contentstruct 10016
-doctype[].fieldsets{[document]}.fields[] "weight_src"
-doctype[].structtype[].idx 10016
-doctype[].structtype[].name "parent.header"
-doctype[].structtype[].field[].name "weight_src"
-doctype[].structtype[].field[].internalid 1225660233
-doctype[].structtype[].field[].type 10005
-doctype[].structtype[].field[].name "weight"
-doctype[].structtype[].field[].internalid 1001392207
-doctype[].structtype[].field[].type 10005
-doctype[].structtype[].internalid 836075987
-doctype[].structtype[].idx 10017
-doctype[].structtype[].name "parent_struct"
-doctype[].structtype[].field[].name "parent_field"
-doctype[].structtype[].field[].internalid 933533022
-doctype[].structtype[].field[].type 10012
-doctype[].structtype[].internalid 1091188812
-doctype[].name "child"
-doctype[].idx 10018
-doctype[].internalid 746267614
-doctype[].inherits[].idx 10000
-doctype[].inherits[].idx 10015
-doctype[].contentstruct 10019
-doctype[].fieldsets{[document]}.fields[] "child_field"
-doctype[].fieldsets{[document]}.fields[] "weight_src"
-doctype[].structtype[].idx 10019
-doctype[].structtype[].name "child.header"
-doctype[].structtype[].field[].name "child_field"
-doctype[].structtype[].field[].internalid 1814271363
-doctype[].structtype[].field[].type 10017
-doctype[].structtype[].internalid 81425825
+documenttype[].id 1175161836
+documenttype[].name "parent"
+documenttype[].version 0
+documenttype[].headerstruct 836075987
+documenttype[].bodystruct 0
+documenttype[].inherits[].id 8
+documenttype[].datatype[].id 836075987
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "parent.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "weight_src"
+documenttype[].datatype[].sstruct.field[].id 1225660233
+documenttype[].datatype[].sstruct.field[].datatype 1
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "weight"
+documenttype[].datatype[].sstruct.field[].id 1001392207
+documenttype[].datatype[].sstruct.field[].datatype 1
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].id 1091188812
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "parent_struct"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "parent_field"
+documenttype[].datatype[].sstruct.field[].id 933533022
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].fieldsets{[document]}.fields[] "weight_src"
+documenttype[].id 746267614
+documenttype[].name "child"
+documenttype[].version 0
+documenttype[].headerstruct 81425825
+documenttype[].bodystruct 0
+documenttype[].inherits[].id 8
+documenttype[].inherits[].id 1175161836
+documenttype[].datatype[].id 81425825
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "child.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "child_field"
+documenttype[].datatype[].sstruct.field[].id 1814271363
+documenttype[].datatype[].sstruct.field[].datatype 1091188812
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].fieldsets{[document]}.fields[] "child_field"
+documenttype[].fieldsets{[document]}.fields[] "weight_src"
diff --git a/config-model/src/test/derived/multi_struct/documenttypes.cfg b/config-model/src/test/derived/multi_struct/documenttypes.cfg
index 9ce19079177..c358b2854ee 100644
--- a/config-model/src/test/derived/multi_struct/documenttypes.cfg
+++ b/config-model/src/test/derived/multi_struct/documenttypes.cfg
@@ -1,128 +1,194 @@
enablecompression false
usev8geopositions false
-doctype[].name "document"
-doctype[].idx 10000
-doctype[].internalid 8
-doctype[].contentstruct 10001
-doctype[].primitivetype[].idx 10002
-doctype[].primitivetype[].name "bool"
-doctype[].primitivetype[].idx 10003
-doctype[].primitivetype[].name "byte"
-doctype[].primitivetype[].idx 10004
-doctype[].primitivetype[].name "double"
-doctype[].primitivetype[].idx 10005
-doctype[].primitivetype[].name "float"
-doctype[].primitivetype[].idx 10006
-doctype[].primitivetype[].name "float16"
-doctype[].primitivetype[].idx 10007
-doctype[].primitivetype[].name "int"
-doctype[].primitivetype[].idx 10008
-doctype[].primitivetype[].name "long"
-doctype[].primitivetype[].idx 10010
-doctype[].primitivetype[].name "predicate"
-doctype[].primitivetype[].idx 10011
-doctype[].primitivetype[].name "raw"
-doctype[].primitivetype[].idx 10012
-doctype[].primitivetype[].name "string"
-doctype[].primitivetype[].idx 10014
-doctype[].primitivetype[].name "uri"
-doctype[].wsettype[].idx 10013
-doctype[].wsettype[].elementtype 10012
-doctype[].wsettype[].createifnonexistent true
-doctype[].wsettype[].removeifzero true
-doctype[].wsettype[].internalid 18
-doctype[].structtype[].idx 10001
-doctype[].structtype[].name "document.header"
-doctype[].structtype[].internalid -284186494
-doctype[].structtype[].idx 10009
-doctype[].structtype[].name "position"
-doctype[].structtype[].field[].name "x"
-doctype[].structtype[].field[].internalid 914677694
-doctype[].structtype[].field[].type 10007
-doctype[].structtype[].field[].name "y"
-doctype[].structtype[].field[].internalid 900009410
-doctype[].structtype[].field[].type 10007
-doctype[].structtype[].internalid 1381038251
-doctype[].name "ad"
-doctype[].idx 10015
-doctype[].internalid 2987301
-doctype[].inherits[].idx 10000
-doctype[].contentstruct 10016
-doctype[].fieldsets{[document]}.fields[] "e"
-doctype[].structtype[].idx 10016
-doctype[].structtype[].name "ad.header"
-doctype[].structtype[].field[].name "e"
-doctype[].structtype[].field[].internalid 970377814
-doctype[].structtype[].field[].type 10012
-doctype[].structtype[].internalid 959075962
-doctype[].name "product"
-doctype[].idx 10017
-doctype[].internalid -1051831567
-doctype[].inherits[].idx 10000
-doctype[].contentstruct 10018
-doctype[].fieldsets{[document]}.fields[] "more_stuff"
-doctype[].maptype[].idx 10019
-doctype[].maptype[].keytype 10012
-doctype[].maptype[].valuetype 10020
-doctype[].maptype[].internalid -420192670
-doctype[].structtype[].idx 10020
-doctype[].structtype[].name "mystruct"
-doctype[].structtype[].field[].name "zero"
-doctype[].structtype[].field[].internalid 2128579715
-doctype[].structtype[].field[].type 10012
-doctype[].structtype[].field[].name "one"
-doctype[].structtype[].field[].internalid 997119011
-doctype[].structtype[].field[].type 10012
-doctype[].structtype[].field[].name "two"
-doctype[].structtype[].field[].internalid 2054688289
-doctype[].structtype[].field[].type 10012
-doctype[].structtype[].field[].name "three"
-doctype[].structtype[].field[].internalid 814368361
-doctype[].structtype[].field[].type 10012
-doctype[].structtype[].internalid -2092985853
-doctype[].structtype[].idx 10018
-doctype[].structtype[].name "product.header"
-doctype[].structtype[].field[].name "more_stuff"
-doctype[].structtype[].field[].internalid 278342855
-doctype[].structtype[].field[].type 10019
-doctype[].structtype[].internalid -107300050
-doctype[].name "shop"
-doctype[].idx 10021
-doctype[].internalid -903152840
-doctype[].inherits[].idx 10000
-doctype[].contentstruct 10022
-doctype[].fieldsets{[document]}.fields[] "some_stuff"
-doctype[].maptype[].idx 10023
-doctype[].maptype[].keytype 10012
-doctype[].maptype[].valuetype 10024
-doctype[].maptype[].internalid -420192670
-doctype[].structtype[].idx 10024
-doctype[].structtype[].name "mystruct"
-doctype[].structtype[].field[].name "one"
-doctype[].structtype[].field[].internalid 997119011
-doctype[].structtype[].field[].type 10012
-doctype[].structtype[].field[].name "two"
-doctype[].structtype[].field[].internalid 2054688289
-doctype[].structtype[].field[].type 10012
-doctype[].structtype[].field[].name "three"
-doctype[].structtype[].field[].internalid 814368361
-doctype[].structtype[].field[].type 10012
-doctype[].structtype[].internalid -2092985853
-doctype[].structtype[].idx 10022
-doctype[].structtype[].name "shop.header"
-doctype[].structtype[].field[].name "some_stuff"
-doctype[].structtype[].field[].internalid 1543312381
-doctype[].structtype[].field[].type 10023
-doctype[].structtype[].internalid 371492103
-doctype[].name "user"
-doctype[].idx 10025
-doctype[].internalid -836031795
-doctype[].inherits[].idx 10000
-doctype[].contentstruct 10026
-doctype[].fieldsets{[document]}.fields[] "a"
-doctype[].structtype[].idx 10026
-doctype[].structtype[].name "user.header"
-doctype[].structtype[].field[].name "a"
-doctype[].structtype[].field[].internalid 493339625
-doctype[].structtype[].field[].type 10012
-doctype[].structtype[].internalid 1601213394
+documenttype[].id 2987301
+documenttype[].name "ad"
+documenttype[].version 0
+documenttype[].headerstruct 959075962
+documenttype[].bodystruct 0
+documenttype[].inherits[].id 8
+documenttype[].datatype[].id 959075962
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "ad.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "e"
+documenttype[].datatype[].sstruct.field[].id 970377814
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].fieldsets{[document]}.fields[] "e"
+documenttype[].id -1051831567
+documenttype[].name "product"
+documenttype[].version 0
+documenttype[].headerstruct -107300050
+documenttype[].bodystruct 0
+documenttype[].inherits[].id 8
+documenttype[].datatype[].id -2092985853
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "mystruct"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "zero"
+documenttype[].datatype[].sstruct.field[].id 2128579715
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "one"
+documenttype[].datatype[].sstruct.field[].id 997119011
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "two"
+documenttype[].datatype[].sstruct.field[].id 2054688289
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "three"
+documenttype[].datatype[].sstruct.field[].id 814368361
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].id -420192670
+documenttype[].datatype[].type MAP
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 2
+documenttype[].datatype[].map.value.id -2092985853
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name ""
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].id -107300050
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "product.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "more_stuff"
+documenttype[].datatype[].sstruct.field[].id 278342855
+documenttype[].datatype[].sstruct.field[].datatype -420192670
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].fieldsets{[document]}.fields[] "more_stuff"
+documenttype[].id -903152840
+documenttype[].name "shop"
+documenttype[].version 0
+documenttype[].headerstruct 371492103
+documenttype[].bodystruct 0
+documenttype[].inherits[].id 8
+documenttype[].datatype[].id -2092985853
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "mystruct"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "one"
+documenttype[].datatype[].sstruct.field[].id 997119011
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "two"
+documenttype[].datatype[].sstruct.field[].id 2054688289
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "three"
+documenttype[].datatype[].sstruct.field[].id 814368361
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].id -420192670
+documenttype[].datatype[].type MAP
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 2
+documenttype[].datatype[].map.value.id -2092985853
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name ""
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].id 371492103
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "shop.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "some_stuff"
+documenttype[].datatype[].sstruct.field[].id 1543312381
+documenttype[].datatype[].sstruct.field[].datatype -420192670
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].fieldsets{[document]}.fields[] "some_stuff"
+documenttype[].id -836031795
+documenttype[].name "user"
+documenttype[].version 0
+documenttype[].headerstruct 1601213394
+documenttype[].bodystruct 0
+documenttype[].inherits[].id 8
+documenttype[].datatype[].id 1601213394
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "user.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "a"
+documenttype[].datatype[].sstruct.field[].id 493339625
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].fieldsets{[document]}.fields[] "a"
diff --git a/config-model/src/test/derived/structinheritance/documenttypes.cfg b/config-model/src/test/derived/structinheritance/documenttypes.cfg
index 8b343665289..cf4bc89866f 100644
--- a/config-model/src/test/derived/structinheritance/documenttypes.cfg
+++ b/config-model/src/test/derived/structinheritance/documenttypes.cfg
@@ -1,81 +1,102 @@
enablecompression false
usev8geopositions false
-doctype[].name "document"
-doctype[].idx 10000
-doctype[].internalid 8
-doctype[].contentstruct 10001
-doctype[].primitivetype[].idx 10002
-doctype[].primitivetype[].name "bool"
-doctype[].primitivetype[].idx 10003
-doctype[].primitivetype[].name "byte"
-doctype[].primitivetype[].idx 10004
-doctype[].primitivetype[].name "double"
-doctype[].primitivetype[].idx 10005
-doctype[].primitivetype[].name "float"
-doctype[].primitivetype[].idx 10006
-doctype[].primitivetype[].name "float16"
-doctype[].primitivetype[].idx 10007
-doctype[].primitivetype[].name "int"
-doctype[].primitivetype[].idx 10008
-doctype[].primitivetype[].name "long"
-doctype[].primitivetype[].idx 10010
-doctype[].primitivetype[].name "predicate"
-doctype[].primitivetype[].idx 10011
-doctype[].primitivetype[].name "raw"
-doctype[].primitivetype[].idx 10012
-doctype[].primitivetype[].name "string"
-doctype[].primitivetype[].idx 10014
-doctype[].primitivetype[].name "uri"
-doctype[].wsettype[].idx 10013
-doctype[].wsettype[].elementtype 10012
-doctype[].wsettype[].createifnonexistent true
-doctype[].wsettype[].removeifzero true
-doctype[].wsettype[].internalid 18
-doctype[].structtype[].idx 10001
-doctype[].structtype[].name "document.header"
-doctype[].structtype[].internalid -284186494
-doctype[].structtype[].idx 10009
-doctype[].structtype[].name "position"
-doctype[].structtype[].field[].name "x"
-doctype[].structtype[].field[].internalid 914677694
-doctype[].structtype[].field[].type 10007
-doctype[].structtype[].field[].name "y"
-doctype[].structtype[].field[].internalid 900009410
-doctype[].structtype[].field[].type 10007
-doctype[].structtype[].internalid 1381038251
-doctype[].name "simple"
-doctype[].idx 10015
-doctype[].internalid 485659380
-doctype[].inherits[].idx 10000
-doctype[].contentstruct 10016
-doctype[].fieldsets{[document]}.fields[] "f1"
-doctype[].fieldsets{[document]}.fields[] "f2"
-doctype[].structtype[].idx 10018
-doctype[].structtype[].name "base"
-doctype[].structtype[].field[].name "name"
-doctype[].structtype[].field[].internalid 1160796772
-doctype[].structtype[].field[].type 10012
-doctype[].structtype[].internalid -1396204461
-doctype[].structtype[].idx 10017
-doctype[].structtype[].name "child"
-doctype[].structtype[].inherits[].type 10018
-doctype[].structtype[].field[].name "age"
-doctype[].structtype[].field[].internalid 1862473705
-doctype[].structtype[].field[].type 10007
-doctype[].structtype[].internalid 746267614
-doctype[].structtype[].idx 10019
-doctype[].structtype[].name "grandchild"
-doctype[].structtype[].inherits[].type 10017
-doctype[].structtype[].field[].name "toy"
-doctype[].structtype[].field[].internalid 536645790
-doctype[].structtype[].field[].type 10012
-doctype[].structtype[].internalid 1811766610
-doctype[].structtype[].idx 10016
-doctype[].structtype[].name "simple.header"
-doctype[].structtype[].field[].name "f1"
-doctype[].structtype[].field[].internalid 750623154
-doctype[].structtype[].field[].type 10017
-doctype[].structtype[].field[].name "f2"
-doctype[].structtype[].field[].internalid 1523850983
-doctype[].structtype[].field[].type 10019
-doctype[].structtype[].internalid -2142109237
+documenttype[].id 485659380
+documenttype[].name "simple"
+documenttype[].version 0
+documenttype[].headerstruct -2142109237
+documenttype[].bodystruct 0
+documenttype[].inherits[].id 8
+documenttype[].datatype[].id -1396204461
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "base"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "name"
+documenttype[].datatype[].sstruct.field[].id 1160796772
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].id 746267614
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "child"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "age"
+documenttype[].datatype[].sstruct.field[].id 1862473705
+documenttype[].datatype[].sstruct.field[].datatype 0
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "name"
+documenttype[].datatype[].sstruct.field[].id 1160796772
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].id 1811766610
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "grandchild"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "toy"
+documenttype[].datatype[].sstruct.field[].id 536645790
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "age"
+documenttype[].datatype[].sstruct.field[].id 1862473705
+documenttype[].datatype[].sstruct.field[].datatype 0
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "name"
+documenttype[].datatype[].sstruct.field[].id 1160796772
+documenttype[].datatype[].sstruct.field[].datatype 2
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].id -2142109237
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "simple.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "f1"
+documenttype[].datatype[].sstruct.field[].id 750623154
+documenttype[].datatype[].sstruct.field[].datatype 746267614
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].datatype[].sstruct.field[].name "f2"
+documenttype[].datatype[].sstruct.field[].id 1523850983
+documenttype[].datatype[].sstruct.field[].datatype 1811766610
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].fieldsets{[document]}.fields[] "f1"
+documenttype[].fieldsets{[document]}.fields[] "f2"
diff --git a/config-model/src/test/derived/tensor/documenttypes.cfg b/config-model/src/test/derived/tensor/documenttypes.cfg
index 9ee6a82245f..879b455a711 100644
--- a/config-model/src/test/derived/tensor/documenttypes.cfg
+++ b/config-model/src/test/derived/tensor/documenttypes.cfg
@@ -1,87 +1,53 @@
enablecompression false
usev8geopositions false
-doctype[].name "document"
-doctype[].idx 10000
-doctype[].internalid 8
-doctype[].contentstruct 10001
-doctype[].primitivetype[].idx 10002
-doctype[].primitivetype[].name "bool"
-doctype[].primitivetype[].idx 10003
-doctype[].primitivetype[].name "byte"
-doctype[].primitivetype[].idx 10004
-doctype[].primitivetype[].name "double"
-doctype[].primitivetype[].idx 10005
-doctype[].primitivetype[].name "float"
-doctype[].primitivetype[].idx 10006
-doctype[].primitivetype[].name "float16"
-doctype[].primitivetype[].idx 10007
-doctype[].primitivetype[].name "int"
-doctype[].primitivetype[].idx 10008
-doctype[].primitivetype[].name "long"
-doctype[].primitivetype[].idx 10010
-doctype[].primitivetype[].name "predicate"
-doctype[].primitivetype[].idx 10011
-doctype[].primitivetype[].name "raw"
-doctype[].primitivetype[].idx 10012
-doctype[].primitivetype[].name "string"
-doctype[].primitivetype[].idx 10014
-doctype[].primitivetype[].name "uri"
-doctype[].wsettype[].idx 10013
-doctype[].wsettype[].elementtype 10012
-doctype[].wsettype[].createifnonexistent true
-doctype[].wsettype[].removeifzero true
-doctype[].wsettype[].internalid 18
-doctype[].structtype[].idx 10001
-doctype[].structtype[].name "document.header"
-doctype[].structtype[].internalid -284186494
-doctype[].structtype[].idx 10009
-doctype[].structtype[].name "position"
-doctype[].structtype[].field[].name "x"
-doctype[].structtype[].field[].internalid 914677694
-doctype[].structtype[].field[].type 10007
-doctype[].structtype[].field[].name "y"
-doctype[].structtype[].field[].internalid 900009410
-doctype[].structtype[].field[].type 10007
-doctype[].structtype[].internalid 1381038251
-doctype[].name "tensor"
-doctype[].idx 10015
-doctype[].internalid -1290043429
-doctype[].inherits[].idx 10000
-doctype[].contentstruct 10016
-doctype[].fieldsets{[document]}.fields[] "f1"
-doctype[].fieldsets{[document]}.fields[] "f2"
-doctype[].fieldsets{[document]}.fields[] "f3"
-doctype[].fieldsets{[document]}.fields[] "f4"
-doctype[].fieldsets{[document]}.fields[] "f5"
-doctype[].fieldsets{[document]}.fields[] "f6"
-doctype[].tensortype[].idx 10017
-doctype[].tensortype[].detailedtype "tensor(x[3])"
-doctype[].tensortype[].idx 10018
-doctype[].tensortype[].detailedtype "tensor<float>(x[2],y[1])"
-doctype[].tensortype[].idx 10019
-doctype[].tensortype[].detailedtype "tensor(x{})"
-doctype[].tensortype[].idx 10020
-doctype[].tensortype[].detailedtype "tensor(x[10],y[10])"
-doctype[].tensortype[].idx 10021
-doctype[].tensortype[].detailedtype "tensor<float>(x[10])"
-doctype[].structtype[].idx 10016
-doctype[].structtype[].name "tensor.header"
-doctype[].structtype[].field[].name "f1"
-doctype[].structtype[].field[].internalid 26661415
-doctype[].structtype[].field[].type 10017
-doctype[].structtype[].field[].name "f2"
-doctype[].structtype[].field[].internalid 2080644671
-doctype[].structtype[].field[].type 10018
-doctype[].structtype[].field[].name "f3"
-doctype[].structtype[].field[].internalid 1295091863
-doctype[].structtype[].field[].type 10019
-doctype[].structtype[].field[].name "f4"
-doctype[].structtype[].field[].internalid 1224191509
-doctype[].structtype[].field[].type 10020
-doctype[].structtype[].field[].name "f5"
-doctype[].structtype[].field[].internalid 329055840
-doctype[].structtype[].field[].type 10021
-doctype[].structtype[].field[].name "f6"
-doctype[].structtype[].field[].internalid 596352344
-doctype[].structtype[].field[].type 10005
-doctype[].structtype[].internalid 2125927172
+documenttype[].id -1290043429
+documenttype[].name "tensor"
+documenttype[].version 0
+documenttype[].headerstruct 2125927172
+documenttype[].bodystruct 0
+documenttype[].inherits[].id 8
+documenttype[].datatype[].id 2125927172
+documenttype[].datatype[].type STRUCT
+documenttype[].datatype[].array.element.id 0
+documenttype[].datatype[].map.key.id 0
+documenttype[].datatype[].map.value.id 0
+documenttype[].datatype[].wset.key.id 0
+documenttype[].datatype[].wset.createifnonexistent false
+documenttype[].datatype[].wset.removeifzero false
+documenttype[].datatype[].annotationref.annotation.id 0
+documenttype[].datatype[].sstruct.name "tensor.header"
+documenttype[].datatype[].sstruct.version 0
+documenttype[].datatype[].sstruct.compression.type NONE
+documenttype[].datatype[].sstruct.compression.level 0
+documenttype[].datatype[].sstruct.compression.threshold 95
+documenttype[].datatype[].sstruct.compression.minsize 200
+documenttype[].datatype[].sstruct.field[].name "f1"
+documenttype[].datatype[].sstruct.field[].id 26661415
+documenttype[].datatype[].sstruct.field[].datatype 21
+documenttype[].datatype[].sstruct.field[].detailedtype "tensor(x[3])"
+documenttype[].datatype[].sstruct.field[].name "f2"
+documenttype[].datatype[].sstruct.field[].id 2080644671
+documenttype[].datatype[].sstruct.field[].datatype 21
+documenttype[].datatype[].sstruct.field[].detailedtype "tensor<float>(x[2],y[1])"
+documenttype[].datatype[].sstruct.field[].name "f3"
+documenttype[].datatype[].sstruct.field[].id 1295091863
+documenttype[].datatype[].sstruct.field[].datatype 21
+documenttype[].datatype[].sstruct.field[].detailedtype "tensor(x{})"
+documenttype[].datatype[].sstruct.field[].name "f4"
+documenttype[].datatype[].sstruct.field[].id 1224191509
+documenttype[].datatype[].sstruct.field[].datatype 21
+documenttype[].datatype[].sstruct.field[].detailedtype "tensor(x[10],y[10])"
+documenttype[].datatype[].sstruct.field[].name "f5"
+documenttype[].datatype[].sstruct.field[].id 329055840
+documenttype[].datatype[].sstruct.field[].datatype 21
+documenttype[].datatype[].sstruct.field[].detailedtype "tensor<float>(x[10])"
+documenttype[].datatype[].sstruct.field[].name "f6"
+documenttype[].datatype[].sstruct.field[].id 596352344
+documenttype[].datatype[].sstruct.field[].datatype 1
+documenttype[].datatype[].sstruct.field[].detailedtype ""
+documenttype[].fieldsets{[document]}.fields[] "f1"
+documenttype[].fieldsets{[document]}.fields[] "f2"
+documenttype[].fieldsets{[document]}.fields[] "f3"
+documenttype[].fieldsets{[document]}.fields[] "f4"
+documenttype[].fieldsets{[document]}.fields[] "f5"
+documenttype[].fieldsets{[document]}.fields[] "f6"