Tvorba webových stránok – Manuál k redakčnému systému Rheia 1.0, Roman Horváth, © 2015, powered by Rheia

Obsah stránky sa číta, prosím čakajte…

 TWS – Manuál k RS Rheia 1.0 – Obsah | Objekty  « Formátovanie zoznamov vytvorených z polí hodnôt vlastností  |  Príklad spojenia definície objektov a makier (B) » 

Vytvorením vhodných vzorkovníkov hodnôt sa dá urýchliť aktualizácia údajov, ktoré sú očakávané v určitom tvare. Napríklad niektoré pracovné pozície zamestnancov na katedrách (PdF TU) sa odlišujú nanajvýš v rode: študijný poradca alebo študijná poradkyňa, správca systému MAIS alebo správkyňa systému MAIS, ale i vedúci katedryvedúca katedry a pod., pričom niektoré z nich môžu závisieť až od dvoch premenných – napríklad pozícia zástupca vedúceho katedry má až štyri rôzne tvary v závislosti od pohlavia zamestnancov vo funkciách zástupcu a vedúceho.

Vzorkovník má formu vlastnosti rezervovaného objektu $schemas. Je použitý na každú rovnomennú vlastnosť všetkých ostatných definovaných objektov v čase zobrazenia vlastnosti. Má štruktúru podobnú skriptu a aj funguje podobne ako skript, ktorý pracuje s použitím niekoľkých jednoduchých príkazov a vnútorných stavov.

Vytvorenie vzorkovníka preto vyžaduje znaky programátorského myslenia, jeho napísanie nemusí byť jednoduché, ale výsledok môže mať značný prínos pri aktualizácii webu, pretože zobrazovanie niektorých všeobecných informácií v správnom rode alebo gramaticky správnom tvare (vrátane automatického preloženia do jazykovej mutácie) bude automatizované.

Z uvedeného nepriamo vyplýva to, že vlastnosti objektu $schemas budú vyžadovať ich definovanie prostredníctvom viacriadkovej syntaxe definície vlastností (pozri kapitolu Definícia objektov). Hodnotami vlastností budú spomínané skripty a každý riadok hodnoty bude ekvivalentný jednému riadku skriptu, ktorý má obsahovať jeden príkaz skriptu. (Pozri aj sekciu Príklady nižšie.)

 

Rezervované reťazce

V skriptoch sa môžu vyskytnúť nasledujúce rezervované reťazce:

  $this meno aktuálneho objektu – toho, ktorého sa dotýka aktuálne spracovanie modulom schemas
  #this meno aktuálnej vlastnosti – tej, ktorá je práve spracúvaná modulom schemas (v dôsledku požiadavky na zobrazenie jeho hodnoty; tento reťazec je braný do úvahy len v kontexte použitia objektu – pozri napríklad kapitolu Základné spôsoby použitia objektov)
  $$this##this hodnota aktuálnej vlastnosti (tej, ktorá je práve spracúvaná modulom schemas)
  $«číslo» číslované referencie (odkazy) na takzvané skupiny definované v rámci regulárneho výrazu otvárané v novom okne
(obvykle ide o externý odkaz) príkazu match

 

Základné princípy

Prázdne riadky a nerozpoznané príkazy sú počas spracovania skriptov ignorované. Podrobnosti k príkazom sú zhrnuté v tabuľke v sekcii Syntax (nižšie). V skriptoch sú použiteľné príkazy, ktoré vykonávajú nasledujúce akcie:

  • overenie hodnoty ľubovoľnej vlastnosti ľubovoľného objektu (príkazy valuesmatch – pozri tabuľku nižšie), pričom je prirodzené sa sústrediť na hodnoty vlastností v takomto rebríčku priorít:
  • aktuálna vlastnosť: $$this##this,
  • iná vlastnosť aktuálneho objektu: $$this#«názov vlastnosti»,
  • ľubovoľná vlastnosť ľubovoľného objektu: $«názov objektu»#«názov vlastnosti»,
  • nastavenie hodnoty (príkaz set s alternatívou set–«kód jazyka»),
  • zastavenie skriptu (príkaz stop) alebo skok na inú súvisiacu časť skriptu (príkaz go, ktorý vyžaduje výskyt príkazu label).

Vymenované akcie majú často za následok zmenu režimu vykonávania príkazov skriptu (skrátene režimu vykonávania). Režim vykonávania má dva stavy – vypnutý alebo zapnutý. Vo vypnutom stave režimu sú vyhodnocované len niektoré príkazy (napríklad label, values, match alebo default – podrobnosti v sekcii Syntax nižšie), toto je predvolený režim. V zapnutom stave sú vyhodnocované všetky príkazy po poradí.

Príkazy modulu boli definované tak, aby dodržovali určitú filozofiu (sled). Pri písaní skriptu ide principiálne o to, aby:

  • bolo možné skript rozdeliť do sekcií prostredníctvom príkazov label,
  • každá sekcia obsahovala vhodné porovnanie hodnôt realizované prostredníctvom príkazov valuesmatch,
  • mohlo nastať spracovanie hodnôt podmienené úspešnosťou predchádzajúceho porovnania a realizované príkazom set s alternatívou set–«kód jazyka»
  • a aby sa v prípade zhody dalo buď prejsť na ďalšiu súvisiacu sekciu príkazom go, alebo zastaviť vykonávanie skriptu príkazom stop.

 

Syntax

Príkazy skriptov majú nasledujúcu syntax:

  «príkaz»: «argument»
  «príkaz»

Keď príde rad na vykonanie príkazov label, values, match, default, logdebug, tak sú vykonané bez ohľadu na stav režimu vykonávania príkazov (spomínanom v sekcii Základné princípy vyššie). Naopak, príkazy set, gostop (posledné v tabuľke – pod „čiarou“) sú vykonané len v zapnutom režime vykonávania príkazov. Príkaz label má zvláštne postavenie. Slúži aj ako zastávka pre príkaz go, ale len pri pohybe dopredu. (Má sa tým zabrániť vzniku nekonečného cyklu pri vykonávaní skriptu.)

Zoznam použiteľných príkazov:

Príkaz Argument Akcia (opis)
label názov menovky vypne režim vykonávania príkazov a vymaže zoznam referencií (pozri príkaz match); primárnym účelom je definovanie menovky, ktorá slúži ako zastávka pre príkaz go; uvedené dve akcie zaručia, že týmto príkazom sa za každých okolností začne nová samostatná sekcia príkazov
values reťazec nastaví porovnávaný reťazec pre príkaz match; reťazec by mal obsahovať odkazy na hodnoty vlastností podľa priorít vymenovaných v odrážkach na začiatku sekcie Základné princípy vyššie (napr.: $$this##this)
match regulárny výraz otvárané v novom okne
(obvykle ide o externý odkaz) zistí, či reťazec nastavený príkazom values vykazuje zhodu so zadaným regulárnym výrazom a v súlade s tým zapne alebo vypne režim vykonávania príkazov; počas procesu vznikajú referencie v súlade so syntaxou regulárnych výrazov; referencie sú dostupné prostredníctvom rezervovaných reťazcov $«číslo» (pozri sekciu Rezervované reťazce vyššie) a mal by ich používať príkaz set (s alternatívou set–«kód jazyka»)
default uvádza sekciu predvolených príkazov; technicky príkaz zapne režim vykonávania príkazov a v zozname referencií ponechá jediný prvok dostupný prostredníctvom reťazca $0, ktorý bude obsahovať aktuálnu hodnotou aktuálnej vlastnosti (ako keby išlo o príkaz match, ktorý obsahuje regulárny výraz vždy vykazujúci zhodu, napríklad: /^.*$/)
log reťazec zapíše reťazec do denníka RS Rheia (pozri kapitolu Súbory so zvláštnym významom); tento príkaz by mal byť využitý len výnimočne, napríklad vo fáze ladenia schémy alebo na signalizovanie špecifických situácií v schéme, inak by sa denník Rheie v krátkom čase neúmerne rozrástol
debug on alebo off zapne alebo vypne vytváranie podrobných záznamov o činnosti aktuálnej schémy do denníka RS Rheia; tento príkaz by mal byť využitý len vo fáze ladenia schémy, inak by sa denník Rheie v krátkom čase neúmerne rozrástol
set nová hodnota nastaví novú hodnotu spracúvanej vlastnosti, pričom nová hodnota môže obsahovať referencie ($1, $2, $3…) z naposledy vyhodnoteného príkazu (match prípadne default); keďže nie je možné, aby skript vzorkovníka prešiel úpravou jadra stroja Rheia, nie sú v hodnotách použiteľné formátovacie značky RS Rheia, no sú nahraditeľné HTML otvárané v novom okne
(obvykle ide o externý odkaz) značkami; 
ak je zadaný kód jazyka, tak príkaz sa vykoná len v prípade, že je práve aktívna jazyková verzia zhodná s kódom jazyka
poznámka: alternatívu príkazu s jazykovou verziou je treba vždy umiestniť za príkazom bez jazykovej verzie, pretože príkaz bez jazykovej verzie je vykonaný bez ohľadu na aktívnu jazykovú verziu („vždy“)
set–«kód jazyka»
go názov menovky vymaže zoznam referencií, vypne režim vykonávania príkazov a preskočí na nasledujúcu menovku so zadaným názvom; pohyb vzad nie je dovolený; uvedenie tohto príkazu v skripte značí to, že aj v prípade zhody je vyžadované ďalšie spracovanie údajov
stop zastaví spracovanie tejto schémy; značí to, že bola nájdená taká zhoda, ktorá nevyžaduje ďalšie spracovanie

Jazyková verzia môže byť vytvorená aj určením jazykovej verzie priamo pri názve vlastnosti rezervovaného objektu $schemas (napríklad: #konzultácie–en). Vtedy bude schéma aktivovaná len pre vlastnosti s určenou jazykovou mutáciou.

Poznámka: V súlade s informáciami súvisiacimi s jazykovými verziami uvedenými v kapitole Definícia objektov musí byť kód jazyka aj v príkaze set–«kód jazyka» oddelený pomlčkou (–), nie spojovníkom (­‑).

 

Príklady

Jedným z najjednoduchších príkladov je ukážka automatického prekladu dní v týždni v konzultačných hodinách do anglického jazyka:


$schemas
    #konzultácie: start-->
        values: $$this##this
        match: /^(.*)pondelok(.*)$/
        set–en: $1Monday$2

        values: $$this##this
        match: /^(.*)utorok(.*)$/
        set–en: $1Tuesday$2

        values: $$this##this
        match: /^(.*)streda(.*)$/
        set–en: $1Wenesday$2

        values: $$this##this
        match: /^(.*)štvrtok(.*)$/
        set–en: $1Thursday$2

        values: $$this##this
        match: /^(.*)piatok(.*)$/
        set–en: $1Friday$2

        values: $$this##this
        match: /^(.*)sobota(.*)$/
        set–en: $1Saturday$2

        values: $$this##this
        match: /^(.*)nedeľa(.*)$/
        set–en: $1Sunday$2
    <--end

Príklad je veľmi priamočiary. Spracovanie sa nikde nezastavuje, nikam neodbočuje, len preberá aktuálnu hodnotu vlastnosti, hľadá v nej presne zadané reťazce (pondeloknedeľa), ktoré nahrádza anglickými prekladmi (MondaySunday).

Nahrádzanie je vyriešené pomocou referencií: Regulárny výraz /^(.*)«reťazec»(.*)$/ zachytí obsah pred hľadaným slovom («reťazec») do referencie $1 a za hľadaným slovom do referencie $2, preto má nastavenie hodnoty príkazom set na $1«preklad»$2 za následok nahradenie hľadaného slova so zachovaním zvyšku reťazca.

Tento spôsob je z dôvodu zachovania čo najvyššej efektívnosti modulu schemas odporúčaným spôsobom prekladu. Jeho nevýhodou je, že hľadané slovo je nahradené (preložené) len raz. Keby bolo potrebné nahradiť viaceré výskyty názvu toho istého dňa v týždni, tak by séria príkazov na nahradenie toho istého dňa v týždni musela byť viacnásobne zopakovaná.

(Lepšie je však pokúsiť sa zabrániť tomu, aby vôbec vznikla potreba viacnásobného prekladu slova. Napríklad pri dňoch v týždni sa dá situácia vyriešiť inak, že pri publikovaní informácií budú všetky informácie súvisiace s jedným dňom zoskupené za sebou takým spôsobom, aby bolo návštevníkovi jasné, že sa všetky vzťahujú k tomu istému dňu, čiže každý deň v týždni postačí uviesť len raz.)

 

Nasledujúci príklad je omnoho komplexnejší. Ukazuje ako definovať vzorkovník pracovných pozícií, ktorých rodový tvar je upravovaný podľa pohlavia. Vzorkovník predpokladá, že každý objekt má definovanú vlastnosť gender, ktorá nadobúda hodnoty male alebo female a že je definovaný jeden všeobecný objekt pracovisko, ktorý má definovanú vlastnosť vedúciKatedry alebo aspoň poverenýVedením s obsahom názvu objektu s informáciami o vedúcom, resp. poverenom vedením katedry.

Ukážka vzorkovníka uvažuje len o nasledujúcich pozíciách:

  • sekretariát,
  • vedúci katedry,
  • poverený vedením katedry
  • zástupca vedúceho katedry.

Rod každej z formulácií je upravený podľa vlastnosti gender aktuálneho objektu ($this) a rod strednej časti formulácie zástupca vedúceho katedry je upravený dvojako: 1. podľa hodnoty pohlavia aktuálneho vedúceho, ktorý by mal byť dostupný cez katedrovú vlastnosť vedúciKatedry a 2. podľa toho, či je aktuálny vedúci skutočným vedúcim (čiže jestvuje vlastnosť $katedra#vedúciKatedry) alebo povereným vedením katedry (teda jestvuje vlastnosť $katedra#poverenýVedením).

V prípade, že hodnota vlastnosti nevyhovie ani jednej zo sekcií, čiže sa nezhoduje ani s jednou z hodnôt, ktoré predpisuje vzorkovník, bude zobrazený červený text «neznáme» (resp. v angličtine «unknown») a zapíše sa o tejto udalosti záznam do denníka Rheie.


$schemas
    #pozíciaNaKatedre: start-->

        label: sekretariát

            values: $$this##this
            match: /^sekretariát$/
            set–en: Secretariat
            stop

            default
            go: vedúci


        ; Vedúci katedry
        label: vedúci

            values: $$this#gender $$this##this

            match: /^male vedúci katedry$/
            go: vedúciEN

            match: /^female vedúca katedry$/
            go: vedúciEN

            match: /^male vedúca katedry$/
            set: vedúci katedry
            go: vedúciEN

            match: /^female vedúci katedry$/
            set: vedúca katedry
            go: vedúciEN

            default
            go: poverenýVedením

        label: vedúciEN
            default
            set–en: Head of Department
            stop


        ; Poverený vedením katedry
        label: poverenýVedením

            values: $$this#gender $$this##this

            match: /^male poverený vedením katedry$/
            go: poverenýVedenímEN

            match: /^female poverená vedením katedry$/
            go: poverenýVedenímEN

            match: /^male poverená vedením katedry$/
            set: poverený vedením katedry
            go: poverenýVedenímEN

            match: /^female poverený vedením katedry$/
            set: poverená vedením katedry
            go: poverenýVedenímEN

            default
            go: zástupca

        label: poverenýVedenímEN
            default
            set–en: Charge of the Department
            stop


        ; Zástupca vedúceho katedry
        label: zástupca

            values: $$this#gender $$this##this

            match: /^male zástupca (vedúceho|vedúcej) katedry$/
            go: zástupca2

            match: /^female zástupkyňa (vedúceho|vedúcej) katedry$/
            go: zástupca2

            match: /^male zástupkyňa (vedúceho|vedúcej) katedry$/
            set: zástupca $1 katedry
            go: zástupca2

            match: /^female zástupca (vedúceho|vedúcej) katedry$/
            set: zástupkyňa $1 katedry
            go: zástupca2

            default
            go: neznáme

        label: zástupca2

            values: «$pracovisko#vedúciKatedry»«$pracovisko#poverenýVedením»
            match: /«»«.+»/
            go: zástupca3

            values: $$this##this $$pracovisko#vedúciKatedry#gender

            match: /^(zástupca|zástupkyňa) vedúceho katedry male$/
            go: zástupcaEN

            match: /^(zástupca|zástupkyňa) vedúcej katedry female$/
            go: zástupcaEN

            match: /^(zástupca|zástupkyňa) vedúcej katedry male$/
            set: $1 vedúceho katedry
            go: zástupcaEN

            match: /^(zástupca|zástupkyňa) vedúceho katedry female$/
            set: $1 vedúcej katedry
            go: zástupcaEN

            default
            go: neznáme

        label: zástupca3

            values: $$this##this $$pracovisko#poverenýVedením#gender

            match: /^(zástupca|zástupkyňa) vedúceho katedry male$/
            set: $1 povere­né­ho vedením ka­ted­ry
            go: zástupcaEN

            match: /^(zástupca|zástupkyňa) vedúcej katedry female$/
            set: $1 povere­nej vedením ka­ted­ry
            go: zástupcaEN

            match: /^(zástupca|zástupkyňa) vedúcej katedry male$/
            set: $1 povere­né­ho vedením ka­ted­ry
            go: zástupcaEN

            match: /^(zástupca|zástupkyňa) vedúceho katedry female$/
            set: $1 povere­nej vedením ka­ted­ry
            go: zástupcaEN

            default
            go: neznáme

        label: zástupcaEN
            ; debug on
            default
            set–en: Deputy Head of Department
            stop

        label: neznáme
        default
            set: <strong>«neznáme»</strong>
            set–en: <strong>«unknown»</strong>
            log: neznáme: $0 ($this, ##this)
    <--end

 


Otázky a úlohy:

  1. Na čo slúži modul schemas v RS Rheia?
  2. Stručne opíšte princíp fungovania modulu schemas RS Rheia.