# Describing and validating data
Nothing in the framework validates data by hand. A class says what its properties are, the schema layer
derives a JSON Schema from that, and every boundary the value crosses — a form, an http request, a
repository write — validates against the same description.
The reference below is `mmo.core`'s own — `libs/core/docs/Schema.md` — pulled in rather than copied, so
it stays true as the code moves.
Two things worth knowing before you read it:
- A property is described by its **docblock annotations** (`@type`, `@format`, `@title`, and any JSON
Schema constraint as `@maxLength 3`), and exposed to the client by the `#[ArrayProperty]` attribute.
The two are separate: the attribute decides what is part of the entity's data, the annotations decide
what shape it has. See [Entities](applicationLogic?guide=30-entities.md).
- `@internal` is how a property stays out of the schema — and therefore out of everything a client sees.
> **Broken include** `@include {MMO\client}/../../core/docs/Schema.md` — no such file (`phar:///homepages/38/d520689115/htdocs/mmoframework.fr/www/releases/3.1.4/packages/mmo.client.phar/src/../../core/docs/Schema.md`).
# Serialization
Serializing turns php values into primitives that can be written to a file, a database or a response, and
back again. It is what `JsonRepository` writes, what a configuration file is read into, and what `$`
markers in stored json mean.
> **Broken include** `@include {MMO\client}/../../core/docs/Serialization.md` — no such file (`phar:///homepages/38/d520689115/htdocs/mmoframework.fr/www/releases/3.1.4/packages/mmo.client.phar/src/../../core/docs/Serialization.md`).