(+1) For a valid question, I did not see who put a "-1" without indicating the reason.
OCL & UML are used togheter. New datatypes are not defined directly in OCL, but, in UML, first. Later, you used the new declared data type in OCL.
Enumeration Values are an example of declaring a new data type.
Suppouse you are modeling a vehicle software. You describe the vehicles,
have a motor, and, each motor has a "state" or "status".
The status of a motor are restricted by a enumeration, a set of values.
In a U.M.L. class diagram, the new status is described, as a box,
similar to a class, with the values, and, may have other classes,
that refer to this new type.
....................................................................
..+----------------------+.........+-----------------------------+..
..| <<enum>> |.........| <<class>> |..
..| EngineStatusEnum |.........| MotorClass |..
..+----------------------+.........+-----------------------------+..
..| * Unknown +---------+ [+] EngineStatusEnum Status |..
..| * Stopped |.........| [+] ... other members |..
..| * Running |.........+------------+----------------+..
..| * Testing |......................|...................
..| * Damaged |......................|...................
..+----------------------+.........+--------------+---------\--+....
...................................| \ |....
...................................| (Status <= Stopped &&) \|....
...................................| (Status >= Running) |....
...................................| |....
...................................+---------------------------+....
....................................................................
And, a note displaying some condition in OCL, applying the declared new type.