summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-04-04 14:39:53 +0200
committerGitHub <noreply@github.com>2022-04-04 14:39:53 +0200
commit5f17e5e87ca2d0aaebad54b2f056eac6f6b8d852 (patch)
treedd5a1d878f1778d1a5387211dabc963c59b11b9b
parent65fa27a4b4412169633ca7229df1121cec3f8803 (diff)
parentd69ab920b3d26ee1f06455c8298f453ee8910adc (diff)
Merge pull request #21964 from vespa-engine/arnej/use-new-doctypes-config
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, 1184 insertions, 1687 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 630e9f0c097..ba41fa0f5b3 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,29 +27,16 @@ 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()) {
- produceInheritOrder(documentType, builder, produced);
+ docTypeInheritOrder(documentType, builder, produced, indexMap);
}
+ 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);
@@ -57,203 +44,6 @@ 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 0501aa58784..7ea2fa42a2a 100644
--- a/config-model/src/test/configmodel/types/documenttypes.cfg
+++ b/config-model/src/test/configmodel/types/documenttypes.cfg
@@ -1,577 +1,322 @@
enablecompression false
usev8geopositions false
-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"
+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
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 61c92eee8d1..15430101553 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,49 +1,65 @@
enablecompression false
usev8geopositions false
-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"
+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
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 d992839d5d9..1b5817e6f39 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,97 +1,98 @@
enablecompression false
usev8geopositions false
-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"
+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
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 68ed924615f..1c5d4d41819 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,79 +1,83 @@
enablecompression false
usev8geopositions false
-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
+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
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 6415e62cd7e..2f178c55bfd 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,56 +1,72 @@
enablecompression false
usev8geopositions false
-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
+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
diff --git a/config-model/src/test/derived/duplicate_struct/documenttypes.cfg b/config-model/src/test/derived/duplicate_struct/documenttypes.cfg
index 1b897214d73..867e1e70e7a 100644
--- a/config-model/src/test/derived/duplicate_struct/documenttypes.cfg
+++ b/config-model/src/test/derived/duplicate_struct/documenttypes.cfg
@@ -1,100 +1,88 @@
enablecompression false
usev8geopositions false
-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"
+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
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 c3ea1318d33..7a67640adfe 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,110 +1,99 @@
enablecompression false
usev8geopositions false
-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"
+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
diff --git a/config-model/src/test/derived/inheritfromparent/documenttypes.cfg b/config-model/src/test/derived/inheritfromparent/documenttypes.cfg
index da65510ee5a..e8fd97671ff 100644
--- a/config-model/src/test/derived/inheritfromparent/documenttypes.cfg
+++ b/config-model/src/test/derived/inheritfromparent/documenttypes.cfg
@@ -1,79 +1,80 @@
enablecompression false
usev8geopositions false
-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"
+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
diff --git a/config-model/src/test/derived/multi_struct/documenttypes.cfg b/config-model/src/test/derived/multi_struct/documenttypes.cfg
index c358b2854ee..9ce19079177 100644
--- a/config-model/src/test/derived/multi_struct/documenttypes.cfg
+++ b/config-model/src/test/derived/multi_struct/documenttypes.cfg
@@ -1,194 +1,128 @@
enablecompression false
usev8geopositions false
-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"
+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
diff --git a/config-model/src/test/derived/structinheritance/documenttypes.cfg b/config-model/src/test/derived/structinheritance/documenttypes.cfg
index cf4bc89866f..8b343665289 100644
--- a/config-model/src/test/derived/structinheritance/documenttypes.cfg
+++ b/config-model/src/test/derived/structinheritance/documenttypes.cfg
@@ -1,102 +1,81 @@
enablecompression false
usev8geopositions false
-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"
+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
diff --git a/config-model/src/test/derived/tensor/documenttypes.cfg b/config-model/src/test/derived/tensor/documenttypes.cfg
index 879b455a711..9ee6a82245f 100644
--- a/config-model/src/test/derived/tensor/documenttypes.cfg
+++ b/config-model/src/test/derived/tensor/documenttypes.cfg
@@ -1,53 +1,87 @@
enablecompression false
usev8geopositions false
-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"
+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