Visokošolski študijski program Prometno inženirstvo Stran 1 Prometna informatika:2_Podatkovne zbirke, Osnove 2 2.1 Podatkovne zbirke - osnovni pojmi in definicije Uvod in definicije Razjasnimo motiv ali zakaj študent prometnega inženirstva mora (želi) poznati tudi teorijo podatkovnih baz? Če želi inženir prometa uspešno sodelovati s strokovnjaki ostalih strok, predvsem informatiki, mora na enak način kot njegovi partnerji razumevati vsebine in pomen strokovnih pojmov. 2.1.1 Podatki Kaj so podatki? Podanih je bilo mnogo definicij, na primer: - Podatki so predstavitev dejstev, zamisli, navodil v formaliziranem načinu, primernem za komuniciranje, interpretacijo ali obdelavo s strani ljudi ali avtomatskih sredstev (definicija po ISO). - Podatki so dejstva predstavljena z vrednostmi (številkami, znaki ...), ki imajo pomen v določenem kontekstu. Diskutiraj: kaj pomeni »formaliziran« način ? 2.1.2 Informacija Kaj je torej informacija? Kakšna je razlika med podatkom in informacijo? Najdemo lahko številne definicije: - Informacija je miselni pomen, ki ga ljudje pripisujejo podatkom (definicija po ISO). - Informacije so ovrednoteni podatki v neki specifični situaciji. - Informacija je spoznanje, ki poveča vsebino znanja. Diskutiraj: kdaj neka sporočena številka (torej podatek) dobi svoj smisel? V vsakodnevnem pogovornem jeziku pojma podatek in informacija zamenjujemo oziroma ju uporabljamo kot sinonima. To teoretično ni dopustno. Informacijo izpeljemo iz enega ali več podatkov v odvisnosti od časa (trenutka) in od sistema komuniciranja (kdo jo daje in kdo jo sprejema). PI-2_PZvPrometu-Osnove.doc Visokošolski študijski program Prometno inženirstvo Stran 2 Prometna informatika:2_Podatkovne zbirke, Osnove 2.1.3 Znanje, inteligenca Pogosto govorimo tudi o znanju ali ekspertnem znanju ter o inteligenci oziroma umetni inteligenci. Znanje je po eni izmed bolj preprostih definicij: - Znanje je zbir dejstev ter pravil, ki simbolično predstavljajo nek vidik realnega sveta. Diskutiraj: V prometnem inženirstvu pogosto govorimo o vzročn- posledičnih zvezah. Če posedujemo določeno »znanje«, potem vemo, kako bodo delovali ukrepi (na primer; kaj moramo storiti, da zmanjšamo število smrtnih žrtev na cestah, torej kateri ukrepi »pridejo v poštev«). Samo informacije praviloma ne zadostujejo, da bi bili uspešni prometni planerji! Ekspert je po najbolj enostavni definiciji strokovnjak z (bogatimi) izkušnjami. Ekspertno znanje je poznavanje dejstev in pravil s sistemom vrednotenja le-tega. Ekspertni sistemi so se praviloma sposobni učiti - nadgrajevati pravila in sistem vrednotenja. Temu rečemu tudi, da so sposobni spoznanja (tudi učenja). Inteligenca je po najbolj enostavni definiciji vse tisto, kar človeka loči od ostalih živih bitij in strojev (na primer vid, čustvovanje, abstraktno razmišljanje, intuicija itd.). Umetna inteligenca je poskus, približati se tem sposobnostim na umetni način (na primer računalniški vid, računalniški govor itd.). Diskutiraj gornje pojme na primerih iz vsakodnevne prakse: - Evidenca v referatu za študente. So tam podatki, informacije, ekspertno znanje ? - Želim opraviti potovanje. Razmišljaj, kaj je podatek, kaj informacija, kaj je ekspertno znanje, če: − pogledam vozni red; − povprašam, kako priti iz kraja A v kraj B; − povprašam, kako najceneje pridem iz kraja A v kraj B ? - Prometne nesreče; kaj je podatek, kaj informacija, kaj bi bil ekspertni sistem v pomoč odpravljanju "črnih točk" : − zbirka vseh zapisnikov policije ; − analiza nesreč v križiščih; ugotavljanje, za katero križišče lahko rečemo, da je tako imenovana "črna točka" ; − ugotavljanje prevladujočega vzroka nesreč ? Kaj bi bilo v kontekstu preprečevanja prometnih nesreč uvajanje umetne inteligence ? 2.2 Podatkovni model PI-2_PZvPrometu-Osnove.doc Visokošolski študijski program Prometno inženirstvo Stran 3 Prometna informatika:2_Podatkovne zbirke, Osnove 2.2.1 Definicije V nadaljevanju tega poglavja bomo govorili le o oblikovanju podatkovnih baz. Pri obravnavanju podatkovnih baz poznamo tri nivoje. Informatiki rečejo, da govorimo o "trinivojski arhitekture podatkovni baze". Ti nivoji so: - Zunanji nivo ali "kako izgleda podatkovna zbirka navzven"; tudi pogled (angleško view oziroma user view). - Konceptualni, tudi logični nivo, ali »po kakšni logiki so podatki zbrani in kako dostopamo do njih«. - Notranji, tudi fizični nivo ali »kako so podatki organizirani in zapisani na računalniških medijih«. V nadaljevanju nas bo zanimal predvsem konceptualni nivo ali "logika" kako je zgrajena in organizirana podatkovna baza. Zanima nas podatkovni model. Obstaja več definicij, kaj je podatkovni model. Na primer: - Podatkovni model je percepcija, poenostavitev in miselna interpretacija podatkov realnega sveta, glede na neko določeno uporabo. - Podatkovni model je izdelek (sistemske) analize in predstavlja vse podatkovne kategorije za katere na nekem delovnem področju obstaja potreba, da se podatki spremljajo, obdelujejo, hranijo. Da bi definirali ustrezen podatkovni model, moramo dobro poznati oziroma analizirati problem oziroma nalogo. V prvi fazi razvoja informacijskega sistema (sistemska analiza) ugotavljamo tako imenovane podatkovne zahteve: kateri podatki so za neko določeno uporabo ali nalogo pomembni in potrebni. Podatkovni model opisuje, kako so podatki strukturirani in kakšni so odnosi med njimi. Diskutiraj na primeru iz vsakodnevne prometniške prakse pojem "glede na določeno uporabo" oziroma »vidik«: kaj zanima policijo, upravitelja cest, zavarovalnico, proizvajalca avtomobilov ... ? Metod, kako zaznavati, poenostaviti in miselno interpretirati podatke realnega sveta je mnogo. V nadaljevanju podajamo najobičajnejšo metodo – tako imenovano analizo entitet in razmerij (angleško »entity – relationship«). Rezultat analize predstavimo v entitetno relacijskih diagramih (ER - shemi), praviloma v grafični obliki oziroma izbrani grafični notaciji. Temu pristopu pravimo tudi analiza entitet, atributov in razmerij (asociacij), pripadajoči grafični notaciji pa EAR - shema. Omenimo še, da pri obsežnejših (sistemskih) analizah podatkovne modele pripravljamo v več stopnjah. Najprej pripravimo globalni podatkovni model, ki ga v natančnejši strukturni analizi razdelamo v podrobni podatkovni model. PI-2_PZvPrometu-Osnove.doc Visokošolski študijski program Prometno inženirstvo Stran 4 Prometna informatika:2_Podatkovne zbirke, Osnove 2.2.2 Entitete, entitetni tipi Osnovni element podatkovnega modela je entiteta. Entiteta je po definiciji: - Pojav ali objekt, o katerem zbiramo podatke. Obstajajo še druge definicije, kot na primer: - Entiteta je neodvisni podatkovni element, ki je nosilec podatkov. Določitev entitete (izhajajoč iz defincije torej: objekta, o katerem zbiramo podatke) je prvi in osnovni korak pri sestavljanju podatkovnega modela. Vprašamo se: Kaj je entiteta neke naloge (oziroma uporabe) oziroma katere so entitete neke kompleksnejše naloge ? Entiteta je en (1) predstavnik določene vrste. Entiteta je lahko karkoli, kar ima svojo lastno identiteto (!). Entiteta ima torej: - Identifikator (Ime), ki ga razlikuje od drugih entitet in - Lastnosti (Atribute), ki opisujejo njene značilnosti Identifikator (Ime) omogoča enolično naslovljivost oziroma nagovorljivost (temu s tujko rečemo identifikacijo) enega in samo enega (!) predstavnika entitetnega tipa. Identifikator lahko razumemo tudi kot lastnost posebne vrste - vodilni atribut ali ključ. Entitete lahko imajo več identifikatorjev, morajo pa imeti vsaj enega. Entitetni tip je po definiciji: - rezultat grupiranja enakih entitet v skupine oziroma razrede po načelu kategorizacije oziroma klasifikacije. Definiramo lahko tudi: - Entitetni tip je množica entitet, jih opisujejo isti atributi. Entitetni tipi imajo: - Ime, po katerem se razlikujejo od drugih entitetnih tipov v podatkovnem modelu. - Atribute entitetnega tipa, ki omogočajo opisovanje izbranih značilnosti opazovanih entitet. Opomba: Poznamo tudi pojem "šibka entiteta"; to je entiteta brez lastnega ključa. PI-2_PZvPrometu-Osnove.doc Visokošolski študijski program Prometno inženirstvo Stran 5 Prometna informatika:2_Podatkovne zbirke, Osnove Primeri iz (prometne) prakse: Poskusi določiti: entiteto(e), entitetni tip (uporabi načelo klasifikacije), možne identifikatorje za naslednje objekte in dogodke realnega sveta, glede na definirano uporabo: • Državljani: − Uporaba: Register prebivalcev • Študenti fakultete za gradbeništvo: − Uporaba: Evidenca v študentskem referatu • Banka cestnih podatkov: − Uporaba 1: Izdelava karte, vizualizacija (digitalna karta) − Uporaba 2: Kataster križišč − Uporaba 3: Števna mesta • Analiza prometnih nesreč: − Uporaba 1: Evidenca prometnih nesreč − Uporaba 2: Analiza črnih točk − Uporaba 3: Iskanje rizičnih udeležencev − Uporaba 4: Iskanje značilnosti vpletenih vozil • Vozni red v javnem potniškem prometu: − Uporaba 1: Konstrukcija voznega reda (avtobusni, železniški,...) − Uporaba 2: Postajališčni vozni redi, table na postajah (za uporabnike) PI-2_PZvPrometu-Osnove.doc Visokošolski študijski program Prometno inženirstvo Stran 6 Prometna informatika:2_Podatkovne zbirke, Osnove 2.2.3 Atribut, atributi Atribut (ali po slovensko lastnost) je po definiciji: - Atribut je katerikoli detajl, ki služi za opredelitev, razvrstitev, prepoznavo ali izražanje stanja izbrane entitete ali razmerja (kaj je razmerje, tudi "asociacija" glej nadaljevanje). Atributi so lahko v splošnem: - Identifikacijski; to so atributi, ki omogočajo enolično identifikacijo entitete. - Opisni – opisuje lastnosti entitete; to so pravi atributi ali atributi v ožjem pomenu besede. - Izpeljani – vrednost izpeljanega atributa se izračuna iz vrednosti opisnih atributov. Teh atributov običajno (glej v nadaljevanju »normalne forme«) ne shranjujemo neposredno, poznati pa moramo formulo oziroma logični izraz po katerem ga izračunavamo; le-ta je sestavni del specifikacije podatkovnega modela. Atribut ima: − ime − podatkovni tip; na primer: celo število, realno število, znakovni niz, datum, ura, logični itd. pa tudi zvočni zapis, slika − format; ta opredeljuje kakšen je določen podatkovni tip; na primer: 8 znakov, dvojna natančnost realnega števila, itd... − območje dopustnih vrednosti oziroma domena − obveznost ali neobveznost Primeri: Določi podatkovni tip, format, območje dopustnih vrednosti ter obveznost za naslednje atribute evidence o opravljenih izpitih študenta: Vpisna številka, Dekliški priimek, Opravil, Ocena, Povprečna ocena. Atribut Vpisna številka Priimek Dekliški priimek Opravil Ocena Povprečna ocena3 Podatkovni tip Znakovni niz1 Znakovni niz Znakovni niz Logična Celo število Realno število Format 9 znakov 30 znakov (?) 30 znakov (?) Kratko celo št.2 Enojna natančnost4 Domena Znaki 0,1,2...9 Znaki abecede(?) Znaki abecede(?) Da, NE 0d 6 do 10 6.0 do 10.0 Obveznost Da Da Ne Da Ne Da (?) 1 Čeprav se atribut imenuje »... številka«, s tem atributom ne opravljamo nikakršnih računskih operacij in je v bistvu znakovni niz! 2 Kadar je območje dopustnih vrednosti navzgor omejeno in dovolj nizko, uporabljamo tako imenovana navadna ali kratka cela števila (če bi pričakovali zelo velika cela števila, uporabimo format “long integer«) 3 Je izpeljani atribut. PI-2_PZvPrometu-Osnove.doc Visokošolski študijski program Prometno inženirstvo Stran 7 Prometna informatika:2_Podatkovne zbirke, Osnove Na primeru analize prometnih nesreč (entitetni tip: NESREČA), razmišljaj tj. definiraj: − identifikacijski atribut − atribute, pomembne za analizo nesreč ter za vsakega od njih podaj ime, podatkovni tip, format in območje dopustnih vrednosti V praksi pogosto uporabljamo nekatere posebnosti, kot sta: − sestavljeni atributi (s tujko kompozitum), kjer več atributov »zloženih skupaj« tvori nek uporaben identifikator − segmentirani atributi, kjer z dodatnima atributoma opisujemo veljavnost nekega »osnovnega atributa«; takšne, na primer, pogosto uporabljamo pri bankah podatkov o cestah ali železnicah (pa tudi pri opisovanju zgodovine nekega atributa)! Primeri sestavljenega atributa: Kako je sestavljen EMŠO državljana Slovenije ? Datum rojstva Sestavljeni atribut: EMŠO Spol Zaporedna številka Kako je sestavljena registrska številka na avtomobilski registrski tablici ? Primer segmentiranega atributa: Opisovanje objektov ali dogodkov na prometnicah: kako lahko opišem lastnost cestnega odseka, da je od kilometra 2,24 do kilometra 3,10 hitrost omejena na 50 km/h ? Hitrost Segmentirani atribut: Dovoljena hitrost Velja_Od Velja_Do 80 50 0.0 2,240 2,240 3,100 ... ... Opisovanje zgodovine; ali kdaj je neka vrednost (bila) veljavna? 4 Kadar potrebujemo veliko natančnost (veliko decimalnih mest) uporabimo dvojno natančnost, obstaja tudi »štirikratna« itd. natančnost. PI-2_PZvPrometu-Osnove.doc Visokošolski študijski program Prometno inženirstvo Stran 8 Prometna informatika:2_Podatkovne zbirke, Osnove 2.2.4 Razmerja, asociacije Razmerja (tudi Asociacije) po definiciji: izražajo pomensko relacijo (interakcijo, odnos, povezavo) med dvema ali več entitetami. Pojavi v realnem svetu pogosto niso tako preprosti, da bi jih lahko opisali samo z entitetami in atributi. Vsak tak pomemben odnos mora biti izražen v podatkovnem modelu. Razmerja oziroma asociacije (tudi relacije, angleško »relationship«) obstojijo samo med entitetami in ne med atributi in ne morejo obstajati "same zase"! Kadar mislimo na en konkretni pojav, govorimo o asociaciji, kot povezavi med entitetami. Tudi pri razmerjih oziroma asociacijah govorimo o tipu razmerja (tipu asociacije), kadar mislimo na povezavo med entitenimi tipi. Tipi razmerij (asociacij) imajo: - ime, - števnost oziroma kardinalnost (1:1, 1:N, M:N) – opisuje kako (kolikokrat, obvezno / neobvezno) se entiteti pojavita v neki asociaciji, - atribute oziroma lastnosti, ki opisujejo lastnosti razmerja (asociacije). Razmerja (asociacije) povezujejo enega, dva ali več entitetnih tipov; največkrat mislimo na povezavo dveh entitetnih tipov, takrat govorimo o binarnih razmerjih (asociacijah). Razmerja (asociacije) so - kot izpeljani elementi - lahko obvezne ali neobvezne. Primer: Opazimo, da nekaterih pojavov realnega sveta ne moremo opisati samo z entitetami in njenimi lastnostmi; takšni pojavi so n.pr:. - »Študent« (entiteta) si izbira predmete iz »Seznama izbirnih predmetov« (entiteta); sestavljen »Študijski program študenta« je asociacija.. ali - »Študijski programi« (n.pr. VS-Promet) so entitete; sestavljavec študijskih programov na Fakulteti sestavi iz nabora »Predmetov« (npr. Fizika, Matematika ...), ki so entitete, »Predmetnik za študijski program«; le-ta je asociacija. - Razmišljaj o povezavah:«Študent« se vpiše na »Študijski program«, kjer poleg obveznega dela (»Predmetnika«) izbere še »Predmete« iz »Seznama predmetov«... Primeri (iz prometne prakse): Razmišljaj o povezavah (asociacijah) med entitetnimi tipi: - »Postajališče«, »Linija« ; opis poti po kateri poteka avtobusna linija je lahko le zaporedje postajališč, torej je neka asociacija. - »Cesta«, »Cestni odsek«; cesta je sestavljena samo iz cestnih odsekov, lahko cestni odsek pripada dvema cestama (?) itd. - »Križišče«, »Cestni odseki« ; kaj povezuje cestni odsek oz. se lahko cestni odsek začne oz. konča kje drugje kot v križišču (?) PI-2_PZvPrometu-Osnove.doc Visokošolski študijski program Prometno inženirstvo Stran 9 Prometna informatika:2_Podatkovne zbirke, Osnove 2.3 Grafični zapis podatkovnega modela Pri načrtovanju podatkovnega modela, predvsem pa za njegovo predstavitev, se uporabljajo grafične metode. Grafičnemu zapisu (torej: »risbi« oziroma »skici«) rečemo tudi grafična notacija. Znanih je več načinov risanja podatkovnih modelov. Za modeliranje podatkov za promet, pa tudi sicer, se najpogosteje uporabljajo: - ER sheme oziroma ER diagrami (ER pomeni Entity – Relationship) - NIAM – notacija (NIAM pomeni Nijssen's Information Analysis Methodology) - IDEF – notacija (IDEF pomeni Integrated DEFinition Methods) - V programska orodja vgrajeni načini (npr. LibreOffice Base, OpenOffice Base, MS-ACCESS, Oracle Designer itd.) Nekoliko bližje si bomo ogledali Entity - (Atribut) - Relationship (ER oz. EAR) notacijo oziroma njeno razširitev; tako imenovano EEAR notacijo (razširjeno ali angleško »Extended«-EAR notacijo). Ta način risanja diagramov ni standardiziran, kar pomeni, da se je od njegovega nastanka (za avtorja tega pristopa velja P.P.Chen) razvilo več načinov, kako rišemo ER - sheme; ki pa so si med seboj precej podobni. Legenda (ključ) za E(A)R grafično notacijo: entitetni tip lastnost, atribut atribut z vlogo ključa, ID razmerje oziroma asociacija (angl. relationship) (a,b) asociacija je sestavljena iz minimalno a in maksimalno b elementov entitetnega tipa, definicija števnosti (kardinalnosti) asociacije Ime entitetnega tipa pišemo (v ednini, praviloma samostalnik) v pravokotnik; ime razmerja oziroma asociacije (angleško relationship) pišemo v rombu podoben lik (praviloma zapišemo glagol). Atribute pišemo v elipse, pri čemer na nek način poudarimo, kateri od atributov je identifikator (podčrtamo, dodamo krožec). Najzahtevnejši element ER-sheme je definicija kardinalnosti; tudi pri tem detajlu obstajajo med avtorji različne interpretacije. Zgoraj predstavljena je tako imenovana (minimalno, maksimalno) - notacija. PI-2_PZvPrometu-Osnove.doc Visokošolski študijski program Prometno inženirstvo Stran 10 Prometna informatika:2_Podatkovne zbirke, Osnove Čeprav definicije kardinalnosti zvenijo dokaj abstraktno (zapleteno, formalistično), se jih da interpretirati tudi v pogovornem jeziku (glej primer v nadaljevanju): Primer: Odnos »Predavatelj« in »Predmet«: Predavatelj lahko predava več predmetov: - zapišemo kot (1,*); rečemo tudi 1:N (ena proti mnogo) Predavatelj je lahko tudi brez predmeta – zapišemo kot (0,*) Predavatelj predava samo en predmet, ne more biti prez predmeta: (1,1) Odnos »Predmet« in »Predavatelj«: Vsak predmet mora imeti (samo) enega predavatelja, predmet ne more biti brez predavatelja – zapišemo kot (1,1) Predmet lahko predava tudi več predavateljev – zapišemo kot (1,*) Primer kompleksnejšega podatkovnega modela, zapisanega v ER notaciji: (1,1) IME ČAS Postajališče Relacija PR,MK (1,n) DOLŽIN A (1,1) Opis poti (1,1) Prevoznik Vozni red Vrsta, način, veljavnost,... (1,n) Vožnja opis Čas prihodov/odhodov (1,1) Voznoredni režim Vožnja Oznaka Slika 1: Primer ER-Sheme PI-2_PZvPrometu-Osnove.doc Visokošolski študijski program Prometno inženirstvo Stran 11 Prometna informatika:2_Podatkovne zbirke, Osnove ER - sheme so sicer najbolj razširjene, relativno preproste; a imajo nekaj slabosti (ne uspejo dovolj natančno opisati vloge entitet v asociaciji); zato so v strokovni praksi pogosti še: - NIAM - notacija (Nijjsenova grafična notacija; vsi novejši podatkovni modeli CEN za področje “Transport-Telematics”). Primer NIAM – notacije: Legenda (ključ): Slika 2: Primer NIAM sheme - IDEF načini zapisovanja, ki se je razvil po letu 1990. V praksi se pogosto izkaže, da samo z entitetami, razmerji in njunimi atributi ne moremo zadovoljivo opisati problema. Tudi v prometni praksi radi posežemo po pod-entitetah ter uporabimo načela specializacije oziroma generalizacije ter entitetam določimo podentitete. Primera: Prevozna sredstva obravnavamo lahko kot en sam entitetni tip ali pa presodimo, da imajo osebna in tovorna vozila sicer nekaj skupnih atributov, a veliko število specifičnih atributov. Takrat se odločimo za specializacijo ter entitetnemu tipu »prevozna sredstva« podredimo podtipa »osebno vozilo« in »tovorno vozilo«. Postaje javnega potniškega prometa lahko specializiramo na postajališča, vstopne točke, železniške kolodvore itd. PI-2_PZvPrometu-Osnove.doc Visokošolski študijski program Prometno inženirstvo Stran 12 Prometna informatika:2_Podatkovne zbirke, Osnove Shemam in diagramom, ki poleg entitet in razmerij dopuščajo še prikazovanje podtipov, rečemo razširjeno entitetno – relacijski diagrami oziroma angl. extended entity – relationship diagram ali EER – sheme. 2.4 Priporočila za inženirje prometa in sklep Priporočilo za prometne inženirje: Zgoraj opisani pristop je dokaj abstrakten in težko bi bilo pričakovati od inženirja prometa, da samostojno napravi konceptualno shemo oziroma nariše ER-shemo. Če pa želi, da ga bo informatik razumel, mu mora znati opisati problem na tak način, da bo le-ta uspel sestaviti podatkovni model (jasno določiti odvisnosti in pravila), prav tako pa mora znati brati (ali razumeti) že narisane ER-diagrame. Povzetek postopka oblikovanja konceptualnega modela (sheme) podatkovnih baz: Zgoraj smo opisali pojme definicije in metode, ki jih uporabljamo pri načrtovanju podatkovnih baz. Načrtovalec postopa po naslednih korakih: 1. Ugotavljanje podatkovnih zahtev; rezultat: definicija entitet. 2. Ugotavljanje lastnosti, ki so potrebne za opis in entitete in njeno identifikacijo; rezultat: definicija atributov in identifikatorja. 3. Odkrivanje in določitev razmerij oziroma asociacij; rezultat: ugotovimo, če asociacije (sploh) obstajajo. 4. Odkrivanje in določitev lastnosti asociacij in pravil sestavljanja asociacij. Vaji: Poskusi narisati podatkovne sheme za odnose med entitetama »moški« in »ženska«: - Nariši »klasično« zakonsko zvezo! - Nariši kako bi zgledal podatkovni model za »poligamijo«! - Nariši kako bi izgledal podatkovni model za istospolne zveze! Upoštevaj vse zgoraj navedene definicije in zapiši (skiciraj) predlog podatkovnega modela za : - Podatkovno zbirko študijskih programov na FG - Cestno podatkovno zbirko, ki omogoča štetje prometnih obremenitev. PI-2_PZvPrometu-Osnove.doc
© Copyright 2024