Skip to content
OATSCHEMA

Docs / Schemas / entity-extraction / 0.7.0

Entity Extraction 0.7.0

Represent named entities, structural slots, or visual concepts extracted from unstructured data. Links raw evidence (text spans or geometric regions) to normalized values and business concepts.

This is an older version of entity-extraction.

The latest version is 0.8.0.

$id
https://oatschema.org/0.7.0/entity-extraction
Latest
https://oatschema.org/entity-extraction
Versions
Source
v0.7.0 on GitHub

Schema

entity-extraction.json Raw
{    "x-license": {        "id": "Apache-2.0",        "notice": "Copyright 2025-2026 Dorsal Hub LTD",        "url": "https://github.com/oatschema/oats/blob/main/LICENSE"    },    "$schema": "https://json-schema.org/draft/2020-12/schema",    "$id": "https://oatschema.org/0.7.0/entity-extraction",    "title": "Entity Extraction",    "version": "0.7.0",    "description": "Represent named entities, structural slots, or visual concepts extracted from unstructured data. Links raw evidence (text spans or geometric regions) to normalized values and business concepts.",    "type": "object",    "properties": {        "unit": {            "type": "string",            "description": "The unit for all coordinate values: 'px' for pixels, 'pt' for typographic points, 'normalized' for values from 0.0 to 1.0, and 'per_mille' for values from 0 to 1000. Required whenever geometric data is present.",            "enum": [                "px",                "pt",                "normalized",                "per_mille"            ]        },        "producer": {            "type": "string",            "description": "The creator (model, tool or author) of this extraction.",            "maxLength": 1024        },        "vocabulary_url": {            "type": "string",            "format": "uri",            "description": "URL to the definition of the entity labels.",            "maxLength": 2048        },        "vocabulary": {            "type": "array",            "description": "Allowed values for the 'label' field. For more than 100 labels, use 'vocabulary_url'.",            "maxItems": 100,            "uniqueItems": true,            "items": {                "type": "string",                "description": "A single valid label from the vocabulary.",                "maxLength": 128            }        },        "score_explanation": {            "type": "string",            "description": "Defines the meaning of the 'score' field.",            "maxLength": 256        },        "entities": {            "type": "array",            "description": "An array of extracted entities.",            "maxItems": 100000,            "items": {                "type": "object",                "description": "A single extracted entity.",                "properties": {                    "id": {                        "type": "string",                        "description": "A unique identifier for this entity instance (e.g. UUID).",                        "maxLength": 128                    },                    "concept": {                        "type": "string",                        "description": "The business role or slot this entity fills (e.g. 'InvoiceDate', 'Plaintiff'). Optional.",                        "maxLength": 128                    },                    "label": {                        "type": "string",                        "description": "The entity category (e.g. 'PER', 'DATE', 'MONEY'). Must be a member of 'vocabulary' when it is present.",                        "maxLength": 128                    },                    "text": {                        "type": "string",                        "description": "The raw text span as it appears in the source. Optional for visual entities (e.g. logos, signatures).",                        "maxLength": 4096                    },                    "value": {                        "description": "The machine-readable value (e.g. '2025-11-21', 3500.00, true).",                        "anyOf": [                            {                                "type": "string",                                "maxLength": 4096                            },                            {                                "type": "number"                            },                            {                                "type": "boolean"                            },                            {                                "type": "null"                            }                        ]                    },                    "definition": {                        "type": "string",                        "description": "Definition of the concept.",                        "maxLength": 1024                    },                    "score": {                        "type": "number",                        "description": "The confidence score for this extraction, ranging from 0.0 (uncertain) to 1.0 (certain).",                        "minimum": 0,                        "maximum": 1                    },                    "location": {                        "type": "array",                        "description": "The physical location(s) of the entity.",                        "maxItems": 10,                        "items": {                            "oneOf": [                                {                                    "title": "Block Reference",                                    "type": "object",                                    "description": "A reference to a block in an associated document extraction.",                                    "properties": {                                        "type": {                                            "const": "block_ref"                                        },                                        "block_id": {                                            "type": "string",                                            "description": "The id of the referenced block.",                                            "maxLength": 128                                        }                                    },                                    "required": [                                        "type",                                        "block_id"                                    ],                                    "additionalProperties": false                                },                                {                                    "title": "Geometric Location",                                    "type": "object",                                    "description": "A region on a page or image.",                                    "properties": {                                        "type": {                                            "const": "block"                                        },                                        "block_type": {                                            "type": "string",                                            "description": "The kind of geometry describing this region.",                                            "enum": [                                                "box",                                                "polygon",                                                "multi_polygon"                                            ]                                        },                                        "page_number": {                                            "type": "integer",                                            "description": "The page number (1-indexed) of the region.",                                            "minimum": 1                                        },                                        "box": {                                            "type": "object",                                            "description": "A rectangular bounding box defined by its top-left corner (x, y) and its dimensions.",                                            "properties": {                                                "x": {                                                    "type": "number",                                                    "description": "The x-coordinate of the top-left corner.",                                                    "minimum": 0                                                },                                                "y": {                                                    "type": "number",                                                    "description": "The y-coordinate of the top-left corner.",                                                    "minimum": 0                                                },                                                "width": {                                                    "type": "number",                                                    "description": "The width of the box.",                                                    "minimum": 0                                                },                                                "height": {                                                    "type": "number",                                                    "description": "The height of the box.",                                                    "minimum": 0                                                }                                            },                                            "required": [                                                "x",                                                "y",                                                "width",                                                "height"                                            ],                                            "additionalProperties": false                                        },                                        "polygon": {                                            "type": "array",                                            "description": "An ordered list of vertices defining a non-rectangular boundary.",                                            "minItems": 3,                                            "maxItems": 1000,                                            "items": {                                                "type": "object",                                                "description": "A single vertex, measured from the top-left corner of the page or image.",                                                "properties": {                                                    "x": {                                                        "type": "number",                                                        "description": "The x-coordinate of the vertex.",                                                        "minimum": 0                                                    },                                                    "y": {                                                        "type": "number",                                                        "description": "The y-coordinate of the vertex.",                                                        "minimum": 0                                                    }                                                },                                                "required": [                                                    "x",                                                    "y"                                                ],                                                "additionalProperties": false                                            }                                        },                                        "multi_polygon": {                                            "type": "array",                                            "description": "A list of polygons, for a single region that is occluded or fragmented into multiple visible parts.",                                            "minItems": 1,                                            "maxItems": 100,                                            "items": {                                                "type": "array",                                                "description": "An ordered list of vertices defining a non-rectangular boundary.",                                                "minItems": 3,                                                "maxItems": 1000,                                                "items": {                                                    "type": "object",                                                    "description": "A single vertex, measured from the top-left corner of the page or image.",                                                    "properties": {                                                        "x": {                                                            "type": "number",                                                            "description": "The x-coordinate of the vertex.",                                                            "minimum": 0                                                        },                                                        "y": {                                                            "type": "number",                                                            "description": "The y-coordinate of the vertex.",                                                            "minimum": 0                                                        }                                                    },                                                    "required": [                                                        "x",                                                        "y"                                                    ],                                                    "additionalProperties": false                                                }                                            }                                        }                                    },                                    "required": [                                        "type",                                        "block_type",                                        "page_number"                                    ],                                    "allOf": [                                        {                                            "if": {                                                "properties": {                                                    "block_type": {                                                        "const": "box"                                                    }                                                }                                            },                                            "then": {                                                "required": [                                                    "box"                                                ]                                            }                                        },                                        {                                            "if": {                                                "properties": {                                                    "block_type": {                                                        "const": "polygon"                                                    }                                                }                                            },                                            "then": {                                                "required": [                                                    "polygon"                                                ]                                            }                                        },                                        {                                            "if": {                                                "properties": {                                                    "block_type": {                                                        "const": "multi_polygon"                                                    }                                                }                                            },                                            "then": {                                                "required": [                                                    "multi_polygon"                                                ]                                            }                                        }                                    ],                                    "additionalProperties": false                                },                                {                                    "title": "Text Span",                                    "type": "object",                                    "description": "A span of characters in the source text, or in the text of a referenced block.",                                    "properties": {                                        "type": {                                            "const": "span"                                        },                                        "start": {                                            "type": "integer",                                            "description": "The 0-indexed character offset where the span starts (inclusive).",                                            "minimum": 0                                        },                                        "end": {                                            "type": "integer",                                            "description": "The 0-indexed character offset where the span ends (exclusive). Must not be less than start.",                                            "minimum": 0                                        },                                        "block_id": {                                            "type": "string",                                            "description": "(Optional) The id of the block whose text the offsets refer to. If omitted, offsets refer to the full source text.",                                            "maxLength": 128                                        }                                    },                                    "required": [                                        "type",                                        "start",                                        "end"                                    ],                                    "additionalProperties": false                                }                            ]                        }                    },                    "attributes": {                        "type": "object",                        "description": "Arbitrary metadata (e.g. currency, gender). Flat key-value pairs.",                        "maxProperties": 16,                        "propertyNames": {                            "maxLength": 128                        },                        "additionalProperties": {                            "anyOf": [                                {                                    "type": "string",                                    "maxLength": 1024                                },                                {                                    "type": "number"                                },                                {                                    "type": "boolean"                                },                                {                                    "type": "null"                                }                            ]                        }                    }                },                "required": [                    "label"                ],                "additionalProperties": false            }        },        "attributes": {            "type": "object",            "description": "Arbitrary metadata relevant to this extraction.",            "maxProperties": 16,            "propertyNames": {                "maxLength": 128            },            "additionalProperties": {                "anyOf": [                    {                        "type": "string",                        "maxLength": 1024                    },                    {                        "type": "number"                    },                    {                        "type": "boolean"                    },                    {                        "type": "null"                    }                ]            }        }    },    "required": [        "entities"    ],    "allOf": [        {            "if": {                "properties": {                    "entities": {                        "maxItems": 0                    }                },                "required": [                    "entities"                ]            },            "then": {                "anyOf": [                    {                        "required": [                            "vocabulary"                        ]                    },                    {                        "required": [                            "vocabulary_url"                        ]                    },                    {                        "required": [                            "producer"                        ]                    }                ]            }        },        {            "if": {                "properties": {                    "entities": {                        "contains": {                            "properties": {                                "location": {                                    "contains": {                                        "properties": {                                            "type": {                                                "const": "block"                                            }                                        },                                        "required": [                                            "type"                                        ]                                    }                                }                            },                            "required": [                                "location"                            ]                        }                    }                },                "required": [                    "entities"                ]            },            "then": {                "required": [                    "unit"                ]            }        },        {            "if": {                "properties": {                    "unit": {                        "const": "normalized"                    }                },                "required": [                    "unit"                ]            },            "then": {                "properties": {                    "entities": {                        "items": {                            "properties": {                                "location": {                                    "items": {                                        "properties": {                                            "box": {                                                "properties": {                                                    "x": {                                                        "maximum": 1                                                    },                                                    "y": {                                                        "maximum": 1                                                    },                                                    "width": {                                                        "maximum": 1                                                    },                                                    "height": {                                                        "maximum": 1                                                    }                                                }                                            },                                            "polygon": {                                                "items": {                                                    "properties": {                                                        "x": {                                                            "maximum": 1                                                        },                                                        "y": {                                                            "maximum": 1                                                        }                                                    }                                                }                                            },                                            "multi_polygon": {                                                "items": {                                                    "items": {                                                        "properties": {                                                            "x": {                                                                "maximum": 1                                                            },                                                            "y": {                                                                "maximum": 1                                                            }                                                        }                                                    }                                                }                                            }                                        }                                    }                                }                            }                        }                    }                }            }        },        {            "if": {                "properties": {                    "unit": {                        "const": "per_mille"                    }                },                "required": [                    "unit"                ]            },            "then": {                "properties": {                    "entities": {                        "items": {                            "properties": {                                "location": {                                    "items": {                                        "properties": {                                            "box": {                                                "properties": {                                                    "x": {                                                        "maximum": 1000                                                    },                                                    "y": {                                                        "maximum": 1000                                                    },                                                    "width": {                                                        "maximum": 1000                                                    },                                                    "height": {                                                        "maximum": 1000                                                    }                                                }                                            },                                            "polygon": {                                                "items": {                                                    "properties": {                                                        "x": {                                                            "maximum": 1000                                                        },                                                        "y": {                                                            "maximum": 1000                                                        }                                                    }                                                }                                            },                                            "multi_polygon": {                                                "items": {                                                    "items": {                                                        "properties": {                                                            "x": {                                                                "maximum": 1000                                                            },                                                            "y": {                                                                "maximum": 1000                                                            }                                                        }                                                    }                                                }                                            }                                        }                                    }                                }                            }                        }                    }                }            }        }    ],    "additionalProperties": false}

Examples

Records that pass validation against this schema.

entity-extraction-2
entity-extraction-2.json
{  "producer": "spaCy en_core_web_trf",  "vocabulary": ["ORG", "DATE", "PERSON"],  "unit": "px",  "entities": [    {      "id": "ent_101",      "text": "Acme Corp",      "label": "ORG",      "score": 0.97,      "location": [        { "type": "span", "start": 0, "end": 9 }      ]    },    {      "id": "ent_102",      "text": "21 November 2025",      "label": "DATE",      "value": "2025-11-21",      "location": [        { "type": "span", "start": 14, "end": 30, "block_id": "block_0002" }      ]    },    {      "id": "ent_103",      "label": "SIGNATURE",      "location": [        {          "type": "block",          "block_type": "multi_polygon",          "page_number": 2,          "multi_polygon": [            [              { "x": 410, "y": 720 },              { "x": 470, "y": 720 },              { "x": 470, "y": 760 }            ],            [              { "x": 480, "y": 722 },              { "x": 540, "y": 722 },              { "x": 540, "y": 758 },              { "x": 480, "y": 758 }            ]          ]        }      ]    }  ]}
entity-extraction-1
entity-extraction-1.json
{  "vocabulary_url": "https://example.com/tax-taxonomy/v1",  "vocabulary": ["ORG", "DATE", "MONEY", "PERSON"],  "unit": "normalized",  "entities": [    {      "id": "ent_001",      "text": "Acme Corp",      "label": "ORG",      "score": 0.98,      "location": [        {          "type": "block",          "block_type": "box",          "page_number": 1,          "box": {            "x": 0.1,            "y": 0.1,            "width": 0.3,            "height": 0.05          }        }      ]    },    {      "id": "ent_002",      "text": "$1,250.00",      "label": "MONEY",      "concept": "TotalAmount",      "definition": "The final sum payable after taxes.",      "value": 1250.00,      "score": 0.99,      "attributes": {        "currency": "USD",        "is_estimated": false      },      "location": [        {          "type": "block_ref",          "block_id": "block_8f9e2d1c-4b5a"        }      ]    },    {      "id": "ent_003",      "text": "Jane Doe",      "label": "PERSON",      "concept": "Recipient",      "value": "DOE, JANE",      "location": [        {          "type": "block",          "block_type": "polygon",          "page_number": 1,          "polygon": [            { "x": 0.1, "y": 0.2 },            { "x": 0.15, "y": 0.2 },            { "x": 0.15, "y": 0.22 },            { "x": 0.1, "y": 0.22 }          ]        }      ]    }  ]}

Fields

  • unit string

    The unit for all coordinate values: 'px' for pixels, 'pt' for typographic points, 'normalized' for values from 0.0 to 1.0, and 'per_mille' for values from 0 to 1000. Required whenever geometric data is present.

    Allowed values: "px", "pt", "normalized", "per_mille"

  • producer string

    The creator (model, tool or author) of this extraction.

    • at most 1024 characters
  • vocabulary_url string

    URL to the definition of the entity labels.

    • at most 2048 characters
    • format uri
  • vocabulary array of string

    Allowed values for the 'label' field. For more than 100 labels, use 'vocabulary_url'.

    Each item: A single valid label from the vocabulary.

    • at most 100 items
    • items must be unique
    • each at most 128 characters
  • score_explanation string

    Defines the meaning of the 'score' field.

    • at most 256 characters
  • entities array of object required

    An array of extracted entities.

    Each item: A single extracted entity.

    • at most 100000 items
    • id string

      A unique identifier for this entity instance (e.g. UUID).

      • at most 128 characters
    • concept string

      The business role or slot this entity fills (e.g. 'InvoiceDate', 'Plaintiff'). Optional.

      • at most 128 characters
    • label string required

      The entity category (e.g. 'PER', 'DATE', 'MONEY'). Must be a member of 'vocabulary' when it is present.

      • at most 128 characters
    • text string

      The raw text span as it appears in the source. Optional for visual entities (e.g. logos, signatures).

      • at most 4096 characters
    • value string | number | boolean | null

      The machine-readable value (e.g. '2025-11-21', 3500.00, true).

      • string: at most 4096 characters
    • definition string

      Definition of the concept.

      • at most 1024 characters
    • score number

      The confidence score for this extraction, ranging from 0.0 (uncertain) to 1.0 (certain).

      • 0 to 1
    • location array of object

      The physical location(s) of the entity.

      • at most 10 items

      Exactly one of these forms:

      1. Block Reference object

        A reference to a block in an associated document extraction.

        • type constant "block_ref" required
        • block_id string required

          The id of the referenced block.

          • at most 128 characters
      2. Geometric Location object

        A region on a page or image.

        • type constant "block" required
        • block_type string required

          The kind of geometry describing this region.

          Allowed values: "box", "polygon", "multi_polygon"

        • page_number integer required

          The page number (1-indexed) of the region.

          • ≥ 1
        • box object

          A rectangular bounding box defined by its top-left corner (x, y) and its dimensions.

          • x number required

            The x-coordinate of the top-left corner.

            • ≥ 0
          • y number required

            The y-coordinate of the top-left corner.

            • ≥ 0
          • width number required

            The width of the box.

            • ≥ 0
          • height number required

            The height of the box.

            • ≥ 0
        • polygon array of object

          An ordered list of vertices defining a non-rectangular boundary.

          Each item: A single vertex, measured from the top-left corner of the page or image.

          • 3 to 1000 items
          • x number required

            The x-coordinate of the vertex.

            • ≥ 0
          • y number required

            The y-coordinate of the vertex.

            • ≥ 0
        • multi_polygon array of array of object

          A list of polygons, for a single region that is occluded or fragmented into multiple visible parts.

          Each item: An ordered list of vertices defining a non-rectangular boundary.

          • 1 to 100 items
          • each 3 to 1000 items
          • x number required

            The x-coordinate of the vertex.

            • ≥ 0
          • y number required

            The y-coordinate of the vertex.

            • ≥ 0

        Rules:

        • When block_type is "box", box is required.
          Show the JSON Schema
          {  "if": {    "properties": {      "block_type": {        "const": "box"      }    }  },  "then": {    "required": [      "box"    ]  }}
        • When block_type is "polygon", polygon is required.
          Show the JSON Schema
          {  "if": {    "properties": {      "block_type": {        "const": "polygon"      }    }  },  "then": {    "required": [      "polygon"    ]  }}
        • When block_type is "multi_polygon", multi_polygon is required.
          Show the JSON Schema
          {  "if": {    "properties": {      "block_type": {        "const": "multi_polygon"      }    }  },  "then": {    "required": [      "multi_polygon"    ]  }}
      3. Text Span object

        A span of characters in the source text, or in the text of a referenced block.

        • type constant "span" required
        • start integer required

          The 0-indexed character offset where the span starts (inclusive).

          • ≥ 0
        • end integer required

          The 0-indexed character offset where the span ends (exclusive). Must not be less than start.

          • ≥ 0
        • block_id string

          (Optional) The id of the block whose text the offsets refer to. If omitted, offsets refer to the full source text.

          • at most 128 characters
    • attributes object

      Arbitrary metadata (e.g. currency, gender). Flat key-value pairs.

      • at most 16 properties
      • keys at most 128 characters
      • * string | number | boolean | null

        Any other key.

        • string: at most 1024 characters
  • attributes object

    Arbitrary metadata relevant to this extraction.

    • at most 16 properties
    • keys at most 128 characters
    • * string | number | boolean | null

      Any other key.

      • string: at most 1024 characters

Rules:

  • When entities is empty: at least one of vocabulary, vocabulary_url, producer must be present.
    Show the JSON Schema
    {  "if": {    "properties": {      "entities": {        "maxItems": 0      }    },    "required": [      "entities"    ]  },  "then": {    "anyOf": [      {        "required": [          "vocabulary"        ]      },      {        "required": [          "vocabulary_url"        ]      },      {        "required": [          "producer"        ]      }    ]  }}
  • When the condition below holds, unit is required.
    Show the JSON Schema
    {  "if": {    "properties": {      "entities": {        "contains": {          "properties": {            "location": {              "contains": {                "properties": {                  "type": {                    "const": "block"                  }                },                "required": [                  "type"                ]              }            }          },          "required": [            "location"          ]        }      }    },    "required": [      "entities"    ]  },  "then": {    "required": [      "unit"    ]  }}
  • When unit is "normalized", further limits apply.
    Show the JSON Schema
    {  "if": {    "properties": {      "unit": {        "const": "normalized"      }    },    "required": [      "unit"    ]  },  "then": {    "properties": {      "entities": {        "items": {          "properties": {            "location": {              "items": {                "properties": {                  "box": {                    "properties": {                      "x": {                        "maximum": 1                      },                      "y": {                        "maximum": 1                      },                      "width": {                        "maximum": 1                      },                      "height": {                        "maximum": 1                      }                    }                  },                  "polygon": {                    "items": {                      "properties": {                        "x": {                          "maximum": 1                        },                        "y": {                          "maximum": 1                        }                      }                    }                  },                  "multi_polygon": {                    "items": {                      "items": {                        "properties": {                          "x": {                            "maximum": 1                          },                          "y": {                            "maximum": 1                          }                        }                      }                    }                  }                }              }            }          }        }      }    }  }}
  • When unit is "per_mille", further limits apply.
    Show the JSON Schema
    {  "if": {    "properties": {      "unit": {        "const": "per_mille"      }    },    "required": [      "unit"    ]  },  "then": {    "properties": {      "entities": {        "items": {          "properties": {            "location": {              "items": {                "properties": {                  "box": {                    "properties": {                      "x": {                        "maximum": 1000                      },                      "y": {                        "maximum": 1000                      },                      "width": {                        "maximum": 1000                      },                      "height": {                        "maximum": 1000                      }                    }                  },                  "polygon": {                    "items": {                      "properties": {                        "x": {                          "maximum": 1000                        },                        "y": {                          "maximum": 1000                        }                      }                    }                  },                  "multi_polygon": {                    "items": {                      "items": {                        "properties": {                          "x": {                            "maximum": 1000                          },                          "y": {                            "maximum": 1000                          }                        }                      }                    }                  }                }              }            }          }        }      }    }  }}

Copyright 2025-2026 Dorsal Hub LTD. Licensed under Apache-2.0.