コンテンツにスキップ

SchemaStore

インストールの文書タイプを保存するポート。キー、ラベル、フィールド、そのタイプを認識するシグネチャを持つパーサー。

ポート: SchemaStore。 indx_interfaces.protocols で、indx_interfaces.schema のモデルの上に宣言しています(ADR-0075)。

DocumentType は、キー(invoice)、ラベル、FieldSpec(名前と FieldKind: text、date、amount、 id、company、category のいずれか)、そして任意で signature(そのタイプを認識する形式シグネチャを 持つパーサー)です。ストアはワークスペースのタイプをキーで保存します。

class SchemaStore(Protocol):
def put(self, owner: OwnerId, document_type: DocumentType) -> None: ...
def get(self, owner: OwnerId, type_id: TypeId) -> DocumentType | None: ...
def list(self, owner: OwnerId) -> tuple[DocumentType, ...]: ...
def delete(self, owner: OwnerId, type_id: TypeId) -> bool: ...

DocumentStore と VectorIndex の隣の 3 つ目のストアのポートです。 ワークスペースが持つものすべてのためのキーバリューストアにしないのは、ポートを集約ごとに分けるからです。 今はタイプ、後でラベルとルーター。タイプは失効しないので、purge はありません。同梱するバックエンドは memory(indx-store-memory)、sqlite(indx-store-sqlite)、postgres(indx-store-postgres)の 3 つで、INDX_SCHEMA_STORE が名指します。

  • オーナー。 どのメソッドも OwnerId を最初に取り、オーナーをまたぐものはありません。認証が誰が 尋ねているかを名指すまで、サーバーはインストールごとに 1 つのワークスペースを渡します。
  • 同一性。 オーナーの中で、タイプはそのキーです。
  • 置き換え。 put は同じキーのタイプを置き換えます。置き換えても、サーバーは created_at を保ちます。
  • 冪等性。 ないキーの delete は False です。
  • 順序。 list はオーナーのタイプをキー順に返します。
  • 検証。 キーとフィールド名は ^[a-z][a-z0-9_]{1,39}$ に合い、フィールド名は 1 つのタイプに 1 回だけ 現れます。signature がインストール済みのパーサーを名指しているかは、ストアではなくサーバーが確かめます。

tests/unit/test_store_conformance.py が、インストール済みのすべてのバックエンドにこの規則を守らせます。