Unikodna ekvivalencija

Из Википедије, слободне енциклопедије

Unikodna ekvivalencija je specifikacija po Unikodovom standardu znakovnih kodiranja gde kodovi znakova predstavljaju u suštini iste znakove. Ovo svojstvo je uvedeno u standard da omogući kompatibilnost sa postojećim standardom skupa znakova, koji često sadrže slične ili identične znakove.

Unikod pruža dva takva pojma, dekadnu ekvivalenciju i kompatibilnost:

Za delove koda karaktera koji su definisani kao dekadni ekvivalenti se pretpostavlja da imaju isti grafički prikaz i značenje kada se štampaju ili prikazuju. Na primer, kod karaktera U+006E (latinično malo slovo "n") praćeno kodom U+0303 (kombinovano tildom "◌̃") je definisano u Unikodu kao dekadno ekvivalentno sa kodom karaktera U+00F1 (malo slovo "ñ" Španskog pisma). Stoga, ti nizovi koda bi trebalo da budu prikazani na isti način, isto tretirani od strane aplikacija koje slažu podatke u abecednom poretku ili pretrazivača, kao i da mogu biti zamenjeni jedan sa drugim.

Za nizove koda karaktera koji su definisani kao kompatibilni se pretpostavlja da mogu imati različite prikaze, ali isto značenje u nekim kontekstima. Tako, na primer, kod karaktera U+FB00 (tipografska ligatura "ff") je definisan kompatibilno — ali ne i dekadno ekvivalentno — sa nizom koda karaktera U+0066 U+0066 (dva latinična slova "f"). Kompatibilni kodovi se mogu tretirati na isti način u nekim aplikacijama (kao što su sortiranje i indeksiranje), a ne u drugim; i mogu biti zamenjeni jedan sa drugim u nekim situacijama, ali ne u drugim. Nizovi koji su dekadno ekvivalentni su takodje i kompatibilni, dok suprotno ne mora uvek da znači.

Standardom se takodje definiše procedura normalizacije teksta, nazvana Unikod normalizacija, koja zamenjuje ekvivalentne nizove karaktera tako da bilo koja dva teksta koja su ekvivalentna budu uprošćena istim kodovima karaktera, zvanim normalizovana forma ili normalna forma izvornog teksta. Za svaki od dva pojma ekvivalencije, Unikod definiše dve normalne forme, jednu potpuno sastavljenu (gde su višestruki kodovi karaktera zamenjeni jednostrukim gde god je to moguće), i jednu potpuno rastavljenu (gde su jednostruki kodovi karaktera podeljeni u višestruke). Svaka od te četiri normalne forme se može koristiti u obradi teksta.

Izvori ekvivalencije[уреди]

Dupliranje karaktera[уреди]

Zbog kompatibilnosti ili nekih drugih razloga, Unikod ponekad dodeljuje dva različita koda karakterima koji su u suštini isti. Na primer, karakter "Å" može biti kodiran kao U+00C5 (sa standardnim imenom "VELIKO LATINIČNO SLOVO A SA PRSTENOM IZNAD", slovo iz Švedske abecede i nekoliko drugih jezika) ili kao U+212B ("ANGSTREM ZNAK"). Ipak simbol za angstrem je definisan da bude to Švedsko slovo,i većina drugih simbola koja su predstavljena slovima (kao "V" za volt) nemaju odvojeni kod karaktera za svako korišćenje. U globalu, kodovi karaktera stvarno identičnih karaktera (koja mogu biti izrečena na isti način Unikodovim simbolima) su definisana dekadno ekvivalentno.

Kombinovanje i izmenjeni karakteri[уреди]

Radi doslednosti sa nekim starijim standardima, Unicode omogućava pojedinačne kodove za mnoge karaktere koji mogu biti posmatrani kao izmenjeni oblici nekih drugih karaktera (takvi su U+00F1 za "ñ" ili U+00C5 za "Å") ili kao kombinacije dva ili više karaktera (takvi su U+FB00 za ligaturu "ff" ili U+0132 za holandsko slovo "IJ").

Radi doslednosti sa drugim standardima,i radi veće fleksibilnosti, Unikod takodje priža kodove za mnoge elemente koji se ne koriste sami, već su umesto toga namenjeni da menjaju ili se kombinuju sa ranijim osnovnim karakterima. Primeri ovih kombinujućih karaktera su kombinujuće tilde i Japanski diakritički dakuten ("◌゛", U+3099).

U Unikod kontekstu, sastavljanje karaktera je proces zamene koda karaktera osnovnog slova praćenog jednim ili više kombinujućih karaktera u pojedinačni izmenjeni karakter; rastavljanje karaktera je suprotan proces.

Primeri[уреди]

Amélie sa svoja dva dekadno ekvivalentna Unikod oblika (NFC and NFD)
NFC karakter A m é l i e
NFC kod karaktera 0041 006d 00e9 006c 0069 0065
NFD kod karaktera 0041 006d 0065 0301 006c 0069 0065
NFD karakter A m e ◌́ l i e

Tipografske konvencije[уреди]

Unikod pruža kodove za neke karaktere ili grupe karaktera koji su izmenjeni samo iz estetskih razloga (kao što su tipografske ligature, poluširoki katakana karakteri, ili latinična slova dvostruke širine za korišćenje u japanskom jeziku), ili da bi se dodala nova semantika bez gubitka originala (kao što su cifre u indeksnim ili eksponentnim pozicijama, ili zaokružene cifre ① nasledjene od nekih japanskih slova). Takav niz se smatra kompatibilnim sa nizom originala (pojedinačnih i neizmenjenih) karaktera, u korist aplikacija gde izgled i dodata semantika nisu bitne. Medjutim ta dva niza nisu proglašena dekadno ekvivalentnim, s obzirom da razlika ima neku semantičku vrednost koja utiče na prikazivanje teksta.

Normalizacija[уреди]

Implementacija Unikodovog poredjenja i pretrage nizova u programima za obradu teksta mora uračunati prisustvo ekvivalentnih kodova karaktera. U odsustvu ovog svojstva, korisnici koji traže poseban niz koda karaktera ne bi bili u mogućnosti da nadju drugi vizuelno isti glif koji ima različit, ali dekadno ekvivalentan, prikaz koda karaktera.

Unikod omogućava standardni algoritam normalizacije koji stvara jeinstven (normalan) niz koda karaktera za sve nizove koji su ekvivalentni; kriterijum ekvivalencije može biti bilo dekadni (NF) bilo kompatibilni (NFK). S obzirom da bilo ko može proizvoljno da izabere predstavnički element ekvivalentne klase, mnogi dekadni oblici su mogući za svaki kriterijum ekvivalencije. Unikod obezbedjuje dva normalna oblika koja su semantički značajna za svaki od kriterijuma kompatibilnosti: sastavljeni oblici NFC i NFKC, kao i rastavljeni oblici NFD i NFKD. Oba oblika nameću dekadno uredjenje niza koda karaktera, koje je neophodno da bi normalne forme bile jedinstvene.

Da bi se poredile ili pretraživale Unikodove niske, program može koristiti bilo sastavljene ili rastavljene oblike; ovaj izbor nema značaja sve dok je isti za sve niske uključene u pretragu, poredjenje itd. S druge strane, izbor kriterijuma ekvivalencije može uticati na rezultate pretrage. Na primer neke tipografske ligature kao sto su U+FB03 (ffi), rimski brojevi U+2168 (Ⅸ) ili čak karakteri na indeksnim ili eksponentnim pozicijama, na primer U+2075 (⁵) imaju vlastite Unikod kodove karaktera. Dekadna normalizacija (NF) ne utiče ni na jednu od njih, ali kompatibilna normalizacija (NFK) će rastaviti ffi ligature u slovne delove, pa će potraga za U+0066 (f) kao podniskom uspeti u NFKC normalizaciji U+FB03 ali ne i u NFC normalizaciji U+FB03. Isto tako bi bilo kada bi tražili latinično slovo I (U+0049) u izmenjenom rimskom broju Ⅸ (U+2168). Slično broj na eksponentnoj poziciji "⁵" (U+2075) je transformisan u "5" (U+0035) kompatibilnim preslikavanjem.

Transformisanje karaktera na eksponentnim pozicijama u njegovog ekvivalenta na osnovnoj poziciji može ipak biti neprikladno zbog bogatog tekstualnog programa, jer bi se informacije o karakteru na eksponentnoj poziciji izgubile u procesu. Da bi se omogućila ova razlika, Unikodova baza karaktera sadrži oznake oblikovanja kompatibilnosti koji pruža dodatne detalje o kompatibilnosti transformacija.[1] U slučaju tipografskih ligatura, ova oznaka je jednostavno <compat>, dok je za karaktere na eksponentnim pozicijama <super>. Bogati tekstualni standardi kao što je HTML uzimaju u obzir oznake kompatibilnosti. Na primer HTML koristi svoje vlastite oznake da smesti U+0035 na eksponentnu poziciju.[2]

Normalni oblici[уреди]

Četiri Unikodova oblika normalizacije i algoritmi (transformacije) za njihovo dobijanje su prikazani u sledećoj tabeli.

NFD
Normalization Form Canonical Decomposition
Karakteri su rastavljeni dekadnom ekvivalencijom, i mnogi kombinujući karakteri su uredjeni po posebnom redosledu.
NFC
Normalization Form Canonical Composition
Karakteri su rastavljeni i onda ponovo sastavljeni dekadnom ekvivalencijom.
NFKD
Normalization Form Compatibility Decomposition
Karakteri su rastavljeni kompatibilnošću, i mnogi kombinujući karakteri su uredjeni po posebnom redosledu.
NFKC
Normalization Form Compatibility Composition
Karakteri su rastavljeni kompatibilnošćui onda ponovo sastavljeni dekadnom ekvivalencijom.

Svi ovi algoritmi su idempotentne transformacije, što znači da niska koja je već u jednom od normalizovanih oblika neće biti menjana ako se ponovo pokrene isti algoritam.

Za dobro formirane unikod niske, normalni oblici su zatvoreni u odnosu na spajanje niski: spoj dve dobro formirane unikod niske u istom normalnom obliku će i sam biti u tom normalnom obliku. To je zato što dobro formiran spojeni unikod karakter će uvek početi sa osnovnim karakterom.[3]

Medjutim, oni nisu injektivni (oni preslikavaju razičite originalne glifove i nizove u isti normalizovan niz) i prema tome takodje nisu ni bijektivni (ne mogu biti obnovljeni). Na primer, različite unikodove niske "U+212B" (angstrom znak "Å") i "U+00C5" (švedsko slovo "Å") su oboje prošireni sa NFD-om (ili NFKD-om) u niz "U+0041 U+030A" (latinično slovo "A" kombinovano sa prstenom iznad "°") koji je potom smanjen sa NFC-om (ili NFKC-om) na "U+00C5" (švedsko slovo "Å").

Jedan karakter koji će biti zamenjen drugim pod normalizacijom može biti identifikovan u unikod tabelama da ima neprazno polje kompatibilnosti ali da mu nedostaje oznaka kompatibilnosti.

Dekadno uredjenje[уреди]

Dekadno uredjenje se uglavnom brine za uredjenje niza kombinovanih karaktera. Za primer u ovom odeljku pretpostavićemo da su ovi karakteri dijaktrički, iako uglavnom neki dijaktrici nisu kombinovani karakteri,i neki kombinovani karakteri nisu dijaktrici.

Unikod dodeljuje svakom karakteru kombinujuću klasu, koja se identifikuje po numeričkoj vrednosti. Ne-kombinovani karakteri imaju klasu broj 0, dok kombinovani imaju kombinujuću klasu pozitivne vrednosti. Da bi To dobili dekadno uredjenje, svaka podniska karaktera koja ima ne-nula vrednost kombinujuće klase mora biti sortirana po vrednosti kombinujuće klase koristeći algoritam stabilnog sortiranja. Stabilno sortiranje je neophodno jer za kombiovane karaktere sa istom vrednosti klase se pretpostavlja da uzajamno dejstvuju tipografski, pa se tako dva moguća uredjenja ne spatraju ekvivaentnim.

Na primer, karakter U+1EBF (ế), korišćen u vijetnamskom ima i oštar i sirkonfleksni akcenat. Njegovo dekadno rastavljanje je niz od tri karaktera U+0065 (e) U+0302 (sirkonfleksni akcenat) U+0301 (oštar akcenat). Kombinujuće klase za ova dva akcenta su obe 230, pa U+1EBF nije ekvivalentno sa U+0065 U+0301 U+0302.

S obzirom da nemaju svi kombinovani nizovi izmenjeni ekvivalent, (poslednji u prethodnom primeru može biti skraćen samo na U+00E9 U+0302), čak je i normalni oblik NFC pogodjen ponašanjem kombinovanih karaktera.

Greške zbog razlika u normalizaciji[уреди]

Kada dve aplikacije dele unikod podatke,ali ih različito normalizuju, može doći do grešaka i gubitaka podataka. U jednom posebnom slučaju, OS X je normalizovao unikod imena datoteka poslatih sa Samba datoteke- i programa za deljenje štampača. Samba nije prepoznala izmenjena imena datoteka kao ekvivalentna originalu, što je dovelo do gubitka podataka.[4][5] Rešavanje takvog problema nije trivijalno, uzimajući u obzir da normalizacija nije obrnuto povratna.

Reference[уреди]

  1. ^ http://www.unicode.org/reports/tr44/#Character_Decomposition_Mappings
  2. ^ http://unicode.org/reports/tr20/tr20-2.html#Compatibility
  3. ^ D57 unikod 6.1 poglavlje o usaglašenosti zahteva kombinovane karaktere da prate osnovni karakter na koji se upućuju. Kombinovani karakteri na početku niske su loše formirani.
  4. ^ Sourceforge.net
  5. ^ Forums.macosxhints.com

Vidi još[уреди]

Spoljašnje veze[уреди]