private IEnumerable <SemanticSchemaFieldData> GetSemanticSchemaFields(
            IEnumerable <ItemFieldDefinition> schemaFields,
            SemanticTypeData[] semanticTypes,
            Schema schema,
            string contextPath
            )
        {
            List <SemanticSchemaFieldData> semanticSchemaFields = new List <SemanticSchemaFieldData>();

            if (schemaFields == null)
            {
                return(semanticSchemaFields);
            }
            foreach (ItemFieldDefinition schemaField in schemaFields)
            {
                EmbeddedSchemaFieldDefinition embeddedSchemaField = schemaField as EmbeddedSchemaFieldDefinition;
                SemanticSchemaFieldData       semanticSchemaField = (embeddedSchemaField == null) ? new SemanticSchemaFieldData() : new EmbeddedSemanticSchemaFieldData();
                semanticSchemaField.Name         = schemaField.Name;
                semanticSchemaField.Path         = $"{contextPath}/{schemaField.Name}";
                semanticSchemaField.IsMultiValue = schemaField.MaxOccurs != 1;
                semanticSchemaField.Semantics    = GetSemanticProperties(schemaField, semanticTypes, schema).ToArray();
                semanticSchemaField.FieldType    = GetFieldType(schemaField);
                if (embeddedSchemaField == null)
                {
                    semanticSchemaField.Fields = new SemanticSchemaFieldData[0];
                }
                else
                {
                    Schema embeddedSchema = embeddedSchemaField.EmbeddedSchema;
                    EmbeddedSemanticSchemaFieldData fieldData = (EmbeddedSemanticSchemaFieldData)semanticSchemaField;
                    fieldData.Id               = embeddedSchema.Id.ItemId;
                    fieldData.Title            = embeddedSchema.Title;
                    fieldData.RootElementName  = embeddedSchema.RootElementName;
                    semanticSchemaField.Fields = GetSemanticSchemaFields(
                        embeddedSchemaField.EmbeddedFields,
                        semanticTypes.Concat(GetSemanticTypes(embeddedSchema)).ToArray(),
                        embeddedSchema,
                        semanticSchemaField.Path
                        ).ToArray();
                }

                semanticSchemaFields.Add(semanticSchemaField);
            }

            return(semanticSchemaFields);
        }
        private IEnumerable <SemanticSchemaFieldData> GetSemanticSchemaFields(
            IEnumerable <ItemFieldDefinition> schemaFields,
            SemanticTypeData[] semanticTypes,
            Schema schema,
            string contextPath
            )
        {
            List <SemanticSchemaFieldData> semanticSchemaFields = new List <SemanticSchemaFieldData>();

            if (schemaFields == null)
            {
                return(semanticSchemaFields);
            }

            foreach (ItemFieldDefinition schemaField in schemaFields)
            {
                SemanticSchemaFieldData semanticSchemaField = new SemanticSchemaFieldData
                {
                    Name         = schemaField.Name,
                    Path         = string.Format("{0}/{1}", contextPath, schemaField.Name),
                    IsMultiValue = schemaField.MaxOccurs != 1,
                    Semantics    = GetSemanticProperties(schemaField, semanticTypes, schema).ToArray()
                };

                EmbeddedSchemaFieldDefinition embeddedSchemaField = schemaField as EmbeddedSchemaFieldDefinition;
                if (embeddedSchemaField == null)
                {
                    semanticSchemaField.Fields = new SemanticSchemaFieldData[0];
                }
                else
                {
                    Schema embeddedSchema = embeddedSchemaField.EmbeddedSchema;
                    semanticSchemaField.Fields = GetSemanticSchemaFields(
                        embeddedSchemaField.EmbeddedFields,
                        semanticTypes.Concat(GetSemanticTypes(embeddedSchema)).ToArray(),
                        embeddedSchema,
                        semanticSchemaField.Path
                        ).ToArray();
                }

                semanticSchemaFields.Add(semanticSchemaField);
            }

            return(semanticSchemaFields);
        }
        private IEnumerable<SemanticSchemaFieldData> GetSemanticSchemaFields(
            IEnumerable<ItemFieldDefinition> schemaFields, 
            SemanticTypeData[] semanticTypes,
            Schema schema, 
            string contextPath
            )
        {
            List<SemanticSchemaFieldData> semanticSchemaFields = new List<SemanticSchemaFieldData>();
            if (schemaFields == null)
            {
                return semanticSchemaFields;
            }

            foreach (ItemFieldDefinition schemaField in schemaFields)
            {
                SemanticSchemaFieldData semanticSchemaField = new SemanticSchemaFieldData
                {
                    Name = schemaField.Name,
                    Path = string.Format("{0}/{1}", contextPath, schemaField.Name),
                    IsMultiValue = schemaField.MaxOccurs != 1,
                    Semantics = GetSemanticProperties(schemaField, semanticTypes, schema).ToArray()
                };

                EmbeddedSchemaFieldDefinition embeddedSchemaField = schemaField as EmbeddedSchemaFieldDefinition;
                if (embeddedSchemaField == null)
                {
                    semanticSchemaField.Fields = new SemanticSchemaFieldData[0];
                }
                else
                {
                    Schema embeddedSchema = embeddedSchemaField.EmbeddedSchema;
                    semanticSchemaField.Fields = GetSemanticSchemaFields(
                        embeddedSchemaField.EmbeddedFields,
                        semanticTypes.Concat(GetSemanticTypes(embeddedSchema)).ToArray(),
                        embeddedSchema,
                        semanticSchemaField.Path
                        ).ToArray();
                }

                semanticSchemaFields.Add(semanticSchemaField);
            }

            return semanticSchemaFields;
        }