{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://blue-core-lod.github.io/bibframe-json/schema/dialect/Title.json",
  "additionalProperties": {
    "description": "Every property is an array, even holding one value. This is the guarantee the whole shape rests on.",
    "type": "array"
  },
  "description": "A title, or one of the variant forms of it a record carries.",
  "examples": [
    {
      "@type": [
        "Title"
      ],
      "mainTitle": [
        "A short history of Sanskrit literature"
      ]
    }
  ],
  "properties": {
    "@id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "@type": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "string"
        }
      ],
      "$comment": "An array when a node has several types, a string when it has one. @type is a keyword, so no @container reaches it."
    },
    "rdfs:label": {
      "items": {
        "$ref": "Text.json"
      },
      "type": "array"
    },
    "mainTitle": {
      "items": {
        "$ref": "Text.json"
      },
      "type": "array"
    },
    "subtitle": {
      "items": {
        "$ref": "Text.json"
      },
      "type": "array"
    },
    "partNumber": {
      "items": {
        "$ref": "Text.json"
      },
      "type": "array"
    },
    "partName": {
      "items": {
        "$ref": "Text.json"
      },
      "type": "array"
    }
  },
  "title": "Title",
  "type": "object",
  "patternProperties": {
    "^@": {
      "description": "A JSON-LD keyword is not a property, so the array rule does not reach it. @context is the reason: it is a vocabulary rather than data."
    }
  },
  "not": {
    "description": "a blank node must not carry an @id",
    "required": [
      "@id"
    ],
    "properties": {
      "@id": {
        "pattern": "^_:"
      }
    }
  }
}
