Metadata for a semantic element extracted from a document.
Contains information about where and how an element appears in the source document, including position, page number, and custom metadata fields.
Fields
:page_number- Page number where element appears (1-indexed), or nil:filename- Source filename or document name, or nil:coordinates- Bounding box coordinates if available, or nil:element_index- Position index in the element sequence, or nil:additional- Map of custom metadata fields (defaults to empty map)
Examples
iex> metadata = %Kreuzberg.ElementMetadata{
...> page_number: 1,
...> filename: "document.pdf",
...> coordinates: %Kreuzberg.BoundingBox{x0: 10.0, y0: 20.0, x1: 100.0, y1: 50.0},
...> element_index: 0,
...> additional: %{"section" => "Introduction"}
...> }
iex> metadata.page_number
1
Summary
Functions
Creates an ElementMetadata struct from a map.
Converts an ElementMetadata struct to a map.
Types
@type t() :: %Kreuzberg.ElementMetadata{ additional: map(), coordinates: Kreuzberg.BoundingBox.t() | nil, element_index: integer() | nil, filename: String.t() | nil, page_number: integer() | nil }
Functions
Creates an ElementMetadata struct from a map.
Converts a plain map (typically from NIF/Rust) into a proper struct, handling nested bounding box data.
Parameters
data- A map containing metadata fields
Returns
An ElementMetadata struct with properly typed fields.
Examples
iex> metadata_map = %{
...> "page_number" => 1,
...> "filename" => "document.pdf",
...> "coordinates" => %{"x0" => 10.0, "y0" => 20.0, "x1" => 100.0, "y1" => 50.0},
...> "element_index" => 0,
...> "additional" => %{"section" => "Introduction"}
...> }
iex> metadata = Kreuzberg.ElementMetadata.from_map(metadata_map)
iex> metadata.page_number
1
Converts an ElementMetadata struct to a map.
Useful for serialization and passing to external systems.
Parameters
metadata- AnElementMetadatastruct
Returns
A map with string keys representing all fields.
Examples
iex> metadata = %Kreuzberg.ElementMetadata{
...> page_number: 1,
...> filename: "doc.pdf",
...> additional: %{"section" => "intro"}
...> }
iex> Kreuzberg.ElementMetadata.to_map(metadata)
%{
"page_number" => 1,
"filename" => "doc.pdf",
"coordinates" => nil,
...
}