Difference between uvm_phase/uvm_domain/schedule

I’m a bit confused about these 3 concepts/classes.

Is uvm_phase the primitive building block? uvm_domain is an execution sequence of phases, and schedule is a subset of a given uvm_domain?