function MetadataSchema(options) {
  options = options ?? Frozen.EMPTY_OBJECT;

  const classes = options.classes ?? {};
  const enums = options.enums ?? {};

  this._classes = classes;
  this._enums = enums;
  this._id = options.id;
  this._name = options.name;
  this._description = options.description;
  this._version = options.version;
  this._extras = clone(options.extras, true);
  this._extensions = clone(options.extensions, true);
}
A schema containing classes and enums.
<p>
See the {@link https://github.com/CesiumGS/3d-tiles/tree/main/specification/Metadata|3D Metadata Specification} for 3D Tiles
</p>

@param {object} options Object with the following properties:
@param {string} [options.id] The ID of the schema
@param {string} [options.name] The name of the schema.
@param {string} [options.description] The description of the schema.
@param {string} [options.version] The application-specific version of the schema.
@param {Object<string, MetadataClass>} [options.classes] Classes defined in the schema, where each key is the class ID.
@param {Object<string, MetadataEnum>} [options.enums] Enums defined in the schema, where each key is the enum ID.
@param {*} [options.extras] Extra user-defined properties.
@param {object} [options.extensions] An object containing extensions.

@alias MetadataSchema
@constructor
@experimental This feature is using part of the 3D Tiles spec that is not final and is subject to change without Cesium's standard deprecation policy.