Sfairadora

  • Referenční příručka

Odvozená sekvence

Odvozená sekvence je sekvence, jejíž prvky vznikly odvozením z jedné nebo více zdrojových sekvencí. V tomto smyslu se typ odvozené sekvence podobá dotazu v běžných databázových systémech.
Například v nejjednodušším případě může být odvozená sekvence odvozená z jednoho zdroje a mít aplikován filtr. Obsahem takto odvozené sekvence potom budou všechny prvky zdrojové sekvence, které odpovídají filtru. Tak, jak se prvky do zdrojové sekvence přidávají, z ní odstraňují, případně mění jejich obsah, mění se i prvky odvozené sekvence.
Odvozená sekvence je určena těmito parametry:
●
Seznamem zdrojových sekvencí
●
Typem prvku
●
Filtrem
●
Uspořádáním
●
Jedinečností
●
Vkládací funkcí
●
Vyjímací funkcí

Seznam zdrojových sekvencí

Pro každý zdroj je třeba určit název objektu v němž se zdrojová položka nachází a její referenci.
V případě potřeby je možné zadat doplňkové informace analytického typu.
Pokud je zadána více než jedna zdrojová sekvence, prvky instance odvozené sekvence jsou všechny kombinace prvků zdrojových sekvencí (tj. kartézský součin). Z těchto prvků je možné vybrat pouze žádoucí pomocí filtru případně jednoznačnosti.
Kromě těchto informací je možné dále určit, že daná zdrojová sekvence závisí na jiné zdrojové sekvenci. Pokud zdrojová sekvence závisí na jiné, znamená to, že závislá sekvence je součástí prvku sekvence na které závisí. Takže pro každý prvek sekvence, na které závisí, se použije jiná instance závislé sekvence – tedy ta, která se nalézá v jejím prvku. Takto se realizuje operace rozeskupení závislé sekvence.
Pokud se zdrojová sekvence určuje jako závislá na jiné, název objektu musí být buď src nebo parent_src. V případě že je název objektu src, reference zdrojové sekvence se bere relativně přímo k prvku sekvence na které závisí.
Zdrojová sekvence může záviset pouze na sekvenci dříve uvedené v seznamu zdrojových sekvencí. Tím jsou vyloučeny cykly.

Typ prvku

Typem prvku odvozené sekvence je většinou struktura. Její prvky jsou většinou analytické typy, které dávají do souvislosti hodnotu prvku odvozené sekvence s hodnotami prvků zdrojové sekvence. Obvyklé je zejména užití přesměrované položky s názvem objektu src. Je rovněž možné použít v prvku další odvozenou sekvenci. Pokud má stejný zdroj jako nadřízená odvozená sekvence, lze takto realizovat seskupení sekvence.
Použití jiných než analytických datových typů v prvku odvozené sekvence většinou nemá smysl, protože prvky odvozené sekvence dynamicky přibývají a ubývají podle změn ve zdrojových sekvencích, takže by se data zadaná v ne-analytických prvcích ztratila spolu s odstraněním prvku odvozené sekvence.

Filtr

Filtr určuje podmínku, která musí být splněna, aby byl prvek přijat do odvozené sekvence.
Filtr je zadán seznamem disjunktivních podmínek – stačí tedy, aby jedna z těchto podmínek byla splněna a záznam je pro sekvenci přípustný.
Každá disjunktivní podmínka je buď funkce v jazyce Enki nebo seznam konjunktivních podmínek.
Pokud jde o funkci, vrací hodnotu typu Bool – pokud je výsledek TRUE, záznam je přijat, pokud FALSE, záznam je odmítnut. Funkce nemá parametry, může se však odkazovat na objekt this, který identifikuje posuzovaný záznam. Jméno tohoto objektu není nutné v jazyce Enki uvádět, takže místo this.a<100 je možné psát pouze a<100.
Pokud jde o seznam konjunktivních podmínek je k přijetí záznamu třeba, aby všechny podmínky byly splněny. Každá podmínka obsahuje referenci na sloupec, k němuž se váže. Dále je určena buď jednoduchým relačním operátorem (je rovno, je větší než, řetězec obsahuje podřetězec…) a hodnotou, vůči níž se hodnota sloupce porovnává, nebo funkcí, která může obsahovat i složitější podmínku pro hodnotu sloupce.
Pokud jde o funkci, vrací hodnotu typu Bool – pokud je výsledek TRUE, záznam je přijat, pokud FALSE, záznam je odmítnut. Funkce má jeden parametr x, který obsahuje hodnotu daného sloupce pro posuzovaný záznam. Tak je možné zapsat podmínku nezávisle na názvu sloupce.
Pokud jde o jednoduchý relační operátor, je možné určit hodnotu, vůči níž se hodnota sloupce porovnává, buď konstantou nebo referencí na jiná data. V druhém případě reference na prvním místě obsahuje jméno objektu a dále vlastní referenci v rámci tohoto objektu. Pokud je například třeba porovnat hodnotu s hodnotou sloupce a, použije se reference this.a.
Pokud je některá z podmínek určena funkcí nebo referencí na data, je možné zadat doplňkové informace analytického typu.

Uspořádání

Uspořádání je zadáno seznamem referencí sloupců spolu s informací, zda se má uspořádávat vzestupně nebo sestupně. Uspořádávat lze pouze podle sloupců, jejichž typ je uspořádaný (tedy podle čísel a řetězcových typů; složené typy jsou uspořádány lexikograficky na základě uspořádání svých složek). Pokud je zadána více než jedna reference na sloupec, sekvence se primárně uspořádává podle tohoto sloupce. Pokud má v tomto sloupci několik prvků stejnou hodnotu, použije se pro rozhodnutí uspořádání druhý sloupec v pořadí a tak dále.

Jedinečnost

Je možné určit, že hodnoty některých sloupců nemají být v instanci odvozené sekvence duplicitní. Jedinečnost je zadána seznamem referencí na sloupce, jejichž hodnoty musejí být v sekvenci jedinečné. Pokud je zadán jeden sloupec, pak každý prvek sekvence musí mít jinou hodnotu tohoto sloupce. Pokud je zadáno n sloupců, musí být jedinečné hodnota celé n-tice, nikoli tedy hodnoty jednotlivých sloupců braných odděleně.
Pokud se požaduje jedinečnost celého prvku sekvence, zadá se jako reference sloupce prázdná reference (zapsaná jako tečka).

Vkládací funkce

Pro vložení prvku do odvozené sekvence je ve skutečnosti třeba vložit prvek do některé ze zdrojových sekvencí. Pro jednoduché případy je schopen program Sfairadora sám určit, jaká data do kterých zdrojových sekvencí vložit. Ve složitějších případech by tento automatický postup nemusel být uspokojivý. Proto je možné zadat vkládací funkci, jejímž úkolem je na základě zadaného prvku vkládaného do odvozené sekvence provést vložení přiměřených dat do příslušných zdrojových sekvencí.
Parametry funkce jsou:
●Int index – požadovaný index v odvozené sekvenci, na který se má nový prvek vkládat, nebo –1, pokud nebyl index zadán.
● Všechny zdrojové sekvence, které nezávisejí na jiné zdrojové sekvenci. Jméno každého z těchto parametrů lze určit v definici zdrojové sekvence. Pokud takto není určeno, použije se basen, kde n je pořadové číslo zdrojové sekvence, počítáno od 1. Počítají se pouze nezávislé zdrojové sekvence, do pořadí se započítávají i zdrojové sekvence, pro které je jméno parametru explicitně určeno. Parametr je předán jako l-hodnota, aby bylo možné do sekvence vkládat.
Funkce má dále dostupné tyto objekty:
●this – data, která se mají do odvozené sekvence vložit.
●seq – odvozená sekvence, do které se vkládá.
Funkce je zapsána v jazyce Enki. Nemá žádnou návratovou hodnotu (vrací typ None), může však vrátit chybu (typ Error), pokud prvek nelze vložit. V tom případě neuspěje ani vložení prvku do odvozené sekvence.
V jazyce Enki platí konvence, že se identifikátor this nemusí výslovně uvádět, takže např. this.a je totožné s a.

Vyjímací funkce

Pokud se má vyjmout prvek z odvozené sekvence, je třeba vyjmout prvek z jedné (nebo více) zdrojových sekvencí. K faktickému odstranění prvku z odvozené sekvence stačí odstranit zdrojový prvek z jediné zdrojové sekvence. V definici zdrojové sekvence lze určit, jestli se při vyjímání prvku z odvozené sekvence má vyjmou prvek z dané zdrojové sekvence. Standardně se vyjmou zdrojové prvky vyjímaného prvku ze všech zdrojových sekvencí, pro které je vyjímání prvku povoleno. Pokud není vyjímání prvku povoleno pro žádnou zdrojovou sekvenci a není definována vyjímací funkce, operace vyjmutí prvku selže.
Pokud tento standardní postup vyjímání prvku není dostatečný, lze definovat vyjímací funkci, která rozhodne, které prvky z kterých zdrojových sekvencí je třeba vyjmout nebo jinak upravit, aby výsledkem bylo vyjmutí prvku z odvozené sekvence.
Funkce má tyto parametry:
● Všechny zdrojové sekvence. Jméno parametru lze určit v definici zdrojové sekvence. Pokud takto není určeno, použije se basen, kde n je pořadové číslo zdrojové sekvence, počítáno od 1. Do pořadí se započítávají i zdrojové sekvence, pro které je jméno parametru explicitně určeno. Parametr je předán jako l-hodnota, aby bylo možné ze sekvence vyjímat prvky.
● Indexy příslušného zdrojového prvku pro všechny zdrojové sekvence. Jméno parametru je totožné se jménem příslušného parametru, jímž je předána sekvence, jak bylo vysvětleno výše, má však přidánu koncovku _idx. Takže, pokud je jméno sekvence base1, jméno indexu příslušného zdrojového prvku je base1_idx.
Funkce má dále dostupné tyto objekty:
●this – vyjímaný prvek.
●seq – odvozená sekvence, ze které se vyjímá.
Funkce je zapsána v jazyce Enki. Nemá žádnou návratovou hodnotu (vrací typ None), může však vrátit chybu (typ Error), pokud prvek nelze vyjmout. V tom případě neuspěje ani vyjmutí prvku z odvozené sekvence.

Viz též