Is there any documentation on optionality of fields for entities?

I’m writing a MusicBrainz client for Rust (warning WIP) and I’ve wanted to make things as type safe as possible, that includes reducing the number of optional fields to the minimum so users don’t have to deal with the possibility of fields missing at all times.

So I’ve been wondering but is there any documentation on which fields are optional for each entitity and which aren’t? The Relax NG schema basically says “everything is optional”. Is this really the case? Like even IDs are optional according to that schema, which I think is not the case?