Funkciniai modeliai#

Loginis duomenų modelis formuojamas model stulpelyje įvardinant koncepcinio modelio klasės pavadinimą.

Koncepcinis modelis nėra siejamas su jokiu konkrečiu duomenų šaltiniu, tačiau loginis modelis yra siejamas su konkrečiu duomenų šaltiniu, tačiau išlaiko koncepciniame modelyje apibrėžtą duomenų struktūrą.

Dažnai viena koncepcinio modelio klasė, loginio modelio pagalba yra siejama su keliais skirtingais duomenų šaltinio prieigos taškais, kurie įgyvendina skirtingas duomenų gavimo funkcijas arba veiksmus.

Tarkime, jei turime tokį koncepcinį modelį:

        classDiagram

  class City {
    + code: integer [1..1]
    + name: text [1..1]
  }
    

Ir turime duomenų šaltinį, kuris leidžia duomenis gauti skirtingais metodais:

dataset

resource

model

property

type

ref

source

prepare

datasets/gov/example

City

code

code

integer

name@lt

string

get_all_cities

json

/cities

get_city_by_code

json

/cities/{code}

Šiame pavyzdyje turime duomenų struktūros aprašą, kuriame yra City modelis, atitinkantis koncepcinį modelį, nesusietas su jokiu duomenų šaltinius ir du duomenų šaltiniai get_all_cities ir get_city_by_code, nesusieti su loginiu modeliu.

Norint susieti get_all_cities ir get_city_by_code duomenų šaltinius su loginiu modeliu, mums reikia panaudoti funkcinius modelius, kadangi duomenų šaltinis įgyvendina tik dalį funkcionalumo duomenims gauti.

Galutinis pilnai susietas struktūros aprašas atrodys taip:

dataset

resource

model

property

type

ref

source

prepare

datasets/gov/example

City

code

code

integer

code

name@lt

string

title

get_all_cities

json

/cities

City/:getall

data

get_city_by_code

json

/cities/{code}

City/:getone

code

integer

path()

City/:getall ir City/:getone yra funkciniai modeliai, nurodantys, kad duomenų modelis City yra siejamas su duomenų šaltiniu, kuris įgyvendina tam tikras duomenų skaitymo funkcijas.

Duomenų skaitymo funkcijos sutampa su UDTS specifikacijoje aprašytais veiksmais, kuriuos galima atlikti su duomenimis.

Funkciniai modeliai paveldi visas savybes iš pagrindinio modelio, tačiau gali papildyti pagrindinį modelį naujomis savybėmis, arba pateikti pagrindinio modelio savybes su kitais metaduomenis, tarkim nurodant kitokią property.source reikšmę.

Jei nenurodytas joks funkcinis modelis, daroma prielaida, kad šaltinis palaiko visas UDTS funkcijas.

Funkcijos#

getall#

Nurodo, kad duomenų šaltinis leidžia gauti visus klasės objektus, netaikant jokių filtrų.

Pavyzdys

dataset

resource

model

property

type

ref

source

prepare

datasets/gov/example

City

code

code

integer

code

name@lt

string

title

get_all_cities

json

/cities

City/:getall

data

getone#

Nurodo, kad duomenų šaltinis leidžia gauti vieną klasės objektą nurodžius objekto identifikatorių.

Pavyzdys

dataset

resource

model

property

type

ref

source

prepare

datasets/gov/example

City

code

code

integer

code

name@lt

string

title

get_city_by_code

json

/cities/{code}

City/:getone

code

integer

path()

getone veiksmo atveju, modelis turi turėti pirminį raktą, nurodytą model.ref stulpelyje. Pirminis raktas gali būti paveldimas iš pagrindinio modelio arba gali būti nurodomas kitas pirminis raktas prie funkcinio modelio.

Sąsajai su duomenų šaltiniu, pirminio rakto savybės turėtų nurodyti funkciją, kuri siejama su duomenų šaltinio parametrais. Konkrečiai, pavyzdyje aukščiau prie City/:getone/code savybės yra nurodyta path() funkcija proprty.prepare stulpelyje, kuri nurodo, kad code savybė yra naudojama kaip duomenų šaltinio URI path parametras, pažymėtas resource.source stulpelyje {} riestiniuose skliausteliuose, tuo pačiu pavadinimu, kaip ir property pavadinimas.

Per UDTS protokolą, bus tikimasi gauti tokią užklausią:

GET /datasets/gov/example/City/87a1d91a-e00d-4981-8287-d1810243d160 HTTP/1.1

Tokia UDTS užklausa, pagal pateiktą duomenų struktūros aprašo pavyzdį, bus konvertuota į tokią duomenų šaltiniui skirtą užklausą:

GET /cities/42 HTTP/1.1

Kad tai veiktu, duomenų agentas, turi saugoti išorinių ir vidinių identifikatorių lentelę, kurioje yra susietas išorinis 87a1d91a-e00d-4981-8287-d1810243d160 su vidiniu 42, kas leidžia konvertuoti tarp vidinių ir išorinių identifikatorių.

Identifikatorių susiejimas#

_id (išorinis)

id (vidinis)

87a1d91a-e00d-4981-8287-d1810243d160

42

Visų duomenų šaltinių lokalūs identifikatoriai, siejami su vienu esybės išoriniu identifikatoriumi.

select#

Nurodo, kad duomenų šaltinis grąžina ne visas klasės savybes, o tik tam tikras.

Pavyzdys

dataset

resource

model

property

type

ref

source

prepare

datasets/gov/example

City

code

code

integer

city_code

name@lt

string

city_name

get_cities

json

/cities

City?select(code)

Pavyzdyje nurodoma, kad get_cities duomenų šaltinis grąžina ne visas City klasės savybes (code ir name), o tik vieną code.

select() funkcijai galima nurodyti kelias savybes, atskiriant jas kableliu:

select(code, name@lt)

Taip pat galima naudoti ir kitas savybių atrankos funkcijas.

Taip pat žiūrėkite

Kitos savybių atrankos funkcijos:

sort#

Nurodo, kad duomenų šaltinis grąžina surūšiuotus duomenis, pagal tam tikras savybių reikšmes.

Taip pat žiūrėkite

part#

Nurodo, kad duomenų šaltinis neleidžia tiesiogiai pasiekti modelio duomenų ir šis modelis yra naudojamas tik kaip sudėtinė, vieno ar kelių kitų jungtinių modelių.

Pavyzdys

dataset

resource

model

property

type

ref

source

prepare

datasets/gov/example

City

code

code

integer

city_code

name@lt

string

city_name

get_cities

json

/cities

City?select(code)

id

integer

page

query()