{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "allOf": [
    {
      "if": {
        "properties": {
          "@type": {
            "const": "MediaService"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/generics/MediaService"
      }
    },
    {
      "if": {
        "properties": {
          "@type": {
            "const": "RadioBroadcastService"
          }
        }
      },
      "then": {
        "$ref": "#/definitions/radio/RadioBroadcastService"
      }
    },
    {
      "comment": "This schema can only validate these entity types",
      "properties": {
        "@type": {
          "enum": [
            "MediaService",
            "RadioBroadcastService"
          ]
        }
      }
    }
  ],
  "definitions": {
    "vod": {
      "ActionAccessSpecification": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "ActionAccessSpecification"
          },
          "category": {
            "$ref": "#/definitions/vod/category"
          },
          "availabilityStarts": {
            "$ref": "#/definitions/generics/date-time"
          },
          "availabilityEnds": {
            "$ref": "#/definitions/generics/date-time"
          },
          "eligibleRegion": {
            "$ref": "#/definitions/generics/region_required"
          },
          "ineligibleRegion": {
            "$ref": "#/definitions/generics/region"
          },
          "requiresSubscription": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/MediaSubscription"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/vod/MediaSubscription"
                }
              }
            ]
          },
          "expectsAcceptanceOf": {
            "$ref": "#/definitions/vod/Offer"
          }
        },
        "required": [
          "@type",
          "category",
          "availabilityStarts",
          "availabilityEnds",
          "eligibleRegion"
        ],
        "allOf": [
          {
            "oneOf": [
              {
                "properties": {
                  "category": {
                    "enum": [
                      "subscription",
                      "externalSubscription"
                    ]
                  }
                },
                "required": [
                  "requiresSubscription"
                ]
              },
              {
                "properties": {
                  "category": {
                    "enum": [
                      "purchase",
                      "rental",
                      "free",
                      "nologinrequired"
                    ]
                  }
                }
              }
            ],
            "comment": "This is to check that the requiresSubscription is provided when subscription or externalSubscription"
          },
          {
            "if": {
              "properties": {
                "category": {
                  "enum": [
                    "subscription"
                  ]
                }
              }
            },
            "then": {
              "properties": {
                "requiresSubscription": {
                  "anyOf": [
                    {
                      "type": "object",
                      "required": [
                        "commonTier"
                      ]
                    },
                    {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "commonTier"
                        ]
                      }
                    }
                  ]
                }
              }
            },
            "else": true,
            "comment": "This is to check if commonTier is provided when the category is subscription"
          }
        ],
        "$id": "#/definitions/vod/ActionAccessSpecification"
      },
      "EntryPoint": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "EntryPoint"
          },
          "urlTemplate": {
            "$ref": "#/definitions/generics/urlTemplate"
          },
          "actionPlatform": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/actionPlatform"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/vod/actionPlatform"
                }
              }
            ]
          }
        },
        "required": [
          "@type",
          "urlTemplate",
          "actionPlatform"
        ],
        "$id": "#/definitions/vod/EntryPoint"
      },
      "MediaSubscription": {
        "comment": "authenticator is required if category is externalsubscription",
        "type": "object",
        "properties": {
          "@type": {
            "const": "MediaSubscription"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "name": {
            "$ref": "#/definitions/generics/string"
          },
          "sameAs": {
            "$ref": "#/definitions/generics/url"
          },
          "expectsAcceptanceOf": {
            "$ref": "#/definitions/vod/Offer"
          },
          "authenticator": {
            "$ref": "#/definitions/generics/Organization"
          },
          "identifier": {
            "$ref": "#/definitions/generics/entitlement-identifier",
            "comment": "This is only required for certain type of subscriptions"
          },
          "commonTier": {
            "type": "boolean"
          }
        },
        "required": [
          "@type",
          "name",
          "@id"
        ],
        "$id": "#/definitions/vod/MediaSubscription"
      },
      "Movie": {
        "description": "This schema matches Entity with type Movie",
        "type": "object",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@type": {
            "const": "Movie"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "url": {
            "$ref": "#/definitions/generics/url-language"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "potentialAction": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/WatchAction"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/vod/WatchAction"
                }
              }
            ]
          },
          "sameAs": {
            "$ref": "#/definitions/generics/url-language"
          },
          "releasedEvent": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/ReleasedEvent"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/ReleasedEvent"
                }
              }
            ]
          },
          "description": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "duration": {
            "$ref": "#/definitions/generics/duration"
          },
          "director": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Person"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/Person"
                }
              }
            ]
          },
          "actor": {
            "$ref": "#/definitions/generics/actor"
          },
          "image": {
            "$ref": "#/definitions/generics/image"
          },
          "trailer": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/trailer"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/vod/trailer"
                }
              }
            ]
          },
          "identifier": {
            "$ref": "#/definitions/generics/identifier"
          },
          "popularityScore": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0
              },
              {
                "$ref": "#/definitions/generics/PopularityScoreSpecification"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/PopularityScoreSpecification"
                }
              }
            ]
          },
          "isFamilyFriendly": {
            "type": "boolean"
          },
          "contentRating": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Rating"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/Rating"
                }
              },
              {
                "$ref": "#/definitions/generics/Rating-text"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/Rating-text"
                }
              }
            ]
          },
          "titleEIDR": {
            "$ref": "#/definitions/generics/string"
          }
        },
        "required": [
          "name",
          "url",
          "@id",
          "@type",
          "potentialAction"
        ],
        "$id": "#/definitions/vod/Movie"
      },
      "Offer": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "Offer"
          },
          "price": {
            "type": "number",
            "exclusiveMinimum": 0.0
          },
          "priceCurrency": {
            "$ref": "#/definitions/generics/priceCurrency"
          },
          "seller": {
            "$ref": "#/definitions/generics/Organization"
          }
        },
        "required": [
          "@type",
          "price",
          "priceCurrency"
        ],
        "$id": "#/definitions/vod/Offer"
      },
      "TVEpisode": {
        "description": "This schema matches Entity with type TVEpisode",
        "type": "object",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@type": {
            "const": "TVEpisode"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "url": {
            "$ref": "#/definitions/generics/url-language"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "episodeNumber": {
            "type": "integer",
            "minimum": 1
          },
          "partOfSeason": {
            "type": "object",
            "properties": {
              "@type": {
                "const": "TVSeason"
              },
              "@id": {
                "$ref": "#/definitions/generics/url"
              },
              "seasonNumber": {
                "type": "integer",
                "minimum": 1
              }
            },
            "required": [
              "@type",
              "@id",
              "seasonNumber"
            ]
          },
          "partOfSeries": {
            "type": "object",
            "properties": {
              "@type": {
                "const": "TVSeries"
              },
              "@id": {
                "$ref": "#/definitions/generics/url"
              },
              "name": {
                "$ref": "#/definitions/generics/name"
              },
              "sameAs": {
                "$ref": "#/definitions/generics/url-language"
              }
            },
            "required": [
              "@type",
              "@id",
              "name"
            ]
          },
          "potentialAction": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/WatchAction"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/vod/WatchAction"
                }
              }
            ]
          },
          "sameAs": {
            "$ref": "#/definitions/generics/url-language"
          },
          "releasedEvent": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/ReleasedEvent"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/ReleasedEvent"
                }
              }
            ]
          },
          "description": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "duration": {
            "$ref": "#/definitions/generics/duration"
          },
          "actor": {
            "$ref": "#/definitions/generics/actor"
          },
          "image": {
            "$ref": "#/definitions/generics/image"
          },
          "trailer": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/trailer"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/vod/trailer"
                }
              }
            ]
          },
          "identifier": {
            "$ref": "#/definitions/generics/identifier"
          },
          "popularityScore": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0
              },
              {
                "$ref": "#/definitions/generics/PopularityScoreSpecification"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/PopularityScoreSpecification"
                }
              }
            ]
          },
          "isFamilyFriendly": {
            "type": "boolean"
          },
          "contentRating": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Rating"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/Rating"
                }
              },
              {
                "$ref": "#/definitions/generics/Rating-text"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/Rating-text"
                }
              }
            ]
          },
          "titleEIDR": {
            "$ref": "#/definitions/generics/string"
          }
        },
        "required": [
          "name",
          "url",
          "@id",
          "@type",
          "potentialAction",
          "episodeNumber",
          "partOfSeason",
          "partOfSeries"
        ],
        "$id": "#/definitions/vod/TVEpisode"
      },
      "TVSeason": {
        "description": "This schema matches Entity with type TVSeason",
        "type": "object",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@type": {
            "const": "TVSeason"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "url": {
            "$ref": "#/definitions/generics/url-language"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "seasonNumber": {
            "type": "integer",
            "minimum": 1
          },
          "partOfSeries": {
            "type": "object",
            "properties": {
              "@type": {
                "const": "TVSeries"
              },
              "@id": {
                "$ref": "#/definitions/generics/url"
              },
              "name": {
                "$ref": "#/definitions/generics/name"
              },
              "sameAs": {
                "$ref": "#/definitions/generics/url-language"
              }
            },
            "required": [
              "@type",
              "@id",
              "name"
            ]
          },
          "potentialAction": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/WatchAction"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/vod/WatchAction"
                }
              }
            ]
          },
          "sameAs": {
            "$ref": "#/definitions/generics/url-language"
          },
          "releasedEvent": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/ReleasedEvent"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/ReleasedEvent"
                }
              }
            ]
          },
          "description": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "actor": {
            "$ref": "#/definitions/generics/actor"
          },
          "image": {
            "$ref": "#/definitions/generics/image"
          },
          "trailer": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/trailer"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/vod/trailer"
                }
              }
            ]
          },
          "identifier": {
            "$ref": "#/definitions/generics/identifier"
          },
          "popularityScore": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0
              },
              {
                "$ref": "#/definitions/generics/PopularityScoreSpecification"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/PopularityScoreSpecification"
                }
              }
            ]
          },
          "isFamilyFriendly": {
            "type": "boolean"
          },
          "contentRating": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Rating"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/Rating"
                }
              },
              {
                "$ref": "#/definitions/generics/Rating-text"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/Rating-text"
                }
              }
            ]
          },
          "titleEIDR": {
            "$ref": "#/definitions/generics/string"
          }
        },
        "required": [
          "name",
          "url",
          "@id",
          "@type",
          "potentialAction",
          "seasonNumber",
          "partOfSeries"
        ],
        "$id": "#/definitions/vod/TVSeason"
      },
      "TVSeries": {
        "description": "This schema matches Entity with type TVSeries",
        "type": "object",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@type": {
            "const": "TVSeries"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "url": {
            "$ref": "#/definitions/generics/url-language"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "potentialAction": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/WatchAction"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/vod/WatchAction"
                }
              }
            ]
          },
          "sameAs": {
            "$ref": "#/definitions/generics/url-language"
          },
          "releasedEvent": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/ReleasedEvent"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/ReleasedEvent"
                }
              }
            ]
          },
          "description": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "actor": {
            "$ref": "#/definitions/generics/actor"
          },
          "image": {
            "$ref": "#/definitions/generics/image"
          },
          "trailer": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/trailer"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/vod/trailer"
                }
              }
            ]
          },
          "identifier": {
            "$ref": "#/definitions/generics/identifier"
          },
          "popularityScore": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0
              },
              {
                "$ref": "#/definitions/generics/PopularityScoreSpecification"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/PopularityScoreSpecification"
                }
              }
            ]
          },
          "isFamilyFriendly": {
            "type": "boolean"
          },
          "contentRating": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Rating"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/Rating"
                }
              },
              {
                "$ref": "#/definitions/generics/Rating-text"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/Rating-text"
                }
              }
            ]
          },
          "titleEIDR": {
            "$ref": "#/definitions/generics/string"
          }
        },
        "required": [
          "name",
          "url",
          "@id",
          "@type",
          "potentialAction"
        ],
        "$id": "#/definitions/vod/TVSeries"
      },
      "WatchAction": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "WatchAction"
          },
          "target": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/EntryPoint"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/vod/EntryPoint"
                }
              }
            ]
          },
          "actionAccessibilityRequirement": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/ActionAccessSpecification"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/vod/ActionAccessSpecification"
                }
              }
            ]
          }
        },
        "required": [
          "@type",
          "target",
          "actionAccessibilityRequirement"
        ],
        "$id": "#/definitions/vod/WatchAction"
      },
      "actionPlatform": {
        "enum": [
          "http://schema.org/DesktopWebPlatform",
          "http://schema.org/MobileWebPlatform",
          "http://schema.org/IOSPlatform",
          "http://schema.org/AndroidPlatform",
          "http://schema.org/AndroidTVPlatform",
          "http://schema.googleapis.com/GoogleVideoCast"
        ],
        "$id": "#/definitions/vod/actionPlatform"
      },
      "category": {
        "enum": [
          "nologinrequired",
          "noLoginRequired",
          "free",
          "subscription",
          "externalsubscription",
          "externalSubscription",
          "rental",
          "purchase"
        ],
        "$id": "#/definitions/vod/category"
      },
      "trailer": {
        "type": "object",
        "properties": {
          "description": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "inLanguage": {
            "type": "string",
            "minLength": 2
          },
          "url": {
            "$ref": "#/definitions/generics/url"
          },
          "regionsAllowed": {
            "$ref": "#/definitions/generics/region"
          }
        },
        "comment": "regionsAllowed should be a Region and not a Place",
        "$id": "#/definitions/vod/trailer"
      }
    },
    "music": {
      "BroadcastService_from_PublicationEvent": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "BroadcastService"
          },
          "name": {
            "$ref": "#/definitions/generics/string"
          }
        },
        "required": [
          "@type",
          "name"
        ],
        "$id": "#/definitions/music/BroadcastService_from_PublicationEvent"
      },
      "EntryPoint": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "EntryPoint"
          },
          "urlTemplate": {
            "$ref": "#/definitions/generics/urlTemplate"
          },
          "actionPlatform": {
            "anyOf": [
              {
                "$ref": "#/definitions/music/actionPlatform"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/music/actionPlatform"
                }
              }
            ]
          }
        },
        "required": [
          "@type",
          "urlTemplate",
          "actionPlatform"
        ],
        "$id": "#/definitions/music/EntryPoint"
      },
      "ListenAction": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "ListenAction"
          },
          "target": {
            "anyOf": [
              {
                "$ref": "#/definitions/music/EntryPoint"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/music/EntryPoint"
                }
              }
            ]
          },
          "expectsAcceptanceOf": {
            "anyOf": [
              {
                "$ref": "#/definitions/music/Offer"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/music/Offer"
                }
              }
            ]
          }
        },
        "required": [
          "@type",
          "target",
          "expectsAcceptanceOf"
        ],
        "$id": "#/definitions/music/ListenAction"
      },
      "MusicAlbum": {
        "description": "This schema matches Entity with type MusicAlbum",
        "type": "object",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@type": {
            "const": "MusicAlbum"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "url": {
            "$ref": "#/definitions/generics/url"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "description": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "byArtist": {
            "anyOf": [
              {
                "$ref": "#/definitions/music/MusicGroup_reference"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/music/MusicGroup_reference"
                }
              }
            ]
          },
          "potentialAction": {
            "anyOf": [
              {
                "$ref": "#/definitions/music/ListenAction"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/music/ListenAction"
                }
              }
            ]
          },
          "subjectOf": {
            "$ref": "#/definitions/music/MusicPlaylist_reference"
          },
          "image": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/ImageObject"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/ImageObject"
                }
              },
              {
                "$ref": "#/definitions/generics/url"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/url"
                }
              }
            ]
          },
          "sameAs": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/url"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/url"
                }
              }
            ]
          },
          "numTracks": {
            "type": "integer",
            "minimum": 1
          },
          "timeRequired": {
            "$ref": "#/definitions/generics/duration"
          },
          "isFamilyFriendly": {
            "type": "boolean"
          },
          "popularityScore": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0
              },
              {
                "$ref": "#/definitions/generics/PopularityScoreSpecification"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/PopularityScoreSpecification"
                }
              }
            ]
          }
        },
        "required": [
          "@type",
          "@id",
          "url",
          "name",
          "byArtist",
          "potentialAction"
        ],
        "$id": "#/definitions/music/MusicAlbum"
      },
      "MusicAlbum_reference": {
        "properties": {
          "@type": {
            "const": "MusicAlbum"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "name": {
            "$ref": "#/definitions/generics/string"
          }
        },
        "required": [
          "@type",
          "@id",
          "name"
        ],
        "$id": "#/definitions/music/MusicAlbum_reference"
      },
      "MusicGroup": {
        "description": "This schema matches Entity with type MusicGroup",
        "type": "object",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@type": {
            "const": "MusicGroup"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "url": {
            "$ref": "#/definitions/generics/url"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "description": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "potentialAction": {
            "anyOf": [
              {
                "$ref": "#/definitions/music/ListenAction"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/music/ListenAction"
                }
              }
            ]
          },
          "subjectOf": {
            "$ref": "#/definitions/music/MusicPlaylist_reference"
          },
          "image": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/ImageObject"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/ImageObject"
                }
              },
              {
                "$ref": "#/definitions/generics/url"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/url"
                }
              }
            ]
          },
          "sameAs": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/url"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/url"
                }
              }
            ]
          },
          "isFamilyFriendly": {
            "type": "boolean"
          },
          "popularityScore": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0
              },
              {
                "$ref": "#/definitions/generics/PopularityScoreSpecification"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/PopularityScoreSpecification"
                }
              }
            ]
          }
        },
        "required": [
          "@type",
          "@id",
          "url",
          "name",
          "potentialAction"
        ],
        "$id": "#/definitions/music/MusicGroup"
      },
      "MusicGroup_reference": {
        "properties": {
          "@type": {
            "const": "MusicGroup"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "name": {
            "$ref": "#/definitions/generics/string"
          }
        },
        "required": [
          "@type",
          "@id",
          "name"
        ],
        "$id": "#/definitions/music/MusicGroup_reference"
      },
      "MusicPlaylist": {
        "description": "This schema matches Entity with type MusicPlaylist",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@type": {
            "const": "MusicPlaylist"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "url": {
            "$ref": "#/definitions/generics/url"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "description": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "genre": {
            "$ref": "#/definitions/generics/string"
          },
          "numTracks": {
            "type": "integer",
            "minimum": 1
          },
          "potentialAction": {
            "anyOf": [
              {
                "$ref": "#/definitions/music/ListenAction"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/music/ListenAction"
                }
              }
            ]
          },
          "image": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/ImageObject"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/ImageObject"
                }
              },
              {
                "$ref": "#/definitions/generics/url"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/url"
                }
              }
            ]
          },
          "creator": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/generics/Person"
                    },
                    {
                      "$ref": "#/definitions/generics/Organization"
                    }
                  ]
                }
              },
              {
                "$ref": "#/definitions/generics/Person"
              },
              {
                "$ref": "#/definitions/generics/Organization"
              }
            ]
          },
          "keywords": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/generics/string"
            }
          },
          "isFamilyFriendly": {
            "type": "boolean"
          },
          "popularityScore": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0
              },
              {
                "$ref": "#/definitions/generics/PopularityScoreSpecification"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/PopularityScoreSpecification"
                }
              }
            ]
          }
        },
        "required": [
          "@type",
          "@id",
          "url",
          "name",
          "potentialAction"
        ],
        "$id": "#/definitions/music/MusicPlaylist"
      },
      "MusicPlaylist_reference": {
        "properties": {
          "@type": {
            "const": "MusicPlaylist"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "url": {
            "$ref": "#/definitions/generics/url"
          },
          "potentialAction": {
            "$ref": "#/definitions/music/ListenAction"
          }
        },
        "required": [
          "@type",
          "@id",
          "url",
          "potentialAction"
        ],
        "$id": "#/definitions/music/MusicPlaylist_reference"
      },
      "MusicRecording": {
        "description": "This schema matches Entity with type MusicRecording",
        "type": "object",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@type": {
            "const": "MusicRecording"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "url": {
            "$ref": "#/definitions/generics/url"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "description": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "byArtist": {
            "anyOf": [
              {
                "$ref": "#/definitions/music/MusicGroup_reference"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/music/MusicGroup_reference"
                }
              }
            ]
          },
          "potentialAction": {
            "anyOf": [
              {
                "$ref": "#/definitions/music/ListenAction"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/music/ListenAction"
                }
              }
            ]
          },
          "subjectOf": {
            "$ref": "#/definitions/music/MusicPlaylist_reference"
          },
          "image": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/ImageObject"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/ImageObject"
                }
              },
              {
                "$ref": "#/definitions/generics/url"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/url"
                }
              }
            ]
          },
          "sameAs": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/url"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/url"
                }
              }
            ]
          },
          "inAlbum": {
            "anyOf": [
              {
                "$ref": "#/definitions/music/MusicAlbum_reference"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/music/MusicAlbum_reference"
                }
              }
            ]
          },
          "duration": {
            "$ref": "#/definitions/generics/duration"
          },
          "isFamilyFriendly": {
            "type": "boolean"
          },
          "popularityScore": {
            "anyOf": [
              {
                "type": "number",
                "minimum": 0
              },
              {
                "$ref": "#/definitions/generics/PopularityScoreSpecification"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/PopularityScoreSpecification"
                }
              }
            ]
          }
        },
        "required": [
          "@type",
          "@id",
          "url",
          "name",
          "byArtist",
          "potentialAction"
        ],
        "$id": "#/definitions/music/MusicRecording"
      },
      "Offer": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "Offer"
          },
          "category": {
            "$ref": "#/definitions/music/category"
          },
          "price": {
            "type": "number",
            "exclusiveMinimum": 0.0
          },
          "priceCurrency": {
            "$ref": "#/definitions/generics/priceCurrency"
          },
          "seller": {
            "$ref": "#/definitions/generics/Organization"
          },
          "eligibleRegion": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Country"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/generics/Country"
                }
              }
            ]
          },
          "availabilityStarts": {
            "$ref": "#/definitions/generics/date-time"
          },
          "avaliabilityEnds": {
            "$ref": "#/definitions/generics/date-time"
          }
        },
        "required": [
          "@type",
          "category",
          "eligibleRegion"
        ],
        "$id": "#/definitions/music/Offer"
      },
      "PublicationEvent": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "PublicationEvent"
          },
          "publishedBy": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Person"
              },
              {
                "$ref": "#/definitions/generics/Organization"
              }
            ]
          },
          "publishedOn": {
            "$ref": "#/definitions/music/BroadcastService_from_PublicationEvent"
          },
          "startDate": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/date"
              },
              {
                "$ref": "#/definitions/generics/date-time"
              }
            ]
          },
          "location": {
            "$ref": "#/definitions/generics/region"
          }
        },
        "required": [
          "@type",
          "startDate"
        ],
        "$id": "#/definitions/music/PublicationEvent"
      },
      "actionPlatform": {
        "enum": [
          "http://schema.org/DesktopWebPlatform",
          "http://schema.org/MobileWebPlatform",
          "http://schema.org/IOSPlatform",
          "http://schema.org/AndroidPlatform",
          "http://schema.org/AndroidTVPlatform",
          "http://schema.googleapis.com/GoogleVideoCast",
          "http://schema.googleapis.com/GoogleAudioCast"
        ],
        "$id": "#/definitions/music/actionPlatform"
      },
      "category": {
        "enum": [
          "nologinrequired",
          "free",
          "subscription"
        ],
        "$id": "#/definitions/music/category"
      }
    },
    "generics": {
      "@context": {
        "oneOf": [
          {
            "$ref": "#/definitions/generics/string"
          },
          {
            "type": "array",
            "minItems": 2,
            "contains": {
              "enum": [
                "http://schema.org/",
                "http://schema.org",
                "http://schema.googleapis.com/",
                "http://schema.googleapis.com"
              ]
            },
            "additionalItems": {
              "type": "object",
              "properties": {
                "@language": {
                  "type": "string",
                  "minLength": 2
                }
              },
              "required": [
                "@language"
              ]
            }
          }
        ],
        "$id": "#/definitions/generics/@context"
      },
      "City": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "City"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          }
        },
        "required": [
          "@type",
          "name"
        ],
        "$id": "#/definitions/generics/City"
      },
      "Country": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "Country"
          },
          "name": {
            "$ref": "#/definitions/generics/CountryPattern"
          }
        },
        "required": [
          "@type",
          "name"
        ],
        "$id": "#/definitions/generics/Country"
      },
      "CountryPattern": {
        "type": "string",
        "pattern": "^(EARTH|AC|AD|AE|AF|AG|AI|AL|AM|AN|AO|AQ|AR|AS|AT|AU|AW|AX|AZ|BA|BB|BD|BE|BF|BG|BH|BI|BJ|BL|BM|BN|BO|BQ|BR|BS|BT|BU|BV|BW|BY|BZ|CA|CC|CD|CF|CG|CH|CI|CK|CL|CM|CN|CO|CP|CR|CS|CS|CU|CV|CW|CX|CY|CZ|DE|DG|DJ|DK|DM|DO|DY|DZ|EA|EC|EE|EG|EH|ER|ES|ET|EU|EW|EZ|FI|FJ|FK|FL|FM|FO|FR|FX|GA|GB|GD|GE|GF|GG|GH|GI|GL|GM|GN|GP|GQ|GR|GS|GT|GU|GW|GY|HK|HM|HN|HR|HT|HU|IC|ID|IE|IL|IM|IN|IO|IQ|IR|IS|IT|JA|JE|JM|JO|JP|KE|KG|KH|KI|KM|KN|KP|KR|KW|KY|KZ|LA|LB|LC|LF|LI|LK|LR|LS|LT|LU|LV|LY|MA|MC|MD|ME|MF|MG|MH|MK|ML|MM|MN|MO|MP|MQ|MR|MS|MT|MU|MV|MW|MX|MY|MZ|NA|NC|NE|NF|NG|NI|NL|NO|NP|NR|NT|NU|NZ|OM|PA|PE|PF|PG|PH|PI|PK|PL|PM|PN|PR|PS|PT|PW|PY|QA|RA|RB|RB|RC|RE|RH|RI|RL|RM|RN|RO|RP|RS|RU|RW|SA|SB|SC|SD|SE|SF|SF|SG|SH|SI|SJ|SK|SL|SM|SN|SO|SR|SS|ST|SU|SV|SX|SY|SZ|TA|TC|TD|TF|TG|TH|TJ|TK|TL|TM|TN|TO|TP|TR|TT|TV|TW|TZ|UA|UG|UK|UM|UN|US|UY|UZ|VA|VC|VE|VG|VI|VN|VU|WF|WG|WL|WS|WV|YE|YT|YU|YV|ZA|ZM|ZR|ZW)$",
        "$id": "#/definitions/generics/CountryPattern"
      },
      "GeoShape": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "GeoShape"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          }
        },
        "required": [
          "@type"
        ],
        "$id": "#/definitions/generics/GeoShape"
      },
      "ImageObject": {
        "comment": "contentUrl is prefered to url. But either is accepted",
        "type": "object",
        "properties": {
          "@type": {
            "const": "ImageObject"
          },
          "contentUrl": {
            "$ref": "#/definitions/generics/url"
          },
          "url": {
            "$ref": "#/definitions/generics/url"
          },
          "width": {
            "type": "integer"
          },
          "height": {
            "type": "integer"
          },
          "caption": {
            "type": "string",
            "minLength": 1
          },
          "regionsAllowed": {
            "$ref": "#/definitions/generics/region"
          }
        },
        "required": [
          "@type"
        ],
        "oneOf": [
          {
            "required": [
              "contentUrl"
            ]
          },
          {
            "required": [
              "url"
            ]
          }
        ],
        "dependencies": {
          "width": [
            "height"
          ],
          "height": [
            "width"
          ]
        },
        "$id": "#/definitions/generics/ImageObject"
      },
      "ImageObject-brandIcon": {
        "comment": "This is a copy of ImageObject with the specification of brandIcon (MediaService) associated",
        "type": "object",
        "properties": {
          "@type": {
            "const": "ImageObject"
          },
          "contentUrl": {
            "$ref": "#/definitions/generics/url"
          },
          "width": {
            "type": "integer"
          },
          "height": {
            "type": "integer"
          },
          "additionalProperty": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/PropertyValue-MediaService"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/PropertyValue-MediaService"
                }
              }
            ]
          },
          "caption": {
            "type": "string",
            "minLength": 1
          },
          "regionsAllowed": {
            "$ref": "#/definitions/generics/region"
          }
        },
        "required": [
          "@type",
          "contentUrl",
          "height",
          "width",
          "additionalProperty"
        ],
        "$id": "#/definitions/generics/ImageObject-brandIcon"
      },
      "MediaService": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "MediaService"
          },
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "brandIcon": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/ImageObject-brandIcon"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/ImageObject-brandIcon"
                }
              }
            ]
          },
          "application": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/SoftwareApplication"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/SoftwareApplication"
                }
              }
            ]
          },
          "parentOrganization": {
            "$ref": "#/definitions/generics/Organization"
          },
          "subscriptions": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/MediaSubscription"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/vod/MediaSubscription"
                }
              }
            ]
          },
          "baseSubscriptionTier": {
            "$ref": "#/definitions/vod/MediaSubscription"
          },
          "userRequestsFulfilledBy": {
            "enum": [
              "Google",
              "Provider"
            ]
          },
          "mediaOffered": {
            "oneOf": [
              {
                "comment": "Will only validate [LiveTV, VoD] or [Vod, LiveTV] or [VoD] or [LiveTV]",
                "type": "array",
                "items": {
                  "enum": [
                    "LiveTV",
                    "VoD"
                  ]
                },
                "uniqueItems": true
              },
              {
                "comment": "Will only validate [Radio, Music] or [Music, Radio] or [Radio] or [Music]",
                "type": "array",
                "items": {
                  "enum": [
                    "Radio",
                    "Music"
                  ]
                },
                "uniqueItems": true
              },
              {
                "comment": "Will validate a single string as an input",
                "type": "string",
                "enum": [
                  "LiveTV",
                  "VoD",
                  "Radio",
                  "Music"
                ]
              }
            ]
          }
        },
        "required": [
          "@type",
          "@context",
          "@id",
          "name",
          "brandIcon",
          "parentOrganization",
          "mediaOffered"
        ],
        "$id": "#/definitions/generics/MediaService"
      },
      "Organization": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "Organization"
          },
          "name": {
            "$ref": "#/definitions/generics/string"
          },
          "sameAs": {
            "$ref": "#/definitions/generics/url"
          }
        },
        "required": [
          "@type",
          "name"
        ],
        "$id": "#/definitions/generics/Organization"
      },
      "PerformanceRole": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "PerformanceRole"
          },
          "characterName": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/name"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/name"
                }
              }
            ],
            "actor": {
              "$ref": "#/definitions/generics/Person"
            }
          }
        },
        "required": [
          "@type",
          "characterName"
        ],
        "$id": "#/definitions/generics/PerformanceRole"
      },
      "Person": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "Person"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          }
        },
        "required": [
          "@type",
          "name"
        ],
        "$id": "#/definitions/generics/Person"
      },
      "Place": {
        "type": "object",
        "$id": "#/definitions/generics/Place",
        "properties": {
          "@type": {
            "const": "Place"
          },
          "name": {
            "$ref": "#/definitions/generics/string"
          },
          "address": {
            "$ref": "#/definitions/generics/PostalAddress"
          }
        },
        "required": [
          "@type",
          "name"
        ]
      },
      "PopularityScoreSpecification": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "PopularityScoreSpecification"
          },
          "value": {
            "type": "number",
            "minimum": 0
          },
          "eligibleRegion": {
            "$ref": "#/definitions/generics/region_required"
          }
        },
        "required": [
          "@type",
          "value"
        ],
        "$id": "#/definitions/generics/PopularityScoreSpecification"
      },
      "PostalAddress": {
        "type": "object",
        "$id": "#/definitions/generics/PostalAddress",
        "properties": {
          "@type": {
            "const": "PostalAddress"
          },
          "streetAddress": {
            "type": "string"
          },
          "addressLocality": {
            "type": "string"
          },
          "addressRegion": {
            "type": "string"
          },
          "postalCode": {
            "type": "string"
          },
          "addressCountry": {
            "$ref": "#/definitions/generics/CountryPattern"
          }
        },
        "required": [
          "@type"
        ]
      },
      "PropertyValue": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "PropertyValue"
          },
          "propertyID": {
            "enum": [
              "TMS_ROOT_ID",
              "TMS_ID",
              "WIKIDATA_ID",
              "IMDB_ID",
              "_PARTNER_ID_",
              "OPTA_ID",
              "STATS_ID",
              "DMA_ID"
            ]
          },
          "value": {
            "$ref": "#/definitions/generics/string"
          }
        },
        "allOf": [
          {
            "if": {
              "properties": {
                "propertyID": {
                  "const": "WIKIDATA_ID"
                }
              }
            },
            "then": {
              "properties": {
                "value": {
                  "type": "string",
                  "pattern": "^Q\\d+"
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "propertyID": {
                  "const": "TMS_ROOT_ID"
                }
              }
            },
            "then": {
              "properties": {
                "value": {
                  "type": "string",
                  "pattern": "^\\d+"
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "propertyID": {
                  "const": "IMDB_ID"
                }
              }
            },
            "then": {
              "properties": {
                "value": {
                  "type": "string",
                  "pattern": "(tt|nm|co|ev|ch|ni)-?\\d+"
                }
              }
            }
          }
        ],
        "required": [
          "@type",
          "propertyID",
          "value"
        ],
        "$id": "#/definitions/generics/PropertyValue"
      },
      "PropertyValue-MediaService": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "PropertyValue"
          },
          "name": {
            "const": "contentAttributes"
          },
          "value": {
            "enum": [
              "forDarkBackground",
              "forLightBackground"
            ]
          }
        },
        "required": [
          "@type",
          "name",
          "value"
        ],
        "$id": "#/definitions/generics/PropertyValue-MediaService"
      },
      "Rating": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "Rating"
          },
          "author": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Person"
              },
              {
                "$ref": "#/definitions/generics/Organization"
              },
              {
                "$ref": "#/definitions/generics/string"
              }
            ]
          },
          "ratingValue": {
            "$ref": "#/definitions/generics/string"
          }
        },
        "required": [
          "@type",
          "author",
          "ratingValue"
        ],
        "$id": "#/definitions/generics/Rating"
      },
      "Rating-text": {
        "description": "content rating, 'MPGAA PG13' Organization + Space + Rating",
        "type": "string",
        "pattern": "^[^\\s]* [^\\s]*$",
        "$id": "#/definitions/generics/Rating-text"
      },
      "ReleasedEvent": {
        "type": "object",
        "properties": {
          "@type": {
            "enum": [
              "PublicationEvent",
              "ExclusiveEvent",
              "FeaturedEvent"
            ]
          },
          "publishedBy": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Person"
              },
              {
                "$ref": "#/definitions/generics/Organization"
              }
            ]
          },
          "startDate": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/date"
              },
              {
                "$ref": "#/definitions/generics/date-time"
              }
            ]
          },
          "endDate": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/date"
              },
              {
                "$ref": "#/definitions/generics/date-time"
              }
            ]
          },
          "location": {
            "$ref": "#/definitions/generics/region"
          }
        },
        "required": [
          "@type",
          "startDate"
        ],
        "$id": "#/definitions/generics/ReleasedEvent"
      },
      "SoftwareApplication": {
        "type": "object",
        "properties": {
          "operatingSystem": {
            "enum": [
              "iOS",
              "Android",
              "Cast",
              "AndroidTV"
            ]
          },
          "downloadURL": {
            "$ref": "#/definitions/generics/url"
          },
          "installURL": {
            "$ref": "#/definitions/generics/url"
          },
          "identifier": {
            "$ref": "#/definitions/generics/string"
          }
        },
        "required": [
          "operatingSystem"
        ],
        "allOf": [
          {
            "if": {
              "properties": {
                "operatingSystem": {
                  "enum": [
                    "AndroidTV",
                    "Android",
                    "iOS"
                  ]
                }
              }
            },
            "then": {
              "required": [
                "downloadURL"
              ]
            },
            "else": {}
          }
        ],
        "$id": "#/definitions/generics/SoftwareApplication"
      },
      "State": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "State"
          }
        },
        "required": [
          "@type"
        ],
        "$id": "#/definitions/generics/State"
      },
      "actor": {
        "$id": "#/definitions/generics/actor",
        "anyOf": [
          {
            "$ref": "#/definitions/generics/Person"
          },
          {
            "$ref": "#/definitions/generics/PerformanceRole"
          },
          {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/definitions/generics/Person"
                },
                {
                  "$ref": "#/definitions/generics/PerformanceRole"
                }
              ]
            }
          }
        ]
      },
      "date": {
        "description": "date ISO 8601 https://en.wikipedia.org/wiki/ISO_8601",
        "type": "string",
        "pattern": "^(\\d{4}(-\\d{2}(-\\d{2})?)?|\\d{8})$",
        "$id": "#/definitions/generics/date"
      },
      "date-time": {
        "description": "date-time ISO 8601 https://en.wikipedia.org/wiki/ISO_8601",
        "type": "string",
        "pattern": "^(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?|\\d{8}T\\d{6}(\\.\\d+)?)(Z|[\\+-]\\d{2}(:\\d{2})?)?$",
        "$id": "#/definitions/generics/date-time"
      },
      "duration": {
        "description": "duration ISO 8601 https://en.wikipedia.org/wiki/ISO_8601",
        "type": "string",
        "pattern": "^P((\\d+)?Y)?((\\d+)?M)?((\\d+)?D)?(T((\\d+)?H)?((\\d+)?M)?((\\d+)?S)?)?$",
        "$id": "#/definitions/generics/duration"
      },
      "entitlement-identifier": {
        "type": "string",
        "pattern": "^(?![\\W\\-])(\\w).*:.*",
        "$id": "#/definitions/generics/entitlement-identifier"
      },
      "identifier": {
        "anyOf": [
          {
            "$ref": "#/definitions/generics/PropertyValue"
          },
          {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/definitions/generics/PropertyValue"
            }
          }
        ],
        "$id": "#/definitions/generics/identifier"
      },
      "image": {
        "$id": "#/definitions/generics/image",
        "anyOf": [
          {
            "$ref": "#/definitions/generics/ImageObject"
          },
          {
            "type": "array",
            "items": {
              "$ref": "#/definitions/generics/ImageObject"
            }
          },
          {
            "$ref": "#/definitions/generics/url-optional"
          },
          {
            "type": "array",
            "items": {
              "$ref": "#/definitions/generics/url-optional"
            }
          }
        ]
      },
      "name": {
        "anyOf": [
          {
            "$ref": "#/definitions/generics/string"
          },
          {
            "$ref": "#/definitions/generics/string-language"
          }
        ],
        "$id": "#/definitions/generics/name"
      },
      "name-optional": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "$ref": "#/definitions/generics/string-language"
          }
        ],
        "$id": "#/definitions/generics/name-optional"
      },
      "priceCurrency": {
        "type": "string",
        "pattern": "^(AED|AFN|ALL|AMD|ANG|AOA|ARS|AUD|AWG|AZN|BAM|BBD|BDT|BGN|BHD|BIF|BMD|BND|BOB|BOV|BRL|BSD|BTN|BWP|BYN|BZD|CAD|CDF|CHE|CHF|CHW|CLF|CLP|CNY|COP|COU|CRC|CUC|CUP|CVE|CZK|DJF|DKK|DOP|DZD|EGP|ERN|ETB|EUR|FJD|FKP|GBP|GEL|GHS|GIP|GMD|GNF|GTQ|GYD|HKD|HNL|HRK|HTG|HUF|IDR|ILS|INR|IQD|IRR|ISK|JMD|JOD|JPY|KES|KGS|KHR|KMF|KPW|KRW|KWD|KYD|KZT|LAK|LBP|LKR|LRD|LSL|LYD|MAD|MDL|MGA|MKD|MMK|MNT|MOP|MRU|MUR|MVR|MWK|MXN|MXV|MYR|MZN|NAD|NGN|NIO|NOK|NPR|NZD|OMR|PAB|PEN|PGK|PHP|PKR|PLN|PYG|QAR|RON|RSD|RUB|RWF|SAR|SBD|SCR|SDG|SEK|SGD|SHP|SLL|SOS|SRD|SSP|STN|SVC|SYP|SZL|THB|TJS|TMT|TND|TOP|TRY|TTD|TWD|TZS|UAH|UGX|USD|USN|UYI|UYU|UYW|UZS|VES|VND|VUV|WST|XAF|XAG|XAU|XBA|XBB|XBC|XBD|XCD|XDR|XOF|XPD|XPF|XPT|XSU|XTS|XUA|XXX|YER|ZAR|ZMW|ZWL)$",
        "$id": "#/definitions/generics/priceCurrency"
      },
      "region": {
        "anyOf": [
          {
            "const": "EARTH"
          },
          {
            "$ref": "#/definitions/generics/Country"
          },
          {
            "$ref": "#/definitions/generics/CountryPattern"
          },
          {
            "$ref": "#/definitions/generics/City"
          },
          {
            "$ref": "#/definitions/generics/State"
          },
          {
            "$ref": "#/definitions/generics/GeoShape"
          },
          {
            "type": "array",
            "items": {
              "$ref": "#/definitions/generics/Country"
            }
          },
          {
            "type": "array",
            "items": {
              "$ref": "#/definitions/generics/City"
            }
          },
          {
            "type": "array",
            "items": {
              "$ref": "#/definitions/generics/State"
            }
          },
          {
            "type": "array",
            "items": {
              "$ref": "#/definitions/generics/CountryPattern"
            }
          },
          {
            "type": "array",
            "items": {
              "$ref": "#/definitions/generics/GeoShape"
            }
          }
        ],
        "$id": "#/definitions/generics/region"
      },
      "region_required": {
        "anyOf": [
          {
            "const": "EARTH"
          },
          {
            "$ref": "#/definitions/generics/Country"
          },
          {
            "$ref": "#/definitions/generics/CountryPattern"
          },
          {
            "$ref": "#/definitions/generics/City"
          },
          {
            "$ref": "#/definitions/generics/State"
          },
          {
            "$ref": "#/definitions/generics/GeoShape"
          },
          {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/definitions/generics/Country"
            }
          },
          {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/definitions/generics/City"
            }
          },
          {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/definitions/generics/State"
            }
          },
          {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/definitions/generics/CountryPattern"
            }
          },
          {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/definitions/generics/GeoShape"
            }
          }
        ],
        "$id": "#/definitions/generics/region_required"
      },
      "string": {
        "type": "string",
        "minLength": 1,
        "$id": "#/definitions/generics/string"
      },
      "string-language": {
        "anyOf": [
          {
            "type": "array",
            "items": {
              "$ref": "#/definitions/generics/string-language-property"
            }
          },
          {
            "$ref": "#/definitions/generics/string-language-property"
          }
        ],
        "$id": "#/definitions/generics/string-language"
      },
      "string-language-property": {
        "type": "object",
        "properties": {
          "@language": {
            "type": "string",
            "minLength": 2
          },
          "@value": {
            "$ref": "#/definitions/generics/string"
          }
        },
        "required": [
          "@language",
          "@value"
        ],
        "$id": "#/definitions/generics/string-language-property"
      },
      "url": {
        "type": "string",
        "pattern": "^https?://(?:[-\\w.]|(?:%[\\da-fA-F]{2}))+",
        "minLength": 1,
        "$id": "#/definitions/generics/url"
      },
      "url-language": {
        "anyOf": [
          {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "$ref": "#/definitions/generics/url-language-property"
                },
                {
                  "$ref": "#/definitions/generics/url"
                }
              ]
            }
          },
          {
            "$ref": "#/definitions/generics/url-language-property"
          },
          {
            "$ref": "#/definitions/generics/url"
          }
        ],
        "$id": "#/definitions/generics/url-language"
      },
      "url-language-property": {
        "type": "object",
        "properties": {
          "@language": {
            "type": "string",
            "minLength": 2
          },
          "@value": {
            "$ref": "#/definitions/generics/url"
          }
        },
        "required": [
          "@language",
          "@value"
        ],
        "$id": "#/definitions/generics/url-language-property"
      },
      "url-optional": {
        "$id": "#/definitions/generics/url-optional",
        "anyOf": [
          {
            "type": "string",
            "pattern": "(^https?://(?:[-\\w.]|(?:%[\\da-fA-F]{2}))+)",
            "minLength": 1
          },
          {
            "type": "string",
            "minLength": 0,
            "maxLength": 0
          }
        ]
      },
      "urlTemplate": {
        "anyOf": [
          {
            "$ref": "#/definitions/generics/url"
          },
          {
            "type": "string",
            "pattern": "^(android-app|intent)://.*$"
          }
        ],
        "$id": "#/definitions/generics/urlTemplate"
      },
      "videoFormat": {
        "enum": [
          "SD",
          "HD",
          "2K",
          "4K",
          "8K"
        ],
        "$id": "#/definitions/generics/videoFormat"
      }
    },
    "vod_old": {
      "Offer": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "Offer"
          },
          "category": {
            "$ref": "#/definitions/vod/category"
          },
          "price": {
            "type": "number",
            "exclusiveMinimum": 0.0
          },
          "priceCurrency": {
            "$ref": "#/definitions/generics/priceCurrency"
          },
          "seller": {
            "$ref": "#/definitions/generics/Organization"
          }
        },
        "required": [
          "@type",
          "category"
        ],
        "allOf": [
          {
            "if": {
              "properties": {
                "category": {
                  "enum": [
                    "subscription",
                    "externalsubscription",
                    "rental",
                    "purchase"
                  ]
                }
              }
            },
            "then": {
              "required": [
                "price",
                "priceCurrency"
              ]
            }
          }
        ],
        "$id": "#/definitions/vod_old/Offer"
      },
      "WatchAction": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "WatchAction"
          },
          "target": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/EntryPoint"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/vod/EntryPoint"
                }
              }
            ]
          },
          "expectsAcceptanceOf": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod_old/Offer"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/vod_old/Offer"
                }
              }
            ]
          }
        },
        "required": [
          "@type",
          "target",
          "expectsAcceptanceOf"
        ],
        "$id": "#/definitions/vod_old/WatchAction"
      }
    },
    "livetv": {
      "BroadcastEvent": {
        "type": "object",
        "$id": "#/definitions/livetv/BroadcastEvent",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "@type": {
            "const": "BroadcastEvent"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "description": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "startDate": {
            "$ref": "#/definitions/generics/date-time"
          },
          "endDate": {
            "$ref": "#/definitions/generics/date-time"
          },
          "publishedOn": {
            "$ref": "#/definitions/livetv/BroadcastService-reference"
          },
          "workPerformed": {
            "$ref": "#/definitions/livetv/CreativeWork-reference"
          },
          "broadcastOfEvent": {
            "$ref": "#/definitions/livetv/broadcastOfEvent"
          },
          "videoFormat": {
            "$ref": "#/definitions/generics/videoFormat"
          },
          "contentToBeAnnounced": {
            "type": "boolean"
          },
          "offAir": {
            "type": "boolean"
          },
          "isLiveBroadcast": {
            "type": "boolean"
          },
          "potentialAction": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/WatchAction"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/vod/WatchAction"
                }
              }
            ]
          }
        },
        "required": [
          "@id",
          "@type",
          "name",
          "startDate"
        ],
        "oneOf": [
          {
            "required": [
              "broadcastOfEvent"
            ]
          },
          {
            "required": [
              "workPerformed"
            ]
          },
          {
            "properties": {
              "offAir": {
                "const": true
              }
            },
            "required": [
              "offAir"
            ]
          },
          {
            "properties": {
              "contentToBeAnnounced": {
                "const": true
              }
            },
            "required": [
              "contentToBeAnnounced"
            ]
          }
        ]
      },
      "BroadcastService": {
        "type": "object",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@type": {
            "const": "BroadcastService"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "broadcastDisplayName": {
            "$ref": "#/definitions/generics/name"
          },
          "alternateName": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/name-optional"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/name-optional"
                }
              }
            ]
          },
          "callSign": {
            "$ref": "#/definitions/generics/string"
          },
          "contentRating": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Rating"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/Rating"
                }
              },
              {
                "$ref": "#/definitions/generics/Rating-text"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/Rating-text"
                }
              }
            ]
          },
          "description": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "slogan": {
            "$ref": "#/definitions/generics/name"
          },
          "areaServed": {
            "$ref": "#/definitions/generics/region"
          },
          "logo": {
            "$ref": "#/definitions/generics/ImageObject"
          },
          "potentialAction": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/WatchAction"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/vod/WatchAction"
                }
              }
            ]
          },
          "videoFormat": {
            "$ref": "#/definitions/generics/videoFormat"
          },
          "eligibleRegion": {
            "$ref": "#/definitions/generics/region",
            "comment": "For old specification"
          },
          "broadcastTimezone": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/string"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/string"
                }
              }
            ]
          },
          "broadcastAffiliateOf": {
            "$ref": "#/definitions/livetv/Organization-reference"
          },
          "identifier": {
            "$ref": "#/definitions/generics/identifier"
          },
          "popularityScore": {
            "$ref": "#/definitions/generics/PopularityScoreSpecification"
          }
        },
        "required": [
          "@type",
          "@id",
          "name",
          "broadcastDisplayName",
          "broadcastAffiliateOf"
        ],
        "$id": "#/definitions/livetv/BroadcastService"
      },
      "BroadcastService-reference": {
        "$id": "#/definitions/livetv/BroadcastService-reference",
        "type": "object",
        "properties": {
          "@type": {
            "const": "BroadcastService"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          }
        },
        "required": [
          "@type",
          "@id"
        ]
      },
      "CableOrSatelliteService": {
        "$id": "#/definitions/livetv/CableOrSatelliteService",
        "type": "object",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@type": {
            "const": "CableOrSatelliteService"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "areaServed": {
            "$ref": "#/definitions/generics/region"
          },
          "provider": {
            "$ref": "#/definitions/livetv/Organization-reference"
          },
          "identifier": {
            "$ref": "#/definitions/generics/identifier"
          }
        },
        "required": [
          "@type",
          "@id",
          "name",
          "provider"
        ]
      },
      "CableOrSatelliteService-reference": {
        "$id": "#/definitions/livetv/CableOrSatelliteService-reference",
        "type": "object",
        "properties": {
          "@type": {
            "const": "CableOrSatelliteService"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          }
        },
        "required": [
          "@type",
          "@id"
        ]
      },
      "CreativeWork-reference": {
        "$id": "#/definitions/livetv/CreativeWork-reference",
        "type": "object",
        "properties": {
          "@type": {
            "enum": [
              "TVSeries",
              "TVSeason",
              "TVEpisode",
              "Movie"
            ]
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          }
        },
        "required": [
          "@type",
          "@id"
        ]
      },
      "Event": {
        "$id": "#/definitions/livetv/Event",
        "type": "object",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@type": {
            "const": "Event"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "description": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "attendee": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Organization"
              },
              {
                "$ref": "#/definitions/generics/Person"
              },
              {
                "type": "array",
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/generics/Organization"
                    },
                    {
                      "$ref": "#/definitions/generics/Person"
                    }
                  ]
                }
              }
            ]
          },
          "startDate": {
            "$ref": "#/definitions/generics/date-time"
          },
          "endDate": {
            "$ref": "#/definitions/generics/date-time"
          },
          "location": {
            "$ref": "#/definitions/generics/Place"
          },
          "subEvent": {
            "$ref": "#/definitions/livetv/Event"
          },
          "superEvent": {
            "$ref": "#/definitions/livetv/Event"
          },
          "workPerformed": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "object"
                }
              },
              {
                "type": "object"
              }
            ]
          }
        },
        "required": [
          "@type",
          "@id",
          "name",
          "startDate"
        ]
      },
      "MusicEvent": {
        "$id": "#/definitions/livetv/MusicEvent",
        "type": "object",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@type": {
            "const": "MusicEvent"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "description": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "attendee": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Organization"
              },
              {
                "$ref": "#/definitions/generics/Person"
              },
              {
                "type": "array",
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/generics/Organization"
                    },
                    {
                      "$ref": "#/definitions/generics/Person"
                    }
                  ]
                }
              }
            ]
          },
          "composer": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Organization"
              },
              {
                "$ref": "#/definitions/generics/Person"
              },
              {
                "type": "array",
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/generics/Organization"
                    },
                    {
                      "$ref": "#/definitions/generics/Person"
                    }
                  ]
                }
              }
            ]
          },
          "performer": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Organization"
              },
              {
                "$ref": "#/definitions/generics/Person"
              },
              {
                "type": "array",
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/definitions/generics/Organization"
                    },
                    {
                      "$ref": "#/definitions/generics/Person"
                    }
                  ]
                }
              }
            ]
          },
          "startDate": {
            "$ref": "#/definitions/generics/date-time"
          },
          "endDate": {
            "$ref": "#/definitions/generics/date-time"
          },
          "location": {
            "$ref": "#/definitions/generics/Place"
          },
          "subEvent": {
            "$ref": "#/definitions/livetv/Event"
          },
          "superEvent": {
            "$ref": "#/definitions/livetv/Event"
          },
          "workPerformed": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "object"
                }
              },
              {
                "type": "object"
              }
            ]
          }
        },
        "required": [
          "@type",
          "@id",
          "name",
          "startDate"
        ]
      },
      "Organization": {
        "$id": "#/definitions/livetv/Organization",
        "type": "object",
        "properties": {
          "@type": {
            "const": "Organization"
          },
          "name": {
            "$ref": "#/definitions/generics/string"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "url": {
            "$ref": "#/definitions/generics/url"
          },
          "sameAs": {
            "$ref": "#/definitions/generics/url"
          },
          "description": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "identifier": {
            "$ref": "#/definitions/generics/identifier"
          }
        },
        "required": [
          "@type",
          "@id",
          "name"
        ]
      },
      "Organization-reference": {
        "$id": "#/definitions/livetv/Organization-reference",
        "type": "object",
        "properties": {
          "@type": {
            "const": "Organization"
          },
          "name": {
            "$ref": "#/definitions/generics/string"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          }
        },
        "required": [
          "@type",
          "@id"
        ]
      },
      "SportsEvent": {
        "type": "object",
        "$id": "#/definitions/generics/SportsEvent",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@type": {
            "const": "SportsEvent"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "description": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "startDate": {
            "$ref": "#/definitions/generics/date-time"
          },
          "endDate": {
            "$ref": "#/definitions/generics/date-time"
          },
          "homeTeam": {
            "$ref": "#/definitions/livetv/SportsTeam"
          },
          "awayTeam": {
            "$ref": "#/definitions/livetv/SportsTeam"
          },
          "competitor": {
            "anyOf": [
              {
                "$ref": "#/definitions/livetv/SportsTeam"
              },
              {
                "$ref": "#/definitions/generics/Person"
              }
            ]
          },
          "location": {
            "$ref": "#/definitions/generics/Place"
          },
          "image": {
            "$ref": "#/definitions/generics/image"
          },
          "potentialAction": {
            "anyOf": [
              {
                "$ref": "#/definitions/vod/WatchAction"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/vod/WatchAction"
                }
              }
            ]
          }
        },
        "required": [
          "@type",
          "@id",
          "name",
          "startDate"
        ]
      },
      "SportsTeam": {
        "type": "object",
        "$id": "#/definitions/livetv/SportsTeam",
        "properties": {
          "@type": {
            "const": "SportsTeam"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "sport": {
            "type": "string",
            "pattern": "^https?://.*wikipedia.*"
          },
          "athlete": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/Person"
                }
              },
              {
                "$ref": "#/definitions/generics/Person"
              }
            ]
          },
          "parentOrganization": {
            "type": "object",
            "properties": {
              "@type": {
                "const": "SportsOrganization"
              },
              "name": {
                "$ref": "#/definitions/generics/name"
              },
              "sameAs": {
                "$ref": "#/definitions/generics/url"
              }
            },
            "required": [
              "@type",
              "name"
            ]
          }
        },
        "required": [
          "@type",
          "name"
        ]
      },
      "TelevisionChannel": {
        "$id": "#/definitions/livetv/TelevisionChannel",
        "type": "object",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@type": {
            "const": "TelevisionChannel"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "broadcastChannelId": {
            "$ref": "#/definitions/generics/string"
          },
          "channelOrder": {
            "type": "integer",
            "minimum": 1
          },
          "broadcastServiceTier": {
            "anyOf": [
              {
                "enum": [
                  "Free",
                  "Standard",
                  "Premium",
                  "free",
                  "standard",
                  "premium"
                ]
              },
              {
                "type": "array",
                "items": {
                  "enum": [
                    "Free",
                    "Standard",
                    "Premium",
                    "free",
                    "standard",
                    "premium"
                  ]
                }
              }
            ]
          },
          "inBroadcastLineup": {
            "$ref": "#/definitions/livetv/CableOrSatelliteService-reference"
          },
          "providesBroadcastService": {
            "$ref": "#/definitions/livetv/BroadcastService-reference"
          }
        },
        "required": [
          "@type",
          "@id",
          "broadcastChannelId",
          "inBroadcastLineup",
          "providesBroadcastService"
        ]
      },
      "broadcastOfEvent": {
        "$id": "#/definitions/livetv/broadcastOfEvent",
        "type": "object",
        "properties": {
          "@type": {
            "enum": [
              "SportsEvent",
              "MusicEvent",
              "Event"
            ]
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          }
        },
        "required": [
          "@type",
          "@id"
        ]
      }
    },
    "radio": {
      "ActionAccessSpecification": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "ActionAccessSpecification"
          },
          "category": {
            "$ref": "#/definitions/music/category"
          },
          "availabilityStarts": {
            "$ref": "#/definitions/generics/date-time"
          },
          "availabilityEnds": {
            "$ref": "#/definitions/generics/date-time"
          },
          "eligibleRegion": {
            "$ref": "#/definitions/generics/region_required"
          },
          "ineligibleRegion": {
            "$ref": "#/definitions/generics/region"
          },
          "requiresSubscription": {
            "anyOf": [
              {
                "$ref": "#/definitions/radio/MediaSubscription"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/radio/MediaSubscription"
                }
              }
            ]
          }
        },
        "required": [
          "@type",
          "category"
        ],
        "$id": "#/definitions/radio/ActionAccessSpecification"
      },
      "BroadcastFrequencySpecification": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "BroadcastFrequencySpecification"
          },
          "broadcastFrequencyValue": {
            "$ref": "#/definitions/generics/string"
          },
          "broadcastSignalModulation": {
            "enum": [
              "FM",
              "AM",
              "HD",
              "DAB",
              "DAB+"
            ]
          },
          "broadcastSubChannel": {
            "$ref": "#/definitions/generics/string"
          }
        },
        "required": [
          "@type",
          "broadcastFrequencyValue",
          "broadcastSignalModulation"
        ],
        "$id": "#/definitions/radio/BroadcastFrequencySpecification"
      },
      "ListenAction": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "ListenAction"
          },
          "target": {
            "anyOf": [
              {
                "$ref": "#/definitions/music/EntryPoint"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/music/EntryPoint"
                }
              }
            ]
          },
          "actionAccessibilityRequirement": {
            "anyOf": [
              {
                "$ref": "#/definitions/radio/ActionAccessSpecification"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/radio/ActionAccessSpecification"
                }
              }
            ]
          }
        },
        "required": [
          "@type",
          "target",
          "actionAccessibilityRequirement"
        ],
        "$id": "#/definitions/radio/ListenAction"
      },
      "MediaSubscription": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "MediaSubscription"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "name": {
            "$ref": "#/definitions/generics/string"
          },
          "sameAs": {
            "$ref": "#/definitions/generics/url"
          },
          "expectsAcceptanceOf": {
            "$ref": "#/definitions/radio/Offer"
          }
        },
        "required": [
          "@type",
          "name",
          "@id"
        ],
        "$id": "#/definitions/radio/MediaSubscription"
      },
      "Offer": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "Offer"
          },
          "price": {
            "type": "number",
            "exclusiveMinimum": 0.0
          },
          "priceCurrency": {
            "$ref": "#/definitions/generics/priceCurrency"
          },
          "seller": {
            "$ref": "#/definitions/generics/Organization"
          }
        },
        "required": [
          "@type",
          "price",
          "priceCurrency"
        ],
        "$id": "#/definitions/radio/Offer",
        "comment": "Same as #/definitions/vod/Offer"
      },
      "RadioBroadcastService": {
        "description": "This schema matches Entity with type RadioBroadcastService",
        "type": "object",
        "properties": {
          "@context": {
            "$ref": "#/definitions/generics/@context"
          },
          "@type": {
            "const": "RadioBroadcastService"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "url": {
            "$ref": "#/definitions/generics/url-language"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "alternateName": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/name-optional"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/name-optional"
                }
              }
            ]
          },
          "callSign": {
            "$ref": "#/definitions/generics/string"
          },
          "broadcastDisplayName": {
            "$ref": "#/definitions/generics/name-optional"
          },
          "description": {
            "$ref": "#/definitions/generics/name"
          },
          "slogan": {
            "$ref": "#/definitions/generics/string"
          },
          "logo": {
            "$ref": "#/definitions/generics/image"
          },
          "broadcastFrequency": {
            "anyOf": [
              {
                "$ref": "#/definitions/radio/BroadcastFrequencySpecification"
              },
              {
                "$ref": "#/definitions/generics/string"
              }
            ]
          },
          "areaServed": {
            "$ref": "#/definitions/radio/areaServed"
          },
          "broadcastAffiliateOf": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Organization"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/Organization"
                }
              }
            ]
          },
          "broadcaster": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/Organization"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/Organization"
                }
              }
            ]
          },
          "parentService": {
            "$ref": "#/definitions/radio/RadioBroadcastService_identifier"
          },
          "potentialAction": {
            "anyOf": [
              {
                "$ref": "#/definitions/radio/ListenAction"
              },
              {
                "type": "array",
                "minItems": 1,
                "items": {
                  "$ref": "#/definitions/radio/ListenAction"
                }
              }
            ]
          },
          "popularityScore": {
            "$ref": "#/definitions/generics/PopularityScoreSpecification"
          },
          "inLanguage": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/string"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/string"
                }
              }
            ]
          },
          "keywords": {
            "anyOf": [
              {
                "$ref": "#/definitions/generics/string"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/definitions/generics/string"
                }
              }
            ]
          },
          "identifier": {
            "$ref": "#/definitions/generics/PropertyValue"
          },
          "sameAs": {
            "$ref": "#/definitions/generics/url-language"
          }
        },
        "required": [
          "@context",
          "@type",
          "@id",
          "url",
          "name",
          "broadcastDisplayName",
          "description",
          "broadcastFrequency",
          "areaServed",
          "broadcaster",
          "potentialAction"
        ],
        "$id": "#/definitions/radio/RadioBroadcastService"
      },
      "RadioBroadcastService_identifier": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "RadioBroadcastService"
          },
          "@id": {
            "$ref": "#/definitions/generics/url"
          },
          "name": {
            "$ref": "#/definitions/generics/name"
          },
          "sameAs": {
            "$ref": "#/definitions/generics/url-optional"
          }
        },
        "required": [
          "@type",
          "@id",
          "name"
        ],
        "$id": "#/definitions/radio/RadioBroadcastService_identifier"
      },
      "areaServed": {
        "anyOf": [
          {
            "const": "EARTH"
          },
          {
            "properties": {
              "@type": {
                "enum": [
                  "City",
                  "State",
                  "Country",
                  "AdministrativeArea"
                ]
              },
              "name": {
                "$ref": "#/definitions/generics/string"
              }
            },
            "required": [
              "@type",
              "name"
            ]
          },
          {
            "type": "array",
            "items": {
              "properties": {
                "@type": {
                  "enum": [
                    "City",
                    "State",
                    "Country",
                    "AdministrativeArea"
                  ]
                },
                "name": {
                  "$ref": "#/definitions/generics/string"
                }
              },
              "required": [
                "@type",
                "name"
              ]
            }
          }
        ],
        "$id": "#/definitions/radio/areaServed"
      }
    }
  }
}