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:
textTetszőleges szöveg. A minimális és maximális hossz megadható.
numericNumerikus érték. Minimális és maximális érték vagy hossz adható meg.
listAlapértelmezés szerint egyetlen elem kiválasztását lehetővé tevő legördülő lista.
true-falseLogikai false/true érték. Az értékek sorrendje a listadefiníciós mezőben szabályozható, például
false, true.dateDá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 timeDátum, amelyet szóköz, majd
óra:perc:másodpercformátumú idő követ. Ha a másodperc hiányzik, az alkalmazás automatikusan00é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én00é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:percformá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:percformá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.autocompleteAutomatikus 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 agisdataadatbázispublicsémájában történik.autocompletelistAz
autocompletetípushoz hasonló, de lehetővé teszi több automatikusan kiegészített érték megadását egy mezőben.photo idHa 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: pointWKT
POINT(...)formában megadott pontgeometria.geometry: lineWKT
LINESTRING(...)formában megadott vonalgeometria.geometry: polygonWKT
POLYGON(...)formában megadott poligongeometria.geometry: anyTámogatott geometriatípussal, WKT formában megadott geometria. Lásd a példaűrlapot.
colour ringsSzí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; ésM— ezüst.
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:
FunctionA dokumentált
select_listértéket használja.optionsSchemaAzonosítja a keresőtáblát tartalmazó sémát. Ez a példa a
sharedsémát használja.optionsTableAzonosítja a keresőtáblát.
valueColumnAzonosítja az indítólista értékeit biztosító oszlopot.
labelColumnAzonosítja a látható címkéket biztosító oszlopot.
triggerTargetColumnAzonosí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:
stickyElsősorban a mobilalkalmazás használja. Kiválasztásakor a mező megőrzi az értékét egy új sor megkezdésekor.
hiddenA mező nem jelenik meg.
read onlyA mező értéke nem módosítható.
onceA 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 buttonsA 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 listFajlistá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:
yearDátummezők esetében kinyeri az évet egy dátum-karakterláncból.
minmaxSzöveges vagy numerikus mezők esetében minimum- és maximumtartományt ellenőriz.
obligatoryBármely mezőtípus esetében módosítja, hogy az aktuális mező kötelező-e.
inequalityBá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_fieldmezőben illeszkedő karakterláncra cseréli..+Az aktuális mező értékét a
rel_fieldmezőben illeszkedő karakterlánchoz fűzi.+.A
rel_fieldmező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.