nodeset (節點集):
XML 節點的集合,在 XLSForms 中,這通常是回應值的集合。
在重複群組之外,按名稱引用問題將傳回包含該問題的所有回應的節點集。
也可以透過使用管道「|」連接兩個或多個節點來建立節點集:「/data/age | /data/name」。
indexed-repeat(name, group, i[, sub_grp, sub_i[, sub_sub_grp, sub_sub_i]])
傳回疊代 i 中重複群組中問題名稱的回應值。
可以使用 sub 和 sub_sub 參數存取巢狀重複組。
可參考 Referencing repeated questions from inside the repeat:
https://docs.getodk.org/form-repeats/#referencing-answers-in-repeats
count(nodeset)
傳回節點集(nodeset)中的項目數。
這可用於計算重複組中的重複次數。
https://docs.getodk.org/form-logic/#repeats
XLSFORM
type | name | label | repeat_count | calculation |
---|---|---|---|---|
note | person_list_note | 請列出您家中人員的姓名。 | ||
begin_repeat | person | 家庭成員 | ||
text | name | 姓名 | ||
end_repeat | ||||
begin_repeat | person_details | 細節 | count(${person}) | |
calculate | current_name | indexed-repeat(${name}, ${person}, position(..)) | ||
date | member_bday | ${current_name} 的生日 | ||
end_repeat |
count-non-empty(nodeset)
傳回節點集(nodeset)非空值的數量。
sum(nodeset)
傳回節點集(nodeset)成員的總和。
可用於統計重複選擇問題的答案。
https://docs.getodk.org/form-repeats/#counting-answers
XLSFORM
survey
type | name | label | calculation |
---|---|---|---|
begin_repeat | guest_details | 賓客詳情 | |
text | guest_name | 客人姓名 | |
select_one meal_options | meal_preference | 膳食偏好 | |
calculate | chkn | if(${meal_preference} = 'chicken', 1, 0 ) | |
calculate | fsh | if(${meal_preference} = 'fish', 1, 0 ) | |
calculate | veg | if(${meal_preference} = 'vegetarian', 1, 0 ) | |
end_repeat | |||
calculate | chkn_count | sum(${chkn}) | |
calculate | fsh_count | sum(${fsh}) | |
calculate | veg_count | sum(${veg}) |
choices
list_name | name | label |
---|---|---|
meal_options | chicken | 雞 |
meal_options | fish | 魚 |
meal_options | vegetarian | 素食 |
max(nodeset)
傳回節點集的最大成員。
min(nodeset)
傳回節點集的最小成員。
XLSFORM
survey
type | name | label | calculation |
---|---|---|---|
begin_repeat | child_questions | 關於孩子的問題 | |
text | child_name | 孩子的名字 | |
integer | child_age | 孩子的年齡 | |
end_repeat | |||
calculate | age_of_youngest_child | min(${child_age}) | |
calculate | age_of_oldest_child | max(${child_age}) |
注意
min() 和 max() 函數只處理數字集。
空值(即引用未回答問題的變數)實際上是空字串,並且不會自動轉換為零 (0)。
regex(string, expression)
如果字串與表達式完全匹配,則傳回 True。
使用正規表示式: https://docs.getodk.org/form-regex/
XLSFORM
survey
type | name | label | constraint | constraint_message |
---|---|---|---|---|
text | middle_initial | 你的中間名首字母是什麼? | regex(., '\p{L}') | 只是第一個字母。 |
contains(string, substring)
如果字串包含子字串,則傳回 True。
starts-with(string, substring)
如果字串以子字串開頭,則傳回 True。
ends-with(string, substring)
如果字串以子字串結尾,則傳回 True。
substr(string, start[, end])
傳回從索引 start 開始並延伸到(但不包括)索引 end 的 string 的子字串(如果未提供 end,則返回 string 的終止位置)。
字串成員的索引為零。
substring-before(string, target)
傳回 string 中第一次出現目標子字串之前的子字串。
如果未找到目標,或者字串以目標子字串開頭,那麼這將傳回一個空字串。
substring-after(string, target)
傳回 string 中第一次出現目標子字串之後的子字串。
如果未找到目標,將傳回空字串。
translate(string, fromchars, tochars)
傳回字串的副本,其中 fromchars 中出現的每個字元都被 tochars 中相應的字元替換。
如果 fromchars 比 tochars 長,則 fromchars 中出現的每一個在 tochars 中沒有對應字元的字元都會被刪除。
string-length(string)
傳回字串中的字元數。
如果未傳入任何值,則傳回此函數呼叫所關聯的問題值中的字元數,這在約束表達式中可能很有用。
normalize-space(string)
通過去除字串的前導和尾隨空白,並將空白字元序列替換為單一空格,傳回具有規範化空白的字串。
如果沒有傳入任何值,則標準化此函數呼叫所關聯的問題值的空白。
concat(arg [, arg [, arg [, arg [...]]]])
將一個或多個參數連接成一個字串。
如果任何 arg 是節點集,則該集中的值將連接成一個字串。
join(separator, nodeset)
使用字串分隔符號連接節點集的成員。
boolean-from-string(string)
如果字串為“true”或“1”,則傳回 True,否則,錯誤。
string(arg)
將 arg 轉換為字串。
digest(data, algorithm, encoding method (optional))
使用指定的雜湊演算法字串計算並傳回資料字串的雜湊值,並使用可選的編碼字串對該雜湊值進行編碼。
演算法選項有 MD5、SHA-1、SHA-256、SHA-384、SHA-512。
如果不指定第三個參數,則編碼為base64。
編碼的有效選項是 base64 和 hex。
例如,如果有人想要從敏感資料(例如國民身分證號碼)建立唯一識別碼而不損害該數據,則此功能可能會很有用。
base64-decode(string)
使用 Base64 編碼方案對輸入中的所有位元組進行解碼,假設編碼的位元組表示 UTF-8 字元。
返回 UTF-8 字串。
extract-signed(string, public-key)
給定一個 Base64 編碼的簽章字串和公鑰作為輸入,驗證前 64 個位元組是否是有效的「Ed25519 https://en.wikipedia.org/wiki/EdDSA 簽章」。
如果簽名有效,則以 UTF-8 字串形式傳回內容的訊息(非簽名)部分。
如果簽章無效,則傳回空字串。
注意
數學函數(number() 除外)僅適用於數值。
您可以使用 number() 將數字字串,轉換為數字,但通常最好直接取得數字值。
空值(即引用未回答問題的變數)實際上是空字串,並且不會自動轉換為零 (0)。
round(number, places)
將小數四捨五入到一定的小數位數。
int(number)
截斷小數的小數部分以傳回整數。
number(arg)
將 arg 轉換為數值。
如果 arg 是數字字串,則傳回數字值。
如果 arg 為 True,則傳回 1。
如果 arg 為 False,則傳回 0。
如果 arg 無法轉換,則傳回 NaN(不是數字)。
pow(number, power)
Raises a number to a power.
次方運算。
log(number)
Returns the natural log of number.
傳回number的自然對數。
log10(number)
傳回number以 10 為底的對數。
abs(number)
傳回number的絕對值。
sin(number)
傳回number的正弦值。
cos(number)
傳回number的餘弦值。
tan(number)
傳回number的正切值。
asin(number)
傳回number的反正弦值。
acos(number)
傳回number的反餘弦值。
atan(number)
傳回number的反正切值。
atan2(y, x)
傳回 y、x 的多值反正切值。
sqrt(number)
傳回number的平方根。
exp(x)
返回 e^x。
exp10(x)
返回10^x。
pi()
傳回數學常數 π 的近似值。