Identify the relationship between entity types

Some entity types require you to establish the relationship between the content in your feed. This information helps Google display the proper order and structure of your content to users and identify the correct content when a user's query is ambiguous.

Select the type of content that you provide:

If you're a TV show provider, you need to add the TVEpisode, TVSeason, and TVSeries entity types in your media catalog feed. You can find the definitions for these entities in the Understand the available entity types section by filtering for these types.

Identify the relationships

Ensure the following relationships are established among them:

Figure: The partOfSeries and partOfSeason properties connect the TV show entity types together.
  • A TVEpisode entity requires you to provide the partOfSeries property, which specifies the @id and name of the episode's TVSeries entity.

    "partOfSeries": {
      "@type": "TVSeries",
      "@id": "http://www.example.com/my_favorite_tv_show",
      "name": "My Favorite TV Show",
    },
    
  • If your feed contains TV seasons, a TVSeason entity also requires you to specify its TVSeries entity in the partOfSeries property.

  • A TVEpisode entity requires you to provide the partOfSeason property, which specifies the @id and seasonNumber of the episode's TVSeason entity.

    "partOfSeason": {
      "@type": "TVSeason",
      "@id": "http://www.example.com/my_favorite_tv_show/s7",
      "seasonNumber": 7
    },
    

    If a TVEpisode entity doesn't have a corresponding TVSeason entity in the feed, take the following steps to provide the partOfSeason.@id and partOfSeason.seasonNumber properties for the TVEpisode entity:

    • Take its partofSeries.@id and attach a placeholder query field (for example, ?season1) to create a unique partOfSeason.@id (for example, http://www.example.com/my_favorite_tv_show?season1).
    • Set partOfSeason.seasonNumber to 1.
    Later, if you decide to provide TV seasons in the feed, you can either reuse the existing partOfSeason.@id for the corresponding TVSeason entity or replace this placeholder partOfSeason.@id with the actual @id of the TVSeason entity.

Example

My Favorite TV Show

{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type": "TVSeries",
  "@id": "http://www.example.com/my_favorite_tv_show",
  "url": "http://www.example.com/my_favorite_tv_show",
  "name": "My Favorite TV Show",
  "potentialAction":{  },
  ...
}

My Favorite TV Show (season 7)

{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type": "TVSeason",
  "@id": "http://www.example.com/my_favorite_tv_show/s7",
  "url": "http://www.example.com/my_favorite_tv_show/s7",
  "name": "My Favorite TV Show, Season 7",
  "seasonNumber": 7,
  "partOfSeries": {
    "@type": "TVSeries",
    "@id": "http://www.example.com/my_favorite_tv_show",
    "name": "My Favorite TV Show",
  },
  "potentialAction":{  },
  ...
}

Episode 3 of My Favorite TV Show (season 7)

{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type": "TVEpisode",
  "@id": "http://www.example.com/my_favorite_tv_show/s7/e3",
  "url": "http://www.example.com/my_favorite_tv_show/s7/e3",
  "name": "John Doe returns at night",
  "episodeNumber": 3,
  "partOfSeason": {
    "@type": "TVSeason",
    "@id": "http://www.example.com/my_favorite_tv_show/s7",
    "seasonNumber": 7
  },
  "partOfSeries": {
    "@type": "TVSeries",
    "@id": "http://www.example.com/my_favorite_tv_show",
    "name": "My Favorite TV Show",
  },
  "potentialAction":{  },
  ...
}

If you're a radio provider, you need to add the RadioBroadcastService entity type in your media catalog feed. You can find the definitions for these entities in the Understand the available entity types section by filtering for this type.

Identify the relationships

Since there is only one entity type for such integrations, while there are no explicit relationships that need to be established, ensure that you collect the following information for the RadioBroadcastService entities:

  • description: The description of the radio station.
  • broadcastDisplayName: The display name of the radio station.
  • areaServed: The area where the radio station is available.
  • callSign: The official government-issued callsign of the radio station. For North America radio stations, this property is required.
  • broadcastFrequency: The frequency specification of the radio station.
    • For terrestrial AM/FM radio stations, this property is required.
    • For online streaming-only content, the value is set to INTERNET_STREAM.
  • broadcastAffiliateOf: The network of which this radio station provides programming. If the radio station is not part of any affiliation, this property is not required.
  • broadcaster: The organization who owns and operates the radio station.
  • parentService: The parent radio station. If the radio station is a repeater or translator of another radio station, this property is required.

Example

{
  "@context": "http://schema.googleapis.com",
  "@type": "RadioBroadcastService",
  "@id": "https://www.example.com/stations?id=1",
  "url": "https://www.example.com/stations?id=1",
  "name": "KABC",
  "callSign": "KABC-FM",
  "broadcastDisplayName": "KABC",
  "description": "Local News & Information",
  "broadcastFrequency": {
    "@type": "BroadcastFrequencySpecification",
    "broadcastFrequencyValue": "89.5",
    "broadcastSignalModulation": "FM",
    "broadcastSubChannel": "HD1"
  },
  "areaServed": {
    "@type": "City",
    "name": "San Francisco, CA"
  },
  "broadcastAffiliateOf": [
    {
      "@id": "https://www.example.com/networks/xyz",
      "@type": "Organization",
      "name": "XYZ",
      "sameAs": "https://en.wikipedia.org/wiki/XYZ"
    },
    {
      "@id": "https://www.example.com/networks/efg",
      "@type": "Organization",
      "name": "EFG",
      "sameAs": "https://www.example.com/"
    }
  ],
  "broadcaster": [
    {
      "@type": "Organization",
      "name": "California Local Public Broadcasting",
      "sameAs": "https://www.example.org/w/clpb/"
    },
    {
      "@type": "Organization",
      "sameAs": "https://www.example.org/kabc",
      "name": "KABC Inc"
    }
  ],
  "potentialAction": {  },
  
}

If you're a music provider, you need to add the MusicGroup, MusicAlbum, and MusicRecording entity types in your media catalog feed. You can find the definitions for these entities in the Understand the available entity types section by filtering for these types.

MusicGroup, MusicAlbum, and MusicRecording let your app or platform play more content from a playlist (MusicPlaylist) once all the content from the seed entity is played. Check out the following scenario:

  • A MusicAlbum entity contains a list of songs from Album XYZ (a seed entity).
  • A MusicPlaylist entity contains a playlist of songs that are similar to the songs from Album XYZ.
  • The MusicAlbum entity includes the MusicPlaylist entity as an Entity-seeded Action.

In this setup, once all the songs from Album XYZ are played, your app can continue to play songs from the playlist provided by the MusicPlaylist entity.

Entity Action and Entity-seeded Action

Listen Actions support two types of Actions:

  • Entity Action: Plays a specific artist, album, or song (a seed entity). It includes MusicGroup, MusicAlbum, MusicRecording.
  • Entity-seeded Action: Plays content similar to the seed entity. It includes MusicPlaylist.
    • After completing an Entity Action, your app or platform may initiate an Entity-seeded Action.
    • An Entity-seeded Action can include playback of the content from the seed entity.

We recommend you include an Entity-seeded Action in every Entity Action.

Identify the relationships

  • For MusicGroup, if you provide an Entity-seeded Action, identify @id and name of its MusicPlaylist.
  • For MusicAlbum and MusicRecording, you need to identify which MusicGroup they belong to.
    • Identify @id and name of its MusicGroup.
    • If you provide an Entity-seeded Action, identify @id and name of its MusicPlaylist.
  • For MusicPlaylist,
    • If applicable, identify genre that best represents the content in the playlist.
    • If the playlist is hand curated, identify numTracks.
      • The absence of numTracks tells Google that the playlist is an auto-generated, endless playlist.

Example

  • Artist: My Favorite Artist
{
  "@context":"http://schema.googleapis.com/",
  "@type":"MusicGroup",
  "@id":"http://www.example.com/artist/my_favorite_artist/",
  "url":"http://www.example.com/artist/my_favorite_artist/",
  "name":"My Favorite Artist",
  "potentialAction":{  },
  "subjectOf": {
    "@type":"MusicPlaylist",
    "@id":"http://www.example.com/artist_mix/my_favorite_artist/",
    "url":"http://www.example.com/artist_mix/my_favorite_artist/",
    "name":"My Favorite Artist Mix",
    "potentialAction":{  },
  },
  ...
}
  • Album: My Favorite Album
  • Artist: My Favorite Artist
{
  "@context":"http://schema.googleapis.com/",
  "@type":"MusicAlbum",
  "@id":"http://www.example.com/album/my_favorite_album",
  "url":"http://www.example.com/album/my_favorite_album",
  "name":"My Favorite Album",
  "byArtist":{
    "@type":"MusicGroup",
    "@id": "http://www.example.com/artist/my_favorite_artist/",
    "name":"My Favorite Artist"
  },
  "potentialAction":{  },
  "subjectOf": {
    "@type":"MusicPlaylist",
    "@id":"http://www.example.com/album_mix/my_favorite_album",
    "url":"http://www.example.com/album_mix/my_favorite_album",
    "name":"My Favorite Album Mix",
    "potentialAction":{  },
  },
  ...
}
  • Song: My Favorite Song
  • Artist: My Favorite Artist
{
  "@context":"http://schema.googleapis.com/",
  "@type":"MusicRecording",
  "@id":"http://www.example.com/track/my_favorite_song",
  "url":"http://www.example.com/track/my_favorite_song",
  "name":"My Favorite Song",
  "byArtist":{
    "@type":"MusicGroup",
    "@id": "http://www.example.com/artist/my_favorite_artist/",
    "name":"My Favorite Artist"
  },
  "potentialAction":{  },
  "subjectOf": {
    "@type":"MusicPlaylist",
    "@id":"http://www.example.com/track_mix/my_favorite_song",
    "url":"http://www.example.com/track_mix/my_favorite_song",
    "name":"My Favorite Song Mix",
    "potentialAction":{  },
  },
  ...
}
  • A custom playlist: "Top Pop Songs of the 2010s"
{
  "@context":"http://schema.googleapis.com/",
  "@type":"MusicPlaylist",
  "@id":"http://www.example.com/playlist/top_pop_songs/",
  "url":"http://www.example.com/playlist/top_pop_songs/",
  "name":"Top Pop Songs of the 2010s",
  "genre": [
     "pop",
     "2010s"
  ],
  "numTracks":"46",
  "potentialAction":{  },
  ...
}

If you're a Live TV provider, you need to add the Organization, BroadcastService, CableOrSatelliteService, and TelevisionChannel entity types in your media catalog feed to represent your channel lineup. You may also need to provide the BroadcastEvent, TVSeries, TVEpisode, Movie, and SportsEvent entities to represent the associated EPG (electornic programming guide). You can find the definitions for these entities in the Understand the available entity types section by filtering for these types. For a more detailed explanation, you can visit the Live TV Channels page.

Relationships between entities representing Live TV channels

The figure below shows how the Organization, BroadcastService, CableOrSatelliteService, and TelevisionChannel entities are related:

The links between the Live TV channel entity types
Figure: The links between the Live TV channel entity types.

  • Organization (operator) entity representing the feed provider and also the parent organization of CableOrSatelliteService service are connected using the provider property on the CableOrSatelliteService entity.
  • Organization entities corresponding to the BroadcastService entities are connected using the broadcastAffiliateOf property on the BroadcastService entity.
  • TelevisionChannel entities connect with the CableOrSatelliteService entity, that represents the lineup they belong to, using the inBroadcastLineup property.
  • TelevisionChannel entities connect with the BroadcastService entity, whose programming this channel provides, using the providesBroadcastService property.

It is highly recommended to go through the Live TV channels concept page for concrete examples of how the relationship between the BroadcastService and Organization entities needs to be established.

Relationships between channels and their programming guide (EPG)

The figure below shows how the BroadcastEvent entity links to the rest of the entities in the feed.

The links between the Live TV event entity types
Figure: The links between the Live TV event entity types.

  • BroadcastEvent entities, representing the programming guide (EPG) of a BroadcastService, are connected with the BroadcastService entities using the publishedOn property on the BroadcastEvent entity.
  • BroadcastEvent entities can also be connected to top level TVEpisode, TVSeries, Movie entities using the workPerformed property.
  • BroadcastEvent entities can also be connected to top level SportsEvent entities using the broadcastOfEvent property.
  • For channel-less events streamed online, theBroadcastEvent entities connect with the entity representing the live event using either the workPerformed or broadcastOfEvent property depending on what is being live streamed. In such cases, the publishedOn property is not required since the connection to a channel is not required.

Examples

The following section provides examples and snippet for various Watch Action use cases.

National TV service provider on the internet

A fictional Internet Protocol Television service provider, ExampleTV Digital Service (Organization), provides Live TV service on the Internet, which contains the following two channels: ExampleTV-Movie (Organization) and ExampleTV-Comedy (Organization):

{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type":"Organization",
  "@id":"http://example.com/exampletv/digital",
  "name":"ExampleTV Digital Service",
  "sameAs": "https://en.wikipedia.org/wiki/exampletv_digital_service"
},
{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type":"Organization",
  "@id":"http://example.com/exampletv/movie",
  "name":"ExampleTV Movie",
  "sameAs": "https://en.wikipedia.org/wiki/exampletv_movie"
},
{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type":"Organization",
  "@id":"http://example.com/exampletv/comedy",
  "name":"ExampleTV Comedy",
  "sameAs": "https://en.wikipedia.org/wiki/exampletv_comedy"
}

These two BroadcastService entities provide the details of deep links and access requirement for the fictional channels ExampleTV-Movie and ExampleTV-Comedy:

{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type":"BroadcastService",
  "@id":"https://www.example.com/exampletv/broadcast/movie",
  "name": "ExampleTV-Movie",
  "alternateName": [
    "Example Television Movie",
    "Example TV Movie"
  ],
  "description": "A fictional Internet Protocol TV movie channel.",
  "broadcastDisplayName":"ExampleTV-Movie",
  "broadcastAffiliateOf":{
    "@type":"Organization",
    "@id":"http://www.example.com/exampletv/movie"
  },
  "potentialAction": {
    "@type": "WatchAction",
    "target": {
      "@type": "EntryPoint",
      "urlTemplate": "http://www.example.com/exampletv/broadcast/movie?autoplay=true",
      "inLanguage": "en",
      "actionPlatform": [
        "http://schema.org/DesktopWebPlatform",
        "http://schema.org/MobileWebPlatform",
        "http://schema.org/AndroidPlatform",
        "http://schema.org/AndroidTVPlatform",
        "http://schema.org/IOSPlatform",
        "http://schema.googleapis.com/GoogleVideoCast"
      ]
    },
    "actionAccessibilityRequirement": {
      "@type": "ActionAccessSpecification",
      "category": "subscription",
      "requiresSubscription": {
        "@type": "MediaSubscription",
        "@id": "http://www.example.com/exampletv/basic_subscription",
        "name": "Basic subscription",
        "identifier": "example.com:basic",
        "commonTier": true
      },
      "eligibleRegion": [
        {
          "@type": "Country",
          "name": "US"
        }
      ]
    }
  },
  "identifier": [
    {
      "@type": "PropertyValue",
      "propertyID": "TMS_ID",
      "value": "12345"
    },
    {
      "@type": "PropertyValue",
      "propertyID": "_PARTNER_ID_",
      "value": "exampletv-movie-33345"
    }
  ]
},
{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type":"BroadcastService",
  "@id":"https://www.example.com/exampletv/broadcast/comedy",
  "name": "ExampleTV-Comedy",
  "alternateName": [
    "Example Television Comedy",
    "Example TV Comedy"
  ],
  "description": "A fictional Internet Protocol TV comedy channel.",
  "broadcastDisplayName":"ExampleTV-Comedy",
  "broadcastAffiliateOf":{
    "@type":"Organization",
    "@id":"http://www.example.com/exampletv/comedy"
  },
  "potentialAction": {
    "@type": "WatchAction",
    "target": {
      "@type": "EntryPoint",
      "urlTemplate": "http://www.example.com/exampletv/broadcast/comedy?autoplay=true",
      "inLanguage": "en",
      "actionPlatform": [
        "http://schema.org/DesktopWebPlatform",
        "http://schema.org/MobileWebPlatform",
        "http://schema.org/AndroidPlatform",
        "http://schema.org/AndroidTVPlatform",
        "http://schema.org/IOSPlatform",
        "http://schema.googleapis.com/GoogleVideoCast"
      ]
    },
    "actionAccessibilityRequirement": {
      "@type": "ActionAccessSpecification",
      "category": "subscription",
      "requiresSubscription": {
        "@type": "MediaSubscription",
        "@id": "http://www.example.com/exampletv/basic_subscription",
        "name": "Basic subscription",
        "identifier": "example.com:basic",
        "commonTier": true
      },
      "eligibleRegion": [
        {
          "@type": "Country",
          "name": "US"
        }
      ]
    }
  },
  "identifier": [
    {
      "@type": "PropertyValue",
      "propertyID": "TMS_ID",
      "value": "15555"
    },
    {
      "@type": "PropertyValue",
      "propertyID": "_PARTNER_ID_",
      "value": "exampletv-comedy-12323"
    }
  ]
}

This CableOrSatelliteService describes the service provider ExampleTV Digital Service that has national coverage:

{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type":"CableOrSatelliteService",
  "@id":"http://example.com/example_iptv/us",
  "name":"Example TV Digital Service - US",
  "provider": {
    "@type": "Organization",
    "@id": "http://example.com/exampletv/digital",
  },
  "areaServed":[
    {
      "@type":"Country",
      "name": "US",
    }
  ]
}

These TelevisionChannel entities indicate that ExampleTV Digital Service IPTV has the ExampleTV Movie programming on channel ExTV-Movie and the ExampleTV Comedy programming on channel ExTV-Comedy:

{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type":"TelevisionChannel",
  "@id":"http://example.com/exampletv/extv-movie",
  "broadcastChannelId":"ExTV-Movie",
  "broadcastServiceTier":"Basic",
  "inBroadcastLineup":{
    "@type":"CableOrSatelliteService",
    "@id":"http://example.com/example_iptv/us"
  },
  "providesBroadcastService":{
    "@type":"BroadcastService",
    "@id":"https://www.example.com/exampletv/broadcast/movie"
  }
},
{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type":"TelevisionChannel",
  "@id":"http://example.com/exampletv/extv-comedy",
  "broadcastChannelId":"ExTV-Comedy",
  "broadcastServiceTier":"Basic",
  "inBroadcastLineup":{
    "@type":"CableOrSatelliteService",
    "@id":"http://example.com/example_iptv/us"
  },
  "providesBroadcastService":{
    "@type":"BroadcastService",
    "@id":"https://www.example.com/exampletv/broadcast/comedy"
  }
}

See the Live TV examples section for more examples.

Broadcast of a Movie on a TV channel

A movie is broadcast on the television network Example TV (BroadcastService) between 5 pm and 7 pm on July 12th, 2019.

{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type": "BroadcastEvent",
  "@id": "http://example.com/live/movie/new_release",
  "name": "My Favorite Movie",
  "description": "John Doe spent years perfecting his survival skills in a tropical jungle.",
  "startDate": "2019-07-12T17:00-08:00",
  "endDate": "2019-07-12T19:00-08:00",
  "videoFormat": "HD",
  "isLiveBroadcast": "False",
  "publishedOn": {
    "@type": "BroadcastService",
    "@id": "http://example.com/stations/example_tv"
  },
  "workPerformed": {
    "@type": "Movie",
    "@id": "http://www.example.com/my_favorite_movie"
  }
}
{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type":"BroadcastService",
  "@id":"http://example.com/stations/example_tv",
  "name":"EXAMPLE-TV",
  "broadcastDisplayName":"ABCD",
  "callSign": "EXA-TV",
  "videoFormat":"SD",
  "broadcastTimezone":"America/Los_Angeles",
  "broadcastAffiliateOf":{
    "@type":"Organization",
    "@id":"http://example.com/networks/abcd-network",
  }
  "identifier": [
   {
     "@type": "PropertyValue",
     "propertyID": "TMS_ID",
     "value": "12258"
   },
   {
     "@type": "PropertyValue",
     "propertyID": "_PARTNER_ID_",
     "value": "exampletv-123456"
   }
  ],
  "potentialAction": {
    "@type": "WatchAction",
    "target": {
      "@type": "EntryPoint",
      "urlTemplate": "http://example.com/livestream",
      "actionPlatform": [
        "http://schema.org/DesktopWebPlatform",
        "http://schema.org/MobileWebPlatform",
        "http://schema.org/AndroidPlatform",
        "http://schema.org/IOSPlatform",
        "http://schema.googleapis.com/GoogleVideoCast",
        "http://schema.org/AndroidTVPlatform"
      ]
    },
    "actionAccessibilityRequirement": {
      "@type": "ActionAccessSpecification",
      "category": "externalsubscription",
      "availabilityStarts": "2018-07-21T10:35:29Z",
      "availabilityEnds": "2019-10-21T10:35:29Z",
      "requiresSubscription": {
        "@type": "MediaSubscription",
        "@id": "http://example.com/subscription",
        "name": "ABCD",
        "sameAs": "http://example.com/subscription",
        "authenticator": {
          "@type": "Organization",
          "name": "TVE"
        }
      },
      "eligibleRegion": [
        {
          "@type": "Country",
          "name": "US"
        }
      ]
    }
  }
}
{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type": "Movie",
  "@id": "http://www.example.com/my_favorite_movie",
  "url": "http://www.example.com/my_favorite_movie",
  "name": "My Favorite Movie",
  "sameAs": "https://en.wikipedia.org/wiki/my_favorite_movie",
  "releasedEvent": {
    "@type": "PublicationEvent",
    "startDate": "2008-01-20",
    "location": {
      "@type": "Country",
      "name": "US"
    }
  },
  "description": "John Doe spent years perfecting his survival skills in a tropical jungle.",
  "actor": [
    {
      "@type": "Person",
      "name": "John Doe",
      "sameAs": "https://en.wikipedia.org/wiki/John_Doe"
    },
    {
      "@type": "Person",
      "name": "Jane Doe",
      "sameAs": "https://en.wikipedia.org/wiki/Jane_Doe"
    }
  ],
  "identifier": [
    {
      "@type": "PropertyValue",
      "propertyID": "IMDB_ID",
      "value":  "tt0123456"
    }
  ]
}

See the Live TV Event examples section for more examples.

A live sports game streamed online


{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type": "BroadcastEvent",
  "@id": "http://example.com/live_eevent/basketball/professional/final_game_6",
  "name": "2019 Professional Basketball Finals, Game 6: Team A at Team B",
  "description": "Game 6 of the 2019 Professional Basketball Finals. Team A leads the series 3-2 against Team B.",
  "startDate": "2018-09-16T10:00-08:00",
  "endDate": "2018-09-16T13:00-08:00",
  "videoFormat": "HD",
  "isLiveBroadcast": "False",
  "potentialAction": {
    "@type": "WatchAction",
    "target": {
      "@type": "EntryPoint",
      "urlTemplate": "http://www.example.com/pbl_semis_game?autoplay=true",
      "inLanguage": "en",
      "actionPlatform": [
        "http://schema.org/DesktopWebPlatform",
        "http://schema.org/MobileWebPlatform",
        "http://schema.org/AndroidPlatform",
        "http://schema.org/AndroidTVPlatform",
        "http://schema.org/IOSPlatform",
        "http://schema.googleapis.com/GoogleVideoCast"
      ]
    },
    "actionAccessibilityRequirement": {
      "@type": "ActionAccessSpecification",
      "category": "subscription",
      "availabilityStarts": "2018-09-16T10:00-08:00",
      "availabilityEnds": "2018-09-16T10:00-08:00",
      "requiresSubscription": {
        "@type": "MediaSubscription",
        "name": "Example Package",
        "commonTier": true,
        "@id": "http://www.example.com/example_package"
      },
      "eligibleRegion": [
        {
          "@type": "Country",
          "name": "US"
        }
      ]
    }
  },
  "broadcastOfEvent": {
    "@type": "SportsEvent",
    "@id": "http://example.com/basketball/professional/final_game_6"
  }
}

{
  "@context": ["http://schema.org", {"@language": "en"}],
  "@type":"SportsEvent",
  "@id": "http://example.com/basketball/professional/final_game_6",
  "name":"2019 Professional Basketball Finals, Game 6: Team A vs Team B",
  "sport":"https://en.wikipedia.org/wiki/Basketball",
  "description": {
      "@language": "en",
      "@value": "Game 6 of the 2019 Professional Basketball Finals. Team A leads the series 3-2 against Team B."
    },
  "startDate": "2019-09-16T10:00-08:00",
  "endDate": "2019-09-16T13:00-08:00",
  "homeTeam":{
    "@type":"SportsTeam",
    "name":"Team B",
    "sport":"https://en.wikipedia.org/wiki/Basketball",
    "parentOrganization":{
      "@type":"SportsOrganization",
      "name":"Professional Basketball League",
      "sameAs":"http://www.example.com/professional_basketball_league"
    },
    "athlete":[
      {
        "@type":"Person",
        "name":"John doe"
      }
    ]
  },
  "awayTeam":{
    "@type":"SportsTeam",
    "name":"Team A",
    "sport":"https://en.wikipedia.org/wiki/Basketball",
    "athlete":[
      {
        "@type":"Person",
        "name":"Jane Doe"
      }
    ]
  },
  "location":{
    "@type":"Place",
    "name":"Example Stadium",
    "address":{
      "@type":"PostalAddress",
      "streetAddress":"1600 Amphitheatre Pkwy",
      "addressLocality":"Mountain View",
      "addressRegion":"CA",
      "postalCode":"94043",
      "addressCountry":"US"
    }
  },
  "identifier": [
    {
      "@type": "PropertyValue",
      "propertyID": "TMS_ID",
      "value":  "TMS ID of this game"
    }
  ]
}

See the Sports examples section for more examples.