Szövegfeldolgozás 3. Copyright, 1999 © Szlávi Péter Szlávi Péter 2019.01.03. Szövegfeldolgozás 3. Copyright, 1999 © Szlávi Péter Programozásmódszertan, 1999
Tartalomjegyzék 4. Szövegtípus speciális feladatai (folytatás) Szlávi Péter 2019.01.03. Tartalomjegyzék 4. Szövegtípus speciális feladatai (folytatás) 4.1. Szövegminta keresés 4.1.1. Eltolás a minta jelei alapján 4.1.2. Eltolás a szöveg jelei alapján 4.1.3. Keresés leképező függvénnyel 4.2. Szövegtitkosítás módszerei 4.2.1. Caesar-féle kódolás 4.2.2. Vignère-féle kódolás 4.2.3. Helyettesítő táblás kódolás 4.2.4. Blokk-permutáló kódolás 4.2.5. Nyilvános kulcsos (RSA) kódolás 4.3. Hiperszöveg-kezelés Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
Szlávi Péter 2019.01.03. 4.1. Szövegminta keresés A feladat: Hol kezdődik az s szövegben az sminta szöveg? Alapmegoldás: A keresés tétel és az eldöntés tételéből: siker:=Hamis; i:=1 [ahol tartunk az s-ben] Ciklus amíg iHossz(s)-Hossz(sminta)+1 és nem siker j:=1 [ahol tartunk az sminta-ban] Ciklus amíg jHossz(sminta) és Jele(sminta,j)=Jele(s,i+j-1) j:+1 Ciklus vége siker:=(j>Hossz(sminta)) Ha nem siker akkor i:+1 Ciklus vége A keresés+eldöntés PT12 szerinti „egybetranszformálása”. (Lásd: http://izzo.inf.elte.hu/~szlavi/ProgModsz/Progtran.pdf.) Ha s hossza: sH, és sminta hossza smH, akkor „nagyvonalú” (átlagos rossz eseteket alapul vevő) számítás szerint: sH/2 * smH/2, azaz sH*smH/4 hasonlítással jár egy sikeres keresés. A sikertelen legrosszabb esetében, amikor az sH-ban végigmegyünk és eközben a legkésőbb jövünk rá a nem-illeszkedésre: (sH-smH+1)*(smH-1) = sH*smH-smH2+smH-sH+smH-1. A probléma forrása, hogy az s egy-egy jelét többször is hasonlítja a minta más-más jelével. Programozásmódszertan, 1999 2019.01.03. Programozásmódszertan, 1999
4.1. Szövegminta keresés 4.1.1. Eltolás a minta jelei alapján Szlávi Péter 2019.01.03. 4.1. Szövegminta keresés 4.1.1. Eltolás a minta jelei alapján Probléma: nem veszi figyelembe a feladat specialitásait… ui.: … a „tudhatná”-kat … „Meggondolatlan” lépések: 1 2, 3 4 ui. előrelátható a kudarc Jelmagyarázat: karakterhasonlítás egyezéssel; illetve ütközéssel. Hasonlítások száma konkrétan: 3+1+2+1+2+3 = 12; a jóslás szerint: 9*3/4~7. Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.1. Szövegminta keresés 4.1.1. Eltolás a minta jelei alapján Szlávi Péter 2019.01.03. 4.1. Szövegminta keresés 4.1.1. Eltolás a minta jelei alapján Egy „gondolkodó” algoritmus lépései: Így a korábbi 12 hasonlítás helyett 10-et tenne. Megoldás: eltolás vektor, amely megadja, hogy az smintabeli i. karakter nem egyezésekor mennyivel léptethető a keresett minta. Jelmagyarázat: karakterhasonlítás egyezéssel; illetve ütközéssel. Az 12 tudhatná előreutalás KNP-módszerre, a 34 pedig inkább a BM-módszerre… Hasonlítások száma: 3+2+2+3 = 10 Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.1.1. Eltolás a minta jelei alapján (folytatás) Szlávi Péter 2019.01.03. 4.1.1. Eltolás a minta jelei alapján (folytatás) A módosított algoritmus: Pl. a korábbi ‘aba’ mintához a (1,1,2) Eltolás vektor jónak tű-nik… vagy az ‘aaaaaa’-hez kitűnő lenne az (1,2,3,4,5,6)... siker:=Hamis; i:=1 [i:ahol tartunk az s-ben] Ciklus amíg iHossz(s)-Hossz(sminta)+1 és nem siker j:=1 [j:ahol tartunk az sminta-ban] Ciklus amíg jHossz(sminta) és Jele(sminta,j)=Jele(s,i+j-1) j:+1 Ciklus vége siker:=(j>Hossz(sminta)) Ha nem siker akkor i:+Eltolás(j) Ciklus vége Itt az várható, hogy a fölösleges, többszörös hasonlításokat elkerüljük, vagyis a hasonlítások száma nagyjából az s hosszával arányos. A korábbival összhangban lévő számítás alapján várható hasonlításszám: sH/2. Az előbbi „naivhoz” képest smH/2-szeres a nyereség, vagyis annál nagyobb, minél hosszabb a minta. Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.1.1. Eltolás a minta jelei alapján (folytatás) Szlávi Péter 2019.01.03. 4.1.1. Eltolás a minta jelei alapján (folytatás) A továbbiak legfontosabb felfedezése: a hasonlítás visszafelé történő megszervezése! Knuth-Morris-Pratt algoritmusa: siker:=Hamis; i:=1 [i:ahol tartunk az s-ben] Ciklus amíg iHossz(s)-Hossz(sminta)+1 és nem siker j:=Hossz(sminta) [j:ahol tartunk az sminta-ban] Ciklus amíg 1j és Jele(sminta,j)=Jele(s,i+j-1) j:-1 Ciklus vége siker:=(j=0) Ha nem siker akkor i:+Eltolás(j) Ciklus vége Figyelem az alábbi megjegyzés „általánosságban” értendő (esetleg a következőkben tárgyalt BM-módszerre) és –sajnos– nem vonatkozni a KMP-módszerre! A „visszafelé-ség” nyeresége abban áll, hogy így minél hamarabb kiderül egy adott pozícióban a minta illeszthetetlensége, annál több jel maradhat ki az összehasonlításból. Szélsőségesen pl. lehetséges az, hogy egy adott minta csak utolsó jelét vetjük össze a sorozat egy jelével, s máris odébb toljuk a mintát teljes hosszával (mondván, hogy a szöveg olyan jelével történt az összehasonlítás, amely a mintában egyáltalán nincsen). Ilyenkor a szükséges hasonlításszám, akár sM/smH-ra is lecsökkenhet. Az „alap” algoritmushoz képesti hatékonyságnövekedés: smH2-szeres. (Pl. 10 hosszú minta esetén 100-szoros.) Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.1.1. Eltolás a minta jelei alapján (folytatás) Szlávi Péter 2019.01.03. 4.1.1. Eltolás a minta jelei alapján (folytatás) Az Eltolás vektor generálása: Alapeset: ha a keresett minta minden eleme különböző, a léptetés értéke a hátulról számított pozícióval egyezik meg. Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.1.1. Eltolás a minta jelei alapján (folytatás) Szlávi Péter 2019.01.03. 4.1.1. Eltolás a minta jelei alapján (folytatás) Közel ismétlődő jelek esete: ha van közeli ismétlődés a mintában, akkor ez nem jelent különbséget az alapesettől. Az eltolási vektor elemei hátulról monoton növekedőek. (És nem csak az eddig megszerzett tapasztalatok súgják!) A monotonitás: nyilvánvaló! Ui. a monotonitás megsértése egyet jelentene azzal, hogy egy korábban meghozott, akkor garantáltan jó döntésünket vonnánk vissza! Biztos, hogy ha kevesebbel tolnánk el, mint egy hátrább lévő eltolási érték előírja, akkor amiatt garantáltan ütközést produkálnánk a hátulsó jelek valamelyikénél. Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.1.1. Eltolás a minta jelei alapján (folytatás) Szlávi Péter 2019.01.03. 4.1.1. Eltolás a minta jelei alapján (folytatás) Távol ismétlődő jelek esete: másrészt (?=5) ha az ismétlődő jel távolsága nagyobb, mint az első azonos jel pozíciószáma, akkor vagy az ismétlődő jel pozíciószáma lesz a léptetési érték, vagy a kettejük pozíciószámának különbsége. Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.1.1. Eltolás a minta jelei alapján (folytatás) Szlávi Péter 2019.01.03. 4.1.1. Eltolás a minta jelei alapján (folytatás) Típus EVektor=Tömb(1..MaxHossz:Egész) Az algoritmusa: Eljárás EltolásVektor(Konstans minta: Szöveg, Változó ev: EVektor): Változó n,i:PozEgész n:=Hossz(minta); ev(n):=1 Ciklus i=n-1-től 1-ig -1-esével [ismétlődéskeresés:] ev(i):=ev(i+1) [monoton kezdés a túl közeli ismétlődés nem érdekes] Ciklus amíg i+ev(i)n és Jele(minta,i)Jele(minta,i+ev(i)) ev(i):+1 Ciklus vége Ciklus vége Eljárás vége. Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.1. Szövegminta keresés 4.1.2. Eltolás a szöveg jelei alapján Szlávi Péter 2019.01.03. 4.1. Szövegminta keresés 4.1.2. Eltolás a szöveg jelei alapján Boyer-Moore ötlete: Ha a minta helyett a szöveg jeleihez rendelünk eltolási érté-keket, akkor –elvben– az addig elvégzett hasonlítás számnál nagyobb ugrásra is mód lehet. Ui. legyen Változó Eltolás:EVektor N-i, ha Jele(minta,i)=c és cVége(minta,i+1) Eltolás(c):= N, ha cminta ahol N:=Hossz(minta) Típus EVektor=Tömb(1..MaxHossz:Egész) EVektor=Tömb(Karakter:Egész) { ad Eltolás vektor definíciója: A vektort értelmezhetjük úgy, hogy ennyi jellel lehet továbbléptetni, amikor a minta utolsó jele az adott s-beli jellel ütközik. Ez után érthető, hogy a minta utolsó jeléhez miért 0 tartozik. Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.1.2. Eltolás a szöveg jelei alapján (folytatás) Szlávi Péter 2019.01.03. 4.1.2. Eltolás a szöveg jelei alapján (folytatás) 1. példa: s : ’abcadabcab’; sminta : ’abcab’ Eltolásvektor: ’a’1; ’b’0; ’c’2; más jel5 2. példa: s : ’abcccabcab’; sminta : ’abcab’ ad 2. példa: A c-nél ütközés után az előírt 2-vel elmozgatás után semmi garancia nincs, hogy a minta vége egyezni fog… hiszen nem a minta ütköző jeléből indultunk ki, s nem vettük figyelembe, hogy a minta mely jelével; ezért további korrekciós léptetést végzünk úgy, hogy az utolsó jel s-beli párja szerint, gondolkodás nélkül odébb toljuk a mintát. Ez megerősíti az eddig „furcsa” 0 értékét az utolsó jel lépésszámának: ha nem kell odébb tolni, akkor a 0-val léptetést éppen ezt eredményezi. Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.1.2. Eltolás a szöveg jelei alapján (folytatás) Szlávi Péter 2019.01.03. 4.1.2. Eltolás a szöveg jelei alapján (folytatás) Az algoritmusa: siker:=Hamis; m:=Hossz(sminta); i:=m Szinkronizálás(i) Ciklus amíg [iHossz(s) és] i+Eltolás(Jele(s,i))Hossz(s) és nem siker j:=m; siker:=(Jele(sminta,j)=Jele(s,i)) Ciklus amíg j>1 és siker j:-1; i:-1; siker:=(Jele(sminta,j)=Jele(s,i)) Ciklus vége Ha nem siker akkor Ha Eltolás(Jele(s,i))>m-j+1 akkor i:+Eltolás(Jele(s,i)) különben i:+m-j+1 Szinkronizálás(i) Elágazás vége Ciklus vége [sikerminta=s(i..i+m-1)] ad „Eltolás(Jele(s,i))>m-j+1”: Az „előírt” eltolás és a hátulról vett sorszám (azaz a már vizsgált mintahossz) közül a nagyobbik… Hiszen mindkettő azt állítja, így legalább annyival léptethető, ergo a nagyobbal léptetendő! ad gomb: rákattintva, le kell tölteni és kicsomagolni a SzovKer.zip-et. Kipróbálni a Keres.exe-t 1. a felkínált opcionális paraméterekkel, majd 2. a keresendő szöveg legyen megtalálhatatlan, esetleg még 3. a keresendő egy megtalálható, de rövid. Összehasonlítandó a kétféle keresés lépésszáma! Eljárás Szinkronizálás(Változó i:Egész): Ciklus amíg iHossz(s) és Eltolás(Jele(s,i))0 i:+Eltolás(Jele(s,i)) Ciklus vége Eljárás vége. Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.1. Szövegminta keresés 4.1.3. Keresés leképező függvénnyel Szlávi Péter 2019.01.03. 4.1. Szövegminta keresés 4.1.3. Keresés leképező függvénnyel Rabin-Karp ötlete: a mintát tekintsük d-alapú számrendszerbeli számként, ahol d a szövegben előforduló jelféleségek száma. Legyen a minta i. jeléhez rendelt szám – sm(i):=Kód(Jele(minta,i)) akkor a mintához rendelt szám – x:=sm(1)*dm-1+sm(2)*dm-2+ …+sm(m-1)*d+sm(m) A szövegben is képezve ugyanennyi jelből egy számot: y:=sm(i)*dm-1+sm(i+1)*dm-2+…+sm(i+m-2)*d+sm(i+m-1), s e két számot kell összehasonlítani. Ha különböznek, akkor az eggyel odébb léptetés utáni új szám könnyen adódik: y’:=(y-sm(i)*dm-1)*d+s(i+m) [0..d) A Kód fv. speciális (a szokásos, ugyanilyen nevűtől eltérő) fv. Hiszen most csak d-féle jelhez kell folyamatosan kódértéket rendelnie! Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.1.3. Keresés leképező függvénnyel (folytatás) Szlávi Péter 2019.01.03. 4.1.3. Keresés leképező függvénnyel (folytatás) Javítása: Hogy ne kelljen nagypontosságú aritmetikával küzdeni, a szám-hozzárendelést Mod q végezzük; ahol q egy kellően nagy, de még „kezelhető” nagyságú prím szám. Következmény: a szám-azonosság is csak „modulo” értendő, azaz még a karakteres azonosság ellenőrizendő. Algoritmus: sminta s1:=0 Ciklus i=1-től m-ig s1:=(s1*d+Kód(Jele(sminta,i))) Mod q Ciklus vége s2:=0 Ciklus i=1-től m-ig s2:=(s2*d+Kód(Jele(s,i))) Mod q Ciklus vége Konstans q:PozEgész(33554393) d:PozEgész(26) Változó m,s1,s2,dh:PozEgész m:=Hossz(sminta); dh:=1 Ciklus i=1-től m-1-ig dh:=(d*dh) Mod q Ciklus vége (a+b) Mod q ((a Mod q)+b) Mod q Az első ciklus célja: dhm-1 mod q kiszámítása. dm-1 s Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.1.3. Keresés leképező függvénnyel (folytatás) Szlávi Péter 2019.01.03. 4.1.3. Keresés leképező függvénnyel (folytatás) i:=1 Ciklus amíg iHossz(s)-m és s1s2 s2:=(s2+d*q-Kód(Jele(s,i))*dh) Mod q [s2 pozitív maradjon] s2:=(s2*d+Kód(Jele(s,i+m))) Mod q i:+1 Ciklus vége siker:=(s1=s2) Eddig tehát a siker megadja, hogy lehet, hogy itt megvan (siker=Igaz), vagy biztosan nincs (siker=Hamis). Ha lehet, hogy megvan, akkor még a karakteres ellenőrzés hátra- van, és nem azonosság esetén folytatódik ettől a ponttól a keresés az előbbiek szerint. Az s2 kiszámítása két lépésben: hogy ne csorduljon túl. A +dq, hogy pozitív legyen, ami az s2 „modul q” volta miatt nem lenne garantált. Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.2. Szövegtitkosítás 4.2.1. Caesar-féle kódolás Szlávi Péter 2019.01.03. 4.2. Szövegtitkosítás 4.2.1. Caesar-féle kódolás Caesar ötlete: a jelek eltolása az abc-ben rögzített k lépéssel. Pl.: ha abc:={‘A’,’B’, … ,‘Z’}; k:=3 akkor tabc={‘D’,‘E’, …,‘C’} és s:=‘MARCIUSIDUSA’ ts=‘PDUFLXVLGXVD’ PDUFLXVLGXVD 26-féle „kulcs” lehet A B C D E F … X Y Z A B C D E F … X Y Z Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.2. Szövegtitkosítás 4.2.2. Vignère-féle kódolás Szlávi Péter 2019.01.03. 4.2. Szövegtitkosítás 4.2.2. Vignère-féle kódolás Vignère ötlete: a jelek eltolása az abc-ben rögzített K kulcs-szó alap-ján számolt lépéssel. Az eltolás szabálya: Pl.: ha abc:={‘A’, ‘B’, … ‘Z’} K:=‘CAESAR’ akkor s:=‘MARCIUSIDUSA’ ++++++++++++ CAESARCAESAR ts=‘OAVUIMUIHNSR’ OAVUIMUIHNSR JEL LÉPÉS ‘A’ 0 ‘B’ 1 … ‘Z’ 25 „Vignere = Vigenere” a helyesírása változó az irodalomban ‘M’+’C’ = CiklikusLéptetés(‘M’,Lépés(‘C’)) A „megfejthetetlenségről”: a próbaprogram (Vignere-féle) kulcsa legyen egy jel, majd nézzük meg a betűstatisztikát, és következtessünk a próbaprogram kulcsa most legyen hosszabb (pl. CAESAR), majd nézzük meg a betűstatisztikát, és következtessünk Megjegyzés: a futás és a dia közötti eltérés magyarázata az, hogy a dián nagybetűs az abc, míg a program kisbetűket is ismer és megkülönböztet. ‘M’+‘C’= = Shift(‘M’,2)= =‘O’ Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.2. Szövegtitkosítás 4.2.3. Helyettesítő táblás kódolás Szlávi Péter 2019.01.03. 4.2. Szövegtitkosítás 4.2.3. Helyettesítő táblás kódolás Ötlet: a jelek helyettesítése egy rögzített („szabálytalanul” feltöltött) táblázat alapján. Pl.: ha abc:={‘A’, ‘B’, ‘C’, … ‘Z’} HT:Tömb(abc:abc)(‘Q’, ‘W’, ‘E’,…‘M’) akkor tabc={‘Q’, ‘W’, … ‘M’} és s:=‘MARCIUSIDUSA’ ts=‘DQKEOXLORXLQ’ DQKEOXLORXLQ JEL JEL’ ‘A’ ‘Q’ ‘B’ ‘W’ … Ez az „összevisszaság” némileg nehezíti a kalózkodó dolgát. A kulcsok száma: 26!~1028, ez azonban csalóka. A jelgyakoriság egy hosszú szöveg esetében sokat elárul. ‘M’HT(‘M’)=‘D’ Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.2. Szövegtitkosítás 4.2.4. Blokk-permutáló kódolás Szlávi Péter 2019.01.03. 4.2. Szövegtitkosítás 4.2.4. Blokk-permutáló kódolás Ötlet: rögzített számú jelből álló blokkok kódolása úgy, hogy egy előre meghatározott séma szerint cserél-getjük meg a blokk jeleit. Pl.: ha abc:={‘A’, ‘B’, … ‘Z’}; k:=3 perm:Tömb(1..k:1..k)(2,3,1) akkor s:=‘MARCIUSIDUSA’ ts=‘ARMIUCIDSSAU’ ARMIUCIDSSAU 1 2 3 2 3 1 ‘MAR’Jele(‘MAR’,perm(1))+…+Jele(‘MAR’,perm(k)) Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.2. Szövegtitkosítás 4.2.5. Nyilvános kulcsos kódolás Szlávi Péter 2019.01.03. 4.2. Szövegtitkosítás 4.2.5. Nyilvános kulcsos kódolás RSA eredete: Rivest-Shamir-Adleman, 1978 Ötlet: külön k kulcs a kódoláshoz, ill. d a dekódoláshoz; k – nyilvános kulcs, akiktől várom az üzeneteket d – titkos kulcs, csak én ismerem. Részletek: Kis Fermat-tétel: ha a,pN: p prím és (a,p)=1 ap-1 1 (mod p) más szóval: … p | ap-1-1 ad RSA eredete: http://hu.wikipedia.org/wiki/RSA ad Kis Fermat-tétel: http://hu.wikipedia.org/wiki/Kis_Fermat-t%C3%A9tel (a,p)=a és p legnagyobb közös osztója Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.2. Szövegtitkosítás 4.2.5. Nyilvános kulcsos kódolás Szlávi Péter 2019.01.03. 4.2. Szövegtitkosítás 4.2.5. Nyilvános kulcsos kódolás Következmény: ha p,qN: p,q prím ((p,q)=1) p | (a(q-1))(p-1)-1 és q | (a(p-1))(q-1)-1 ((a(q-1))(p-1)=(a(p-1))(q-1)=a(p-1)(q-1)) pq | a(p-1)(q-1)-1 (a-val szorozva) a(p-1)(q-1)+1 a (mod pq) Legyen a továbbiakban: n=p*q és ae*f a (mod n) e*f=(p-1)*(q-1)+1 } Ha (p,q)=1, akkor (aq-1,p)=1 és (ap-1,q)=1; így alkalmazható rájuk a Kis Fermat-tétel. Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.2. Szövegtitkosítás 4.2.5. Nyilvános kulcsos kódolás Szlávi Péter 2019.01.03. 4.2. Szövegtitkosítás 4.2.5. Nyilvános kulcsos kódolás Ötlet: Ha k=(e,n) a nyilvános kulcs, és d=(f,n) titkos kulcs, akkor az s (<n) „szöveg” kódolása: t=se Mod n; a t dekódolása: s=tf Mod n. Pl.: ha p:=59, q:=47 n:=2773; e:=17, f:=157 abc:={‘A’, ‘B’, … ‘Z’}; abcKód:Tömb(abc:0..25)(0,1,…,25) akkor s:=‘MARCIUSIDUSA’ 120017020820200803222000 A tétel miatt: s t=se Mod n t (se Mod n)f Mod n= =se*f Mod n=s Az n=2773 miatt: 4-jegyű számmal dolgozunk, azaz 2 betűs blokkokkal Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.2. Szövegtitkosítás 4.2.5. Nyilvános kulcsos kódolás Szlávi Péter 2019.01.03. 4.2. Szövegtitkosítás 4.2.5. Nyilvános kulcsos kódolás 120017020820200803222000 14440052… ‘O?A?…’ t=…egy nem „karakteresíthető” kódsorozat… … és a dekódolás: 12001702… Hogyan választandó ki az n, e és f? L.: p,q nagy (véletlen) prím n=p*q L.: f nagy (véletlen) prím: f<n ((f,p-1)=1, (f,q-1)=1) e: e*f = (p-1)*(q-1)+1 120017 Mod 2773=1444 … 1444157 Mod 2773=1200 … Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.3. Hiperszöveg-kezelés A „hiper”-ség tulajdonság Tartalom és forma Szlávi Péter 2019.01.03. 4.3. Hiperszöveg-kezelés A „hiper”-ség tulajdonság Általában: pl. hipermátrix, hiperautomata… valami rekurzívan strukturált szerkezet A hipertext (hiperszöveg) = hiperdokumentum, amelyben egyes rész-szövegek bizonyos tartalmi és kezelési „önálló-sággal” bírnak Tartalom és forma Forma (a felhasználó szempontjából): Megjelenés – hogyan válik el a „normál” szövegtől a „hiperül” kezelendő rész? Kezelés – hogyan választható ki egy hiperszöveg? Ismert példák: Böngészők – GUI-s világban Help-fájlok – GUI-t megelőző, konzolos világban Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.3. Hiperszöveg-kezelés Ábrázolás Szlávi Péter 2019.01.03. 4.3. Hiperszöveg-kezelés Tartalom (a fejlesztő szempontjából): Ábrázolás + Műveletek Ábrázolás Absztrakt szinten Hivatkozó szöveg (link, „ugrópont”) - (kísérő)szöveg + hivatkozás Hivatkozott szöveg - egy pont = pontdefiníció - egy tartomány = „tartománykezdet+tartományvég”-definíció valamely dokumentumban Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.3. Hiperszöveg-kezelés Konkrét szinten Szlávi Péter 2019.01.03. 4.3. Hiperszöveg-kezelés Konkrét szinten Kulcs-szavas (=tag-es) - olvasható, mnemonikus (pl. HTML); könnyen kiterjeszthető Bináris - fix hosszan, binárisan kódolt; speciális kód(okat) igényel <a href="#info" target="jobb">napi információk</a> Kód: 0 cc cc db "i" "n" "f" "o" Byte: … i. i+1. i+2. i+3. i+4. i+5. i+6. i+7. cccc=ugráscím, db=kísérő szöveg hossza Példaként l.: public_html\publikaciok.html Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999
4.3. Hiperszöveg-kezelés Műveletek Inputfigyelés Szövegfókuszálás Szlávi Péter 2019.01.03. 4.3. Hiperszöveg-kezelés Műveletek Inputfigyelés = eseményfigyelés (GUI) = billentyűfigyelés („DOS-os rendszerben”) Szövegfókuszálás Ugrópont-keresés (pl. tag-eseknél) = szövegkeresés Direktpozícionálás (pl. binárisoknál) = ugrópontra ugrás (feltéve, hogy a fájl típusa ezt megengedi) Programozásmódszertan 2019.01.03. Programozásmódszertan, 1999