{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Datové schéma distribuce Slovníku agendy A1381 – NADR",
  "description": "Strojově čitelné datové schéma JSON-LD distribuce Slovníku agendy A1381 – Pozemní komunikace a silniční správní úřady (NADR), určené k uvedení u distribuce v LKOD. Schéma vychází z OFN Slovníky 2026-02-26 a popisuje konkrétní publikační profil A1381.",
  "$comment": "Po zveřejnění lze doplnit $id odpovídající veřejné URL tohoto souboru. Základní OFN: https://ofn.gov.cz/slovníky/2026-02-26/cs/; schémata Slovník, Tezaurus a Konceptuální model a relevantní rozšíření jsou publikována pod touto verzí OFN.",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "@context",
    "iri",
    "typ",
    "název",
    "popis",
    "pojmy"
  ],
  "properties": {
    "@context": {
      "oneOf": [
        {
          "const": "https://ofn.gov.cz/slovníky/2026-02-26/kompletní/kontext.jsonld"
        },
        {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "contains": {
            "const": "https://ofn.gov.cz/slovníky/2026-02-26/kompletní/kontext.jsonld"
          },
          "items": {
            "$ref": "#/$defs/iri"
          }
        }
      ]
    },
    "iri": {
      "allOf": [
        {
          "$ref": "#/$defs/iri"
        },
        {
          "const": "https://slovník.gov.cz/slovník-agendy-a1381-nadr"
        }
      ]
    },
    "typ": {
      "type": "array",
      "uniqueItems": true,
      "items": {
        "type": "string",
        "enum": [
          "Slovník",
          "Tezaurus",
          "Konceptuální model"
        ]
      },
      "allOf": [
        {
          "contains": {
            "const": "Slovník"
          },
          "minContains": 1,
          "maxContains": 1
        },
        {
          "contains": {
            "const": "Tezaurus"
          },
          "minContains": 1,
          "maxContains": 1
        },
        {
          "contains": {
            "const": "Konceptuální model"
          },
          "minContains": 1,
          "maxContains": 1
        }
      ],
      "minItems": 3,
      "maxItems": 3
    },
    "název": {
      "$ref": "#/$defs/i18nTextCs"
    },
    "popis": {
      "$ref": "#/$defs/i18nTextCs"
    },
    "vytvořeno": {
      "$ref": "#/$defs/casovyOkamzik"
    },
    "aktualizováno": {
      "$ref": "#/$defs/casovyOkamzik"
    },
    "pojmy": {
      "type": "array",
      "minItems": 1,
      "items": {
        "$ref": "#/$defs/pojem"
      }
    }
  },
  "$defs": {
    "iri": {
      "type": "string",
      "minLength": 1,
      "pattern": "^[A-Za-z][A-Za-z0-9+.-]*:",
      "format": "iri"
    },
    "iriArray": {
      "type": "array",
      "minItems": 1,
      "uniqueItems": true,
      "items": {
        "$ref": "#/$defs/iri"
      }
    },
    "i18nText": {
      "type": "object",
      "minProperties": 1,
      "propertyNames": {
        "pattern": "^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$"
      },
      "additionalProperties": {
        "type": "string",
        "minLength": 1,
        "pattern": ".*\\S.*"
      }
    },
    "i18nTextCs": {
      "allOf": [
        {
          "$ref": "#/$defs/i18nText"
        }
      ],
      "required": [
        "cs"
      ]
    },
    "i18nTextArray": {
      "type": "object",
      "minProperties": 1,
      "propertyNames": {
        "pattern": "^[a-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$"
      },
      "additionalProperties": {
        "type": "array",
        "minItems": 1,
        "uniqueItems": true,
        "items": {
          "type": "string",
          "minLength": 1,
          "pattern": ".*\\S.*"
        }
      }
    },
    "typDigitalnihoObjektu": {
      "oneOf": [
        {
          "const": "Digitální objekt"
        },
        {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "contains": {
            "const": "Digitální objekt"
          },
          "items": {
            "type": "string",
            "minLength": 1
          }
        }
      ]
    },
    "digitalniObjekt": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "typ"
      ],
      "properties": {
        "typ": {
          "$ref": "#/$defs/typDigitalnihoObjektu"
        },
        "název": {
          "$ref": "#/$defs/i18nText"
        },
        "popis": {
          "$ref": "#/$defs/i18nText"
        },
        "url": {
          "$ref": "#/$defs/iri"
        }
      },
      "anyOf": [
        {
          "required": [
            "url"
          ]
        },
        {
          "required": [
            "název"
          ]
        },
        {
          "required": [
            "popis"
          ]
        }
      ]
    },
    "casovyOkamzik": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "typ"
      ],
      "properties": {
        "iri": {
          "$ref": "#/$defs/iri"
        },
        "typ": {
          "oneOf": [
            {
              "const": "Časový okamžik"
            },
            {
              "type": "array",
              "minItems": 1,
              "uniqueItems": true,
              "contains": {
                "const": "Časový okamžik"
              },
              "items": {
                "type": "string",
                "minLength": 1
              }
            }
          ]
        },
        "je_nespecifikovaný": {
          "type": "boolean"
        },
        "datum": {
          "type": "string",
          "format": "date"
        },
        "datum_a_čas": {
          "type": "string",
          "format": "date-time"
        }
      },
      "anyOf": [
        {
          "required": [
            "datum"
          ]
        },
        {
          "required": [
            "datum_a_čas"
          ]
        },
        {
          "required": [
            "je_nespecifikovaný"
          ]
        }
      ]
    },
    "ciselnik": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "iri",
        "typ",
        "datová-sada-v-nkod"
      ],
      "properties": {
        "iri": {
          "$ref": "#/$defs/iri"
        },
        "typ": {
          "oneOf": [
            {
              "const": "Číselník"
            },
            {
              "type": "array",
              "minItems": 1,
              "uniqueItems": true,
              "contains": {
                "const": "Číselník"
              },
              "items": {
                "type": "string",
                "minLength": 1
              }
            }
          ]
        },
        "datová-sada-v-nkod": {
          "allOf": [
            {
              "$ref": "#/$defs/iri"
            },
            {
              "pattern": "^https://data\\.gov\\.cz/zdroj/datové-sady/.+$"
            }
          ]
        }
      }
    },
    "pojem": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "iri",
        "typ",
        "název"
      ],
      "properties": {
        "iri": {
          "allOf": [
            {
              "$ref": "#/$defs/iri"
            },
            {
              "pattern": "^https://slovník\\.gov\\.cz/slovník-agendy-a1381-nadr/pojem/[^/]+$"
            }
          ]
        },
        "typ": {
          "oneOf": [
            {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "string",
                "enum": [
                  "Pojem",
                  "Koncept",
                  "Třída",
                  "Typ subjektu práva",
                  "Typ objektu práva"
                ]
              },
              "allOf": [
                {
                  "contains": {
                    "const": "Pojem"
                  },
                  "minContains": 1,
                  "maxContains": 1
                },
                {
                  "contains": {
                    "const": "Koncept"
                  },
                  "minContains": 1,
                  "maxContains": 1
                },
                {
                  "contains": {
                    "const": "Třída"
                  },
                  "minContains": 1,
                  "maxContains": 1
                }
              ],
              "minItems": 4,
              "maxItems": 4
            },
            {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "string",
                "enum": [
                  "Pojem",
                  "Koncept",
                  "Vztah"
                ]
              },
              "allOf": [
                {
                  "contains": {
                    "const": "Pojem"
                  },
                  "minContains": 1,
                  "maxContains": 1
                },
                {
                  "contains": {
                    "const": "Koncept"
                  },
                  "minContains": 1,
                  "maxContains": 1
                },
                {
                  "contains": {
                    "const": "Vztah"
                  },
                  "minContains": 1,
                  "maxContains": 1
                }
              ],
              "minItems": 3,
              "maxItems": 3
            },
            {
              "type": "array",
              "uniqueItems": true,
              "items": {
                "type": "string",
                "enum": [
                  "Pojem",
                  "Koncept",
                  "Vlastnost",
                  "Veřejný údaj",
                  "Neveřejný údaj"
                ]
              },
              "allOf": [
                {
                  "contains": {
                    "const": "Pojem"
                  },
                  "minContains": 1,
                  "maxContains": 1
                },
                {
                  "contains": {
                    "const": "Koncept"
                  },
                  "minContains": 1,
                  "maxContains": 1
                },
                {
                  "contains": {
                    "const": "Vlastnost"
                  },
                  "minContains": 1,
                  "maxContains": 1
                }
              ],
              "minItems": 4,
              "maxItems": 4
            }
          ]
        },
        "název": {
          "$ref": "#/$defs/i18nTextCs"
        },
        "alternativní-název": {
          "$ref": "#/$defs/i18nTextArray"
        },
        "popis": {
          "$ref": "#/$defs/i18nText"
        },
        "definice": {
          "$ref": "#/$defs/i18nText"
        },
        "související-ustanovení-právního-předpisu": {
          "$ref": "#/$defs/iriArray"
        },
        "definující-ustanovení-právního-předpisu": {
          "$ref": "#/$defs/iriArray"
        },
        "související-nelegislativní-zdroj": {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": {
            "$ref": "#/$defs/digitalniObjekt"
          }
        },
        "definující-nelegislativní-zdroj": {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": {
            "$ref": "#/$defs/digitalniObjekt"
          }
        },
        "ekvivalentní-pojem": {
          "$ref": "#/$defs/iriArray"
        },
        "nadřazený-pojem": {
          "$ref": "#/$defs/iriArray"
        },
        "nadřazená-třída": {
          "$ref": "#/$defs/iriArray"
        },
        "nadřazený-vztah": {
          "$ref": "#/$defs/iriArray"
        },
        "nadřazená-vlastnost": {
          "$ref": "#/$defs/iriArray"
        },
        "instance-definovány-číselníkem": {
          "$ref": "#/$defs/ciselnik"
        },
        "definiční-obor": {
          "$ref": "#/$defs/iri"
        },
        "obor-hodnot": {
          "$ref": "#/$defs/iri"
        },
        "způsob-získání-údaje": {
          "type": "string",
          "const": "způsoby-získání:jiných-agend"
        },
        "typ-obsahu-údaje": {
          "type": "string",
          "enum": [
            "typy-obsahu:evidenční",
            "typy-obsahu:identifikační"
          ]
        },
        "způsoby-sdílení-údaje": {
          "type": "array",
          "minItems": 1,
          "uniqueItems": true,
          "items": {
            "type": "string",
            "enum": [
              "způsoby-sdílení:nesdílené",
              "způsoby-sdílení:poskytované-na-žádost",
              "způsoby-sdílení:zpřístupňované-pro-výkon-agendy"
            ]
          },
          "allOf": [
            {
              "if": {
                "contains": {
                  "const": "způsoby-sdílení:nesdílené"
                }
              },
              "then": {
                "maxItems": 1
              }
            }
          ]
        },
        "je-sdílen-v-ppdf": {
          "type": "boolean"
        },
        "ustanovení-dokládající-neveřejnost-údaje": {
          "$ref": "#/$defs/iriArray"
        },
        "agenda": {
          "allOf": [
            {
              "$ref": "#/$defs/iri"
            },
            {
              "const": "https://rpp-opendata.egon.gov.cz/odrpp/zdroj/agenda/A1381"
            }
          ]
        },
        "agendový-informační-systém": {
          "allOf": [
            {
              "$ref": "#/$defs/iri"
            },
            {
              "enum": [
                "https://rpp-opendata.egon.gov.cz/odrpp/zdroj/isvs/5866",
                "https://rpp-opendata.egon.gov.cz/odrpp/zdroj/isvs/8618",
                "https://rpp-opendata.egon.gov.cz/odrpp/zdroj/isvs/10357"
              ]
            }
          ]
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "typ": {
                "contains": {
                  "const": "Třída"
                }
              }
            },
            "required": [
              "typ"
            ]
          },
          "then": {
            "required": [
              "alternativní-název",
              "popis",
              "agenda",
              "agendový-informační-systém"
            ],
            "properties": {
              "typ": {
                "oneOf": [
                  {
                    "contains": {
                      "const": "Typ subjektu práva"
                    }
                  },
                  {
                    "contains": {
                      "const": "Typ objektu práva"
                    }
                  }
                ]
              }
            },
            "not": {
              "anyOf": [
                {
                  "required": [
                    "definiční-obor"
                  ]
                },
                {
                  "required": [
                    "obor-hodnot"
                  ]
                },
                {
                  "required": [
                    "způsob-získání-údaje"
                  ]
                },
                {
                  "required": [
                    "typ-obsahu-údaje"
                  ]
                },
                {
                  "required": [
                    "způsoby-sdílení-údaje"
                  ]
                },
                {
                  "required": [
                    "ustanovení-dokládající-neveřejnost-údaje"
                  ]
                }
              ]
            }
          }
        },
        {
          "if": {
            "properties": {
              "typ": {
                "contains": {
                  "const": "Vztah"
                }
              }
            },
            "required": [
              "typ"
            ]
          },
          "then": {
            "required": [
              "definiční-obor",
              "obor-hodnot"
            ],
            "not": {
              "anyOf": [
                {
                  "required": [
                    "agenda"
                  ]
                },
                {
                  "required": [
                    "agendový-informační-systém"
                  ]
                },
                {
                  "required": [
                    "způsob-získání-údaje"
                  ]
                },
                {
                  "required": [
                    "typ-obsahu-údaje"
                  ]
                },
                {
                  "required": [
                    "způsoby-sdílení-údaje"
                  ]
                },
                {
                  "required": [
                    "ustanovení-dokládající-neveřejnost-údaje"
                  ]
                }
              ]
            }
          }
        },
        {
          "if": {
            "properties": {
              "typ": {
                "contains": {
                  "const": "Vlastnost"
                }
              }
            },
            "required": [
              "typ"
            ]
          },
          "then": {
            "required": [
              "alternativní-název",
              "popis",
              "související-ustanovení-právního-předpisu",
              "definiční-obor",
              "obor-hodnot",
              "způsob-získání-údaje",
              "je-sdílen-v-ppdf"
            ],
            "not": {
              "anyOf": [
                {
                  "required": [
                    "agenda"
                  ]
                },
                {
                  "required": [
                    "agendový-informační-systém"
                  ]
                }
              ]
            }
          }
        },
        {
          "if": {
            "properties": {
              "typ": {
                "contains": {
                  "const": "Veřejný údaj"
                }
              }
            },
            "required": [
              "typ"
            ]
          },
          "then": {
            "required": [
              "typ-obsahu-údaje",
              "způsoby-sdílení-údaje"
            ],
            "not": {
              "required": [
                "ustanovení-dokládající-neveřejnost-údaje"
              ]
            }
          }
        },
        {
          "if": {
            "properties": {
              "typ": {
                "contains": {
                  "const": "Neveřejný údaj"
                }
              }
            },
            "required": [
              "typ"
            ]
          },
          "then": {
            "required": [
              "ustanovení-dokládající-neveřejnost-údaje"
            ]
          }
        }
      ]
    }
  }
}
