<abbr> un <acronym>
Nov 09, 2003
Šodien vēlos parunāties par abbr un acronym atzīmēm un par to, kā savā lapā ieviesu/ieviest šo atzīmju atbalstu.
Teorija
HTML kodā abbr un acronym atzīmēs iekļauj apzīmējumus un saīsinājumus. Tipisks abbr lietojuma piemērs varētu izskatīties šādi:
... Mūsdienās ar <abbr title="seksuāli transmisīvās slimības">STS</abbr> saslimt ir itin viegli. ...
Šeit "title" atribūtā ir sniegts apzīmējuma atšifrējums. Rodas loģisks jautājums, kāda ir atšķirība starp abām atzīmēm.
- abbr lieto saīsinājumiem (abrevatūrām), ko rakstībā lieto, lai nebūtu jāraksta viss garais nosaukums. Piemēram, SVS - Satura Vadības Sistēma, BSA - Business Software Alliance.
- acronym lieto akronīmiem - vārdiem, kas veidoti no pilnā nosaukuma pirmajiem burtiem vai daļām. Akronīmu neizrunā pa burtam, bet kā veselu vārdu. Piemēram, NATO - North Atlantic Treaty Organisation, LAKA - Latvijas Atvērtā Koda Asociācija.
Redzam, ka abreviatūra - saīsinājums ir plašāks jēdziens un akronīms ir tā sašaurinājums. Vēl viena acronym un abbr atšķirība ir tāda, ka pirmo Internet Explorer atbalsta, bet otru nē. Tas nedrīkst būt par iemeslu, lai visos gadījumos lietotu tikai acronym.
abbr un acronym galvenie uzdevumi:
- Sniegt saīsinājuma atšifrējumu. Ja peles kursoru patur virs apzīmējuma, var gadīties, ka tā definīcija top redzama (kā tooltip)
- Programmām, kas saturu nevis attēlo uz ekrāna, bet lasa (cilvēkiem ar redzes traucējumiem) - sniegt informāciju, kā apzīmējumu izrunāt - pa burtiem vai kā vārdu.
Ja saīsinājums dokumentā aktārtojas vairākas, teiksim n reizes, diezin vai ir saprātīgi n reizes dot tā definīciju. Loģiski būtu apzīmējumam atribūtu "title" norādīt tikai vienu reizi dokumentā - tur, kur tas parādās pirmo reizi. Tomēr arī pārējās n-1 reizes saīsinājumu jāievieto atbilstošajās atzīmēs, lai lasītājprogramma arī pārējās n-1 reizes zinātu, kā to izrunāt. Piemēram, šajā vietā dokumentā vairs nedz virs SVS, nedz virs LAKA peles kursora turēšana nekādus rezultātus nedod. Pareizi arī ir, - viscaur ar punktētiem pasvītrojumiem izraibināts teksts neizskatās pārāk pievilcīgi.
Prakse
Teorija, kā vienmēr, ir skaista, bet praksē, kā jau parasti, ir šādi tādi sarežģījumi. Proti, kurš tās abbr un acronym atzīmes liks? - Visi skatās rinķī apkārt, kaut kur tālēs zilajās vai kurpju purngalos un izliekas jautājumu nedzirdējuši, jo, skaidrs, ka nav nekāda izprieca salikt šīs atzīmes veselam blāķim jau esošu tekstu un vēl lielākam blāķim tekstu, kas vēl tiks radīti.
Uzticam šo necilvēcīgo darbu pacietīgajam un visu panesošajam PHP. Ierīkoju gluži parastu teksta failu, kurā glabāju informāciju par saīsinājumiem - īso formu, garo formu un skaitlīti 1 vai 2 lai zinātu, vai darīšana ir ar abreviatūru vai akronīmu. Tad uztakstu vienu PHP funkciju, kas to failu salādē masīvos, vienu funkciju, kura uzdotā tekstā izdara visas nepieciešamās aizvietošanas un vēl glītu formiņu un koda gabaliņu lai to saīsinājumu teksta failu varētu ērti papildināt.
Viss ir labi, visi dejo, priecājas, sit plaukstas. Tikai vēl viena "sīka" problēmiņa - kā veikt tās "visas nepieciešamās aizvietošanas". Neder vienkāršs str_replace() risinājums, jo:
- Jau izrunāts, ka katram saīsinājumam, ja tas tekstā parādās vairākas reizes, atšifrējums jāuzdod tikai pirmo reizi
- Aizvietošanu nevar veikt citu atzīmju iekšpusē, lai nesanāktu, piemēram, šādi - <a href="<abbr>wml</abbr>.php">saite<a>
- Arī ārpus atzīmēm ar aizvietošanu jāuzmanās. Piemēram, ar saīsinājumiem LUIS - Latvijas Universitātes Informācijas Sistēma un LU - Latvijas Universitāte var sanākt nesmuki - <acronym><abbr>LU</abbr>IS</acronym>
Izeju no šīm problēmām atradu regulārajās izteiksmēs. (Nezini, kas tās ir? Ir, kam jautāt). Nestāstīšu visu gari un sīkumaini ar piemēriem, tikai tā - virspusēji.
Mana regulārā izteiksme izskatās šādi - "/(>[^<]*[\W^<]|>)($string)(\W)/". Ne tuvu neesmu regulāro izteiksmju eksperts un līdz šai izteiksmei nonācu ilgi lietojot daudzreiz pārbaudīto mēģinājumu-kļūdu metodi. Šī izteiksme meklētajam tekstam uzliek gana stingrus nosacījumus - tam jāsākas ar >, lai varētu zināt, ka neesam HTML atzīmes iekšpusē. Meklētajam saīsinājumam abās pusēs jābūt simboliem, kas nedrīkst būt burti vai skaitļi, lai neiznāktu kā ar LU un LUIS. Tālāk lietoju PHP funkciju preg_replace_callback(), kas dod iespēju pie katra atraduma kaut kur atķeksēt, ka attiecīgais saīsinājums reiz jau ir atrasts.
Skaidrs, ka regulāro izteiksmju lietošana visu pasākumu krietni sabremzē, bet - ko darīt :). Saģenerētās un saformatētās lapas var kešot, ar mana kroga pirmo lapu tas arī tiek darīts.
Nobeigums
Lūk, uzdevums, kas sākumā likās varen vienkāršs, izrādījās diezgan pinķerīgs, bet šķiet, ka tagad tā padarīšana daudzmaz strādā. Ja tiek novērotas nepilnības, lūdzu ziņojiet :).
Varētu rasties jautājums, kāpēc tik dikti plātos ar visu, ko šeit esmu paveicis. Lai palielītos citiem par to, cik man te viss vareni un superīgi? Nu ... jā. Ar šo lapu es nepelnu maizīti, taisu to pats sev, un gribās taču tāpat citiem pastāstīt, kas labs sadarīts. Un, protams, ceru, ka atradīsies kāds, kam šeit aprakstītais kalpos par iedvesmu un palīgu uztaisīt ko līdzīgu, un vēlams, labāku. Padomā - ja jau es, parasts puisis no laukiem, varēju sataisīt tās abbr atzīmes, kāpēc lai Tu nevarētu? :) Lai izdodas!