Feltöltési űrlapok kezelése

A feltöltési űrlapok határozzák meg, hogy a felhasználók és külső kliensek hogyan küldhetnek adatokat egy projektbe. Az űrlap meghatározza a céltáblát, az elérhetőséget, a hozzáférési beállításokat, a támogatott klienseket, a mezőket, az érvényesítési szabályokat, az alapértelmezett értékeket és a mezők közötti kapcsolatokat.

Az elérhető űrlapok listája

A meglévő űrlapok kiválaszthatók szerkesztésre, törlésre vagy letiltásra.

Letiltott űrlapokkal nem tölthetők fel adatok, és ezek az űrlapok nem láthatók a kliensek űrlaplistájában. Az offline kliensek nem tölthetnek fel adatokat törölt űrlapokkal, és a törölt űrlapok nem állíthatók vissza. Az űrlapok szerkesztésével módosítható a hatókörük (web, API vagy fájlfeltöltés), az adatbázistábla mezőivel való kapcsolatuk, a leírásuk és a hozzáférési szabályaik, valamint az, hogy megfigyelési esemény vagy alkalmi módban működjenek-e.

A letiltott űrlapok szürke háttérrel jelennek meg a listában.

Az űrlapok írásvédettre is állíthatók, amit egy lakat ikon jelez a listában. (Ehhez állítsa a project_forms tábla active mezőjének értékét 3-ra.)

Az űrlap fejlécének meghatározása

Céltábla

Válassza ki azt a projekttáblát, amelybe a feltöltési űrlapon beküldött adatok kerülnek.

Csak olyan, az OpenBioMaps által a projekten belül regisztrált SQL-táblák választhatók ki, amelyek tartalmazzák az OpenBioMaps alapmezőit, például az obm_id, obm_uploading_id stb. mezőket. A kiválasztott tábla később nem módosítható, mivel az űrlap mezői a kiválasztott tábla mezőihez kapcsolódnak.

Az űrlapok érzékenyek a táblaszerkezet változásaira. Emiatt erősen ajánlott, hogy a táblákat ne az OpenBioMaps rendszeren kívüli eszközzel szerkessze, mert így az űrlap elveszíti kapcsolatát a mezőkkel. Ilyen esetekben az űrlap módosításainak mentése megoldhatja az inkonzisztenciát, de a kliensek nem tudják majd feltölteni az offline adatokat!

Az űrlap neve

Adja meg a feltöltési űrlap nevét. A névnek egyedinek kell lennie a projekten belül, mivel a név az űrlapok egyedi azonosítójának része.

Egy űrlap a nevének módosításával másolható. Ebben az esetben az eredeti űrlap megtartja eredeti nevét; más szóval egy űrlapot nem lehet átnevezni, csak újat lehet létrehozni, ami hatással van az offline kliensek működésére!

A név többnyelvű lehet, ha str_ előtaggal rendelkező fordítási kulcsot használ. További információért lásd: Fordítások.

Hozzáférés az űrlaphoz

Határozza meg, hogy kik láthatják és használhatják az űrlapot:

  • nyilvános felhasználók;

  • minden bejelentkezett felhasználó; vagy

  • csak a megadott csoportok.

Ha a csak a megadott csoportok lehetőség van kiválasztva, aktívvá válik a felhasználó- és csoportválasztó mező, amelyben hozzáférés adható a kiválasztott felhasználóknak vagy csoportoknak.

Adathozzáférés

Az űrlapon keresztül feltöltött adatok csak az itt megadott csoportok számára lesznek elérhetők. Alapértelmezés szerint a feltöltő olvashatja és szerkesztheti a feltöltött adatokat.

Űrlaptípus

A következő űrlaptípusok közül legalább egyet ki kell választani:

  • webes űrlap;

  • fájlfeltöltési űrlap; vagy

  • API-űrlap külső kliensek, például a mobilalkalmazás általi hozzáféréshez.

Az űrlap leírása

Adja meg az űrlap rövid vagy részletes leírását. A leírás útmutatást tartalmazhat a közreműködők számára.

Az űrlap SRID-je

Válassza ki az űrlapon beküldött adatok által használt térbeli referencia-rendszert. A térbeli referencia-rendszerek a https://spatialreference.org/ webhelyen kereshetők. Az alapértelmezett érték az EPSG:4326 (WGS 84).

Ha meg van adva a térbeli referencia-rendszerek listája, a feltöltők csak a felsorolt lehetőségek közül választhatnak. A listát vesszővel elválasztott EPSG-azonosítókkal és látható címkékkel adja meg a következő formátumban:

4326:wgs84,23700:eov

Űrlapok csoportosítása

Az űrlapok csoportokba rendezhetők a webes űrlapválasztó felületen. Itt határozhatók meg vagy választhatók ki a csoportnevek.

Ez a lehetőség jelenleg nem érhető el a mobilalkalmazásban.

Az űrlap közzététele

Egy űrlap zárolható az űrlap fejlécében található narancssárga közzétételi gombbal történő közzététellel. Egy közzétett űrlap frissítése új verziót hoz létre. A korábbi verziók továbbra is elérhetők maradnak az API-kliensek, például a mobilalkalmazás számára.

Közzétett űrlapból tesztelési célú piszkozat hozható létre az oldal alján található Piszkozatverzió létrehozása gombbal. Alapértelmezés szerint a piszkozat csak a létrehozója számára érhető el. A piszkozat ezt követően közzétehető az űrlap közzétett ágán.

Megfigyelési esemény beállításai

A megfigyelési események magyarázatáért, valamint az alkalmi és az eseményalapú megfigyelések közötti különbségekért lásd: Megfigyelési események és alkalmi megfigyelések.

Egy megfigyelési eseményhez percben kifejezett időkorlát állítható be. A korlát elérésekor a mobilalkalmazás figyelmezteti a felhasználót, hogy az idő lejárt. A figyelmeztetés nem fejezi be az eseményt, és a felhasználó folytathatja a megfigyelések rögzítését.

A kötelező megfigyelési esemény azt jelenti, hogy az űrlap csak eseménymódban indítható el. Ha a megfigyelési események támogatása engedélyezett, de nem kötelező, a felhasználó választhat az eseménymód és az alkalmi megfigyelési mód között.

Útvonalnapló

Ez a lehetőség engedélyezi az útvonalnapló automatikus rögzítését az űrlap használata közben. Az útvonalnapló rögzítése kötelező vagy választható lehet, és csak eseménymódban érhető el.

Időszakos értesítés

A megadott, percben kifejezett időközönként az alkalmazás emlékezteti a megfigyelőt egy új megfigyelés rögzítésére. Az időzítő folyamatosan működik, és minden alkalommal újraindul, amikor a felhasználó megfigyelést rögzít.

Az űrlap oszlopainak meghatározása

Az oszlopdefiníciós szakasz határozza meg, hogy a céltábla mely oszlopai jelenjenek meg az űrlapon, valamint a beküldött értékek megjelenítésének és érvényesítésének módját.

Tartalmazza

Ha ki van választva, az oszlop megjelenik az űrlapon.

Oszlopsorrend

A Tartalmazza lehetőség melletti kis beviteli mező határozza meg az oszlop űrlapon elfoglalt helyét. Alapértelmezés szerint üres.

Oszlop

Két név jelenik meg: az oszlop látható neve, amely az űrlapon szerkeszthető, és az adatbázisoszlop eredeti neve.

Kötelező

Három lehetőség érhető el: igen, nem és enyhe hiba.

Igen (bordó)

Az űrlap nem küldhető be érték nélkül ebben az oszlopban.

Nem (szürke)

Az űrlap akkor is beküldhető, ha ebben az oszlopban nincs érték.

Enyhe hiba (rózsaszín)

Az üres vagy egy korlátozásnak nem megfelelő értékek beküldhetők, de a feltöltőnek minden érintett sort meg kell erősítenie.

Oszlopleírás

Adja meg a mező rövid leírását.

Oszloptípus

A következő űrlaposzlop-típusok érhetők el:

text

Tetszőleges szöveg. A minimális és maximális hossz megadható.

numeric

Numerikus érték. Minimális és maximális érték vagy hossz adható meg.

list

Alapértelmezés szerint egyetlen elem kiválasztását lehetővé tevő legördülő lista.

true-false

Logikai false/true érték. Az értékek sorrendje a listadefiníciós mezőben szabályozható, például false, true.

date

Dátum, amelyben az évet, hónapot és napot egy elfogadott karakter választja el. Adatbázisbeli dátumtípusként tárolódik.

date and time

Dátum, amelyet szóköz, majd óra:perc:másodperc formátumú idő követ. Ha a másodperc hiányzik, az alkalmazás automatikusan 00 értékként kezeli, és kéri a feltöltőt a módosítás elfogadására. Ha a perc hiányzik, az alkalmazás szintén 00 értékként kezeli, és megerősítést kér. Az érték adatbázisbeli dátum-idő típusként tárolódik.

time (timetominutes)

óra:perc formátumú érték, amelyet az alkalmazás egész számmá alakít. Adatbázisbeli egész szám típusként tárolódik.

time

óra:perc formátumú érték, amely adatbázisbeli időtípusként tárolódik.

time interval (timeinterval)

Időintervallum, például 2014-02-25 12:00:00 2014-02-25 13:00:00. Adatbázisbeli időintervallum-típusként tárolódik.

autocomplete

Automatikus kiegészítési javaslatokat hoz létre a listadefiníciós mezőben megadott SQL-tábla oszlopából. A dokumentált rövidített szintaxis: table_name.column. Alapértelmezés szerint a tábla keresése a gisdata adatbázis public sémájában történik.

autocompletelist

Az autocomplete típushoz hasonló, de lehetővé teszi több automatikusan kiegészített érték megadását egy mezőben.

photo id

Ha a fényképmodul engedélyezve van, az alkalmazás ebben a mezőben tárolja a feltöltött fényképek azonosítóit.

geometry: point

WKT POINT(...) formában megadott pontgeometria.

geometry: line

WKT LINESTRING(...) formában megadott vonalgeometria.

geometry: polygon

WKT POLYGON(...) formában megadott poligongeometria.

geometry: any

Támogatott geometriatípussal, WKT formában megadott geometria. Lásd a példaűrlapot.

colour rings

Színesgyűrű-kombináció megadását teszi lehetővé. A szögletes zárójelben lévő szakasz határozza meg a különböző lábrészekhez megadható gyűrűk maximális számát. Ezt követik az elérhető színek egyedi kódjai és címkéi, például [XX],Blue:B,red:R,green:G.

A dokumentált színkódok:

  • R — piros;

  • P — rózsaszín;

  • G — zöld;

  • g — világoszöld;

  • O — narancssárga;

  • Y — sárga;

  • B — kék;

  • b — világoskék;

  • W — fehér;

  • K — fekete;

  • N — barna;

  • U — bíbor;

  • V — ibolya; és

  • M — ezüst.

Lásd a színesgyűrű-űrlap példáját.

Bevitelvezérlés

A bevitelvezérlők ellenőrzik a mezőbe írt értékeket. A következő lehetőségek érhetők el:

  • nincs ellenőrzés;

  • minimum és maximum;

  • reguláris kifejezés;

  • térbeli; és

  • egyéni ellenőrzés.

Listadefiníció

Ha listát szeretne használni az adatbeküldés során, állítsa az oszloptípust list, autocomplete vagy autocompletelist értékre.

A listadefiníciók egyszerű vagy több választást lehetővé tevő listákat, automatikus kiegészítési forrásokat, más adatbázistáblákból származó értékeket és ezen értékek szűrésére szolgáló szabályokat írhatnak le.

Egy rövid lista közvetlenül is meghatározható. A következő példában a feltöltők a female vagy male értéket választhatják ki egy legördülő listából. A kiválasztott érték kerül az adatbázisba.

{
  "list": {
    "female": [],
    "male": []
  }
}

Több beviteli címke is hozzárendelhető ugyanahhoz a tárolt értékhez. A F, f és female például egyaránt értelmezhető a tárolt female értékként. Ez különösen hasznos fájlfeltöltés során, amikor a különböző közreműködőktől vagy évekből származó adatok ugyanarra a fogalomra eltérő címkéket használnak.

{
  "list": {
    "female": [
      "F",
      "f",
      "female"
    ],
    "male": [
      "M",
      "m",
      "male"
    ]
  }
}

A lista egyszerű szöveges formátumban is megadható, soronként egy értékkel. Az űrlap mentésekor az alkalmazás JSON formátumúvá alakítja az egyszerű szöveges listát. Az így létrejött JSON ezután közvetlenül szerkeszthető.

A listaértékek SQL-táblából is származhatnak. Adja meg a sémát (optionsSchema), a táblát (optionsTable), a tárolt értéket biztosító oszlopot (valueColumn), valamint szükség esetén a látható címkét biztosító oszlopot (labelColumn).

Az értékek a preFilterColumn és preFilterValue használatával szűrhetők. A következő példa előszűrőket alkalmaz:

{
  "optionsTable": "milvus_taxon",
  "valueColumn": "word",
  "preFilterColumn": [
    "lang",
    "status"
  ],
  "preFilterValue": [
    "obm_taxon",
    [
      "accepted",
      "undefined"
    ]
  ],
  "orderBy": "taxon_db",
  "order": "desc"
}

A teljes listadefiníció JSON formátumot használ. A webes felület listaszerkesztőjével állítható össze, és az alkalmazás ellenőrzi a szintaxis érvényességét. Ha a szintaxis érvénytelen, az alkalmazás hibaüzenetet ad vissza.

A következő példa felsorolja a dokumentált tulajdonságokat:

{
  "list": {
    "val1": [
      "label1",
      "label2"
    ]
  },
  "optionsSchema": "e.g. public",
  "optionsTable": "a table name",
  "valueColumn": "a column from the table",
  "labelColumn": "a column from the table - optional",
  "filterColumn": "",
  "pictures": {
    "an element from the list, e.g. val1": "url-string"
  },
  "triggerTargetColumn": [
    ""
  ],
  "Function": "",
  "disabled": [
    "an element from the list, e.g. val1"
  ],
  "preFilterColumn": [
    ""
  ],
  "preFilterValue": [
    ""
  ],
  "preFilterRelation": [
    ""
  ],
  "multiselect": "true or false, default is false",
  "selected": [
    "an element from the list, e.g. val1"
  ],
  "size": "a numeric value",
  "orderBy": [
    "column or SQL expression"
  ],
  "order": [
    "ASC or DESC"
  ],
  "limit": "numeric value"
}

Kapcsolt listák

Egy kapcsolt lista az egyik, indítóoszlopnak nevezett oszlopban kiválasztott érték alapján határozza meg egy másik oszlop elérhető értékeit. Ez függő vagy kaszkádlistát hoz létre.

Először hozzon létre egy keresőtáblát, amely tartalmazza a listaszintek közötti kapcsolatokat. Egy animal_taxons tábla például leírhatná, hogy mely állatcsoportok tartoznak az egyes főcsoportokhoz. A gerincesek közé tartozhatnának a kétéltűek, hüllők, madarak és emlősök, míg a gerinctelenek közé a csalánozók és rovarok.

Az indítóoszlop listadefiníciójában adja meg a céloszlopot:

{
  "triggerTargetColumn": [
    "affected_list_name"
  ],
  "Function": "select_list",
  "optionsSchema": "shared",
  "optionsTable": "animal_taxons",
  "valueColumn": "animal_group_name",
  "labelColumn": "animal_group_name",
  "labelAsValue": true
}

A példában használt tulajdonságok:

Function

A dokumentált select_list értéket használja.

optionsSchema

Azonosítja a keresőtáblát tartalmazó sémát. Ez a példa a shared sémát használja.

optionsTable

Azonosítja a keresőtáblát.

valueColumn

Azonosítja az indítólista értékeit biztosító oszlopot.

labelColumn

Azonosítja a látható címkéket biztosító oszlopot.

triggerTargetColumn

Azonosítja azt az űrlaposzlopot, amelynek listáját frissíteni kell.

Az érintett oszlopban határozza meg, hogy a keresőtábla melyik oszlopa biztosítja az értékeket, és melyik oszlop szolgál a szűrésükre:

{
  "optionsTable": "animal_taxons",
  "valueColumn": "animal_group_name",
  "labelColumn": "animal_group_name",
  "filterColumn": "animal_supergroup",
  "Function": "select_list",
  "optionsSchema": "shared"
}

Itt a filterColumn azt a keresőtábla-oszlopot azonosítja, amelyet az előző űrlaposzlopban kiválasztott értékkel kell összevetni.

A kapcsolt listák kettőnél több űrlaposzlopot is összekapcsolhatnak:

{
  "optionsSchema": "shared",
  "optionsTable": "animal_taxons",
  "filterColumn": "animal_supergroup",
  "Function": "select_list",
  "valueColumn": "animal_group_name",
  "triggerTargetColumn": [
    "species"
  ],
  "labelColumn": "animal_group_name"
}

Kapcsolt listák láncában a triggerTargetColumn azonosítja a következő űrlaposzlopot, a filterColumn az előző kiválasztással való összevetéshez használt keresőtábla-oszlopot, a valueColumn és a labelColumn pedig az aktuális listát határozza meg.

Példa kapcsolt listára: épületek egy településen

Tegyük fel, hogy egy projekt mesterséges költőládákban szaporodó fajokról gyűjt adatokat. Egy tytoalba_buildings nevű keresőtábla rögzíti, hogy melyik településen mely épületek találhatók. A településmezőnek automatikus kiegészítési listát kell biztosítania, az épületmezőnek pedig csak a kiválasztott település épületeit kell megjelenítenie.

Először állítsa be a településoszlopot automatikus kiegészítési mezőként, és adja meg célként az épületoszlopot:

{
  "triggerTargetColumn": [
    "building"
  ],
  "Function": "select_list",
  "optionsSchema": "public",
  "optionsTable": "tytoalba_buildings",
  "valueColumn": "settlement"
}

Ezután állítsa be az épületoszlopot listaként, és szűrje az értékeit a kiválasztott település alapján:

{
  "optionsTable": "tytoalba_buildings",
  "filterColumn": "settlement",
  "Function": "select_list",
  "valueColumn": "building"
}

Alapértelmezett értékek

Egy mezőhöz előre meghatározott érték rendelhető. A dokumentált dinamikus alapértelmezett értékek:

  • _autocomplete;

  • _input;

  • _list;

  • _geometry;

  • _login_name;

  • _email;

  • _boolean;

  • _attacment;

  • _datum; és

  • _auto_geometry.

Az _input például üres beviteli mezőt hoz létre, az _list a listadefinícióval tölti ki a kiválasztási listát, az _geometry lehetővé teszi a geometria kiválasztását, az _datum pedig dátumválasztást biztosít.

Lásd a példaűrlapot.

Mezőmegjelenítési lehetőségek

A következő megjelenítési lehetőségek dokumentáltak:

sticky

Elsősorban a mobilalkalmazás használja. Kiválasztásakor a mező megőrzi az értékét egy új sor megkezdésekor.

hidden

A mező nem jelenik meg.

read only

A mező értéke nem módosítható.

once

A mobilalkalmazásban a mező csak egyszer jelenik meg egy megfigyelési listában, a megfigyelés végén.

Ez a lehetőség arra szolgál, hogy egy mezőt a webes űrlap ismétlődő tábláján kívülre lehessen helyezni. Jelenleg a webes űrlapon hasonló eredmény érhető el egy alapértelmezett érték használatával.

list elements as buttons

A lista elemeit gombokként jeleníti meg. A gombokon képek használhatók. A listadefinícióban minden listaelemhez meg kell adni képet.

unfolding list

Fajlistás munkafolyamatot biztosít a mobilalkalmazásban. Ez a lehetőség csak automatikus kiegészítési mezővel – jellemzően tudományos nevet tartalmazó mezővel – használható, ha az űrlap tartalmaz egy egyedszámmezőt is, amelyhez az adatbázistábla beállításaiban hozzá van rendelve a megfelelő szemantikai szerep.

A mobilalkalmazás listában jeleníti meg a kiválasztott fajneveket és egyedszámukat. Az egyedszámok módosíthatók anélkül, hogy minden módosítás után külön rekordot kellene menteni. A lehetőség ezért megfigyelési eseményhez tartozó űrlapon a leghasznosabb, ahol a Megfigyelés mentése köztes mentésként működik, és nem törli az összegyűjtött fajlistát.

A következő listadefiníció képeket társít a példában szereplő gombértékekhez:

{
  "pictures": {
    "animals": "http://....png",
    "plants": "http://....png",
    "mushrooms": "http://....png",
    "bats": "http://....png"
  }
}

Oszlopkapcsolatok

Az oszlopkapcsolatok az egyik mező értéke alapján ellenőrzik vagy módosítják egy másik mező értékét. Egy tömegmező például 20 és 30 közötti numerikus tartományra korlátozható, amikor a nem mező értéke female:

(sex=female) {minmax(20:30)}

Lásd a példaűrlapot.

Pszeudooszlopok

Más feltöltési űrlapok oszlopai a következő formátumban adhatók hozzá:

form-name:column1,column2,columnN

A felsorolt oszlopok az ezt a definíciót tartalmazó oszlop után jelennek meg. A pszeudooszlopokba írt értékek feltöltése a másik űrlap definíciójával történik. Ez lehetővé teszi, hogy egyetlen munkafolyamatban két táblába kerüljenek adatok.

A kapcsolatok nyelvének meghatározása

A kapcsolatok nyelvének dokumentált általános szintaxisa:

(rel_field=rel_statement) {rel_type(rel_value)}, (rel_field=rel_statement) {rel_type(rel_value)}, ...

A tervezett értelmezés:

IF another field (rel_field) matches rel_statement,
THEN apply rel_type with rel_value to the current field.

A rel_type az aktuális mezőtípushoz kapcsolódó függvény. A dokumentált függvények:

year

Dátummezők esetében kinyeri az évet egy dátum-karakterláncból.

minmax

Szöveges vagy numerikus mezők esetében minimum- és maximumtartományt ellenőriz.

obligatory

Bármely mezőtípus esetében módosítja, hogy az aktuális mező kötelező-e.

inequality

Bármely mezőtípus esetében egy támogatott összehasonlító operátorral összehasonlítja a kapcsolódó mezőt az aktuális mezővel. A sikertelen összehasonlítás érvényesítési hibát eredményez.

A reguláris kifejezésből álló utasítás !! karakterekkel kezdődik, amelyet reguláris kifejezés követ, például:

!!^(\d{2})$

Ha a rel_statement reguláris kifejezés, a rel_value az illeszkedő értéken alapuló helyettesítő függvényt használhat:

.

Az aktuális mező értékét a rel_field mezőben illeszkedő karakterláncra cseréli.

.+

Az aktuális mező értékét a rel_field mezőben illeszkedő karakterlánchoz fűzi.

+.

A rel_field mezőben illeszkedő karakterláncot az aktuális mező értékéhez fűzi.

inequality kapcsolat esetében a dokumentált kifejezések + karakterrel jelölik a rel_field illeszkedő értékét, és . karakterrel az aktuális mező értékét:

+<.
+<=.
+>=.
+=.
+<>.

Más kapcsolattípusok esetében a rel_value más értéket tartalmazhat, vagy a függvénytől függően figyelmen kívül maradhat.

Kapcsolati példák

Mező kötelezővé tétele

A tarsus_length oszlopon:

(clutch_size=!!^([123])$) {obligatory(1)}

Ez kötelezővé teszi a tarsus_length mezőt, ha a clutch_size értéke 1, 2 vagy 3.

Két dátum összehasonlítása

Az end_date oszlopon:

(found_date=!!^(.+)$) {inequality(+>=.)}

Ha a found_date nem üres, a kapcsolat ellenőrzi, hogy az end_date nagyobb vagy egyenlő-e a found_date értékénél. A hamis eredmény feltöltési hibát okoz.

Év hozzáadása egy dátumhoz

Egy évet nem tartalmazó dátummezőn:

(year=!!^(d{4})$) {set(.)}

Ha a year oszlop nem üres, és négy számjegyet tartalmaz, a dátummező ezzel az évvel frissül.

Gyűrűszám megkövetelése

A ring_number mezőn:

(recapture=1) {obligatory(1)}

Ha a recapture értéke 1, a ring_number kötelezővé válik.

Alternatív név megkövetelése

Az english_name oszlopon:

(scientific_name=!!(^$)) {obligatory(1)}

Ha a scientific_name üres, az english_name kötelezővé válik.

Érték beállítása egy darabszám alapján

Az amount_type mezőn:

(number_of_individuals>50) {set(estimated value)},(egyedszam<=50) {set(exact value)}

Ha az egyedek száma nagyobb 50-nél, az amount_type értéke estimated value lesz. Ha az érték legfeljebb 50, az amount_type értéke exact value lesz.