{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://blue-core-lod.github.io/bibframe-json/schema/dialect/Instance.json",
  "additionalProperties": {
    "description": "Every property is an array, even holding one value. This is the guarantee the whole shape rests on.",
    "type": "array"
  },
  "description": "One published edition of a Work.",
  "examples": [
    {
      "@id": "https://bibframe.example/instances/fb857a3a-f454-4392-ba6d-a3653c12be47",
      "@type": [
        "Instance"
      ],
      "instanceOf": [
        "https://bibframe.example/works/9937996a-1083-4357-b05f-4be85f7b7354"
      ],
      "title": [
        {
          "@type": [
            "Title"
          ],
          "bflc:nonSortNum": [
            "2"
          ],
          "mainTitle": [
            "A short history of Sanskrit literature"
          ]
        }
      ],
      "identifiedBy": [
        {
          "@type": [
            "Isbn"
          ],
          "qualifier": [
            "hardback"
          ],
          "rdf:value": [
            "9788183155984"
          ]
        }
      ]
    }
  ],
  "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"
    },
    "title": {
      "items": {
        "$ref": "Title.json"
      },
      "type": "array"
    },
    "note": {
      "items": {
        "$ref": "Ref.json"
      },
      "type": "array"
    },
    "subject": {
      "items": {
        "$ref": "Ref.json"
      },
      "type": "array"
    },
    "identifiedBy": {
      "items": {
        "$ref": "Identifier.json"
      },
      "type": "array"
    },
    "adminMetadata": {
      "items": {
        "$ref": "AdminMetadata.json"
      },
      "type": "array"
    },
    "contribution": {
      "items": {
        "$ref": "Contribution.json"
      },
      "type": "array"
    },
    "classification": {
      "items": {
        "$ref": "Classification.json"
      },
      "type": "array"
    },
    "language": {
      "items": {
        "$ref": "Ref.json"
      },
      "type": "array"
    },
    "genreForm": {
      "items": {
        "$ref": "Ref.json"
      },
      "type": "array"
    },
    "provisionActivity": {
      "items": {
        "$ref": "ProvisionActivity.json"
      },
      "type": "array"
    },
    "relation": {
      "items": {
        "$ref": "Relation.json"
      },
      "type": "array"
    },
    "seriesStatement": {
      "items": {
        "$ref": "Text.json"
      },
      "type": "array"
    },
    "electronicLocator": {
      "items": {
        "$ref": "Ref.json"
      },
      "type": "array"
    },
    "bflc:aap": {
      "items": {
        "$ref": "Text.json"
      },
      "type": "array"
    },
    "expressionOf": {
      "items": {
        "$ref": "Ref.json"
      },
      "type": "array"
    },
    "instanceOf": {
      "items": {
        "$ref": "Ref.json"
      },
      "type": "array"
    },
    "extent": {
      "items": {
        "$ref": "Ref.json"
      },
      "type": "array"
    },
    "publicationStatement": {
      "items": {
        "$ref": "Text.json"
      },
      "type": "array"
    }
  },
  "title": "Instance",
  "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": "^_:"
      }
    }
  }
}
