Core ER Diagram
Geliştirme · 0.0.0-dev
Yayın
- Doküman
- 0.0.0-dev
- Uygulama
- 0.0.0
Bu sayfa
- Uygulama
- 0.0.0
Bu belge, bir kabul edilmiş Münderecat core release’inin kaynağa sadık ve eksiksiz yeniden kurulması için gereken mantıksal ilişki modelini tanımlar. Tablo ve kolon adlarını fiziksel SQL sözleşmesi olarak kilitlemez; F3 migration ve JSON Schema çalışmaları aşağıdaki entity, kardinalite ve invariant’ları korumak zorundadır.
Karar temeli ADR-001, ADR-002, ADR-003 ve ADR-004’tür. Span ve provenance sınırları sırasıyla ADR-005 ve ADR-006 tarafından belirlenir.
Mantıksal model
Bölüm başlığı “Mantıksal model”erDiagram
accTitle: Münderecat canonical core ilişki modeli
accDescr: Core release bir veya daha fazla metin sürümünü sıralı üyelikle seçer. Metin sürümü esere, kitaplara, bölümlere, paragraflara, cümlelere ve token occurrence kayıtlarına bağlanır. Token occurrence isteğe bağlı olarak aynı metin sürümündeki exact token forma başvurur.
CORE_RELEASE ||--|{ RELEASE_TEXT_VERSION : selects
TEXT_VERSION ||--o{ RELEASE_TEXT_VERSION : is_published_in
WORK ||--|{ TEXT_VERSION : has
TOKENIZATION_PROFILE ||--o{ TEXT_VERSION : tokenizes
TEXT_VERSION ||--|{ BOOK : contains
BOOK ||--|{ CHAPTER : contains
CHAPTER ||--|{ PARAGRAPH : contains
PARAGRAPH ||--|{ SENTENCE : contains
SENTENCE ||--|{ TOKEN_OCCURRENCE : contains
TEXT_VERSION ||--o{ TOKEN_FORM : scopes
TOKEN_FORM o|--|{ TOKEN_OCCURRENCE : supplies_exact_body
CORE_RELEASE {
uuid id PK
text identity_release_key UK
sha256 core_root_sha256 UK
text reconstruction_profile_id
sha256 reconstruction_profile_sha256
}
RELEASE_TEXT_VERSION {
uuid core_release_id PK, FK
uuid text_version_id PK, FK
integer stream_position UK
sha256 text_version_root_sha256
}
WORK {
uuid id PK
sha256 row_sha256
}
TEXT_VERSION {
uuid id PK
uuid work_id FK
uuid tokenization_profile_id FK
sha256 tokenization_profile_sha256
sha256 content_root_sha256 UK
sha256 row_sha256
}
TOKENIZATION_PROFILE {
uuid id PK
sha256 contract_sha256 UK
}
BOOK {
uuid id PK
uuid text_version_id FK
integer position UK
sha256 row_sha256
}
CHAPTER {
uuid id PK
uuid book_id FK
integer position UK
sha256 row_sha256
}
PARAGRAPH {
uuid id PK
uuid chapter_id FK
integer position UK
sha256 row_sha256
}
SENTENCE {
uuid id PK
uuid paragraph_id FK
integer position UK
text initial_text
sha256 row_sha256
}
TOKEN_FORM {
uuid id PK
uuid text_version_id FK
text exact_body
sha256 exact_body_sha256
sha256 row_sha256
}
TOKEN_OCCURRENCE {
uuid id PK
uuid sentence_id FK
integer position UK
text occurrence_kind
uuid token_form_id FK
text literal_text
text trailing_text
sha256 row_sha256
}
RELEASE_TEXT_VERSION, ADR-003 paketindeki ayrı bir JSONL stream değildir.
Paket manifestinin seçtiği core release ile doğrulanmış text-versions.jsonl
logical stream’inin ilişkisel yayın projeksiyonudur. stream_position, canonical
stream sort contract’ı doğrulandıktan sonraki sıfır tabanlı logical record
ordinal’ıdır; manifestteki sırasız inventory’den, DB insert sırasından veya UUID’den
türetilmez. Stream’in ordered row root’u bu sırayı, release core_root_sha256 da o
root’u bağlar.
Üyelikteki text_version_root_sha256, TEXT_VERSION.content_root_sha256 ile exact
eşleşir. Böylece değişmeyen bir text version snapshot’ı daha sonraki bir
CORE_RELEASE tarafından aynı kimlikle tekrar seçilebilir. Metni, child envanteri,
hiyerarşisi veya sınırları değişen sürüm yerinde güncellenmez; yeni TEXT_VERSION
ve etkilenen yeni alt kimliklerle successor release’e girer.
TOKENIZATION_PROFILE da corpus satırı değildir. ID ve hash ile bağlanan,
version-controlled ve content-addressed bir sözleşmedir. Profile bağımlı
çıktılar ancak aynı profile hash’iyle aynı core facts olarak kabul edilebilir.
Entity sorumlulukları
Bölüm başlığı “Entity sorumlulukları”| Entity | Sahip olduğu otoritatif gerçek | Sahip olmadığı veri |
|---|---|---|
CORE_RELEASE |
Bir tam core fact setini seçen kimlik, core root ve reconstruction contract bağı | Paket taşıma ayrıntıları, companion root’ları, provenance grafiği |
RELEASE_TEXT_VERSION |
Release içindeki metin sürümü üyeliği, canonical stream sırası ve exact text-version closure bağı | Metnin kendisi veya editoryal yorum |
WORK |
Metin sürümlerinin bağlı olduğu kalıcı eser kimliği | Release’e özgü metin ve kaynak sırası |
TEXT_VERSION |
Bir dil/edisyon için değişmez metin snapshot’ı, eser, tokenizer contract ve ordered descendant closure bağı | Translation alignment, başlık yorumu, lügat veya arama normalization’ı |
BOOK |
Metin sürümü içindeki kitap üyeliği ve sırası | TOC/heading annotation’ı |
CHAPTER |
Kitap içindeki bölüm üyeliği ve sırası | Semantik bölüm sınıfı veya başlık seviyesi |
PARAGRAPH |
Bölüm içindeki paragraf sınırı ve sırası | Segment veya haşiye sınıflandırması |
SENTENCE |
Paragraf içindeki cümle sınırı, sırası ve token gövdelerinden önceki exact karakterler | Cümle anlamı, alignment veya repetition kararı |
TOKEN_OCCURRENCE |
Cümle içindeki tek occurrence kimliği, sırası, exact gövde kanalı ve sonrasındaki exact karakterler | Lemma, kök, anlam, Osmanlıca veya compound üyeliği |
TOKEN_FORM |
Bir text version içindeki tek exact, normalize edilmemiş token gövde değeri | Boşluk, noktalama, lemma, kök, anlam ve kullanım bağlamı |
TOKENIZATION_PROFILE |
Gövde sınırı ve artık karakter sahipliği için versioned algoritma sözleşmesi | Üretilmiş corpus satırları veya curation kararı |
WORK, TEXT_VERSION, BOOK, CHAPTER, PARAGRAPH, SENTENCE ve
TOKEN_OCCURRENCE ADR-003’ün yedi core stream’ine karşılık gelir.
TOKEN_FORM, token-occurrences.jsonl.zst içindeki doğrulanmış exact
form_id + body çiftlerinin normalleştirilmiş ilişkisel projeksiyonudur.
Kardinalite ve sıra
Bölüm başlığı “Kardinalite ve sıra”| İlişki | Zorunluluk | Sıra invariant’ı |
|---|---|---|
| Release -> release text version | Bir accepted release en az bir üyelik içerir; membership root exact text-version root ile eşleşir | (core_release_id, stream_position) unique’dir; pozisyon doğrulanmış text-versions.jsonl logical record ordinal’ıdır ve 0..n-1 kesintisizdir |
| Work -> text version | Her text version tam bir work’e bağlıdır; bir work bir veya daha fazla version barındırabilir | Sürümün release traversal sırası membership tarafından taşınır |
| Text version -> book | Her book tam bir text version’a bağlıdır | (text_version_id, position) unique ve 0..n-1 kesintisizdir |
| Book -> chapter | Her chapter tam bir book’a bağlıdır | (book_id, position) unique ve 0..n-1 kesintisizdir |
| Chapter -> paragraph | Her paragraph tam bir chapter’a bağlıdır | (chapter_id, position) unique ve 0..n-1 kesintisizdir |
| Paragraph -> sentence | Her sentence tam bir paragraph’a bağlıdır | (paragraph_id, position) unique ve 0..n-1 kesintisizdir |
| Sentence -> token occurrence | Her occurrence tam bir sentence’a bağlıdır; accepted non-empty sentence en az bir occurrence içerir | (sentence_id, position) unique ve 0..n-1 kesintisizdir |
| Text version -> token form | Her form tam bir text version’a bağlıdır ve en az bir form occurrence tarafından kullanılır | (text_version_id, exact_body) binary exact unique’dir |
| Token form -> occurrence | form occurrence tam bir form’a; literal occurrence hiçbir forma bağlı değildir |
Formun text version’ı occurrence’ın ancestor text version’ıyla aynı olmalıdır |
Buradaki UK işaretleri tek kolonlu uniqueness iddiası değildir. Örneğin bütün
position alanlarının uniqueness kapsamı kendi parent foreign key’idir. Fiziksel
schema bu birleşik anahtarları constraint veya eşdeğer fail-closed mekanizmayla
uygulamalıdır.
Hiçbir traversal UUID, insert sırası, timestamp, locale collation veya query planından sıra türetemez. Parent ve position, accepted source facts’tir.
Text version closure bağı
Bölüm başlığı “Text version closure bağı”Bir accepted TEXT_VERSION yalnız kendi row payload’ıyla değil, tam immutable
descendant setiyle tanımlanır. content_root_sha256, self-reference oluşturmamak
için TEXT_VERSION.row_sha256 değerini input almaz. Bunun yerine versioned
sha256-text-version-closure-v1 profili altında şunları canonical traversal
sırasıyla bağlar:
- text version ID ile tokenization profile ID ve hash’i;
- bütün book, chapter, paragraph, sentence ve token occurrence kayıtlarının
[entity_kind, id, row_sha256]tuple’ları; ve - occurrence stream’inde doğrulanmış bütün kullanılan token form ID/body eşlemeleri.
Compiler önce descendant closure’ı hesaplar, root’u TEXT_VERSION row’una koyar,
sonra bu row’un row_sha256 değerini üretir. Publication aynı transaction içinde
(text_version_id, row_sha256, content_root_sha256) için kalıcı uniqueness claim
alır. Daha önce yayımlanmış bir text version ID’si farklı row veya closure root ile
yeniden kullanılamaz. Mevcut parent altına yeni child eklemek, child silmek,
reparent etmek veya position değiştirmek root’u değiştirir ve aynı ID altında
reddedilir; yeni snapshot kimliği gerekir.
Token ayrım kuralı
Bölüm başlığı “Token ayrım kuralı”TOKEN_OCCURRENCE.occurrence_kind kapalı olarak form | literal değerlerinden
biridir ve iki kanal exclusive/exhaustive çalışır:
| Kind | token_form_id |
literal_text |
Gövde |
|---|---|---|---|
form |
Zorunlu | NULL |
Referans verilen TOKEN_FORM.exact_body |
literal |
NULL |
Zorunlu ve boş olamaz | TOKEN_OCCURRENCE.literal_text |
Her iki kind için trailing_text exact ve boş olabilir. Bir form occurrence
formun gövdesini yerel değerle override edemez. Formun exact_body değeri
Unicode normalization, case folding veya transliteration uygulanmadan binary
exact eşitlikle scope içindeki tek kayda indirgenir. SHA-256 yalnız indeks ve
bütünlük yardımcısıdır; farklı exact byte değerlerini birleştirme yetkisi vermez.
Yeniden kurma zinciri
Bölüm başlığı “Yeniden kurma zinciri”Bir cümle sadece core facts ile şöyle kurulur:
sentence.initial_text+ concat( body(token_occurrence) + token_occurrence.trailing_text order by token_occurrence.position )Üst katmanlar da child çıktıları kendi position sırasıyla birleştirir. Kaynak
profile’ın cümle, paragraf, chapter, book veya text version sınırına ait saydığı
her ayırıcı exact olarak bir core reconstruction alanında sahiplenilmelidir.
Renderer hiçbir katmanda varsayılan boşluk, noktalama veya satır sonu ekleyemez.
F3 row schema’ları, token katmanında kilitli initial_text/trailing_text
kuralını zayıflatmadan üst sınır ayırıcılarının hangi exact alanda tutulacağını
isimlendirecektir.
Doğrulama aşağıdan yukarıya yapılır:
- Occurrence pozisyonları kesintisizdir ve discriminated form/literal kuralı sağlanır.
- Reconstructed sentence exact source scalar sequence ve digest ile eşittir.
- Sentence çıktıları paragraph; paragraph çıktıları chapter; chapter çıktıları book; book çıktıları text version beklenen digest’lerini üretir.
- Her text version’ın yeniden hesaplanan closure root’u hem kendi row’uyla hem release membership kaydıyla exact eşleşir.
- Doğrulanmış
text-versions.jsonllogical record ordinal sırasındaki text version çıktıları manifestteki release reconstruction digest vecore_root_sha256bağıyla doğrulanır.
Bir alt seviyedeki mismatch üst seviyede normalize edilmez veya görmezden gelinmez; release yayınlanamaz.
Kimlik ve release yaşam döngüsü
Bölüm başlığı “Kimlik ve release yaşam döngüsü”- Bütün public entity ID’leri kind ile birlikte ele alınan opaque UUID’lerdir.
- Bootstrap package-owned kayıtları ADR-002’nin versioned path contract’ıyla UUIDv5 alır. DB sequence, görünen başlık, normalized text ve güncel pozisyon tek başına kimlik kaynağı olamaz.
- Parent, sınır, sıra veya exact text değişikliği accepted satırda
UPDATEile uygulanmaz. Yeni core release ve identity contract’ın gerektirdiği yeni etkilenen entity ID’leri üretilir. - Bir text version snapshot’ı, row hash’i ve
content_root_sha256değeri exact aynıysa sonraki release membership’i aynı kimlikleri tekrar seçebilir. Eşit görünen ama closure kanıtı bulunmayan satırlar yalnız metin benzerliğiyle ID paylaşamaz. row_sha256canonical row payload’ını;content_root_sha256bir text version’ın tam ordered descendant closure’ını;core_root_sha256seçilen tam release envanteri, parentage, boundaries, exact content ve order’ı bağlar.- Eski ID’ler successor release’ten sonra da tarihsel olarak çözümlenebilir. Crosswalk ve supersession event’leri core text değildir.
Core dışında kalan ilişkiler
Bölüm başlığı “Core dışında kalan ilişkiler”Aşağıdaki kayıtlar core’a doğru referans verebilir, fakat core tabloları exact reconstruction için bunlara dönük FK veya join taşımaz:
| Katman | Örnekler | Bu diyagramdaki sınır |
|---|---|---|
| Annotation authority | Compound definition, lexeme, sense, Ottoman form, heading kind | F2-012 annotation ER’de modellenir |
| Occurrence annotation | Span, compound occurrence, segment, heading, haşiye, Ottoman rendering, repetition ve alignment | Immutable core occurrence veya typed span’a dışarıdan bağlanır |
| Control evidence | Source release, artifact, record, process run, validation ve curation event | Core release/row kökenini ispatlar; metin üretmez |
| Companion/migration | Provenance binding ve legacy ID crosswalk | Paketle taşınabilir; core root ve reconstruction bağımlılığı değildir |
| Derived/cache | Search normalization, frequency, materialized reader projection | Tamamen yeniden üretilebilir ve otorite değildir |
Özellikle heading metninin literal karakterleri, Arapça pasajlar, haşiye işaretleri ve tekrarlanan pasajlar kaynaktaki konumlarında core içinde kalır. Bunların ne olduğu veya başka hangi entity ile ilişkili olduğu annotation’dır.
Sealed accepted-core sınırı
Bölüm başlığı “Sealed accepted-core sınırı”Candidate/staging alanı ile accepted-core alanı farklı mutation sınırlarıdır. Compiler veya migrator candidate veriyi yeniden kurabilir; publication ise bütün hash, closure, parent ve sıra kontrollerinden sonra yalnız yeni immutable rows, membership’ler ve permanent claims ekleyen atomik işlemdir.
Accepted-core relation ve publication claim’lerinin sahibi ayrı bir NOLOGIN,
NOINHERIT, NOSUPERUSER sealed owner rolüdür. prod_migrator, app_runtime,
curation_executor, annotation/provenance/cache yazarları, service credentials ve
başka hiçbir normal capability bu role üye olamaz veya SET ROLE yapamaz.
agent_local_owner yalnız disposable packet DB’sindeki candidate/test otoritesidir;
production accepted-core sahibi değildir. RLS veya sıradan grant revocation tek
başına bu garanti sayılmaz, çünkü PostgreSQL object owner enforcement trigger ve
ACL’leri değiştirebilir.
Publication entry point’i fixed owner ve search path kullanan, exact execute grant’li
bir release operasyonudur. Mevcut accepted ID, row, edge, closure veya claim üzerinde
UPDATE, DELETE, TRUNCATE, reparent ya da child append yapamaz. Production DDL
değişikliği sealed owner üyeliği vermez; versioned migration ve iki kişilik release
authorization’ıyla yeni schema/successor yapı hazırlar. Human-only
break_glass_owner ancak dışarıdan iki onaylı incident süreciyle kullanılabilir ve
değiştirilmiş bytes’ı aynı accepted release gibi yeniden yayımlayamaz; exact restore
veya successor release izi bırakmak zorundadır.
Uygulama kapıları
Bölüm başlığı “Uygulama kapıları”F3 physical schema ve importer aşağıdaki kontrolleri fail-closed uygulamadan bu modeli gerçekleştirmiş sayılmaz:
- Typed FK’ler ve parent-scoped contiguous position kontrolleri.
- Cross-parent veya cross-text-version occurrence paylaşımının reddi.
- Form/literal XOR, non-empty body ve same-text-version form constraint’leri.
- Binary exact form uniqueness ve digest collision karşılaştırması.
- Core-only sentence, paragraph, chapter, text version ve release reconstruction digest doğrulaması.
- Text-version closure root’un yeniden hesaplanması ve permanent
(id, row_sha256, content_root_sha256)claim’i. - Accepted core’un ayrı sealed non-login owner’a ait olması; migrator dahil bütün
non-break-glass rollere
UPDATE,DELETE,TRUNCATE, reparent ve child append yollarının kapatılması. - Aynı release ID, identity release key, row ID veya closure claim’inin farklı bağlı içerikle yeniden kullanılmasının atomik olarak reddi.
- Release membership sırasının doğrulanmış
text-versions.jsonllogical record ordinal’ından exact üretilmesi ve ordered stream root ile bağlanması. - Annotation, provenance ve cache tabloları boşken aynı core reconstruction sonucunun alınması.
F2-012 bu core anchor’lara bağlanan annotation modelini; F2-013 hangi entity kind’lerin doğrudan referans verilebilir olduğunu; F2-014 ise fiziksel tabloların permanence sınıflarını ayrı ayrı tanımlayacaktır.