form_schema | R Documentation |
form_schema(
flatten = FALSE,
odata = FALSE,
parse = TRUE,
draft = FALSE,
pid = get_default_pid(),
fid = get_default_fid(),
url = get_default_url(),
un = get_default_un(),
pw = get_default_pw(),
odkc_version = get_default_odkc_version(),
retries = get_retries(),
verbose = get_ru_verbose()
)
flatten |
Whether to flatten the resulting list of lists (TRUE) or not (FALSE, default). Only applies to ODK Central version < 0.8. |
odata |
Whether to sanitise the field names to match the way they will be outputted for OData. While the original field names as given in the XForms definition may be used as-is for CSV output, OData has some restrictions related to the domain-qualified identifier syntax it uses. Only applies to ODK Central version < 0.8. Default: FALSE. |
parse |
Whether to parse the form schema into a tibble of form field
type and name. This uses |
draft |
Whether the form is published (FALSE) or a draft (TRUE). Default: TRUE. |
pid |
The numeric ID of the project, e.g.: 2. Default: Set default See |
fid |
The alphanumeric form ID, e.g. "build_Spotlighting-0-8_1559885147". Default: Set default See |
url |
The ODK Central base URL without trailing slash. Default: Set default See |
un |
The ODK Central username (an email address).
Default: |
pw |
The ODK Central password.
Default: |
odkc_version |
The ODK Central version as a semantic version string
(year.minor.patch), e.g. "2023.5.1". The version is shown on ODK Central's
version page Default: Set default See |
retries |
The number of attempts to retrieve a web resource. This parameter is given to Default: 3. |
verbose |
Whether to display debug messages or not. Read |
ODK Central has introduced a new API endpoint in version 0.8 which returns a parsed and flattened list of fields. This replaces the nested form schema which is challenging to parse.
While users of newer ODK Central versions (> 0.8) can ignore the legacy
support for ODK Central's earlier form schema API, users of ODK Central
version < 0.8 can set an environment variable ODKC_VERSION
to their
ODKC's version in format <major>.<minor>
e.g. 0.7
.
This variable caters for future breaking changes.
Either way, form_schema
will always return a tibble with
columns name
, type
, path
and ruodk_name
.
A tibble or nested list (v0.7) containing the form definition.
At the lowest nesting level, each form field consists of a list of two
nodes, name
(the underlying field name) and type
(the XForms field
type, as in "string", "select1", "geopoint", "binary" and so on).
These fields are nested in lists of tuples name
(the XForms screen name),
children
(the fields as described above), type
("structure" for non-
repeating screens, "repeat" for repeating screens).
A list with name
"meta" may precede the structure, if several metadata
fields are captured (e.g. "instanceId", form start datetimes etc.).
In all cases for ODK Central 0.8, and with default parameters
(parse=TRUE
) for ODK Central 0.7, form_schema
returns
a tibble with the columns:
name
The field name as given in the form schema.
type
The field type, e.g. "string", "select1", etc.
path
The XForms path of the field,
selectMultiple
Whether a field of type "select" is
a select multiple (TRUE
). Any other types are NA
.
ruodk_name
The predicted field name as generated by
odata_submission_get
, prefixed by the path, additionally
cleaned with make_clean_names
to match the
cleaned column names from odata_submission_rectangle
.
https://docs.getodk.org/central-api-form-management/#getting-form-schema-fields
Other form-management:
form_detail()
,
form_list()
,
form_schema_ext()
,
form_xml()
## Not run:
# See vignette("setup") for setup and authentication options
# ruODK::ru_setup(svc = "....svc", un = "me@email.com", pw = "...")
# With explicit pid and fid
fs_defaults <- form_schema(pid = 1, fid = "build_xformsId")
# With current ODK Central (v0.8)
fs <- form_schema()
# With defaults, ODK Central v0.7
fs_nested <- form_schema(
flatten = FALSE,
odata = FALSE,
parse = FALSE,
odkc_version = 0.7
)
listviewer::jsonedit(fs_nested)
fs_flattened <- form_schema(
flatten = TRUE,
odata = FALSE,
parse = FALSE,
odkc_version = 0.7
)
listviewer::jsonedit(fs_flattened)
# form_schema returns a nested list. There's nothing to change about that.
class(fs_nested)
# > "list"
class(fs_flattened)
# > "list"
# This assumes knowledge of that exact form being tested.
# First node: type "structure" (a field group) named "meta".
fs_nested[[1]]$type
# > "structure"
fs_nested[[1]]$name
# > "meta"
# The first node contains children, which means it's an XForms field group.
names(fs_nested[[1]])
# > "name" "children" "type"
# Next node: a "meta" field of type "string" capturing the "instanceId".
# First child node of "meta": type "string", name "instanceId".
fs_nested[[1]]$children[[1]]$type
# > "string"
fs_nested[[1]]$children[[1]]$name
# > "instanceID"
# In the flattened version, the field's and it's ancestors' names are the
# components of "path".
fs_flattened[[1]]$path
# > "meta". "instanceId"
fs_flattened[[1]]$type
# > "string"
# Last node: a "meta" field capturing the datetime of form completion
fs_flattened[[length(fs_flattened)]]$type
# > "dateTime"
fs_nested[[length(fs_nested)]]$type
# > "dateTime"
# Parsed into a tibble of form field type/name:
# Useful to inform further parsing of submission data (attachments, dates)
fs <- form_schema(parse = TRUE, odkc_version = 0.7)
fs <- form_schema(odkc_version = 0.8)
# Attachments: used by handle_ru_attachments
fs %>% dplyr::filter(type == "binary")
# dateTime: used by handle_ru_datetimes
fs %>% dplyr::filter(type == "dateTime")
# Point location: used by handle_ru_geopoints
fs %>% dplyr::filter(type == "geopoint")
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.