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
@contextstringMust be https://obsazovacky.info/schema/v1
@typestringMust 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
@typestringMust be Tournament
namestringTournament name
startDatestringISO 8601 date or datetime (2026-04-15 or 2026-04-15T00:00:00)
endDatestringISO 8601; defaults to startDate
alleystringName of the bowling alley
citystringCity
statestringCountry 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
@typestringMust be TournamentRound
namestringRound name (e.g. 1. Runda, Morning Flight)
startDatestringISO 8601 datetime with time (2026-04-15T10:00:00)
alleystringAlley name for this round (can differ from tournament alley)
capacityintegerMaximum number of players
registeredintegerNumber of currently registered players
playersRegisteredPlayer[]List of registered players

RegisteredPlayer

FieldTypeRequiredDescription
@typestringMust be RegisteredPlayer
firstNamestringFirst name
lastNamestringLast name
teamNamestringTeam name
readybooleanPlayer confirmed (default: false)
substitutebooleanSubstitute player (default: false)
statestringCountry 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.