protected virtual void WriteJsonSchema([NotNull] JsonTextWriter output, [NotNull] IProject project, [NotNull] IDatabase database)
        {
            var pairs     = GetTemplates(project, database);
            var languages = database.Languages.ToArray();

            output.WriteStartObject();

            output.WritePropertyString("$schema", "http://json-schema.org/draft-04/schema#");
            output.WritePropertyString("type", "object");

            output.WritePropertyString("additionalProperties", false);

            output.WriteStartObject("properties");
            output.WriteObjectString("$schema", "type", "string");

            foreach (var pair in pairs.OrderBy(t => t.Key))
            {
                output.WriteStartObject(pair.Key);
                output.WritePropertyString("$ref", "#/definitions/" + pair.Key);
                output.WriteEndObject();
            }

            output.WriteStartObject("Template");
            output.WritePropertyString("$ref", "#/definitions/Template");
            output.WriteEndObject();

            output.WriteEndObject();

            output.WriteStartObject("definitions");

            foreach (var pair1 in pairs.OrderBy(t => t.Key))
            {
                WriteJsonTemplate(output, languages, pairs, pair1);
            }

            WriteJsonTemplate(output);

            output.WriteEndObject();

            output.WriteEndObject();
        }