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
が、インストール済みのすべてのバックエンドにこの規則を守らせます。