{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://schema.org/schemas/thing.json",
  "title": "Schema.org Thing",
  "description": "The most generic type of item in the Schema.org vocabulary. All other Schema.org types inherit from Thing.",
  "type": "object",
  "properties": {
    "@type": {
      "type": "string",
      "description": "The Schema.org type of the item.",
      "const": "Thing"
    },
    "@context": {
      "type": "string",
      "description": "The JSON-LD context URL.",
      "default": "https://schema.org"
    },
    "name": {
      "type": "string",
      "description": "The name of the item."
    },
    "description": {
      "type": "string",
      "description": "A description of the item."
    },
    "url": {
      "type": "string",
      "format": "uri",
      "description": "URL of the item."
    },
    "image": {
      "oneOf": [
        {
          "type": "string",
          "format": "uri",
          "description": "URL of an image of the item."
        },
        {
          "$ref": "#/$defs/ImageObject"
        }
      ],
      "description": "An image of the item."
    },
    "identifier": {
      "oneOf": [
        {
          "type": "string"
        },
        {
          "$ref": "#/$defs/PropertyValue"
        }
      ],
      "description": "The identifier property represents any kind of identifier for any kind of Thing."
    },
    "sameAs": {
      "oneOf": [
        {
          "type": "string",
          "format": "uri"
        },
        {
          "type": "array",
          "items": {
            "type": "string",
            "format": "uri"
          }
        }
      ],
      "description": "URL of a reference Web page that unambiguously indicates the item's identity."
    },
    "alternateName": {
      "type": "string",
      "description": "An alias for the item."
    },
    "additionalType": {
      "type": "string",
      "format": "uri",
      "description": "An additional type for the item, typically used for adding more specific types from external vocabularies."
    },
    "mainEntityOfPage": {
      "oneOf": [
        {
          "type": "string",
          "format": "uri"
        },
        {
          "$ref": "#/$defs/CreativeWork"
        }
      ],
      "description": "Indicates a page for which this thing is the main entity being described."
    },
    "potentialAction": {
      "oneOf": [
        {
          "$ref": "#/$defs/Action"
        },
        {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Action"
          }
        }
      ],
      "description": "Indicates a potential Action, which describes an idealized action in which this thing would play an 'object' role."
    },
    "subjectOf": {
      "oneOf": [
        {
          "$ref": "#/$defs/CreativeWork"
        },
        {
          "$ref": "#/$defs/Event"
        }
      ],
      "description": "A CreativeWork or Event about this Thing."
    }
  },
  "$defs": {
    "ImageObject": {
      "type": "object",
      "description": "An image file.",
      "properties": {
        "@type": {
          "type": "string",
          "const": "ImageObject"
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "URL of the image."
        },
        "width": {
          "type": "integer",
          "description": "The width of the image in pixels."
        },
        "height": {
          "type": "integer",
          "description": "The height of the image in pixels."
        },
        "caption": {
          "type": "string",
          "description": "The caption for this image."
        }
      }
    },
    "PropertyValue": {
      "type": "object",
      "description": "A property-value pair representing an explicit or inferred attribute of a Thing.",
      "properties": {
        "@type": {
          "type": "string",
          "const": "PropertyValue"
        },
        "propertyID": {
          "type": "string",
          "description": "A commonly used identifier for the characteristic represented by the property."
        },
        "value": {
          "description": "The value of the property."
        },
        "name": {
          "type": "string",
          "description": "The name of the property."
        }
      }
    },
    "CreativeWork": {
      "type": "object",
      "description": "The most generic kind of creative work, including books, movies, photographs, software programs, etc.",
      "properties": {
        "@type": {
          "type": "string",
          "const": "CreativeWork"
        },
        "name": {
          "type": "string",
          "description": "The name of the creative work."
        },
        "url": {
          "type": "string",
          "format": "uri",
          "description": "URL of the creative work."
        }
      }
    },
    "Action": {
      "type": "object",
      "description": "An action performed by a direct agent and indirect participants upon a direct object.",
      "properties": {
        "@type": {
          "type": "string",
          "description": "The type of action."
        },
        "name": {
          "type": "string",
          "description": "The name of the action."
        },
        "target": {
          "type": "string",
          "format": "uri",
          "description": "Indicates a target EntryPoint for an Action."
        }
      }
    },
    "Event": {
      "type": "object",
      "description": "An event happening at a certain time and location.",
      "properties": {
        "@type": {
          "type": "string",
          "const": "Event"
        },
        "name": {
          "type": "string",
          "description": "The name of the event."
        },
        "startDate": {
          "type": "string",
          "format": "date-time",
          "description": "The start date and time of the event."
        }
      }
    }
  }
}
