{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://readium.org/guided-navigation/schema/text.schema.json",
  "title": "Readium Guided Navigation Text Object",
  "type": ["string", "object"],
  "properties": {
    "plain": {
      "type": "string"
    },
    "ssml": {
      "type": "string"
    },
    "language": {
      "type": "string",
      "pattern": "^((?<grandfathered>(en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang))|((?<language>([A-Za-z]{2,3}(-(?<extlang>[A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-(?<script>[A-Za-z]{4}))?(-(?<region>[A-Za-z]{2}|[0-9]{3}))?(-(?<variant>[A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*(-(?<extension>[0-9A-WY-Za-wy-z](-[A-Za-z0-9]{2,8})+))*(-(?<privateUse>x(-[A-Za-z0-9]{1,8})+))?)|(?<privateUse2>x(-[A-Za-z0-9]{1,8})+))$"
    }
  },
  "if": {
    "type": "string"
  },
  "then": {
    "minLength": 1
  },
  "else": {
    "anyOf": [
      {
        "required": ["plain"],
        "properties": {
          "plain": {
            "minLength": 1
          }
        }
      },
      {
        "required": ["ssml"],
        "properties": {
          "ssml": {
            "minLength": 1
          }
        }
      }
    ]
  }
}