Ƒ-02: Ţĥé çöñţéñţ ḿöđéļ
Šüḿḿàŕý
Đöçüḿéñţš àŕé à šţŕéàḿ öƒ Part ṽàļüéš, éàçĥ çàŕŕýîñĝ à PartType
đîšçŕîḿîñàţöŕ àñđ à Resource. Ḿöđîƒîàƃļé çöñţéñţ îš à Block, àñđ à Ƃļöçķ'š
çöñţéñţ îš à ƒļàţ []Run þéŕ šîđé: à đîšçŕîḿîñàţéđ üñîöñ öƒ Text, Ph,
PcOpen, PcClose, Sub, Plural, àñđ Select. Éàçĥ îñļîñé-çöđé ŕüñ çàŕŕîéš
îţš öŵñ ḿéţàđàţà (ñàţîṽé ḿàŕķüþ, àƃšţŕàçţ îđéñţîţý, šéḿàñţîç ţýþé, đîšþļàý ţéẋţ,
ţéẋţ éǫüîṽàļéñţ, çàñöñîçàļ àţţŕîƃüţéš, éđîţîñĝ çöñšţŕàîñţš), šö ţööļš þŕöçéšš
çöñţéñţ šéḿàñţîçàļļý ŵĥîļé ŵŕîţéŕš ŕéþļàý ñàţîṽé ḿàŕķüþ éẋàçţļý.
Îñţéŕþŕéţàţîöñš öƒ ţĥàţ çöñţéñţ (šéñţéñçé šéĝḿéñţàţîöñ, ţéŕḿš, éñţîţîéš,
ƒîñđîñĝš, àļîĝñḿéñţ) àŕé šţàñđ-öƒƒ öṽéŕļàýš: ţýþéđ, ŕüñ-àñçĥöŕéđ šþàñ šéţš
ļàýéŕéđ öṽéŕ ţĥé ŕüñš, ñéṽéŕ ŕéŵŕîţîñĝ ţĥéḿ. Ţĥéŕé îš ñö Segment ţýþé; à
šéĝḿéñţ îš à šþàñ îñ à šéĝḿéñţàţîöñ öṽéŕļàý. Ŵĥéŕé à Ƃļöçķ îš àñçĥöŕéđ îñ îţš
šöüŕçé ƒöļļöŵš ţĥé ḿéđîüḿ: à ŕüñ ŕàñĝé îñ ţéẋţ, à ƃöẋ öñ à ŕéñđéŕéđ þàĝé, à ţîḿé
šþàñ îñ ţîḿéđ ḿéđîà. Çöñţéñţ ţĥàţ ŵàš ŕéçöĝñîžéđ ŕàţĥéŕ ţĥàñ þàŕšéđ ŕéçöŕđš ţĥé
éẋţŕàçţîñĝ éñĝîñé àñđ à çöñƒîđéñçé îñ ţĥé šàḿé Origin à ţŕàñšļàţîöñ çàŕŕîéš.
Ţàŕĝéţš àŕé ƒîŕšţ-çļàšš ŕéçöŕđš ķéýéđ ƃý à ṽàŕîàñţ (ļöçàļé þļüš öþţîöñàļ
ţöñé öŕ çĥàññéļ).
Çöñţéẋţ
Ţĥé çöñţéñţ ḿöđéļ ĥàš ţö ŕéþŕéšéñţ đöçüḿéñţš îñ à ŵàý ţĥàţ îš
ƒöŕḿàţ-îñđéþéñđéñţ, ţýþé-šàƒé, éẋţéñšîƃļé, àñđ àƃļé ţö éẋþŕéšš ŕéçüŕšîṽé éḿƃéđđéđ
çöñţéñţ ñàţüŕàļļý. Ĝö'š çöḿþöšîţîöñ àñđ îñţéŕƒàçé šýšţéḿ šĥàþéš ţĥé đéšîĝñ ţöŵàŕđ
đîšçŕîḿîñàţéđ üñîöñš àñđ éẋþļîçîţ ŕéšöüŕçé ţýþéš ŕàţĥéŕ ţĥàñ đééþ ţýþé
ĥîéŕàŕçĥîéš. Ƃöţĥ ţĥé Þàŕţ šţŕéàḿ àñđ ţĥé îñļîñé-çöñţéñţ ḿöđéļ àŕé đîšçŕîḿîñàţéđ
üñîöñš: öñé ķéýéđ ƃý PartType, ţĥé öţĥéŕ ƃý ŵĥîçĥ Run ƒîéļđ îš šéţ.
Ƃéýöñđ šţŕüçţüŕàļ ŕéþŕéšéñţàţîöñ, ŕéàļ ŵöŕķƒļöŵš đéḿàñđ šţàƃļé çöñţéñţ îđéñţîţý àçŕöšš éẋţŕàçţîöñ çýçļéš, éẋţéñšîƃļé ḿéţàđàţà, đîšþļàý ĥîñţš ţĥàţ ĝüîđé ŕéñđéŕîñĝ ŵîţĥöüţ çöüþļîñĝ ţĥé ḿöđéļ ţö à ƒŕöñţéñđ, àñđ à ƒöŕḿàţ-îñđéþéñđéñţ îñļîñé-çöđé ḿöđéļ ţĥàţ šéŕṽéš ḿéḿöŕý ḿàţçĥîñĝ, ḿöđéļ-ƃàçķéđ ţŕàñšļàţîöñ, àñđ éđîţöŕ ŕéñđéŕîñĝ àļîķé.
Ţĥé îñļîñé-çöđé çĥàļļéñĝé
Đöçüḿéñţš çöñţàîñ îñļîñé ƒöŕḿàţţîñĝ (ƃöļđ, ļîñķš, îḿàĝéš, ṽàŕîàƃļéš, þļàçéĥöļđéŕš) éḿƃéđđéđ îñ ţĥé ţéẋţ, àñđ éṽéŕý šöüŕçé ƒöŕḿàţ šþéļļš ţĥéšé đéŕéñţļý:
| Çöñçéþţ | ĤŢḾĻ | Ḿàŕķđöŵñ | ĐÖÇẊ (ÖþéñẊḾĻ) | ẊĻÎƑƑ 2.0 |
|---|---|---|---|---|
| Ƃöļđ | <b> | ** | <w:b/> | <pc type="fmt" subType="xlf:b"> |
| Ļîñķ | <a href="…"> | [text](url) | <w:hyperlink> | <pc type="link"> |
| Ļîñé ƃŕéàķ | <br/> | ţŵö šþàçéš + ñéŵļîñé | <w:br/> | <ph type="fmt" subType="xlf:lb"/> |
| Þļàçéĥöļđéŕ | ñöñé | ñöñé | ñöñé | <ph> |
Ḿéḿöŕý ḿàţçĥîñĝ, ţŕàñšļàţîöñ, ṽéŕîƒîçàţîöñ, àñđ ţéŕḿ ļööķüþ ḿüšţ ñöţ ñééđ ţö ķñöŵ
ŵĥéţĥéŕ ţĥé ƃöļđ çàḿé ƒŕöḿ ĤŢḾĻ öŕ Ḿàŕķđöŵñ. Àţ ţĥé šàḿé ţîḿé ŕöüñđ-ţŕîþ ƒîđéļîţý
îš ñöñ-ñéĝöţîàƃļé: <b class="emphasis"> ḿüšţ ŕöüñđ-ţŕîþ àš éẋàçţļý ţĥàţ, ñöţ àš
à ĝéñéŕîç ƃöļđ ţàĝ.
Ţĥé éḿƃéđđéđ-çöñţéñţ çĥàļļéñĝé
Đöçüḿéñţš ƒŕéǫüéñţļý çöñţàîñ çöñţéñţ îñ à đéŕéñţ ƒöŕḿàţ: ĤŢḾĻ îñšîđé ĴŠÖÑ
ṽàļüéš, ĤŢḾĻ îñ ẊḾĻ ÇĐÀŢÀ, Ḿàŕķđöŵñ îñ šþŕéàđšĥééţ çöļüḿñš. À ŕéàđéŕ ţĥàţ šééš
öñļý "<p>Hello <b>world</b></p>" àš à ƒļàţ šţŕîñĝ ḿîššéš ţĥé îñļîñé ƒöŕḿàţţîñĝ
àñđ þŕöđüçéš ŵöŕšé ŕéšüļţš đöŵñšţŕéàḿ.
Đéçîšîöñ
Þàŕţ àñđ Ŕéšöüŕçé
Öñé Part šţŕüçţ çàŕŕîéš à PartType éñüḿ àñđ à Resource:
type Part struct {
Type PartType
Resource Resource // Block, Layer, Group, Data, or Media
}
type Resource interface {
ResourceID() string
}
PartType ṽàļüéš àŕé PartUnknown (ţĥé žéŕö ṽàļüé), PartLayerStart,
PartLayerEnd, PartGroupStart, PartGroupEnd, PartBlock, PartData,
PartMedia, PartRawDocument, àñđ PartCustom. Çöñšţàñţš çàŕŕý éẋþļîçîţ
îñţéĝéŕ ṽàļüéš ƒöŕ ŵîŕé çöḿþàţîƃîļîţý: ñüḿƃéŕš àŕé ñéṽéŕ ŕéñüḿƃéŕéđ, àñđ ŕéţîŕéđ
šļöţš šţàý ŕéšéŕṽéđ.
À đöçüḿéñţ îš à šţŕéàḿ öƒ Þàŕţš. Ļàýéŕš ñéšţ; à Ƃļöçķ ĥöļđš à ƒļàţ Ŕüñ šéǫüéñçé þéŕ šîđé þļüš šţàñđ-öƒƒ öṽéŕļàýš.
Ŕéšöüŕçé ţýþéš:
- Ļàýéŕ: šţŕüçţüŕàļ ĝŕöüþîñĝ (đöçüḿéñţ, šéçţîöñ, éḿƃéđđéđ çöñţéñţ),
đéļîḿîţéđ ƃý
PartLayerStart/PartLayerEnd. - Ĝŕöüþ: à ñéšţéđ šţŕüçţüŕàļ ĝŕöüþ ŵîţĥîñ à ļàýéŕ, šüçĥ àš à ţàƃļé,
đéļîḿîţéđ ƃý
PartGroupStart/PartGroupEnd. - Ƃļöçķ: ḿöđîƒîàƃļé çöñţéñţ: à šöüŕçé ŕüñ šéǫüéñçé, þéŕ-ṽàŕîàñţ ţàŕĝéţ ŕüñ šéǫüéñçéš, àñđ öþţîöñàļ šţàñđ-öƒƒ öṽéŕļàýš.
- Đàţà: ñöñ-çöñţéñţ šţŕüçţüŕé (šķéļéţöñ, ḿéţàđàţà).
- Ḿéđîà: ƃîñàŕý çöñţéñţ. À
Mediaîš à ƃîñàŕý ŕéƒéŕéñçé, ñéṽéŕ îñļîñéđ ƃýţéš: ŕéšöļüţîöñ þŕéçéđéñçé îšBlobKey(à çöñţéñţ-àđđŕéššéđ ķéý îñ à ƃļöƃ šţöŕé)>URI(àñ éẋţéŕñàļ ŕéƒéŕéñçé)>Data(îñļîñé, ƒöŕ šḿàļļ þîþéļîñé-îñţéŕñàļ àššéţš öñļý). À ļàŕĝé ŕàšţéŕ öŕ ḿéđîà ţŕàçķ ţĥéŕéƒöŕé ñéṽéŕ šţŕéàḿš ţĥŕöüĝĥ ţĥé Þàŕţ çĥàññéļ öŕ ţĥé þļüĝîñ ƃöüñđàŕý; à šîñĝļé ĥéļþéŕ àţ ţĥé çöñšüḿîñĝ ƃöüñđàŕý ḿàţéŕîàļîžéš ţĥé ƃýţéš. Ţĥîš îš ţĥé öñé ƃîñàŕý îđîöḿ šĥàŕéđ ƃý ţĥé çöñţéñţ ḿöđéļ, þàţĥ-ƃàšéđ þļüĝîñ ÎÖ, àñđ ḿöđéļ-þŕöṽîđéŕ þàŕţš (É-07).
PartResult{Part, Error} çàŕŕîéš çöñţéñţ àñđ éŕŕöŕš öñ ţĥé šàḿé çĥàññéļ, ļéţţîñĝ
à ţööļ đéçîđé ĥöŵ ţö ĥàñđļé àñ éŕŕöŕ (šķîþ, ŕéţŕý, ƒàîļ) ŵîţĥöüţ à šéçöñđ
çĥàññéļ.
Ƃļöçķ
type Block struct {
ID string
Name string
Unit string // durable identity, resolved by reconciliation (F-03)
Type string
MimeType string
Translatable bool // eligible for modification or extraction
SourceLocale LocaleID
SourceStatus SourceStatus // authoring lifecycle: authored → checked → approved
Source []Run // whole source content
Targets map[VariantKey]*Target // first-class targets, keyed by variant
Overlays []Overlay // positional, run-anchored stand-off layers
Annotations map[string]Payload // block-scoped typed metadata, keyed by type
Identity *BlockIdentity // content-addressable hashes
Properties map[string]string // opaque pass-through metadata only
// …skeleton link, content ref, display hint, whitespace flag
}
À Ƃļöçķ ĥöļđš öñé šöüŕçé ŕüñ šéǫüéñçé àñđ öñé ţàŕĝéţ ŕüñ šéǫüéñçé þéŕ ṽàŕîàñţ:
ţĥé ŵĥöļé çöñţéñţ, üñšéĝḿéñţéđ. Ţĥéŕé îš ñö Segment çöñţàîñéŕ: ḿöšţ ƃļöçķš
àŕé à šîñĝļé šţŕîñĝ àñđ îţš ţŕàñšļàţîöñš, àñđ ţĥé ḿöđéļ šàýš éẋàçţļý ţĥàţ. Ŵĥéñ
à ŵöŕķƒļöŵ ñééđš šéñţéñçé ƃöüñđàŕîéš (à ŕéṽîéŵ šüŕƒàçé, éẋàçţ-ḿàţçĥ ḿéḿöŕý ķéýš,
ẊĻÎƑƑ öŕ ŢḾẊ éẋþöŕţ), à ţööļ çöḿþüţéš ţĥéḿ àñđ àţţàçĥéš à šéĝḿéñţàţîöñ öṽéŕļàý.
Ţĥé öṽéŕļàý ļàýéŕš öṽéŕ ţĥé ŕüñš; ţĥé ŕüñš àŕé ñéṽéŕ ŕéþàŕţîţîöñéđ, šö
šéĝḿéñţàţîöñ îš ŕéṽéŕšîƃļé ƃý çöñšţŕüçţîöñ.
Translatable îš à þàŕšé-ţîḿé çļàššîƒîçàţîöñ, ñöţ à þöļîçý: à ŕéàđéŕ ḿàŕķš ŵĥîçĥ
Þàŕţš àŕé àüţĥöŕéđ çöñţéñţ àñđ ŵĥîçĥ àŕé šüŕŕöüñđîñĝ šţŕüçţüŕé. Ƃļöçķš ļéƒţ
üñḿàŕķéđ šţàý îñ ţĥé šķéļéţöñ, üñţöüçĥéđ ƃý ţööļš ţĥàţ éđîţ, çĥéçķ, öŕ ţŕàñšļàţé.
SourceStatus îš ţĥé šöüŕçé-šîđé çöüñţéŕþàŕţ öƒ à ţàŕĝéţ'š šţàţüš. Ñéŵ ("")
ŕéàđš àš ţĥé àüţĥöŕéđ ƃàšéļîñé; à šöüŕçé éđîţ ŕéšéţš îţ, à çļéàñ šöüŕçé çĥéçķ
šţàḿþš checked, àñđ àñ éẋþļîçîţ àþþŕöṽàļ šţàḿþš approved.
Ţàŕĝéţš àñđ ṽàŕîàñţš
À ţàŕĝéţ îš à ƒîŕšţ-çļàšš ŕéçöŕđ çàŕŕýîñĝ šţàţüš àñđ þŕöṽéñàñçé, ķéýéđ ƃý à ṽàŕîàñţ ŕàţĥéŕ ţĥàñ ƃý ļöçàļé àļöñé:
// Locale is the only required dimension; tone and channel are optional and
// zero-valued by default, so the common case carries no extra ceremony.
type VariantKey struct {
Locale LocaleID
Tone string
Channel string
}
// Target is the committed translation for one variant: content plus its
// lifecycle and provenance. Candidate translations (memory hits, machine
// output, model proposals) stay as alt-translation annotations.
type Target struct {
Runs []Run
Status TargetStatus // "" (new) | draft | translated | reviewed | signed-off
Origin Origin // how the content was produced, and what governed it
Score float64
}
Éŕĝöñöḿîç àççéššöŕš ķééþ ţĥé ļöçàļé-öñļý þàţĥ à öñé-ļîñéŕ: block.Target("fr")
ŕéšöļṽéš VariantKey{Locale: "fr"}, ŵĥîļé block.TargetVariant(key) ŕéàçĥéš ţĥé
ĝéñéŕàļ çàšé. Çöđé ţĥàţ öñļý ķñöŵš àƃöüţ ļöçàļéš ñéṽéŕ ĥàš ţö ḿéñţîöñ ţöñé öŕ
çĥàññéļ: ŕîçĥéŕ ṽàŕîàñţš àŕé šţŕîçţļý öþţ-îñ. À Target'š ŕüñš çàŕŕý ţĥéîŕ öŵñ
öṽéŕļàýš, šçöþéđ ţö ţĥàţ ṽàŕîàñţ.
Ţĥîš šéþàŕàţéš ţŵö ţĥîñĝš à ƃàŕé map[LocaleID][]Run çöñƒļàţéš: ţĥé çöḿḿîţţéđ
ţŕàñšļàţîöñ þéŕ ṽàŕîàñţ, ŵîţĥ šţàţüš àñđ þŕöṽéñàñçé, ƒŕöḿ çàñđîđàţé
þŕöþöšàļš, öƒ ŵĥîçĥ ţĥéŕé ḿàý ƃé ḿàñý þéŕ ṽàŕîàñţ, éàçĥ šçöŕéđ. Àççüḿüļàţéđ
ĥîšţöŕý àçŕöšš ŕüñš àñđ ŕéṽîéŵ ţŕàîļš àŕé à þéŕšîšţéñçé çöñçéŕñ, öüţšîđé ţĥé
çöñţéñţ ḿöđéļ.
Çöñţéñţ-àđđŕéššàƃļé îđéñţîţý
type BlockIdentity struct {
ContentHash string // SHA-256 of the whitespace-trimmed source text
ContextHash string // SHA-256 of name, type, and identifying properties
}
Ţĥé šàḿé çöñţéñţ àļŵàýš þŕöđüçéš ţĥé šàḿé îđéñţîţý, šö öñļý ƃļöçķš ŵĥöšé îđéñţîţý
ĥàš çĥàñĝéđ ñééđ ŕéþŕöçéššîñĝ, àñđ îđéñţîçàļ ƃļöçķš àçŕöšš đöçüḿéñţš šĥàŕé à
çöñţéñţ ĥàšĥ. Unit îš ţĥé đüŕàƃļé ķéý ţĥàţ ĝŕàđîñĝ ţĥé þàîŕ àĝàîñšţ ţĥé
þŕéṽîöüš ŕéàđ þŕöđüçéš: à đéçîšîöñ, à ţŕàñšļàţîöñ àñđ à ĥîšţöŕý éñţŕý àŕé ƒîļéđ
üñđéŕ îţ, àñđ à ṽéñüé šţöŕéš îţ àš ţĥé ƃļöçķ'š šöüŕçé îđ. À ŕéàđéŕ ļéàṽéš îţ
éḿþţý; ŕéçöñçîļîàţîöñ ƒîļļš îţ, àñđ Name šţàñđš îñ üñţîļ îţ đöéš. Ĥöŵ ţĥé þàîŕ
îš ĝŕàđéđ, àñđ ĥöŵ ţĥé šţöŕé ķéý îš đéŕîṽéđ, îš Ƒ-03: Îđéñţîţý.
Þŕöþéŕţîéš
Properties çàŕŕîéš àŕƃîţŕàŕý ķéý-ṽàļüé ḿéţàđàţà ţĥàţ ŕéàđéŕš, ţööļš, àñđ
çöññéçţöŕš àţţàçĥ àš ƃļöçķš ƒļöŵ ţĥŕöüĝĥ ţĥé þîþéļîñé: à šöüŕçé þàţĥ îñ àñ
üþšţŕéàḿ šýšţéḿ, à ƒöŕḿàţ ĥîñţ, à šţŕüçţüŕàļ çööŕđîñàţé. Îţ îš öþàǫüé
þàšš-ţĥŕöüĝĥ ḿéţàđàţà öñļý. Àñàļýţîç àñđ îñţéŕþŕéţîṽé ŕéšüļţš à ţööļ þŕöđüçéš
(ḿàţçĥ šçöŕéš, ŵöŕđ çöüñţš, ƒîñđîñĝš) àŕé öṽéŕļàýš öŕ àññöţàţîöñš, ñöţ
þŕöþéŕţîéš, àñđ ţĥé ţööļ ÎÖ çöñţŕàçţ (É-03)
đéçļàŕéš ŵĥîçĥ à ţööļ çöñšüḿéš àñđ þŕöđüçéš.
À þŕöþéŕţý ŵĥöšé ķéý ƃéĝîñš ŵîţĥ @ îš àđṽîšöŕý: çàŕŕîéđ öñ ţĥé ƃļöçķ ƃüţ
šķîþþéđ ŵĥéñ ĥàšĥîñĝ. Ŕéàđéŕš üšé îţ ƒöŕ đéŕîṽéđ ļöçàţöŕš (ţĥé ļîñé à ƃļöçķ
šţàŕţš öñ, à ƃýţé öƒƒšéţ): àñýţĥîñĝ ţĥàţ šàýš ŵĥéŕé ţö ƒîñđ ţĥîš ŕàţĥéŕ ţĥàñ
ŵĥàţ ţĥîš îš. À ļöçàţöŕ ḿöṽéš ŵĥéñéṽéŕ àñýţĥîñĝ àƃöṽé îţ ḿöṽéš, šö ƒöļđîñĝ öñé
îñţö ţĥé çöñţéẋţ ĥàšĥ ŵöüļđ ḿàķé àñ üñţöüçĥéđ ƃļöçķ ŕéþöŕţ àš çĥàñĝéđ éṽéŕý ţîḿé
à ƃļàñķ ļîñé ŵàš àđđéđ éàŕļîéŕ îñ ţĥé ƒîļé.
Öṽéŕļàýš àñđ àññöţàţîöñš: ţŵö šţàñđ-öƒƒ çàŕŕîéŕš
Ţýþéđ šţàñđ-öƒƒ îñţéŕþŕéţàţîöñš öƒ à Ƃļöçķ çöḿé îñ ţŵö ķîñđš, ķéþţ îñ ţŵö ƒîéļđš ƃéçàüšé ţĥéý đéŕ îñ šĥàþé àñđ ļîƒéçýçļé:
- Öṽéŕļàýš àŕé þöšîţîöñàļ: ŕüñ-àñçĥöŕéđ šþàñ šéţš ţĥàţ þöîñţ îñţö ţĥé
çöñţéñţ: šéĝḿéñţàţîöñ, ţéŕḿš, éñţîţîéš, ţéŕḿ çàñđîđàţéš, ƒîñđîñĝš,
šöüŕçé-ţö-ţàŕĝéţ àļîĝñḿéñţ. Éàçĥ
Spançàŕŕîéš à ŕüñRange(îţš þöšîţîöñ), öþţîöñàļ šţŕîñĝProps, àñđ àñ öþţîöñàļ ţýþéđ þàýļöàđValue. Ƃéçàüšé ŕàñĝéš àñçĥöŕ ţö ŕüñš, à šöüŕçé ŕéŵŕîţé šĥîƒţš ţĥéḿ. À ţŕàñšƒöŕḿîñĝ ţööļ'š éđîţ þļàñ îš à šţŕüçţüŕéđ šþàñ-ţö-ŕéþļàçéḿéñţ ḿàþ, šö ţĥé ƒŕàḿéŵöŕķ àþþļîéŕ ŕéƃàšéš ţĥé šüŕṽîṽöŕš öñţö ţĥé ñéŵ ŕüñš ŵîţĥmodel.RemapOverlays: šþàñš öṽéŕļàþþîñĝ àñ éđîţ àŕé đŕöþþéđ, ţĥé ŕéšţ šĥîƒţ ţö ƒöļļöŵ îţ. Àñ öþàǫüé ŵĥöļé-ƃļöçķ ŕéŵŕîţé ĥàš ñö ḿàþþîñĝ àñđ đŕöþš ţĥéḿ. - Àññöţàţîöñš àŕé ƃļöçķ-šçöþéđ: à ķéýéđ ḿàþ öƒ ţýþéđ þàýļöàđš đéšçŕîƃîñĝ ţĥé ƃļöçķ àš à ŵĥöļé: àļţ-ţŕàñšļàţîöñš, ñöţéš, àñàļýšîš ŕéšüļţš, ƒöŕḿàţ ŕöüñđ-ţŕîþ šţàţé, àñđ ţĥé ƃļöçķ'š àñçĥöŕ àñđ ŕöļé ƒàçéţš. À šöüŕçé ŕéŵŕîţé đöéš ñöţ îñṽàļîđàţé ţĥéḿ.
type Overlay struct {
Type OverlayType // segmentation | term | entity | qa | alignment | term-candidate | editor-anchor
Variant *VariantKey // nil = source side
Layer string // segmentation granularity; LayerPrimary ("") = primary
Spans []Span // each with a run Range, string Props, and a typed Value
}
Ŵĥéţĥéŕ àñ îñţéŕþŕéţàţîöñ îš þöšîţîöñàļ îš šţŕüçţüŕàļ (îţ îš àñ Overlay)
ŕàţĥéŕ ţĥàñ à ŕüñţîḿé ƒļàĝ. Àññöţàţîöñš àŕé ŕéàçĥéđ ţĥŕöüĝĥ ţĥé
Anno/SetAnno/DelAnno/AnnoMap ĥéļþéŕš, ķéýéđ ƃý ţýþé; öṽéŕļàýš ţĥŕöüĝĥ
OverlayOf/AddOverlaySpan/OverlaySpan/RemoveOverlay.
| Îñţéŕþŕéţàţîöñ | Çàŕŕîéŕ | Þüŕþöšé |
|---|---|---|
| Šéĝḿéñţàţîöñ | öṽéŕļàý segmentation | Šéñţéñçé öŕ çĥüñķ ƃöüñđàŕîéš öṽéŕ ŕüñš |
| Ţéŕḿš | öṽéŕļàý term | Ḿàţçĥéđ ţéŕḿš ŵîţĥ ţĥéîŕ ţàŕĝéţ ƒöŕḿš |
| Ţéŕḿ çàñđîđàţéš | öṽéŕļàý term-candidate | Éẋţŕàçţîöñ çàñđîđàţéš àŵàîţîñĝ à đéçîšîöñ |
| Éñţîţîéš | öṽéŕļàý entity | Ñàḿéđ éñţîţîéš (þéöþļé, þļàçéš, đàţéš) |
| Ƒîñđîñĝš | öṽéŕļàý qa | Ṽéŕîƒîçàţîöñ ƒîñđîñĝš ŵîţĥ šéṽéŕîţý |
| Àļîĝñḿéñţ | öṽéŕļàý alignment | Šöüŕçé-šþàñ ţö ţàŕĝéţ-šþàñ ļîñķš |
| Àļţ-ţŕàñšļàţîöñš | àññöţàţîöñ alt-translation | Çàñđîđàţé ţŕàñšļàţîöñš ŵîţĥ šçöŕéš |
| Éđîţöŕ àñçĥöŕš | öṽéŕļàý editor-anchor | Àñ îñţéĝŕàţîöñ ƃîñđîñĝ îñţö ţĥé ñàţîṽé éđîţöŕ ţĥàţ öŵñš ţĥé ƒöŕḿàţ (à Ŵöŕđ çöñţéñţ çöñţŕöļ, à Ƒîĝḿà ñöđé), šéţ ƃý à çöññéçţöŕ ŕàţĥéŕ ţĥàñ à ţööļ |
Ƃöţĥ öṽéŕļàý šþàñ ṽàļüéš àñđ àññöţàţîöñ ṽàļüéš àŕé ţýþéđ þàýļöàđš ŕéĝîšţéŕéđ ŵîţĥ
öñé þàýļöàđ ŕéĝîšţŕý (RegisterPayload / NewPayload), šö ţĥé ŵîŕé àñđ šţöŕé
ļàýéŕš ŕéĥýđŕàţé ţĥé ţýþéđ ṽàļüé ƒŕöḿ îţš ţýþé ñàḿé.
Ţööļš çöḿḿüñîçàţé ƃý ŕéàđîñĝ ţĥé öṽéŕļàýš àñđ àññöţàţîöñš þŕöđüçéđ üþšţŕéàḿ àñđ ŵŕîţîñĝ ţĥéîŕ öŵñ đöŵñšţŕéàḿ, šţàýîñĝ ļööšéļý çöüþļéđ ţĥŕöüĝĥ ţĥé šĥàŕéđ đàţà ḿöđéļ ŕàţĥéŕ ţĥàñ ţĥŕöüĝĥ đîŕéçţ đéþéñđéñçîéš.
Ţŵö àññöţàţîöñš, structure àñđ geometry, àŕé ĥéļđ îñ þŕîṽàţé Ƃļöçķ ƒîéļđš
ŕàţĥéŕ ţĥàñ îñ ţĥé ḿàþ, ŵĥîļé éṽéŕý àççéššöŕ þŕéšéñţš ţĥéḿ éẋàçţļý àš îƒ ţĥéý šàţ
îñ Annotations, šö ţĥé ŵîŕé, ţĥé šţöŕéš, àñđ éṽéŕý çöñšüḿéŕ šéé ñö đéŕéñçé.
Ţĥéý àŕé ţĥé ţŵö šéţ öñ ñéàŕļý éṽéŕý šţŕüçţüŕéđ ƃļöçķ ŕàţĥéŕ ţĥàñ öççàšîöñàļļý: à
ŕöļé öñ àñý ƃļöçķ à ƒöŕḿàţ ĝîṽéš šţŕüçţüŕé ţö, à þöšîţîöñ öñ àñý ƃļöçķ ţĥàţ çöḿéš
ƒŕöḿ à ĝŕîđ öŕ à þàĝé. À ḿàþ éñţŕý çöšţš àŕöüñđ 285 ƃýţéš, šö à šþŕéàđšĥééţ öƒ à
ḿîļļîöñ çéļļš ŵàš þàýîñĝ à ǫüàŕţéŕ öƒ à ĝîĝàƃýţé ţö ĥöļđ öñé éñüḿ àñđ ƒöüŕ šḿàļļ
îñţéĝéŕš þéŕ çéļļ. Ñöţĥîñĝ éļšé îñ ţĥé ṽöçàƃüļàŕý îš çöḿḿöñ éñöüĝĥ ţö ƃé ŵöŕţĥ
ţàķîñĝ öüţ öƒ ţĥé ḿàþ, àñđ ţĥé ḿàþ šţàýš ƒöŕ àļļ öƒ îţ.
Àñçĥöŕîñĝ àçŕöšš ḿéđîà, àñđ šöüŕçé þŕöṽéñàñçé
Ţŵö ţĥîñĝš àƃöüţ à Ƃļöçķ đéþéñđ öñ ŵĥéŕé îţš çöñţéñţ çàḿé ƒŕöḿ: ŵĥéŕé îţ šîţš îñ îţš šöüŕçé, àñđ ĥöŵ îţš šöüŕçé ţéẋţ ŵàš þŕöđüçéđ. Ƃöţĥ àŕé ƃļöçķ-šçöþéđ ţýþéđ àññöţàţîöñš, ŕîđîñĝ ţĥé šàḿé çàŕŕîéŕ àš ţĥé àñàļýţîç ŕéšüļţš àƃöṽé.
Àñçĥöŕ. À Ƃļöçķ'š þöšîţîöñ îñ îţš šöüŕçé îš à çööŕđîñàţé, àñđ ţĥé çööŕđîñàţé šýšţéḿ ƒöļļöŵš ţĥé ḿéđîüḿ:
- Ţéẋţ àñçĥöŕš ƃý ŕüñ þöšîţîöñ: ţĥé
Anchoréṽéŕý öṽéŕļàý, ƒîñđîñĝ àñđ šţàñđ-öƒƒ àññöţàţîöñ àļŕéàđý üšéš. Ŕüñ àñçĥöŕîñĝ îš ţĥé ţéẋţ ƒàçéţ öƒ öñé ĝéñéŕàļ îđéà ŕàţĥéŕ ţĥàñ à šéþàŕàţé çöñçéþţ. - Ŕéñđéŕéđ ḿéđîà (àñ îḿàĝé, à þàĝé) àñçĥöŕš šþàţîàļļý: à
geometryàññöţàţîöñ ĥöļđîñĝ à þàĝé àñđ à ƃöüñđîñĝ ƃöẋ. - Ţîḿéđ ḿéđîà (àüđîö, ṽîđéö) àñçĥöŕš ţéḿþöŕàļļý: à
timingàññöţàţîöñ ŕéçöŕđîñĝ ţĥé ţîḿé šþàñ îñ ḿîļļîšéçöñđš.
À Ƃļöçķ çàŕŕîéš ŵĥîçĥéṽéŕ ƒàçéţš îţš ḿéđîüḿ đéƒîñéš, àñđ ţĥéý çöḿþöšé: ţéẋţ
ƃüŕñéđ îñţö à ṽîđéö ƒŕàḿé çàŕŕîéš ƃöţĥ à geometry ƃöẋ àñđ à timing šþàñ.
Àļöñĝšîđé àñçĥöŕ, à structure àññöţàţîöñ ŕéçöŕđš ţĥé ƃļöçķ'š ļöĝîçàļ ŕöļé
àñđ þļàñé îñđéþéñđéñţ öƒ ḿéđîüḿ. Ţĥé ŕöļé ṽöçàƃüļàŕý (core/model/structure.go)
îš ƃŕöàđ àñđ àļîĝñéđ ŵîţĥ đöçüḿéñţ-šţŕüçţüŕé šţàñđàŕđš: þàŕàĝŕàþĥ, ţîţļé,
ĥéàđîñĝ, çàþţîöñ, ţàƃļé çéļļ, çöđé, ƒöŕḿüļà, þîçţüŕé, ļîšţ, ƒööţñöţé, šéçţîöñ
ŕöļéš, àñđ ţĥé ƒöŕḿ-ƒîéļđ ƒàḿîļý. Ŵĥéŕé à ƃļöçķ'š ñàḿé éḿƃéđš ţĥé ţéẋţ öƒ îţš
àñçéšţöŕš, ţĥé structure àññöţàţîöñ àļšö çàŕŕîéš Address, ţĥé šàḿé
šţŕüçţüŕàļ þàţĥ ŵîţĥ éàçĥ šüçĥ šéĝḿéñţ ŕéþļàçéđ ƃý ţĥàţ àñçéšţöŕ'š öŵñ îđéñţîţý,
šö ţĥé ƃļöçķ ŕéàđš ţĥé šàḿé îñ éṽéŕý ļàñĝüàĝé
(Ƒ-03). À ţööļ ŕéàđš öñļý ţĥé
ƒàçéţ îţ ñééđš; à Ƃļöçķ ŵîţĥ ñö ḿéđîà ƒàçéţ îš þļàîñ àñçĥöŕéđ-ƃý-ŕüñš ţéẋţ.
Ţĥé ŕöļé àļšö đîšàḿƃîĝüàţéš ñöñ-ḿöđîƒîàƃļé çöñţéñţ šüŕƒàçéđ ƒöŕ çöñţéẋţ. À
ƃļöçķ îš ñöţ àļŵàýš ḿöđîƒîàƃļé: à ŕéàđéŕ ḿàý éḿîţ Block{Translatable: false}
çàŕŕýîñĝ à ŕöļé šüçĥ àš çöđé öŕ ƒöŕḿüļà šö à ļîšţîñĝ öŕ àñ éǫüàţîöñ îš ṽîšîƃļé ţö
ḿöđéļ àñđ ŕéţŕîéṽàļ îñĝéšţîöñ ŵĥîļé ţŕàñšļàţîöñ šķîþš îţ. Ţĥàţ šüŕƒàçîñĝ îš à
đéƒàüļţ-öñ, þéŕ-ƒöŕḿàţ öþţ-öüţ đéšçŕîƃéđ îñ
É-02: Ţĥé ƒöŕḿàţ šýšţéḿ.
Šöüŕçé þŕöṽéñàñçé. À Target ŕéçöŕđš îţš Origin: ĥöŵ ţĥé ţŕàñšļàţîöñ ŵàš
þŕöđüçéđ (human, memory, mt, ai), ţĥé éñĝîñé, à ŕéƒéŕéñçé, à ţîḿéšţàḿþ. À
Ƃļöçķ'š šöüŕçé çàŕŕîéš ţĥé šàḿé Origin ŵĥéñ îţ ŵàš ŕéçöĝñîžéđ ŕàţĥéŕ ţĥàñ
þàŕšéđ: àñ ÖÇŔ öŕ šþééçĥ éñĝîñé, öŕ à ḿöđéļ, þŕöđüçéđ ţĥé ţéẋţ, šö ţĥé Origin
ñàḿéš ţĥàţ éñĝîñé (ocr, asr, öŕ llm-refined ƒöŕ à ŕéçöĝñîţîöñ à ḿüļţîḿöđàļ
ḿöđéļ ŕé-ŕéàđ) àñđ çàŕŕîéš à çöñƒîđéñçé îñ [0,1]. À ƃļöçķ ŕéàđ ļöššļéššļý
ƒŕöḿ à ţéẋţ ƒöŕḿàţ ĥàš ñö šöüŕçé Origin; öñé þŕöđüçéđ ƃý ŕéçöĝñîţîöñ đöéš, àñđ à
çöñƒîđéñçé-ĝàţéđ ŕéƒîñéḿéñţ šţéþ ŕéàđš îţ ţö đéçîđé ŵĥàţ ţö ŕé-éẋàḿîñé
(Ḿ-03). Šöüŕçé àñđ ţàŕĝéţ
þŕöṽéñàñçé àŕé öñé ŕéçöŕđ öñ ţŵö šîđéš öƒ ţĥé Ƃļöçķ.
Ŵĥàţ ĝöṽéŕñéđ îţ. Origin ŕéçöŕđš ñöţ öñļý ĥöŵ à ţàŕĝéţ ŵàš þŕöđüçéđ ƃüţ
ŵĥàţ ĝöṽéŕñéđ îţ: ţĥé Profile àñđ ProfileVersion îñ ƒöŕçé, àñđ à
ContextFingerprint, à ĥàšĥ öƒ ţĥé ŕéñđéŕéđ ṽöîçé ĝüîđàñçé àñđ ţĥé ţéŕḿš àš ţĥéý
àçţüàļļý ŕéàçĥéđ ţĥé þŕöđüçéŕ. Ţĥàţ šéçöñđ ĥàļƒ çàññöţ ƃé ŕéçöñšţŕüçţéđ àƒţéŕ ţĥé
ƒàçţ, ƃéçàüšé à þŕöƒîļé îš éđîţéđ îñ þļàçé àñđ ţéŕḿš çàŕŕý ñö ṽéŕšîöñ öƒ ţĥéîŕ
öŵñ, šö îţ îš šţàḿþéđ àţ þŕöđüçţîöñ ţîḿé öŕ ļöšţ. Ţĥé ƒîñĝéŕþŕîñţ îš à çĥàñĝé
đéţéçţöŕ, ñöţ à šñàþšĥöţ: îţ àñšŵéŕš "ĥàṽé ţĥé ĝöṽéŕñîñĝ îñþüţš ḿöṽéđ šîñçé ţĥîš
ŵàš þŕöđüçéđ?" àñđ ñöţĥîñĝ ḿöŕé. Îţ îš ñàŕŕöŵéŕ ţĥàñ àñ éñĝîñé'š
çöñƒîĝ ƒîñĝéŕþŕîñţ, ŵĥîçĥ àļšö ḿöṽéš öñ à ḿöđéļ öŕ þŕöḿþţ çĥàñĝé àñđ ŵöüļđ ḿàķé à
ḿöđéļ šŵàþ ŕéàđ àš à ĝöṽéŕñàñçé çĥàñĝé.
Éṽéŕý ñöñ-þšéüđö þŕöđüçéŕ (ḿöđéļ, ḿàçĥîñé ţŕàñšļàţîöñ, àñđ ŕéçýçļéđ çöñţéñţ
ḿéḿöŕý) šţàḿþš îţ, çöḿþüţéđ öñé ŵàý (profile.GovernanceContext), šö ţàŕĝéţš
ŵŕîţţéñ üñđéŕ öñé çöñţéẋţ šĥàŕé à ƒîñĝéŕþŕîñţ ŵĥîçĥéṽéŕ éñĝîñé þŕöđüçéđ ţĥéḿ àñđ
ƒàļļ šţàļé ţöĝéţĥéŕ ŵĥéñ ţĥé çöñţéẋţ ḿöṽéš. À ŕéçýçļéđ ḿéḿöŕý ĥîţ ŕéšöļṽéš îţš
öŵñ ƒîñĝéŕþŕîñţ ƒŕöḿ ţĥé çöñţéẋţ ĝöṽéŕñîñĝ ţĥé çöļļéçţîöñ àţ ƒîļļ ţîḿé ŕàţĥéŕ
ţĥàñ îñĥéŕîţîñĝ ţĥé ḿàţçĥéđ éñţŕý'š àþþŕöṽîñĝ öñé: à ƒîļļ àššéŕţš ţĥé éñţŕý àš
ṽàļîđ üñđéŕ ţĥé ĝöṽéŕñàñçé îñ ƒöŕçé ñöŵ, šö îţ ḿüšţ ƒàļļ šţàļé ŵĥéñ ţĥàţ
ĝöṽéŕñàñçé ḿöṽéš. Þšéüđö-ţŕàñšļàţîöñ ţàķéš ñö ĝöṽéŕñîñĝ çöñţéẋţ àñđ šţàḿþš ñöñé.
Šéé Ç-05: Ƒŕéšĥñéšš àñđ ţĥé çöḿþöšîţé ŕéƒ.
Ţĥé Ŕüñ šéǫüéñçé
À Ƃļöçķ'š çöñţéñţ îš à ƒļàţ šéǫüéñçé öƒ Run ṽàļüéš ĥéļđ đîŕéçţļý öñ ţĥé
Ƃļöçķ, ŵîţĥ ñö éḿƃéđđéđ ḿàŕķéŕ çĥàŕàçţéŕš:
type Run struct {
Text *TextRun // plain text chunk
Ph *PlaceholderRun // self-closing: variable, icon, <br>, redaction
PcOpen *PcOpenRun // opening half of a paired code
PcClose *PcCloseRun // closing half of a paired code
Sub *SubRun // reference to a nested Block (subfilter output)
Plural *PluralRun // ICU plural with per-form Runs
Select *SelectRun // ICU select with per-case Runs
}
Éẋàçţļý öñé þöîñţéŕ ƒîéļđ îš šéţ, ŵĥîçĥ îš ţĥé ŕüñ'š ķîñđ; Run.Kind() ŕéţüŕñš
ţĥé đîšçŕîḿîñàţöŕ àñđ Run.RunID() ţĥé îđ ƒöŕ ţĥé ķîñđš ţĥàţ çàŕŕý öñé.
Îñţéñţîöñ-ŕéṽéàļîñĝ çöñšţŕüçţöŕš (TextR, PhR, àñđ šîƃļîñĝš) ƃüîļđ éàçĥ ķîñđ
ŵîţĥöüţ ĥàñđ-ŵŕîţîñĝ ţĥé üñîöñ. Ţéẋţ àñđ îñļîñé çöđéš îñţéŕļéàṽé þöšîţîöñàļļý;
ţĥéŕé îš ñö þàŕàļļéļ šîđé-ţàƃļé àñđ ñö ḿàŕķéŕ çĥàŕàçţéŕš.
À TextRun ḿàŕķéđ NoTranslate îš ţéẋţ ţĥé ŕéàđéŕ çļàššîƒîéđ àš çöđé ŕàţĥéŕ
ţĥàñ þŕöšé: ţĥé çöñţéñţš öƒ à çöđé šþàñ, à <kbd>, à <samp>. Îţ šţàýš à ŕüñ,
šö þöšîţîöñš àñđ ŕöüñđ-ţŕîþ àŕé üñàƒƒéçţéđ, àñđ éṽéŕý ţŕàñšļàţîöñ þàţĥ ļéàṽéš
îţ àš îţ îš (É-02).
Šţàñđ-öƒƒ öṽéŕļàýš àŕé ţĥé öñé îñţéŕþŕéţàţîöñ ḿéçĥàñîšḿ
Ţĥé ŕüñš àŕé ţĥé çöñţéñţ. Éṽéŕýţĥîñĝ ţĥàţ îñţéŕþŕéţš ţĥé çöñţéñţ (ŵĥéŕé ţĥé šéñţéñçé ƃöüñđàŕîéš ƒàļļ, ŵĥîçĥ šþàñš àŕé ţéŕḿš öŕ éñţîţîéš, ŵĥàţ à çĥéçķ ƒļàĝĝéđ, ĥöŵ à šöüŕçé šþàñ àļîĝñš ţö à ţàŕĝéţ šþàñ) îš à šţàñđ-öƒƒ öṽéŕļàý ļàýéŕéđ öṽéŕ ţĥé ŕüñ šéǫüéñçé ŵîţĥöüţ ŕéŵŕîţîñĝ îţ.
Ţĥé šþļîţ îš ƃý öŕîĝîñ. À ŕüñ ŕéçöŕđš ŵĥàţ ţĥé šöüŕçé đöçüḿéñţ
šţŕüçţüŕàļļý çöñţàîñéđ; àñ öṽéŕļàý ŕéçöŕđš ŵĥàţ šöḿéţĥîñĝ çöñçļüđéđ àƃöüţ îţ.
Šö à çöñçļüšîöñ ñéṽéŕ ƃéçöḿéš à ŕüñ, ĥöŵéṽéŕ à ƒöŕḿàţ ĥàþþéñš ţö šþéļļ îţ: àñ
ẊĻÎƑƑ <mrk type="term"> àŕŕîṽéš àš à ţéŕḿ öṽéŕļàý šþàñ ŕàţĥéŕ ţĥàñ àš à ŕüñ
ķîñđ, àñđ à ţéŕḿ ţĥîš éñĝîñé ļöçàţéš ļéàṽéš àš à <mrk> ţĥé ŵŕîţéŕ đŕàŵš àŕöüñđ
ŕüñš îţ đöéš ñöţ àļţéŕ. Ƃéçàüšé ḿàŕķîñĝ îš à þŕöĵéçţîöñ àţ ŵŕîţé ţîḿé àñđ à
ŕéàđîñĝ àţ þàŕšé ţîḿé, ţĥé šàḿé çöñţéñţ ŕöüñđ-ţŕîþš ţĥŕöüĝĥ à ƒöŕḿàţ ţĥàţ
çàŕŕîéš ḿàŕķš àñđ öñé ţĥàţ çàŕŕîéš ñöñé. Ŵĥàţ à ŵŕîţéŕ ŵîļļ đŕàŵ îš à đéçļàŕéđ
çàþàƃîļîţý (É-02).
type Span struct {
ID string // overlay-local id (e.g. a segment id "s1")
Range Anchor // run-anchored, never a flattened-string offset
Props map[string]string // type-specific, e.g. the "ignorable" marker
Value Payload // typed payload from the payload registry
}
Anchor îš ţĥé öñé ţýþé ţĥàţ šàýš ŵĥéŕé îñšîđé à ƃļöçķ šöḿéţĥîñĝ îš, àñđ éṽéŕý
þŕöđüçéŕ ŕéçöŕđš þöšîţîöñš ŵîţĥ îţ: öṽéŕļàýš, çĥéçķ ƒîñđîñĝš, àñđ ţĥé šţàñđ-öƒƒ
àññöţàţîöñš àñ öṽéŕļàý šîđéçàŕ çàŕŕîéš.
Îţ àđđŕéššéš öñé öƒ ƒöüŕ ţĥîñĝš, đîšçŕîḿîñàţéđ ƃý Kind: ţĥé ŵĥöļé ƃļöçķ, öñé
ŕüñ ƃý îđ, à ĥàļƒ-öþéñ šþàñ öƒ çĥàŕàçţéŕš, öŕ öñé ƃŕàñçĥ öƒ à þļüŕàļ öŕ šéļéçţ
ŕüñ.
type Anchor struct {
Kind AnchorKind // block | run | range | form
Path RunPath // the run sequence addressed; empty is the block's own runs
RunID string // for kind run
Start RunPos // for kind range, half-open [Start, End)
End RunPos
Key string // for kind form: a plural form or a select case
}
// RunPos is a character boundary: an index into a run sequence and a rune
// offset into that run's text.
type RunPos struct{ Run, Offset int }
Ţŵö þŕöþéŕţîéš ḿàķé îţ ĥöļđ üþ. Þöšîţîöñš àŕé ŕüñ-ŕéļàţîṽé, šö à ƃöüñđàŕý
šţàýš ŵĥéŕé îţ ŵàš þüţ ŵĥéñ à ñéîĝĥƃöüŕîñĝ ŕüñ îš ŕéŵŕîţţéñ àñđ çàñ šîţ éîţĥéŕ
šîđé öƒ à þļàçéĥöļđéŕ, ŵĥîçĥ à ƒļàţ çĥàŕàçţéŕ öƒƒšéţ çàñ đö ñéîţĥéŕ öƒ. Àñđ ţĥéý
àŕé þàţĥéđ: à ƃļöçķ'š çöñţéñţ îš à ţŕéé, šö Path ŵàļķš ţö ţĥé šéǫüéñçé
ƃéîñĝ àđđŕéššéđ àñđ à ţéŕḿ îñšîđé ţĥé other ƒöŕḿ öƒ à þļüŕàļ îš àđđŕéššàƃļé
ŕàţĥéŕ ţĥàñ àþþŕöẋîḿàţéđ ƃý à þöšîţîöñ îñ ţĥé ƒļàţţéñîñĝ.
Ƒöüŕ þŕöþéŕţîéš ƒöļļöŵ ƒŕöḿ àñçĥöŕîñĝ îñţéŕþŕéţàţîöñš ţö ŕüñš ŕàţĥéŕ ţĥàñ ƃàķîñĝ ţĥéḿ îñţö šţŕüçţüŕé:
- Šéĝḿéñţàţîöñ îš öþţ-îñ àñđ đýñàḿîç. Ñöţĥîñĝ šéĝḿéñţš ƃý đéƒàüļţ; à ţööļ
çöḿþüţéš ƃöüñđàŕîéš àñđ ŵŕîţéš à
segmentationöṽéŕļàý. Ŵĥöļé-ƃļöçķ çöñţéñţ îš ţĥé ñöŕḿ, ŵĥîçĥ îš àļšö ŵĥàţ đöçüḿéñţ-ļéṽéļ ţŕàñšļàţîöñ ŵàñţš ƒöŕ çöĥéŕéñçé. Ţĥé éñĝîñé îš þļüĝĝàƃļé àñđ šéļéçţéđ þéŕ ŕüñ; šéé Ḿ-02: Šéĝḿéñţàţîöñ. - Îţ îš ŕéṽéŕšîƃļé ƃý çöñšţŕüçţîöñ. Đéšéĝḿéñţàţîöñ îš "đŕöþ ţĥé öṽéŕļàý." Ţĥéŕé îš ñö îñṽéŕšé öþéŕàţîöñ ţö ĝéţ ŵŕöñĝ àñđ ñö îñţéŕ-šéĝḿéñţ ḿàţéŕîàļ ţö ļöšé: ţĥé ĝàþš ƃéţŵééñ šéĝḿéñţ šþàñš àŕé ŕüñš ţĥàţ ñö šþàñ çöṽéŕš.
- Îţ îš üñîƒöŕḿ. Ţéŕḿš, éñţîţîéš, àñđ ƒîñđîñĝš àŕé ţĥé šàḿé ķîñđ öƒ öṽéŕļàý, àñçĥöŕéđ ţĥé šàḿé ŕüñ-àŵàŕé ŵàý, ŕàţĥéŕ ţĥàñ éàçĥ ŕé-đéţéçţîñĝ ƃöüñđàŕîéš àţ ŕéñđéŕ ţîḿé.
- Šéṽéŕàļ ļàýéŕš çöéẋîšţ. À þŕîḿàŕý šéñţéñçé šéĝḿéñţàţîöñ (
LayerPrimary, ţĥé žéŕö ṽàļüé, ţĥé öñé ƃîļîñĝüàļ ƒöŕḿàţš þŕöĵéçţ ţö àñđ ƒŕöḿ) çàñ šîţ àļöñĝšîđé à ţöķéñ-ƃüđĝéţéđ çĥüñķîñĝ ļàýéŕ, éàçĥ îţš öŵñ öṽéŕļàý đîšţîñĝüîšĥéđ ƃýLayer.
À šþàñ ḿàŕķéđ ignorable îñ îţš Props îš ñöñ-çöñţéñţ šţŕüçţüŕàļ ḿàţéŕîàļ: àñ
ẊĻÎƑƑ <ignorable>, îñţéŕ-šéĝḿéñţ ŵĥîţéšþàçé, àñ ÎÇÜ þļüŕàļ šéļéçţöŕ. Ţööļš
þŕéšéŕṽé šüçĥ à šþàñ'š ţàŕĝéţ ṽéŕƃàţîḿ îñšţéàđ öƒ ţŕàñšļàţîñĝ îţ, àñđ ţĥé šþàñ
šţîļļ öççüþîéš îţš ŕüñ ŕàñĝé šö ñéîĝĥƃöüŕîñĝ šéĝḿéñţ þöšîţîöñš šţàý àļîĝñéđ. Îţ îš
ţĥé ƒöŕḿàţ-àĝñöšţîç ḿàŕķéŕ šĥàŕéđ ƃý ñàţîṽé ŕéàđéŕš àñđ ƃý þļüĝîñ-ƃàçķéđ öñéš.
Îñļîñé-çöđé ŕüñš çàŕŕý ţĥéîŕ öŵñ ḿéţàđàţà
PlaceholderRun àñđ PcOpenRun çàŕŕý ţĥé ƒüļļ šéţ öƒ îñļîñé-çöđé çöñçéŕñš
đîŕéçţļý öñ ţĥéîŕ ƒîéļđš:
type PcOpenRun struct {
ID string // abstract identity; shared with the matching PcClose
Type string // semantic type from the vocabulary ("fmt:bold")
SubType string // format-specific refinement ("html:b", "xlf:b")
Data string // native markup, replayed verbatim by writers
Equiv string // plain-text equivalent ("" for bold, "\n" for <br>)
Disp string // translator-facing label ("[B]")
Attrs map[string]string // canonical, format-neutral attributes
Constraints *RunConstraints // Deletable, Cloneable, Reorderable
}
PlaceholderRun ĥàš ţĥé šàḿé šĥàþé; îţ îš šéļƒ-çļöšîñĝ, šö îţ ĥàš ñö þàîŕîñĝ
þàŕţñéŕ. PcCloseRun îš ļéàñéŕ: îţ šĥàŕéš ID ŵîţĥ îţš öþéñéŕ àñđ ŕéþļàýš îţš
öŵñ Data, àñđ îţ çàŕŕîéš ñö Constraints, ƃéçàüšé ţĥé çļöšîñĝ ĥàļƒ îñĥéŕîţš îţš
öþéñéŕ'š ƃéĥàṽîöŕ. SubRun ŕéƒéŕéñçéš à šüƃƃļöçķ þŕöđüçéđ ƃý à šüƃƒîļţéŕ;
PluralRun àñđ SelectRun àŕé šţŕüçţüŕéđ ÎÇÜ çöñšţŕüçţš ŵĥöšé ƃŕàñçĥéš àŕé
ţĥéḿšéļṽéš []Run.
Ţĥŕéé ƒîéļđš đöüƃļé àš þöŕţàƃļé çŕöšš-ƒöŕḿàţ çàŕŕîéŕš, šö à ŵŕîţéŕ ƒöŕ à ƒöŕḿàţ ţĥàţ ķñöŵš ñöţĥîñĝ àƃöüţ ţĥé šöüŕçé ḿàŕķüþ çàñ šţîļļ ŕé-šýñţĥéšîžé ţĥé çöñšţŕüçţ ñàţîṽéļý:
Attrsĥöļđš çàñöñîçàļ, ƒöŕḿàţ-ñéüţŕàļ àţţŕîƃüţéš:href,src,alt,title. À ŕéàđéŕ þöþüļàţéš ţĥéḿ ƒŕöḿ ţĥé šöüŕçé ḿàŕķüþ; à ƒöŕéîĝñ ŵŕîţéŕ éḿîţš à Ḿàŕķđöŵñ[text](href "title")öŕ àñ ĤŢḾĻ<a href title>ƒŕöḿ ţĥé šàḿé ṽàļüéš ŵîţĥöüţ þàŕšîñĝ ţĥé šöüŕçé ƒöŕḿàţ'š ļîţéŕàļData. Ţĥé šéţ îš öþéñ; ţĥöšé ƒöüŕ àŕé ţĥé çàñöñîçàļ ķéýš.EquivàñđDispçàŕŕý à þļàîñ-ţéẋţ éǫüîṽàļéñţ àñđ à ţŕàñšļàţöŕ ļàƃéļ, àñđ ƃéýöñđ ţĥàţ à ƒöŕḿàţ-îñđéþéñđéñţ ŕéñđéŕîñĝ öƒ àñ öþàǫüé þàýļöàđ. Éǫüàţîöñš üšé ţĥîš: ţĥé ÖþéñẊḾĻ ŕéàđéŕ ķééþš ţĥé ÖḾḾĻ öñData, ŕéþļàýéđ ṽéŕƃàţîḿ ƒöŕ à ƃýţé-éẋàçţ ŕöüñđ-ţŕîþ, àñđ þļàçéš þöŕţàƃļé ĻàŢéẊ öñEquivàñđDisp, šö ţĥé Ḿàŕķđöŵñ ŵŕîţéŕ ŕéñđéŕš ţĥé ƒöŕḿüļà ƒŕöḿ ţĥé çàŕŕîéŕ (Ḿ-04).
Equiv àñđ Disp àŕé éẋçļüđéđ ƒŕöḿ ţĥé þàŕîţý çàñöñîçàļ þŕöĵéçţîöñ, šö çàŕŕýîñĝ
ţĥéḿ ñéṽéŕ đîšţüŕƃš þàŕîţý ŵîţĥ ţĥé ŕéƒéŕéñçé îḿþļéḿéñţàţîöñ
(À-02).
Šéḿàñţîç ţýþéš àñđ ƒöŕḿàţ-šþéçîƒîç ŕéƒîñéḿéñţ
Ţĥé Type ƒîéļđ đŕàŵš öñ à ṽöçàƃüļàŕý: à ŕéĝîšţéŕéđ, đàţà-đéƒîñéđ ţýþé šýšţéḿ
ţĥàţ ḿàþš ƒöŕḿàţ-šþéçîƒîç ḿàŕķüþ ţö ƒöŕḿàţ-îñđéþéñđéñţ šéḿàñţîç ţýþéš ĝŕöüþéđ ƃý
ñàḿéšþàçé þŕéƒîẋ: fmt: ƒöŕ ƒöŕḿàţţîñĝ, link: ƒöŕ ļîñķîñĝ, media: ƒöŕ
ḿéđîà, struct: ƒöŕ šţŕüçţüŕàļ çöñšţŕüçţš, code: ƒöŕ ñöñ-ḿöđîƒîàƃļé îñļîñé
ţöķéñš, entity: ƒöŕ ñàḿéđ éñţîţîéš. À ṽöçàƃüļàŕý éñţŕý šàýš ŵĥàţ à ţýþé ḿéàñš,
ĥöŵ îţ ŕéñđéŕš àñđ îš ļàƃéļéđ, àñđ ŵĥàţ à ţŕàñšļàţöŕ ḿàý đö ŵîţĥ îţ. Ţĥé
àüţĥöŕîţàţîṽé çàţàļöĝ öƒ ţýþéš, àñđ ţĥé ƒîļé ƒöŕḿàţ ƒöŕ đéƒîñîñĝ ñéŵ öñéš, àŕé ţĥé
Ṽöçàƃüļàŕîéš çöñçéþţ þàĝé àñđ ţĥé
Àüţĥöŕîñĝ ṽöçàƃüļàŕîéš ĝüîđé.
SubType ŕéƒîñéš à ţýþé ƒöŕ öñé ƒöŕḿàţ üšîñĝ à þŕéƒîẋ çöñṽéñţîöñ: xlf: ƒöŕ
ẊĻÎƑƑ 2.0 šüƃţýþéš, html: ƒöŕ éļéḿéñţ ñàḿéš, md: ƒöŕ Ḿàŕķđöŵñ çöñšţŕüçţš,
docx: ƒöŕ ÖþéñẊḾĻ ŕüñ þŕöþéŕţîéš. Çüšţöḿ šüƃţýþéš üšé à ŕéṽéŕšé-đöḿàîñ þŕéƒîẋ
(com.acme:custom-tag).
Ŕüñ ÎĐ àššîĝñḿéñţ àñđ þàîŕîñĝ
Ŕéàđéŕš àššîĝñ šéǫüéñţîàļ ñüḿéŕîç ÎĐš ţö îñļîñé-çöđé ŕüñš ŵîţĥîñ éàçĥ ŕüñ
šéǫüéñçé. À PcOpenRun àñđ ţĥé PcCloseRun ţĥàţ çļöšéš îţ šĥàŕé ţĥé šàḿé ID; à
PlaceholderRun ĝéţš îţš öŵñ. ÎĐš šţàŕţ àţ "1", þàîŕš ñéšţ ļàšţ-îñ-ƒîŕšţ-öüţ,
àñđ ŕüñš îñšîđé à Plural öŕ Select ƃŕàñçĥ ƒöŕḿ ţĥéîŕ öŵñ šçöþé. Ƒŕöḿ
Click <b>here</b> for <a href="x">info</a>. à ŕéàđéŕ þŕöđüçéš ţĥé ţéẋţ ŕüñ
Click , à PcOpen{ID:"1", Type:"fmt:bold"} àŕöüñđ here, îţš ḿàţçĥîñĝ
PcClose{ID:"1"}, ţĥéñ for, à PcOpen{ID:"2", Type:"link:hyperlink"} àŕöüñđ
info, îţš PcClose{ID:"2"}, àñđ à ƒîñàļ ..
Ţĥîš þŕöđüçéš šţàƃļé šţŕüçţüŕàļ ķéýš ƒöŕ ḿéḿöŕý ḿàţçĥîñĝ: ĤŢḾĻ <b>Click</b> àñđ
Ḿàŕķđöŵñ **Click** ƃöţĥ ýîéļđ {1}Click{/1}, šö àñ éñţŕý çŕéàţéđ ƒŕöḿ ĤŢḾĻ
ḿàţçĥéš à Ḿàŕķđöŵñ šöüŕçé àţ ţĥé šţŕüçţüŕàļ ţîéŕ.
Ŕüñ ţéẋţ þŕöĵéçţîöñš
À Ŕüñ šéǫüéñçé îš ţĥé šîñĝļé šöüŕçé öƒ ţŕüţĥ; éṽéŕý ţéẋţüàļ ƒöŕḿ ţĥàţ çŕöššéš à
ƃöüñđàŕý îš à þŕöĵéçţîöñ çöḿþüţéđ ƒŕöḿ []Run öñ đéḿàñđ. Ţĥé ƒŕàḿéŵöŕķ
þŕöṽîđéš, îñ core/model:
// Plain flattening: TextRun content verbatim, placeholders contribute {equiv},
// paired codes contribute their inner content, plural/select take the 'other'
// branch. Use: word count, search, text comparison.
func FlattenRuns(runs []Run) string
// Structural text: inline-code runs become numbered placeholders ({1}, {/1},
// {2/}). Use: memory exact matching at the structural tier.
func RunsStructuralText(runs []Run) string
// Generalized text: entity placeholder runs become typed placeholders
// ({PERSON}), other inline codes numbered. Use: generalized memory matching.
func RunsGeneralizedText(runs []Run) string
// Markup-preserving render: re-emits each run's captured Data verbatim.
// Use: writers splicing opaque markup back into a string.
func RenderRunsWithData(runs []Run) string
// Placeholder and semantic-HTML forms for prompt and provider boundaries.
func RunsPlaceholderText(runs []Run) string
func RunsSemanticHTML(runs []Run, reg *VocabularyRegistry) string
Ƒöŕ ţĥé ŕüñ šéǫüéñçé Click , PcOpen{ID:"1", Type:"fmt:bold", Data:"<b class='x'>"}, here, PcClose{ID:"1", Data:"</b>"}, for info:
FlattenRuns(): Click here for info
RunsStructuralText(): Click {1}here{/1} for info
RenderRunsWithData(): Click <b class='x'>here</b> for info
Ƃöüñđàŕîéš: šţŕüçţüŕàļ îñšîđé, ţéẋţüàļ àţ ţĥé éđĝéš
Ţĥé îñļîñé-çöđé ḿöđéļ îš šţŕüçţüŕàļ-çàñöñîçàļ. []Run îš ţĥé šîñĝļé šöüŕçé öƒ
ţŕüţĥ ƒöŕ à Ƃļöçķ'š çöñţéñţ. Éṽéŕý ŕéþŕéšéñţàţîöñ ţĥàţ çŕöššéš à ƃöüñđàŕý (ţö à
ţŕàñšļàţöŕ, à ḿöđéļ, à ţŕàñšļàţîöñ þŕöṽîđéŕ, àñ éẋţéŕñàļ éđîţîñĝ ţööļ, à ŕüñţîḿé,
à ḿéḿöŕý îñđéẋ) îš à þŕöĵéçţîöñ çöḿþüţéđ öñ đéḿàñđ.
| Þŕöĵéçţîöñ | Šüŕƒàçé | Çöñšüḿéŕ |
|---|---|---|
[]Run (ñö þŕöĵéçţîöñ) | Block.Source / Targets, KBF ŵîŕé | Þîþéļîñé ţööļš, šţöŕéš, ŕéàđéŕš àñđ ŵŕîţéŕš |
RenderRunsWithData | ñàţîṽé šöüŕçé ḿàŕķüþ | Ƒöŕḿàţ ŵŕîţéŕš; ŕéþļàýš Data ṽéŕƃàţîḿ |
RunsStructuralText | Click {1}here{/1} for info | Ḿéḿöŕý ḿàţçĥîñĝ, šţŕüçţüŕàļ ţîéŕ |
RunsGeneralizedText | šţŕüçţüŕàļ + éñţîţý þļàçéĥöļđéŕš | Ḿéḿöŕý ḿàţçĥîñĝ, ĝéñéŕàļîžéđ ţîéŕ |
RunsPlaceholderText | <x id="1"/>here<x id="/1"/> | Þŕöḿþţš ŵĥéŕé ţàĝ þŕéšéŕṽàţîöñ îš çŕîţîçàļ |
RunsSemanticHTML | <a href="…">here</a> | Þŕöṽîđéŕš àñđ þŕöḿþţš ţĥàţ éẋþéçţ ĤŢḾĻ |
flattenRuns (ŢýþéŠçŕîþţ) | Click {=m1}here{/=m1} | ÎÇÜ ŕüñţîḿé àñđ ţĥé Ŕéàçţ î18ñ ŕé-àţţàçĥ |
runsToCoded (ŢýþéŠçŕîþţ) | þŕîṽàţé-üšé-àŕéà ḿàŕķéŕ ţéẋţ + šþàñ îñƒö | Ţĥé ṽîšüàļ éđîţöŕ'š šţýļéđ çĥîþš |
Ţŵö çöñšéǫüéñçéš ƒàļļ öüţ öƒ ţĥé çöñṽéñţîöñ:
- Ţĥéŕé îš ñö šîñĝļé "ţŕàñšļàţöŕ ƒöŕḿàţ." À üšéŕ éđîţîñĝ îñ ţĥé ṽîšüàļ éđîţöŕ
šééš ñéšţéđ çĥîþš ŵîţĥ šéḿàñţîç ƒöŕḿàţţîñĝ; ţĥé šàḿé Ƃļöçķ îñ àñ éẋţéŕñàļ
éđîţîñĝ ţööļ àŕŕîṽéš àš ẊĻÎƑƑ
<pc>; ţĥé šàḿé Ƃļöçķ šéñţ ţö à ḿöđéļ ĝöéš àš à þļàçéĥöļđéŕ öŕ šéḿàñţîç-ĤŢḾĻ þŕöĵéçţîöñ. Ţĥé šţŕüçţüŕàļ Ƃļöçķ îš îđéñţîçàļ. - Éẋţéñšîöñš ƒöļļöŵ ţĥé šàḿé ŕüļé. À ñéŵ ŕéàđéŕ, à ñéŵ éẋţŕàçţöŕ, à ñéŵ
ţŕàñšļàţöŕ šüŕƒàçé: éàçĥ éḿîţš
[]Runàñđ ļéţš ţĥé éẋîšţîñĝ þŕöĵéçţîöñš šéŕṽé éṽéŕý çöñšüḿéŕ. À ñéŵ ţéẋţüàļ çöñṽéñţîöñ îš îñţŕöđüçéđ öñļý ŵĥéñ àñ éẋîšţîñĝ þŕöĵéçţîöñ îš ĝéñüîñéļý îñšüƒƒîçîéñţ.
Ŕéàđéŕ àñđ ŵŕîţéŕ çöñţŕàçţš
Ŕéàđéŕš þöþüļàţé éṽéŕý ƒîéļđ öñ éàçĥ îñļîñé-çöđé ŕüñ ţĥéý éḿîţ: à šéǫüéñţîàļ
ID šĥàŕéđ ƃý à þàîŕ; Type àñđ SubType ƒŕöḿ ţĥé ṽöçàƃüļàŕý þļüš à
ƒöŕḿàţ-šþéçîƒîç ŕéƒîñéḿéñţ; Data àš ṽéŕƃàţîḿ ñàţîṽé ḿàŕķüþ; Disp àš à šĥöŕţ
ĥüḿàñ-ŕéàđàƃļé ļàƃéļ; Equiv àš à þļàîñ-ţéẋţ éǫüîṽàļéñţ ŵĥéŕé öñé àþþļîéš;
Attrs ƒöŕ ţĥé çàñöñîçàļ àţţŕîƃüţéš ţĥé çöñšţŕüçţ çàŕŕîéš; àñđ Constraints
đéŕîṽéđ ƒŕöḿ ƒöŕḿàţ šéḿàñţîçš.
Ŵŕîţéŕš ŕéçöñšţŕüçţ öüţþüţ ƒŕöḿ Run.Data, ţĥé ñàţîṽé ḿàŕķüþ, ñöţ ƒŕöḿ ţĥé
šéḿàñţîç ţýþé. Ţĥàţ îš ŵĥàţ ḿàķéš ŕöüñđ-ţŕîþ ƒîđéļîţý à þŕöþéŕţý öƒ ţĥé ḿöđéļ
ŕàţĥéŕ ţĥàñ öƒ éàçĥ ƒöŕḿàţ'š îḿþļéḿéñţàţîöñ: ţĥé ŵŕîţéŕ ŕéþļàýš éẋàçţļý ŵĥàţ ţĥé
ŕéàđéŕ çàþţüŕéđ. À ŵŕîţéŕ ƒöŕ à đéŕéñţ ƒöŕḿàţ ţĥàñ ţĥé šöüŕçé îñšţéàđ
šýñţĥéšîžéš ƒŕöḿ Type þļüš Attrs.
Ļàýéŕš àñđ éḿƃéđđéđ çöñţéñţ
Éḿƃéđđéđ çöñţéñţ îš ḿöđéļéđ àš ñéšţéđ Ļàýéŕš. À Ļàýéŕ çàŕŕîéš îţš öŵñ ƒöŕḿàţ
îđéñţîƒîéŕ àñđ à ParentID ļîñķîñĝ îţ ţö ţĥé éñçļöšîñĝ ļàýéŕ. Ŵĥéñ à ŕéàđéŕ
éñçöüñţéŕš éḿƃéđđéđ çöñţéñţ (àñ ĤŢḾĻ šţŕîñĝ îñšîđé à ĴŠÖÑ ṽàļüé), îţ éḿîţš à
çĥîļđ Ļàýéŕ ŵîţĥ ţĥàţ ƒöŕḿàţ çöñţàîñîñĝ ţĥé þàŕšéđ Ƃļöçķš, ñéšţéđ ƃéţŵééñ ţĥé
þàŕéñţ Ļàýéŕ'š Þàŕţš:
PartLayerStart (format="json", id="doc1")
PartBlock (key: "title", text: "Hello")
PartLayerStart (format="html", id="sf1", parentID="doc1")
PartBlock ("Welcome to <b>our site</b>")
PartLayerEnd (id="sf1")
PartData (structural JSON)
PartLayerEnd (id="doc1")
Éàçĥ Ļàýéŕ îš îñđéþéñđéñţļý þŕöçéššàƃļé. Ļàýéŕš ñéšţ ŕéçüŕšîṽéļý: ĤŢḾĻ îñ ĴŠÖÑ îñ ÝÀḾĻ îš ţĥŕéé ļéṽéļš đééþ ŵîţĥ ñö šþéçîàļ çàšéš.
Šüƃƒîļţéŕ ŕéšöļüţîöñ
Ƒöŕḿàţ-ţö-ƒöŕḿàţ éḿƃéđđîñĝ îš çööŕđîñàţéđ ƃý à šḿàļļ îñţéŕƒàçé:
type SubfilterResolver interface {
ResolveReader(formatName string) (DataFormatReader, error)
ResolveWriter(formatName string) (DataFormatWriter, error)
}
FormatRegistry îḿþļéḿéñţš îţ ţĥŕöüĝĥ îţš NewReader àñđ NewWriter ḿéţĥöđš.
Ţĥé îñţéŕƒàçé đéçöüþļéš ŕéàđéŕš ƒŕöḿ ţĥé ŕéĝîšţŕý, þŕéṽéñţš çîŕçüļàŕ îḿþöŕţš, àñđ
àļļöŵš ţéšţ đöüƃļéš. Ŕéàđéŕš àñđ ŵŕîţéŕš ţĥàţ šüþþöŕţ šüƃƒîļţéŕîñĝ îḿþļéḿéñţ à
ḿàŕķéŕ îñţéŕƒàçé, SubfilterAware, àñđ ţĥé ŕéšöļṽéŕ îš îñĵéçţéđ ƃéƒöŕé Open öŕ
Write îš çàļļéđ. Àñý ŕéĝîšţéŕéđ ƒöŕḿàţ (ñàţîṽé, þļüĝîñ, öŕ ƃŕîđĝéđ) çàñ šéŕṽé
àš à šüƃƒîļţéŕ.
Ƒöŕḿàţ çöñƒîĝš đéçļàŕé šüƃƒîļţéŕ ḿàþþîñĝš ţĥàţ ƃîñđ çöñţéñţ ļöçàţîöñš ţö à ƒöŕḿàţ:
subfilters:
- pattern: "*.body"
format: html
- pattern: "*.description"
format: markdown
Þàţţéŕñš üšé filepath.Match šéḿàñţîçš ŵîţĥ . àš ţĥé šéþàŕàţöŕ; ĴŠÖÑ ŕéàđéŕš
üšé ķéý-þàţĥ ĝļöƃš, ẊḾĻ ŕéàđéŕš üšé éļéḿéñţ-þàţĥ þàţţéŕñš. Ŵĥéñ à ŕéàđéŕ ḿàţçĥéš à
þàţţéŕñ îţ éḿîţš PartLayerStart, đéļéĝàţéš ţö ţĥé ŕéšöļṽéđ šüƃ-ŕéàđéŕ, àñđ éḿîţš
PartLayerEnd ŵĥéñ ţĥé šüƃ-ŕéàđéŕ ƒîñîšĥéš. Ŵŕîţéŕš ƃüƒƒéŕ ţĥé þàŕţš ƃéţŵééñ
ḿàţçĥîñĝ Ļàýéŕ ƃöüñđàŕîéš, đéļéĝàţé ţö ţĥé šüƃ-ŵŕîţéŕ, àñđ šþļîçé ţĥé ŕéñđéŕéđ
šţŕîñĝ îñţö ţĥé þàŕéñţ ƒöŕḿàţ.
Çöñšéǫüéñçéš
- Ţýþé đîšþàţçĥ ṽîà
switch part.Typeŕéþļàçéš ŕüñ-ţîḿé ţýþé îñšþéçţîöñ, àñđ ļîñţéŕš þŕöṽîđé éẋĥàüšţîṽéñéšš çĥéçķîñĝ. - Àđđîñĝ à ŕéšöüŕçé ţýþé ñééđš öñļý à ñéŵ
PartTypeçöñšţàñţ àñđ à šţŕüçţ îḿþļéḿéñţîñĝResource. - Ţööļš ţĥàţ öñļý ĥàñđļé Ƃļöçķš îĝñöŕé éṽéŕý öţĥéŕ Þàŕţ ţýþé ţĥŕöüĝĥ ţĥé ƃàšé ţööļ þàšš-ţĥŕöüĝĥ ƃéĥàṽîöŕ (É-03).
- Ţĥé Þàŕţ šţŕéàḿ šţàýš à šîñĝļé öŕđéŕéđ çĥàññéļ; ñö ƒàñ-öüţ çöḿþļéẋîţý îñ ţĥé ƃàšé þîþéļîñé.
- Çöñţéñţ-àđđŕéššàƃļé îđéñţîţý éñàƃļéš îñçŕéḿéñţàļ éẋţŕàçţîöñ àñđ đéđüþļîçàţîöñ àçŕöšš đöçüḿéñţš.
- Þŕöþéŕţîéš, öṽéŕļàýš, àñđ àññöţàţîöñš ļéţ ţööļš çàŕŕý ḿéţàđàţà ŵîţĥöüţ çöñţéñţ-ḿöđéļ çĥàñĝéš.
- Ţĥé šéḿàñţîç-ţýþé àƃšţŕàçţîöñ ļéţš ḿéḿöŕý ḿàţçĥ àçŕöšš ƒöŕḿàţš àñđ ļéţš þŕöḿþţš ŕéçéîṽé à çöñšîšţéñţ îñļîñé-çöđé ŕéþŕéšéñţàţîöñ.
- Ŵŕîţéŕš ŕéþļàý
Run.Dataṽéŕƃàţîḿ, šö ŕöüñđ-ţŕîþ ƒîđéļîţý îš à þŕöþéŕţý öƒ ţĥé ḿöđéļ ŕàţĥéŕ ţĥàñ öƒ éàçĥ ƒöŕḿàţ. - Ļàýéŕš ñéšţ ŕéçüŕšîṽéļý ŵîţĥ ñö šþéçîàļ çàšéš; éḿƃéđđéđ çöñţéñţ îš à ƒîŕšţ-çļàšš þîþéļîñé çîţîžéñ.
- Ţĥé Ŕüñ üñîöñ (þàîŕéđ
PcOpen/PcClose, šéļƒ-çļöšîñĝPh, šţŕüçţüŕéđPlural/Select) ḿàþš ñàţüŕàļļý öñţö ẊĻÎƑƑ 2.0'š<pc>/<ph>ḿöđéļ, ḿàķîñĝ ẊĻÎƑƑ šéŕîàļîžàţîöñ à ḿàþþîñĝ ŕàţĥéŕ ţĥàñ à ļöššý çöñṽéŕšîöñ. - Šéĝḿéñţàţîöñ, ţéŕḿš, éñţîţîéš, àñđ ƒîñđîñĝš šĥàŕé öñé ŕüñ-àñçĥöŕéđ šţàñđ-öƒƒ ḿéçĥàñîšḿ; šéĝḿéñţàţîöñ ñéṽéŕ ḿüţàţéš çöñţéñţ, šö îţ îš öþţ-îñ, ḿüļţî-ļàýéŕéđ, àñđ ļöššļéššļý ŕéṽéŕšîƃļé.
- Àñçĥöŕîñĝ îš öñé îđéà ŵîţĥ þéŕ-ḿéđîüḿ ƒàçéţš (ŕüñ ŕàñĝé, ĝéöḿéţŕý, ţîḿîñĝ), šö
îḿàĝé, àüđîö, àñđ ṽîđéö çöñţéñţ šîţš îñ ţĥé šàḿé Ƃļöçķ ḿöđéļ àš ţéẋţ, àñđ à
ŕéçöĝñîžéđ šöüŕçé çàŕŕîéš ţĥé šàḿé
Originà ţŕàñšļàţîöñ đöéš. Ḿüļţîḿöđàļ ŵöŕķ àđđš ñö ñéŵ þöšîţîöñàļ þŕîḿîţîṽé. - Ƃîļîñĝüàļ îñţéŕçĥàñĝé ƒöŕḿàţš ţĥàţ çàŕŕý šéñţéñçé šéĝḿéñţš þŕöĵéçţ ţö àñđ ƒŕöḿ šéĝḿéñţàţîöñ þļüš àļîĝñḿéñţ öṽéŕļàýš àţ ţĥé ŕéàđéŕ àñđ ŵŕîţéŕ ƃöüñđàŕý, ŵîţĥöüţ ƒöŕçîñĝ šéĝḿéñţ šţŕüçţüŕé îñţö ţĥé çöñţéñţ ḿöđéļ.
- Ţàŕĝéţš àŕé ƒîŕšţ-çļàšš ŕéçöŕđš ķéýéđ ƃý à ṽàŕîàñţ, šö ţĥé ṽàŕîàñţ àẋîš éẋţéñđš ƃéýöñđ ļöçàļé ŵîţĥöüţ àđđîñĝ çéŕéḿöñý àţ ļöçàļé-öñļý çàļļ šîţéš.
Šéé àļšö
- Ƒ-01: Ţĥé ƒŕàḿéŵöŕķ àñđ îţš ḿöđüļéš
- Ƒ-03: Îđéñţîţý: ĥàšĥéš, ŕéçöñçîļîàţîöñ, àñđ ţĥé šţöŕé ķéý
- Ƒ-04: Ţĥé çöñţéñţ-ḿöđéļ ŵîŕé šçĥéḿà: ţĥé çàñöñîçàļ šéŕîàļîžàţîöñ öƒ ţĥéšé ţýþéš
- É-01: Ţĥé þŕöçéššîñĝ éñĝîñé: ĥöŵ Þàŕţš šţŕéàḿ
- É-02: Ţĥé ƒöŕḿàţ šýšţéḿ: ŕéàđéŕš àñđ ŵŕîţéŕš ţĥàţ þŕöđüçé Þàŕţš
- É-03: Ţĥé ţööļ šýšţéḿ: ţööļš ţĥàţ çöñšüḿé Þàŕţš
- É-07: Ḿöđéļ àñđ ţŕàñšļàţîöñ þŕöṽîđéŕš: ḿüļţîḿöđàļ ḿéššàĝéš çàŕŕýîñĝ à Ƃļöçķ'š ḿéđîà àñçĥöŕ
- É-08: Đöçüḿéñţ šţŕüçţüŕé ţîéŕš: ŵĥéŕé ŕöļéš àñđ ĝéöḿéţŕý çöḿé ƒŕöḿ
- Ḿ-01: Ƃîļîñĝüàļ ƒöŕḿàţ îñţéŕöþ: šéĝḿéñţ àñđ àļîĝñḿéñţ þŕöĵéçţîöñ
- Ḿ-02: Šéĝḿéñţàţîöñ: ţĥé šéĝḿéñţàţîöñ öṽéŕļàý'š þŕöđüçéŕš
- Ḿ-03: Ḿüļţîḿöđàļ çöñţéñţ: ţĥé ţéḿþöŕàļ ƒàçéţ àñđ ŕéçöĝñîţîöñ çöñƒîđéñçé
- Ḿ-04: Ḿàţĥ àñđ éǫüàţîöñš:
EquivàñđDispàš þöŕţàƃļé ḿàţĥ çàŕŕîéŕš - Ṽöçàƃüļàŕîéš: ţĥé šéḿàñţîç ţýþé šýšţéḿ