Skip to content
OATSCHEMA

Docs / Schemas / document-extraction / 0.1.2

Document Extraction 0.1.2

Represent the layout and content of a document, including text blocks, geometric coordinates, and page structure.

This is an older version of document-extraction.

The latest version is 0.8.0. Releases before 0.7.0 use the $id https://dorsalhub.com/schemas/open/document-extraction and are served by DorsalHub.

$id
https://dorsalhub.com/schemas/open/document-extraction
Latest
https://oatschema.org/document-extraction
Versions
Source
v0.1.2 on GitHub

Schema

document-extraction.json Raw
{    "_license": {        "id": "Apache-2.0",        "notice": "Copyright 2025 Dorsal Hub LTD",        "url": "https://github.com/dorsalhub/open-validation-schemas/blob/main/LICENSE"    },    "$schema": "https://json-schema.org/draft/2020-12/schema",    "$id": "https://dorsalhub.com/schemas/open/document-extraction",    "title": "Document Extraction",    "version": "0.1.2",    "description": "Represent the layout and content of a document, including text blocks, geometric coordinates, and page structure.",    "type": "object",    "properties": {        "extraction_type": {            "type": "string",            "description": "Optionally indicate the extraction type.",            "enum": [                "text",                "lines",                "boxes",                "polygons",                "mixed"            ]        },        "producer": {            "type": "string",            "description": "The creator (model, tool or author) of this extraction.",            "maxLength": 1024        },        "unit": {            "type": "string",            "description": "The unit for all coordinate values if geometric data is present.",            "enum": [                "px",                "pt",                "normalized",                "per_mille"            ]        },        "score_explanation": {            "type": "string",            "description": "Defines the meaning of the 'score' field.",            "maxLength": 256        },        "blocks": {            "type": "array",            "description": "An array of text blocks extracted from the document.",            "maxItems": 100000,            "items": {                "type": "object",                "properties": {                    "block_type": {                        "type": "string",                        "description": "Defines the nature of this specific block (text, line, box, or polygon).",                        "enum": [                            "text",                            "line",                            "box",                            "polygon"                        ]                    },                    "id": {                        "type": "string",                        "description": "A unique identifier (e.g., UUID4) for this block, useful for referencing.",                        "maxLength": 128                    },                    "text": {                        "type": "string",                        "description": "The text content of the block.",                        "maxLength": 4096                    },                    "line_number": {                        "type": "integer",                        "description": "The line number of the block within its page, if applicable.",                        "minimum": 1                    },                    "page_number": {                        "type": "integer",                        "description": "The page number (1-indexed) where this block is located.",                        "minimum": 1                    },                    "score": {                        "type": "number",                        "description": "The confidence score for this block's detection and transcription, ranging from 0.0 (uncertain) to 1.0 (certain).",                        "minimum": 0,                        "maximum": 1                    },                    "box": {                        "type": "object",                        "description": "A rectangular bounding box defined by its top-left corner (x,y) and its dimensions.",                        "properties": {                            "x": {                                "type": "number",                                "minimum": 0,                                "description": "The x-coordinate of the top-left corner."                            },                            "y": {                                "type": "number",                                "minimum": 0,                                "description": "The y-coordinate of the top-left corner."                            },                            "width": {                                "type": "number",                                "minimum": 0,                                "description": "The width of the box."                            },                            "height": {                                "type": "number",                                "minimum": 0,                                "description": "The height of the box."                            }                        },                        "required": [                            "x",                            "y",                            "width",                            "height"                        ],                        "additionalProperties": false                    },                    "polygon": {                        "type": "array",                        "description": "An array of coordinate points defining the block's boundary for non-rectangular shapes.",                        "maxItems": 100,                        "minItems": 3,                        "items": {                            "type": "object",                            "properties": {                                "x": {                                    "type": "number",                                    "minimum": 0,                                    "description": "The x-coordinate of a vertex point."                                },                                "y": {                                    "type": "number",                                    "minimum": 0,                                    "description": "The y-coordinate of a vertex point."                                }                            },                            "required": [                                "x",                                "y"                            ],                            "additionalProperties": false                        }                    },                    "attributes": {                        "type": "object",                        "description": "Arbitrary metadata relevant to this block.",                        "maxProperties": 16,                        "additionalProperties": {                            "anyOf": [                                {                                    "type": "string",                                    "maxLength": 1024                                },                                {                                    "type": "number"                                },                                {                                    "type": "boolean"                                },                                {                                    "type": "null"                                }                            ]                        }                    }                },                "required": [                    "text",                    "block_type"                ],                "additionalProperties": false,                "allOf": [                    {                        "if": {                            "properties": {                                "block_type": {                                    "const": "box"                                }                            }                        },                        "then": {                            "required": [                                "box"                            ]                        }                    },                    {                        "if": {                            "properties": {                                "block_type": {                                    "const": "polygon"                                }                            }                        },                        "then": {                            "required": [                                "polygon"                            ]                        }                    },                    {                        "if": {                            "properties": {                                "block_type": {                                    "const": "line"                                }                            }                        },                        "then": {                            "anyOf": [                                {                                    "required": [                                        "box"                                    ]                                },                                {                                    "required": [                                        "polygon"                                    ]                                }                            ]                        }                    }                ]            }        },        "attributes": {            "type": "object",            "description": "Arbitrary metadata relevant to this extraction.",            "maxProperties": 16,            "additionalProperties": {                "anyOf": [                    {                        "type": "string",                        "maxLength": 1024                    },                    {                        "type": "number"                    },                    {                        "type": "boolean"                    },                    {                        "type": "null"                    }                ]            }        }    },    "required": [        "extraction_type",        "blocks"    ],    "additionalProperties": false,    "oneOf": [        {            "properties": {                "extraction_type": {                    "enum": [                        "text",                        "lines"                    ]                }            }        },        {            "properties": {                "extraction_type": {                    "enum": [                        "boxes",                        "polygons",                        "mixed"                    ]                }            },            "required": [                "unit"            ]        }    ],    "allOf": [        {            "if": {                "properties": {                    "unit": {                        "const": "normalized"                    }                }            },            "then": {                "properties": {                    "blocks": {                        "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                                            }                                        }                                    }                                }                            }                        }                    }                }            }        },        {            "if": {                "properties": {                    "unit": {                        "const": "per_mille"                    }                }            },            "then": {                "properties": {                    "blocks": {                        "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                                            }                                        }                                    }                                }                            }                        }                    }                }            }        }    ]}

Fields

  • extraction_type string required

    Optionally indicate the extraction type.

    Allowed values: "text", "lines", "boxes", "polygons", "mixed"

  • producer string

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

    • at most 1024 characters
  • unit string

    The unit for all coordinate values if geometric data is present.

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

  • score_explanation string

    Defines the meaning of the 'score' field.

    • at most 256 characters
  • blocks array of object required

    An array of text blocks extracted from the document.

    • at most 100000 items
    • block_type string required

      Defines the nature of this specific block (text, line, box, or polygon).

      Allowed values: "text", "line", "box", "polygon"

    • id string

      A unique identifier (e.g., UUID4) for this block, useful for referencing.

      • at most 128 characters
    • text string required

      The text content of the block.

      • at most 4096 characters
    • line_number integer

      The line number of the block within its page, if applicable.

      • ≥ 1
    • page_number integer

      The page number (1-indexed) where this block is located.

      • ≥ 1
    • score number

      The confidence score for this block's detection and transcription, ranging from 0.0 (uncertain) to 1.0 (certain).

      • 0 to 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 array of coordinate points defining the block's boundary for non-rectangular shapes.

      • 3 to 100 items
      • x number required

        The x-coordinate of a vertex point.

        • ≥ 0
      • y number required

        The y-coordinate of a vertex point.

        • ≥ 0
    • attributes object

      Arbitrary metadata relevant to this block.

      • at most 16 properties
      • * string | number | boolean | null

        Any other key.

        • string: at most 1024 characters

    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 "line": at least one of box, polygon must be present.
      Show the JSON Schema
      {  "if": {    "properties": {      "block_type": {        "const": "line"      }    }  },  "then": {    "anyOf": [      {        "required": [          "box"        ]      },      {        "required": [          "polygon"        ]      }    ]  }}
  • attributes object

    Arbitrary metadata relevant to this extraction.

    • at most 16 properties
    • * string | number | boolean | null

      Any other key.

      • string: at most 1024 characters

Exactly one of these forms:

  1. any
    • extraction_type enum

      Allowed values: "text", "lines"

  2. any
    • extraction_type enum

      Allowed values: "boxes", "polygons", "mixed"

    Rules:

    • Also requires unit.

Rules:

  • When unit is "normalized", further limits apply.
    Show the JSON Schema
    {  "if": {    "properties": {      "unit": {        "const": "normalized"      }    }  },  "then": {    "properties": {      "blocks": {        "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                  }                }              }            }          }        }      }    }  }}
  • When unit is "per_mille", further limits apply.
    Show the JSON Schema
    {  "if": {    "properties": {      "unit": {        "const": "per_mille"      }    }  },  "then": {    "properties": {      "blocks": {        "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                  }                }              }            }          }        }      }    }  }}

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