{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://blue-core-lod.github.io/bibframe-json/schema/dialect/Identifier.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 number that names the resource, and the scheme it belongs to.",
  "examples": [
    {
      "@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"
    },
    "rdf:value": {
      "items": {
        "$ref": "Text.json"
      },
      "type": "array"
    },
    "qualifier": {
      "items": {
        "$ref": "Text.json"
      },
      "type": "array"
    },
    "status": {
      "items": {
        "$ref": "Ref.json"
      },
      "type": "array"
    }
  },
  "title": "Identifier",
  "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": "^_:"
      }
    }
  }
}
