Context URL: https://obsazovacky.info/schema/v1

Embed one or more <script type="application/ld+json"> blocks in your HTML pages using this schema. The Obsazovačky crawler will discover and import your tournament data automatically.

How It Works

  1. Fetch the list URL you registered.
  2. Find all JSON-LD blocks with @type: "TournamentList".
  3. For each tournament:
    • If rounds are present → use directly.
    • If rounds are absent but url is present → fetch that URL and look for a @type: "Tournament" block.
  4. Follow nextPage links until all pages are processed (max 100 pages).
  5. Refresh according to the Period (hours) you set on registration.

Types

TournamentList – embed on list pages

FieldTypeRequiredDescription
@contextstring✓Must be https://obsazovacky.info/schema/v1
@typestring✓Must be TournamentList
tournamentsTournament[]✓Array of tournaments (may be empty)
nextPagestring (URL)—URL of the next list page (omit if none)

Tournament – inline or on detail page

FieldTypeRequiredDescription
@contextstring✓*Required only when used standalone on a detail page
@typestring✓Must be Tournament
namestring✓Tournament name
startDatestring✓ISO 8601 date or datetime (2026-04-15 or 2026-04-15T00:00:00)
endDatestring—ISO 8601; defaults to startDate
alleystring—Name of the bowling alley
citystring—City
statestring—Country code or name (e.g. cz, Slovakia, Netherlands)
urlstring (URL)—Link to the detail page. If rounds is absent, the crawler fetches this URL.
roundsTournamentRound[]—Rounds. If omitted and url is set, fetched from detail page.
If a Tournament inside a TournamentList has neither rounds nor url, it is skipped.

TournamentRound

FieldTypeRequiredDescription
@typestring✓Must be TournamentRound
namestring✓Round name (e.g. 1. Runda, Morning Flight)
startDatestring✓ISO 8601 datetime with time (2026-04-15T10:00:00)
alleystring—Alley name for this round (can differ from tournament alley)
capacityinteger—Maximum number of players
registeredinteger—Number of currently registered players
playersRegisteredPlayer[]—List of registered players

RegisteredPlayer

FieldTypeRequiredDescription
@typestring✓Must be RegisteredPlayer
firstNamestring✓First name
lastNamestring✓Last name
teamNamestring—Team name
readyboolean—Player confirmed (default: false)
substituteboolean—Substitute player (default: false)
statestring—Country code or name (e.g. cz, Slovakia, Netherlands)

Examples

Variant A – Full data on the list page

<script type="application/ld+json">
{
  "@context": "https://obsazovacky.info/schema/v1",
  "@type": "TournamentList",
  "nextPage": "https://example.com/tournaments?page=2",
  "tournaments": [
    {
      "@type": "Tournament",
      "name": "Spring Open 2026",
      "alley": "Bowling Center Praha",
      "city": "Praha",
      "state": "cz",
      "startDate": "2026-04-15",
      "endDate": "2026-04-15",
      "rounds": [
        {
          "@type": "TournamentRound",
          "name": "1. Runda",
          "startDate": "2026-04-15T10:00:00",
          "alley": "Bowling Center Praha",
          "capacity": 24,
          "registered": 18,
          "players": [
            { "@type": "RegisteredPlayer", "firstName": "Jan", "lastName": "Novák", "ready": true },
            { "@type": "RegisteredPlayer", "firstName": "Eva", "lastName": "Procházková" }
          ]
        },
        {
          "@type": "TournamentRound",
          "name": "2. Runda",
          "startDate": "2026-04-15T14:00:00",
          "capacity": 24,
          "registered": 6,
          "players": []
        }
      ]
    }
  ]
}
</script>

Variant B – Partial data on list page, full data on detail page

List page – tournaments reference a detail URL, no rounds:

<script type="application/ld+json">
{
  "@context": "https://obsazovacky.info/schema/v1",
  "@type": "TournamentList",
  "tournaments": [
    { "@type": "Tournament", "name": "Spring Open 2026", "startDate": "2026-04-15", "city": "Praha", "state": "cz",
      "url": "https://example.com/tournaments/spring-open-2026" },
    { "@type": "Tournament", "name": "Summer Cup 2026", "startDate": "2026-06-01",
      "url": "https://example.com/tournaments/summer-cup-2026" }
  ]
}
</script>

Detail page (https://example.com/tournaments/spring-open-2026) – standalone Tournament:

<script type="application/ld+json">
{
  "@context": "https://obsazovacky.info/schema/v1",
  "@type": "Tournament",
  "name": "Spring Open 2026",
  "alley": "Bowling Center Praha",
  "city": "Praha",
  "state": "cz",
  "startDate": "2026-04-15",
  "rounds": [
    {
      "@type": "TournamentRound",
      "name": "1. Runda",
      "startDate": "2026-04-15T10:00:00",
      "capacity": 24,
      "registered": 18,
      "players": [ { "@type": "RegisteredPlayer", "firstName": "Jan", "lastName": "Novák", "ready": true } ]
    }
  ]
}
</script>

Variant C – Pagination (nextPage)

The crawler follows nextPage until it is absent or null. Maximum 100 pages per crawl run.

<!-- Page 1 -->
{ "@context": "https://obsazovacky.info/schema/v1", "@type": "TournamentList",
  "nextPage": "https://example.com/tournaments?page=2", "tournaments": [ ... ] }

<!-- Page 2 -->
{ "@context": "https://obsazovacky.info/schema/v1", "@type": "TournamentList",
  "nextPage": null, "tournaments": [ ... ] }

Notes

  • Dates without a time component (2026-04-15) are parsed as midnight UTC.
  • All fields are case-sensitive.
  • Unknown fields are silently ignored by the crawler.
  • The @context field inside TournamentList.tournaments[] items is optional and ignored.
  • Multiple TournamentList blocks on one page are all processed.
  • A standalone Tournament block on a detail page is matched to the tournament that linked to that URL.