Piste-skeemat
YLEISTÄ:
Tietokantapiste on tietyltä kannalta ajateltuna Lua taulukko - lua tyyppinä "table".
Koska lua-taulukko ei sinänsä aseta mitään rajoituksia sille, millaista tietoa
siihen voidaan tallentaa, SLC enginen pistetietokanta toteuttaa pisteille
skeema tarkastelun. Aina kun pisteen johonkin kenttään kirjoitetaan arvo, kyseistä
arvoa verrataan pisteen skeemaan, ja mikäli kirjoitettava arvo ei vastaa skeeman
määritystä - ja mikäli sitä ei voida konvertoida oikeaan muotoon, kirjoitus
epäonnistuu.
Tietokantapisteiden skeemat seuraavat pääpiirteittäin "JSON schemas" määritystä,
mutta hieman yksinkertaistettuna ja toisaalta, sisältäen taas joitakin laajennoksia.
Pistetietokanta asettaa jo lähtökohtaisesti kuitenkin joitakin lisärajoituksia;
Koska skeemalla kuvataan pistetietokantaobjektia, tulee ylimmän tason tyypin olla
sen vuoksi aina "object" - skeema jossa näin ei ole, hylätään.
SKEEMAN, ELI PISTETYYPIN LUOMINEN:
Uusi pistetyyppi - eli skeema, luodaan Data -kirjaston kutsulla createSchema.
Data.createSchema ( strSchemaName, schemaModel )
Argumentit:
strSchemaName Merkkijono joka tulee uuden skeeman nimeksi. Voi sisältää
merkkejä a-z, A-Z ja _
Paluuarvo:
Kutsu palauttaa arvon true jos onnistui, tai nil jos epäonnistui.
Jos haluaisi kuvata vaikkapa muuttujan, jonka täytyy sisältää kokonaisluku,
väliltä 0 .. 1, olisi skeema esimerkiksi seuraavanlainen:
{type="int", default=0, minimum=0, maximum=1}
Mutta kuten ylempänä jo sanottiin, täytyy tietokantapisteen olla aina ylimmällä
tasolla object tyyppinen - se on vaatimus, jonka ohjelma tarkistaa. object -tyyppi
tarkoittaa taulukkoa, joka sisältää rivejä, joiden nimet ovat merkkijonoja. Kun
asiaa miettii, juuri sellaisiahan datapisteet ovat; taulukko, joka sisältää rivejä,
joilla on nimiä kuten "pv", tai "description".
Näitä tyyppejä "object", "array", "int", "real", "string", "boolean" kutsutaan
datatyypeiksi. Jokaisella datatyypillä on lista lisävaatimuksia, joita voidaan
määrätä kyseisen tyyppiselle tiedolle. Esimerkiksi object tyyppiselle datalle
voidaan esittää vaatimuksia siitä, millaisia rivejä sen on pakko sisältää.
Array tyyppiselle, eli taulukolle (tai joskus kutsutaan listaksi) voidaan
määrätä minimi tai maksimi määrä rivejä, ja jokaiselle riville jokin pakollinen
muotovaatimus (esimerkiksi että rivit ovat kokonaislukuja).
Lua -kielen kannalta skeema on vain tietyllä tavalla muotoiltu taulukko. Kun
kyseinen taulukko annetaan parametrina Data.createSchema () -funktiolle,
kyseinen funktio laittaa tuon annetus taulukon muistiin, ja järjestelmä
vertaa niitä datapisteitä siihen, joiden on ilmoitettu olevan tuota tyyppiä.
Esimerkki: BI-piste:
Data.createSchema ("BI", {
type="object",
required={"class", "description", "pv", "priority", "inactiveText", "activeText", "faultStatus",
"outOfService", "reliability", "description", "commStatus", "commTxt", "dataSource"},
additionalProperties=true,
properties={
class={type="text", default="BI", fixed="BI"},
description={type="text", default="BI object"},
pv={type="int", default=0, minimum=0, maximum=1},
priority={type="int", default=16, minimum=1, maximum=16},
inactiveText={type="text", default="Off"},
activeText={type="text", default="On"},
faultStatus={type="integer", default=0, minimum=0},
outOfService={type="integer", default=0, minimum=0, maximum=1},
reliability={type="integer", default=0, minimum=0},
commStatus={type="integer", default=0},
commTxt={type="text", default=""},
dataSource={type="text", default=""}
}
} )
DATATYYPIT JA NIIDEN OMINAISUUDET:
boolean totuusarvo joka voi saada arvon true tai false. Yksinkertaisin
skeemojen tukema tietotyyppi.
"fixed" tällä määreellä voidaan pakottaa muuttujan arvo halutuksi.
"default" oletusarvo kun muuttuja luodaan.
Aliakset: bool
int Kokonaisluku. ARM arkkitehtuurilla tämä datatyyppi muutetaan
32 bittiseksi kokonaisluvuksi.
"fixed" tällä määreellä voidaan pakottaa muuttujan arvo halutuksi.
"default" oletusarvo kun muuttuja luodaan.
"minimum" pienin numeraalinen arvo jonka muuttuja voi saada
"maximum" suurin numeraalinen arvo jonka muuttuja voi saada
"enumerated" lista arvoista joihin muuttuja voidaan asettaa.
Aliakset: integer
number Reaaliluku, jota kuvataan 64 bittisellä liukuluvulla. Lua kielen
natiivi numerotyyppi.
"fixed" tällä määreellä voidaan pakottaa muuttujan arvo halutuksi.
"default" oletusarvo kun muuttuja luodaan.
"minimum" pienin numeraalinen arvo jonka muuttuja voi saada
"maximum" suurin numeraalinen arvo jonka muuttuja voi saada
"enumerated" lista arvoista joihin muuttuja voidaan asettaa.
Aliakset: real, float
array Lista tyyppinen juoksevasti kokonaisluvuilla indeksoitu taulukko,
jonka rivit on nimetty juoksevasti kokonaisluvuilla.
HUOM! Vaikka lua -kieli ei varsinaisesti erottelekaan array ja object
tyyppisiä taulukoita, on myös lua kielessä nopeampaa iteroita
taulukon solut lävitse ipair() kuin pair() kutsulla, eli listat
ovat nopeampia käsitellä kuin hash taulukot.
"itemNames" Tällä listalla voidaan antaa taulukon riveille
näyttönimet.
"minItems" minimi-määrä rivejä taulukossa.
"maxItems" maksimi-määrä rivejä taulukossa.
"items" on kutakin riviä kuvaava skeema - jokainen taulukon
rivi joutuu seuraamaan tätä mallia!
object Taulukko, jonka rivit on indeksoitu merkkijonoilla, eli hash taulukko.
Huom! Tämä datatyyppi ei ole täysin natiivi lua -kielen kannalta,
sillä lua -taulukko voisi sisältää sekä numeraalisesti indeksoituja
rivejä, että merkkijonoilla indeksoituja. Eli se ei tee eroa
object ja array tyyppien välillä. Tämä käytäntö periytyy Javascript
kielestä, ja JSON notaatiosta.
"required" kenttä on lista merkkijonoja, joka määrää mitä
rivejä objektin on pakko sisältää
"additionalProperties" on true/false arvo, joka ilmoittaa voiko
objekti sisältää muitakin kuin 'properties' taulukossa kuvattuja
rivejä.
"properties" on hash-taulukko jossa on annettu taulukon jokaisen
rivin oma skeema, joka siis kuvaa kyseiseen riviin sovellettavaa
skeemaa.