What's the relation between schema and form in angular-schema-form?

To try to address the basic question:

What is the relation between schema and form?

To put things into simple terms, perhaps it is easiest to think of it like this. To create the form, you have three pieces of JSON:

  • The JSON containing the actual data being presented through your form. This is the model.

  • The JSON schema. This describes the structure of the model. To give an extremely simple example of the relationship between model and schema, imagine your actual data (your model) describes a person in terms of their sex and age, such as {sex: female, age: 32}. The role of the schema is to describe the structure of the model, so in this case it would describe that there should be a sex property of string type whose values can only be male or female, and that there is an age property, and so on. To be able to present a form that is populated using your model data, it simply has to have a schema to construct the form in the first place.

  • The JSON form is something that I think of as being optional. You must have it, but it can simply contain "*", which tells angular-schema-form to just build the form automatically based on the schema. In this case, the library will build the form based entirely on the schema and using default settings as described in the documentation. But what you can do, if you want to, is use the form object to describe how you want your form to be structured.

Here's a very crude and very simple example of the flexibility the form object gives you:

Taking the person object example above, if you don't make use of the form object (i.e. it just contains "*") then angular-schema-form will build you a form based on the schema. It would therefore have input fields for sex and age. Those fields may, or may not, be in the format, or order, or have other properties that you want. You may then optionally use the form object to instruct angular-schema-form how you want it to construct the form. For instance, you could use the form to make it so that the form only contains a field for age but not sex.

So the model is your data, and the schema describes the structure of that data. In simplistic terms, the form provides a further layer of mapping and configuration to your form, overriding the default form that would be created based on the schema alone.

Does that help?