Obsah stránky sa číta, prosím čakajte…
Tvorba webových stránok – Manuál k redakčnému systému Rheia 1.0, Roman Horváth, © 2015, powered by Rheia
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 katedry a vedú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 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
values
amatch
– 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ívouset–
«kód jazyka»), - zastavenie skriptu (príkaz
stop
) alebo skok na inú súvisiacu časť skriptu (príkazgo
, ktorý vyžaduje výskyt príkazulabel
).
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
values
amatch
, - mohlo nastať spracovanie hodnôt podmienené úspešnosťou predchádzajúceho porovnania a realizované príkazom
set
s alternatívouset–
«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íkazomstop
.
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
, log
a debug
, 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
, go
a stop
(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 | 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 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 (pondelok
až nedeľa
), ktoré nahrádza anglickými prekladmi (Monday
až Sunday
).
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
- a 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 povereného vedením katedry go: zástupcaEN match: /^(zástupca|zástupkyňa) vedúcej katedry female$/ set: $1 poverenej vedením katedry go: zástupcaEN match: /^(zástupca|zástupkyňa) vedúcej katedry male$/ set: $1 povereného vedením katedry go: zástupcaEN match: /^(zástupca|zástupkyňa) vedúceho katedry female$/ set: $1 poverenej vedením katedry 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:
- Na čo slúži modul
schemas
v RS Rheia? - Stručne opíšte princíp fungovania modulu
schemas
RS Rheia.