Dimensijos
Dimensijos apibrėžia duomenų metaduomenų detalumo lygį.
Stulpeliai dataset
, resource
, base
, model
ir
property
yra naudojami kaip DSA dimensijos. dataset
yra
aukščiausia dimensija, property
žemiausia. dataset
ir
resource
dimensijos atitinka DCAT žodyną ir užtikrina trečia duomenų
brandos lygį, o žemiau esantys base
, model
ir property
atitinka RDFS žodyną ir užtikrina penktą duomenų brandos lygį. Vienoje lentelės
eilutėje gali būti užpildytas ne daugiau kaip vienas dimensijos stulpelis.
Užpildytasis dimensijos stulpelis nustato visų kitų stulpelių prasmę.
id |
d |
r |
b |
m |
property |
title |
---|---|---|---|---|---|---|
1 |
datasets/gov/ivpk/adk |
Atvirų duomenų katalogas |
||||
2 |
adk |
Atvirų duomenų katalogo duomenų bazė |
||||
3 |
/dcat/dataset |
Duomenų rinkinys |
||||
4 |
dataset |
Duomenų rinkinys |
||||
5 |
title |
Duomenų rinkinio pavadinimas |
Pavyzdyje aukščiau, taupant vietą, dalies dimensijų pavadinimai sutrumpinti iki
vienos raidės ir įtraukti ne visi stulpeliai, o tik id
ir title
metaduomenų stulpeliai. Pavyzdyje matome, kad vienoje eilutėje užpildytas tik
vienas dimensijos stulpelis, o title
stulpelio prasmė keičiasi
priklausomai nuo dimensijos reikšmės. Toliau specifikacijoje konkrečios
dimensijos stulpeliai įvardijami pateikiant tiek dimensijos, tiek metaduomens
stulpelio pavadinimus, kad būtų aiškiau apie kurios dimensijos metaduomenį
kalbama, pavyzdžiui model.title
leidžia suprasti kad kalbama apie
„Duomenų rinkinys“ reikšmę 4-oje eilutėje.
Be minėtų dimensijų stulpelių DSA lentelėje gali būti naudojami
papildomos metaduomenų dimensijos, kai nurodoma type
reikšmė ir
nepateikiama nei viena dimensijos stulpelio reikšmė. Pavyzdžiui:
id |
d |
r |
b |
m |
property |
type |
ref |
uri |
---|---|---|---|---|---|---|---|---|
1 |
prefix |
dcat |
http://www.w3.org/ns/dcat# |
Šiuo atveju prefix
tampa dar viena dimensija, leidžianti pateikti
metaduomenis apie naudojamų URI prefiksus. Analogiškai, kaip ir su kitomis
dimensijomis, dimensijos ir metaduomens pavadinimus galima apjungti, pavyzdžiui
prefix.ref
apibūdina tik prefix
dimensijai priklausančius
ref
stulpelius.
Dimensijos leidžia suskirstyti metaduomenis į hierarchinę struktūrą. Todėl DSA lentelės eilučių eiliškumas yra svarbus, kadangi žemiau esančios eilutės priklauso aukščiau esančiai dimensijai. Tas pats galioja ir pagalbinėms dimensijoms.
Nors lentelėje sudaro tik 15 stulpelių, tačiau pasitelkiant 5 pagrindinius dimensijas ir keletą papildomų dimensijų, atsiranda galimybė išsamiai aprašyti visą duomenų šaltinio struktūrą.
Modelio bazė
Pastaba
Kol kas modelių apjungimas naudojant vieną bazę nėra įgyvendintas.
Modelio bazė naudojama kelių modelių (lentelių) susiejimui arba apjungimui.
Kadangi įvairiuose duomenų šaltiniuose dažnai pasitaiko duomenų, kuriuose
saugomos tą pačią semantinę prasmę turinčios lentelės, base
stulpelyje
galima nurodyti kaip skirtingos lentelės siejasi tarpusavyje.
base.type
stulpelyje nurodoma kokiu būdu lentelės yra susiję.
ETL priemonė vadovaujantis base
informacija duomenis
automatiškai transformuoja ir sujungia kelias lenteles į vieną.
Modeliai ne tik susiejami semantiškai tarpusavyje, bet taip pat suliejami ir
dviejų modelių duomenys naudojant laukų sąrašą nurodytą base.ref
stulpelyje. base.ref
stulpelyje nurodyti laukai naudojami norint
unikaliai identifikuoti model
lentelėje esančią eilutę, kuri atitinka
base
lentelėje esančią eilutę. Tai reiškia, kad modelis ir jo bazė turi
vienodus identifikatorius.
Siejant model
ir base
duomenis tarpusavyje, model
lentelė įgauna lygiai tokius pačius unikalius identifikatorius, kurie yra base
lentelėje. Tai reiškia, kad model
lentelėje negali būti duomenų, kurių
nėra base
lentelėje.
model.property
laukams, kurie sutampa su base
modelio laukais,
nenurodomas property.type
, tokiu būdu nurodoma, kad
model.property
turi tą pačią semantinę prasmę, kaip ir base
,
tačiau model
gali turėti ir papildomų laukų, kurių nėra base
modelyje, tokiu atveju property.type
turi būti nurodomas.
Visi base.ref
laukai turi būti aprašyti tiek base
, tiek
model
modeliuose, tai reiškia, kad base.ref
gali būti naudojami
tik tiek laukai, kurie neturi tipo.
Jei base
stulpelyje nurodoma /
reikšmė, tai reiškia, kad
model
neturi bazės, arba modelio bazė yra panaikinama. /
naudojamas
tais atvejais, kai norima vieną ar kelis modelius prijungti prie vienos bazės,
tačiau sekantys modeliai nebeturi priklausyti jokiai bazei.
Sinonimai
Tais atvejais, kai visi model
laukai neturi property.type
, tada
toks modelis laikomas base
sinonimu ir iš esmės saugomas tik
identifikatorius.
Tačiau, jei bent vienas property.type
yra nurodytas, tada modelis įgyja
fizinę reprezentaciją ir turi vieną ar kelis savo laukus, kurių nėra
base
modelyje.
Kiekvieną kartą saugant duomenis per kitą modelį į bazę, bazės modelio istorijoje išsaugoma informacija iš kokio modelio atėjo duomenys.
Paveldimumas
model
paveldi visus laukus, įskaitant ir tuos, kurie nėra nurodyti prie
model
laukų sąrašo. Tai reiškia, kad galima skaityti ir rašyti duomenis
į base
, per model
. Jei skaitomas ar rašomas laukas, kurio nėra
model
laukų sąraše, tada to lauko duomenys sakomi iš arba rašomi į
base
modelį.
Visi modelio laukai, kurie neturi tipo, fiziškai yra priskiriami base
modeliui.
Dubliavimas
Laukai pavadinimai modelyje, kurie turi tą pačią semantinę prasmę, kaip ir bazėje turi sutapti su pavadinimais nurodytais bazėje. Tačiau, jei yra nurodomas jų tipas, tada tie duomenys dubliuojami, laikant, kad duomenys skiriasi nuo bazės, nepaisant to, kad semantiškai jie yra vienodi.
Turint tokius dubliuojamus laukus su nurodytais tipais, jei norima pasiekti
bazės lauką, galima naudoti _base.prop
išraišką, kuri nurodo, kad norima
pasiekti bazėje esančius duomenis, laukui tuo pačiu pavadinimu.
- base.source
Nenaudojamas.
- base.prepare
Išimtiniais atvejais, kai nėra galimybės lentelių susieti ar apjungti įprastiniais metodais, galima pasitelkti formules, kurių pagalba galima įgyvendinti nestandartinius lentelių apjungimo atvejus.
- base.type
Nenaudojamas.
- base.ref
model.property
reikšmė, kurios pagalbamodel
objektai siejami subase
objektais. Jei susiejimas pagal vieną model property yra neįmanomas, galima nurodyti kelismodel.property
pavadinimus atskirtus kableliu.Galima naudoti tik tuos
model.property
, kurie neturi nurodytoproperty.type
, kas reiškia, kad toks pat laukas turi būti tiekbase
, tiekmodel
laukų sąraše.Tais atvejais, kai
base.ref
rodo į modelio lauką, kuris turi tipą, tadabase.level
negali būti didesnis nei3
, kadangi jei modelio laukas turi tipą, tai reiškia, kad jo duomenys nesutampa su bazės duomenimis ir todėl jungimas negali būti daromas.
- base.level
Brandos lygis, nurodantis modelio susiejamumą su nurodytu baziniu modeliu. Plačiau žiūrėti Ryšiai tarp modelių | Brandos lygis.
Jei brandos lygis yra žemesnis nei
3
, tada identifikatorių siejimas nėra atliekamas, tokiu būdu tiesiog nurodomas semantinis susiejimas metaduomenų, o ne duomenų lygmenyje.
- base.access
Nenaudojamas.
Paaiškinimas, ką reiškia kiekviena savybė.
Pavyzdys be išorinio duomenų šaltinio:
d |
r |
b |
m |
property |
type |
ref |
---|---|---|---|---|---|---|
example |
||||||
Location |
||||||
name@lt |
text |
|||||
population |
integer |
|||||
Location |
||||||
City |
||||||
name@lt |
||||||
population |
||||||
Village |
||||||
name@lt |
||||||
population |
||||||
region |
ref |
Location |
||||
/ |
||||||
Country |
||||||
name@lt |
||||||
population |
Šiame pavyzdyje:
City
irVillage
priklauso vienai bazeiLocation
.Kadangi
Location
turi savybesname@lt
irpopulation
, taiCity
irVillage
modeliuose tą pačią semantinę prasmę turinčios savybės turi turėti lygiai tokius pačius pavadinimus, oproperty.type
turi būti tuščias. Kaiproperty.type
yra tuščias, tai reiškia, kad savybė ateina iš bazinio modelio.Kadangi
Village
turi papildomąproperty
su nurodytuproperty.type
, tai reiškia, kadname
ir population` priklauso bazei, tačiauregion
priklausoVillage
modeliui ir jo nėra bazėje.Kadangi
Country
semantiškai nėra tas pats, kasGyvenviete
, nors ir turi tokias pačias savybes, atskiriame ją nuoLocation
bazės, priskirdami/
bazei, kas reiškia, kas bazės nėra.
Pavyzdys su išoriniu duomenų šaltiniu:
d |
r |
b |
m |
property |
type |
ref |
source |
---|---|---|---|---|---|---|---|
example |
|||||||
Location |
id |
||||||
id |
integer |
||||||
name@lt |
text |
||||||
population |
integer |
||||||
Location |
name@lt |
||||||
City |
name@lt |
CITY |
|||||
name@lt |
NAME |
||||||
population |
POPULATION |
||||||
Village |
name@lt |
VILLAGE |
|||||
name@lt |
VILLAGE |
||||||
population |
POPULATION |
||||||
region |
ref |
Location |
REGION |
Šiame pavyzdyje esminis skirtumas yra tas, kad nurodyta kaip daromas jungimas.
City
ir Village
su Location
jungiame per name@lt
lauką.
Savybė
Duomenų laukas atspindi tam tikrą modelio savybę arba tai gali būti lentelės stulpelis, jei duomenų šaltinis yra lentelė.
- property.source
Duomenų lauko pavadinimas šaltinyje. Prasmė priklauso nuo
resource.type
.
- property.prepare
Formulė skirta duomenų tikrinimui ir transformavimui arba statinės reikšmės pateikimui.
- property.type
Nurodomas loginis duomenų tipas. Dėl galimų tipų sąrašo žiūrėti Duomenų tipai.
Loginis duomenų tipas yra toks tipas, kurį tikitės gauti publikuojant duomenis per API. Loginis tipas gali skirtis nuo duomenų šaltinio tipo.
Visi duomenų tipai gali turėti tokius parametrus:
required
- nurodo, kad šis duomenų laukas yra privalomas, tai reiškia, kad šio duomenų lauko reikšmė visada turi būti pateikta. Pagal nutylėjimą visi modelio duomenų laukai yra neprivalomi.
Kai kurie duomenų tipai, gali turėti konkrečiam duomenų tipui pateikiamus papildomus parametrus, tokie parametrai nurodomi skliausteliuose.
Dupmenų tipų pavyzdžiai:
integer
integer required
geometry
geometry(linestringm, 3345) required
- property.ref
Priklauso nuo
property.type
, nurodo matavimo vienetus, laiko ar vietos tikslumą, klasifikatorių arba ryšį su kitais modeliais. Ką tiksliai reiškia šis laukas, patikslinta skyrelyje Duomenų tipai.
- property.level
Nurodo duomenų lauko brandos lygį. Žiūrėti Brandos lygiai.
- property.access
Nurodo prieigos prie duomenų lygį. Žiūrėti skyrių Prieigos lygiai.
- property.uri
Sąsaja su išoriniu žodynu. Žiūrėti Išoriniai žodynai.
- property.title
Duomenų lauko pavadinimas. Šis pavadinimas yra skirtas skaityti žmonėms ir bus rodomas duomenų laukų sąrašuose ir antraštėse. Jei nenurodyta, bus naudojamas
property
kodinis pavadinimas.
- property.description
Duomenų lauko aprašymas.
- property.enum
Žiūrėti Klasifikatoriai.
Papildomos dimensijos
Išorinių žodynų prefiksai
Sąsają su išoriniais žodynais galima pateikti model.uri
ir
property.uri
stulpeliuose. Tačiau prieš naudojant žodynus, pirmiausia
reikia apsirašyti žodynų prefiksus. Žodynų prefiksai aprašomi taip:
- prefix
- prefix.ref
Prefikso pavadinimas.
- prefix.uri
Išorinio žodyno URI.
- prefix.title
Prefikso antraštė.
- prefix.description
Prefikso aprašymas.
Rekomenduojama naudoti LOV prefiksus.
Aprašyti prefiksai gali būti naudojami model.uri
ir property.uri
stulpeliuose tokiu būdu: prefix:name
.
Pavyzdys:
d |
r |
b |
m |
property |
type |
ref |
uri |
---|---|---|---|---|---|---|---|
dataset1 |
|||||||
prefix |
spinta |
https://github.com/atviriduomenys/manifest/issues/ |
|||||
manifest |
https://github.com/atviriduomenys/spinta/issues/ |
||||||
vadovas |
https://atviriduomenys.readthedocs.io/ |
||||||
dct |
http://purl.org/dc/dcmitype/ |
||||||
dataset2 |
|||||||
prefix |
dcat |
http://www.w3.org/ns/dcat# |
|||||
dct |
http://purl.org/dc/terms/ |
||||||
dctype |
http://purl.org/dc/dcmitype/ |
||||||
foaf |
http://xmlns.com/foaf/0.1/ |
||||||
owl |
http://www.w3.org/2002/07/owl# |
||||||
prov |
http://www.w3.org/ns/prov# |
||||||
rdf |
http://www.w3.org/1999/02/22-rdf-syntax-ns# |
||||||
rdfs |
http://www.w3.org/2000/01/rdf-schema# |
||||||
sdo |
http://schema.org/ |
||||||
skos |
http://www.w3.org/2004/02/skos/core# |
||||||
vcard |
http://www.w3.org/2006/vcard/ns# |
||||||
xsd |
http://www.w3.org/2001/XMLSchema# |
Prefiksai turi būti apibrėžti duomenų rinkinio kontekste, kadangi skirtingi
duomenų rinkiniai gali naudoti skirtingus prefiksus, tiems pateims URI.
Pavyzdžiui abiejusoe rinkinyje pavyzdyje aukščiau, dct
ir dctype
rodo į tą
patį URI.
Klasifikatoriai
Tam tikri duomenų laukai turi fiksuotą reikšmių variantų aibę. Dažnai duomenų
bazėse fiksuotos reikšmės saugomos skaitine forma ar kitais kodiniais
pavadinimais. Tokias fiksuotas reikšmes duomenų struktūros apraše galima
pateikti neužpildant hierarchinių stulpelių ir nurodant type
reikšmę
enum
, pavyzdžiui:
id |
d |
r |
b |
m |
property |
type |
ref |
source |
prepare |
level |
access |
uri |
title |
description |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 |
datasets/example/places |
|||||||||||||
2 |
places |
sql |
sqlite:// |
|||||||||||
3 |
Place |
id |
PLACES |
|||||||||||
4 |
id |
integer |
ID |
3 |
open |
|||||||||
5 |
type |
string |
CODE |
3 |
open |
|||||||||
6 |
enum |
1 |
"city" |
City |
||||||||||
7 |
2 |
"town" |
Town |
|||||||||||
8 |
3 |
"village" |
Village |
|||||||||||
9 |
name |
string |
NAME |
3 |
open |
Šiame pavyzdyje Place.type
laukas yra klasifikatorius, kurio reikšmės yra
kodai 1, 2 ir 3, kurios duomenų struktūros apraše keičiamos į city
, town
ir village
, papildomai title
stulpelyje nurodant reikšmės pavadinimą.
Jei tas pats klasifikatorius gali būti naudojamas kelios skirtingose vietos, tada galima iškelti klasifikatorių ir suteikti jam pavadinimą, pavyzdžiui:
id |
d |
r |
b |
m |
property |
type |
ref |
source |
prepare |
level |
access |
uri |
title |
description |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 |
datasets/example/places |
|||||||||||||
6 |
enum |
place |
1 |
"city" |
City |
|||||||||
7 |
2 |
"town" |
Town |
|||||||||||
8 |
3 |
"village" |
Village |
|||||||||||
2 |
places |
sql |
sqlite:// |
|||||||||||
3 |
Place |
id |
PLACES |
|||||||||||
4 |
id |
integer |
ID |
3 |
open |
|||||||||
5 |
type |
string |
place |
CODE |
3 |
open |
||||||||
9 |
name |
string |
NAME |
3 |
open |
Šiuo atveju, klasifikatoriui buvo suteiktas pavadinimas place
įrašytas
enum.ref
stulpelyje, 6 eilutėje. O Place.type
laukui, prepare
stulpelyje nurodyta, kad šis laukas naudoja vardinį place
klasifikatorių.
- enum
- enum.ref
Pasirinkimų sąrašo pavadinimas.
- enum.source
Pateikiama originali reikšmė, taip kaip ji saugoma duomenų šaltinyje. Pateiktos reikšmės turi būti unikalios ir negali kartotis.
Jei pageidaujama aprašyti tuščią šaltinio reikšmę, tada
property.prepare
celėje reikia nurodyti formulę, kuri tuščią reikšmę pakeičia, į kokią nors kitą. Formulės pavyzdys:swap('', '-')
- enum.prepare
Pateikiama reikšmė, tokia kuri bus naudojama atveriant duomenis.
model.prepare
filtruose taip pat bus naudojama būtent ši reikšmė.enum.prepare
reikšmės gali kartotis, tokiu būdu, kelios skirtingosenum.source
reikšmės bus susietos su vienaenum.prepare
reikšme.
- enum.access
Klasifikatoriams galima nurodyti skirtingas prieigos teises, tokiu atveju, naudotojas turintis
open
prieigą matys tik tuos duomenis, kurių klasifikatorių reikšmės turiopen
prieigos teises, visi kiti bus išfiltruoti.
- enum.title
Fiksuotos reikšmės pavadinimas.
- enum.description
Fiksuotos reikšmės aprašymas.
Pagal nutylėjimą, jei property.prepare
yra tuščias ir property
turi Klasifikatoriai sąrašą, tada jei šaltinis turi neaprašytą reikšmę, turėtų
būti fiksuojama klaida.
Jei yra poreikis fiksuoti tik tam tikras reikšmes, o visas kitas palikti tokias,
kokios yra šaltinyje, tada property.prepare
stulpelyje reikia įrašyti
self.choose(self)
.
Parametrai
Parametrai leidžia iškelti tam tikras duomenų paruošimo operacijas į parametrus
kurie gali būti naudojami Dimensijos, kurioje apibrėžtas parametras
kontekste. Parametrai gali gražinti iteratorius, kurių pagalba galima
dinamiškai kartoti resource
duomenų skaitymą, panaudojant aprašytus
parametrus. Taip pat parametrų pagalba galima sudaryti reikšmių sąrašus, kurių
pagalba galima kartoti resource
su kiekviena reikšme.
Parametrai dažniausiai naudojami žemesnio brandos lygio duomenų šaltiniams aprašyti, o taip pat API atvejais, kai duomenys atiduodame dinamiškai.
Parametrai aprašomi pasitelkiant papildomą Parametrai dimensiją.
id |
d |
r |
b |
m |
property |
type |
ref |
source |
prepare |
---|---|---|---|---|---|---|---|---|---|
1 |
datasets/example/cities |
||||||||
2 |
places |
csv |
https://example.com/{}.csv |
||||||
3 |
Country |
id |
countries |
||||||
4 |
code |
string |
CODE |
||||||
5 |
title |
string |
TITLE |
||||||
6 |
City |
country, title |
cities/{country.code} |
||||||
7 |
param |
country |
Country |
select(code) |
|||||
8 |
country |
ref |
Country |
param("country").code |
|||||
9 |
title |
string |
TITLE |
- param
- param.ref
Parametro kodinis pavadinimas.
- param.prepare
Formulė, kuri grąžina sąrašą reikšmių aprašomam parametrui.
- param.source
Jei reikšmė pateikta, tada ši reikšmė perduodama formulei kaip
self
. Pavyzdžiui, jeiparam.prepare
pateikta formulėselect(code)
, oparam.source
nurodytaCountry
, tai formulė bus iškviesta taipselect("Country", code)
.
Jei parametro reikšmė yra iteratorius, tada dimensija, kurios kontekste yra aprašytas parametras yra kartojama tiek kartų, kiek reikšmių grąžina iteratorius.
Jei yra keli Parametrai grąžinantys iteratorius, tada iš
visų iteratorių sudaroma Dekarto sandauga ir
resource
dimensija vykdoma su kiekviena sandaugos rezultato reikšme.
Jei sekančioje DSA eilutėje, einančioje po eilutės, kurioje aprašytas
Parametrai, nenurodytas type
ir neužpildytas joks kitas
dimensijos stulpelis, tada parametras tampa
iteratoriumi, kurio reikšmių sąrašą sudaro sekančiose
eilutėse patektos source
ir prepare
reikšmės. Pavyzdžiui
anksčiau pateiktą pavyzdį galima būtų perdaryti taip:
id |
d |
r |
b |
m |
property |
type |
ref |
source |
prepare |
---|---|---|---|---|---|---|---|---|---|
1 |
datasets/example/cities |
||||||||
2 |
places |
csv |
https://example.com/{}.csv |
||||||
3 |
Country |
id |
countries |
||||||
4 |
code |
string |
CODE |
||||||
5 |
title |
string |
TITLE |
||||||
6 |
City |
country, title |
cities/{country} |
||||||
7 |
param |
country |
"lt" |
||||||
7 |
"lv" |
||||||||
7 |
"ee" |
||||||||
8 |
country |
ref |
Country |
param("country") |
|||||
9 |
title |
string |
TITLE |
Šiame pavyzdyje, parametras country
grąžins tris šalies kodus: lt, lv ir
ee, kurie bus panaudojami cities/{country}
pavadinime, pakeičiant
{country}
dalį.
Parametrai reikšmės pasiekiamos naudojanti pavadinimą įrašytą
param.ref
stulpelyje. Pavyzdžiui, jei param.ref
stulpelyje
įrašyta x
, tada x
parametro reikšmę galima gauti taip:
- source
{x}
.
- prepare
x
arbaparam(x)
.
Parametrų generavimui galima naudoti tokias formules:
- param.prepare
- range(stop)
Sveikų skaičių generavimas nuo 0 iki
stop
,stop
neįeina.
- range(start, stop)
Sveikų skaičių generavimas nuo
start
ikistop
,stop
neįeina.
- scalar(name)
Jei nurodytas
param.source
, tada imama tikname
lauko reikšmė, o ne visi modelio laukai.
Jei užpildytas param.source
stulpelis, tada param.prepare
stulpelyje galima naudoti filtrą nurodyto param.source
modelio duomenims
filtruoti, o naudojant parametrus galima nurodyti ir modelio laukų pavadinimus,
pavyzdžiui:
- source
{x.field}
.
- prepare
x.field
arbaparam(x).field
.
Reikšmių sukeitimas
Tam tikrais atvejais duomenis tenka normalizuoti parenkant tam tikrą reikšmę jei
tenkinama nurodyta sąlyga. Tokias situacijas galima aprašyti pasitelkiant
switch
dimensiją.
- switch
- switch.source
Reikšmė, kuri bus atveriama.
- switch.prepare
Sąlyga, naudojant einamojo modelio laukus. Jei sąlyga tenkinama, tada laukui priskiriama
switch.source
reikšmė. Jei sąlyga netenkinama, tada bandoma tikrinti sekančią sąlygą. Parenkama ta reikšmė, kurios pirmoji sąlyga tenkinama.Jei
switch.prepare
yra tuščias, tada sąlyga visada teigiama ir visada grąžinamaswitch.source
reikšmė.
Komentavimas
Dirbant su DSA yra galimybė komentuoti eilutes, naudojant papildomą
comment
dimensiją, kurią galima naudoti bet kurios kitos dimensijos
kontekste.
- comment
- comment.id
Komentaro numeris.
- comment.ref
Komentuojamo vieno ar kelių kableliu atskirtų
property
pavadinimai. Galima nurodyti ne tik stulpelio pavadinimą, bet ir dimensiją.
- comment.source
Komentaro autorius.
- comment.prepare
Keitimo pasiūlymas, naudojant
create()
,update
irdelete()
funkcijas. Pavyzdžiui:update(property: "pavadinimas@lt", type: "text")
Šiuo atveju nurodoma, kad siūloma keisti
property
pavadnimą įpavadinimas@lt
, otype
įtext
.
- comment.level
Nurodoma, kad patenkinus keitimo sliūlymą, kuris nurodytas
comment.prepare
stulplyje, komentuojamai eilutei gali būti suteiktas nurodytas brandos lygis.
- comment.access
Nurodoma, ar komentaras gali būti publikuojamas viešai.
- private
Komentaras negali būti publikuojamas viešai. Šis prieigos lygis naudojamas pagal nutylėjimą.
- open
Komentaras gali būti publikuojamas viešai.
- comment.uri
Viena ar kelios kableliu atskirtos šaltinio nuorodos, kuri pateikta daugiau informacijos apie tai, kas komentuojama. Taip pat gali būti nurodytas kito komentaro
comment.id
, nurodant, kad tai yra atsakymas į ankstesnį komentarą.URI pateikiami sutrumpinta forma, naudojant prefikstus. Žiūrėti skrių Išoriniai žodynai.
- comment.description
Komentaro tekstas.
Pavyzdys
d |
r |
b |
m |
property |
type |
ref |
prepare |
level |
access |
uri |
---|---|---|---|---|---|---|---|---|---|---|
example |
||||||||||
prefix |
spinta |
https://github.com/atviriduomenys/manifest/issues/ |
||||||||
manifest |
https://github.com/atviriduomenys/spinta/issues/ |
|||||||||
vadovas |
https://atviriduomenys.readthedocs.io/ |
|||||||||
Imone |
2 |
|||||||||
comment |
base |
update(base: "/jar/JuridinisAsmuo", ref: "id") |
4 |
open |
spinta:205, manifest:1290 |
|||||
comment |
ref |
update(ref: "id") |
4 |
open |
vadovas:dsa/dimensijos.html#model.ref |
|||||
id |
integer |
4 |
open |
|||||||
pavadinimas |
string |
2 |
open |
|||||||
comment |
ref |
update(property: "pavadinimas@lt", type: "text") |
4 |
open |
spinta:204 |
Daugiakalbiškumas
title
ir description
stulpeliuose tekstas rašomas lietuvių
kalba, tačiau galima pateikti tekstą ir kita kalba, panaudojus papildomą
lang
dimensiją, kurią reikia naudoti prieš eilutę, kuriai pateikiamas
tekstas kita kalba.
Struktūros keitimas
Laikui einant, pirminių duomenų šaltinių arba jau atvertų duomenų struktūra keičiasi, papildoma naujais modeliais ar savybėmis, keliant duomenų brandos lygį seni duomenys keičiami naujais, aukštesnio brandos lygio duomenimis.
Visi šie struktūros ar pačių duomenų pasikeitimai fiksuojami papildomos
migrate
dimensijos pagalba, kuri gali būti naudojama, bet kurios kitos
dimensijos kontekste.
Pastaba
Migracijos naudojamos tik tuo atveju, kai keičiasi duomenų struktūra arba patys duomenys. Jei keičiasi tik metaduomenys, tai migracijų sąraše neatsispindi.
id |
d |
r |
b |
m |
property |
type |
ref |
prepare |
level |
title |
description |
---|---|---|---|---|---|---|---|---|---|---|---|
1 |
migrate |
2021-12-21 16:29 |
Pirmoji migracija. |
||||||||
2 |
migrate |
1 |
2021-12-21 16:33 |
Antroji migracija. |
|||||||
3 |
migrate |
2 |
2022-06-21 16:41 |
Trečioji migracija. |
|||||||
datasets/example/migrate |
|||||||||||
Country |
id |
||||||||||
id |
integer |
4 |
|||||||||
code |
string |
3 |
|||||||||
migrate |
1 |
create(level: 2) |
|||||||||
migrate |
3 |
update(level: 3) |
|||||||||
name |
string |
||||||||||
migrate |
2 |
create() |
Pavyzdyje aukščiau matome, kad šis duomenų struktūros aprašas turi tris migracijas:
Pirmosios migracijos metu sukuriamas pradinis duomenų struktūros variantas. Pirmoji migracija nežymima prie modelių ir duomenų laukų, nebent daromas keitimas, tuomet įtraukiam ir pirmoji migracija, kad būtų matoma, kas keitėsi. Būtent toks atvejis parodytas prie
Country.code
lauko, kuri trečiojo migracijoje keičiamas brandos lygis.Antrosios migracijos metu buvo įtrauktas naujas duomenų laukas
Country.name
.Trečiosios migracijos metu, buvo keičiami
Country.code
lauko duomenys, pakeitimo metu brandos lygis buvo pakeltas iki trečio. Atkreipkite dėmesį, kad metaduomenų pasikeitimas, kaip šiuo atveju, žymimas migracijose tik tuo atveju, jei tai yra susiję su pačių duomenų pasikeitimu.Jei brandos lygis būtų pakeistas, nekeičiant pačių duomenų, tuomet tokio pakeitimo nereikėtų įtraukti į migracijų sąrašą.
Kadangi trečiojoje migracijoje buvo atliktas su ankstesne versija nesuderinamas pakeitimas, tai šios migracijos data yra 6 mėnesiai ateityje, kadangi nesuderinamos migracijos pirmiausia paskelbiamos, o įgyvendinamos tik praėjus 6 mėnesiams nuo paskelbimo.
- migrate
- migrate.id
Migracijos numeris (UUID). Kiekvienos migracijos metu gali būti atliekama eilė operacijų, visos operacijos fiksuojamos naudojant migracijos numerį.
Visų migracijų sąrašas pateikiamas, kai
migrate
nepriklauso jokiam dimensijos kontekstui.
- migrate.ref
Ankstesnės migracijos numeris, pateiktas
migrate.id
stulpelyje, arba tuščia, jei prieš tai jokių kitų migracijų nebuvo.Naudojamas jei
migrate
nepatenka į jokios dimensijos kontekstą.Jei
migrate
aprašomas dimensijos kontekste, tada šis stulpelis nenaudojamas.
- migrate.prepare
Migracijos operacija. Galimos tokios operacijos:
- create()
Priklausomai nuo dimensijos konteksto, prideda naują modelį, arba savybę.
Funkcijai galima perduoti
ref
ir kitus vardinius argumentus, kurie atitinka DSA lentelės metaduomenų stulpelių pavadinimus.
- update()
Taikomas tik duomenų laukams ir nurodo, kad buvo pakeistos esamų duomenų reikšmės, keičiant reikšmių dimensiją, matavimo vienetus, formatą ir kita.
Funkcijai galima perduoti
ref
ir kitus vardinius argumentus, kurie atitinka DSA lentelės metaduomenų stulpelių pavadinimus.Perduodami tik tie vardiniai argumentai, kuriuos atitinkantys metaduomenys keičiasi.
- delete()
Priklausomai nuo dimensijos konteksto, šalina modelį ar savybę.
Pašalinto modelio ar savybės
type
keičiamas įabsent
reikšmę.
- filter(where)
Naudojamas
property
kontekste, kai vykdoma duomenų migracija. Nurodo, kad migracija taikoma tikwhere
sąlygą tenkinantiems duomenims.
Be šių pagrindinių migracijos operacijų, galima naudoti kitas duomenų transformavimo operacijas, kurios vykdomos su kiekviena duomenų eilute ir atlikus pateiktas transformacijos funkcijas, pakeista reikšmė išsaugoma.
- migrate.title
Migracijos įvykdymo data ir laikas. Migracijos laikas ir data gali būti ir ateityje, tuo atveju, jei daromas nesuderinamas keitimas.
Naudojamas tik tada, kai
migrate
nepatenka į jokios dimensijos kontekstą.
- migrate.description
Migracijos atliekamo pakeitimo trumpas aprašymas.