Wikifunctions
wikifunctionswiki
https://www.wikifunctions.org/wiki/Wikifunctions:Main_Page
MediaWiki 1.47.0-wmf.12
first-letter
Media
Special
Talk
User
User talk
Wikifunctions
Wikifunctions talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
TimedText
TimedText talk
Module
Module talk
Translations
Translations talk
Event
Event talk
Z4
0
6
294392
293509
2026-07-27T17:50:31Z
Autom
448
sv labels
294392
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z4"
},
"Z2K2": {
"Z1K1": "Z4",
"Z4K1": "Z4",
"Z4K2": [
"Z3",
{
"Z1K1": "Z3",
"Z3K1": "Z4",
"Z3K2": "Z4K1",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "identity"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1360",
"Z11K2": "🆔"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "tożsamość"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "পরিচয়"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "identitet"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1645",
"Z11K2": "识别对象"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "identita"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "זהות"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Identität"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1113",
"Z11K2": "identity"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1625",
"Z11K2": "fanondro"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "identiteit"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "identitas"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "identité"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": " идентичность"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "identitate"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1643",
"Z11K2": "식별"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1672",
"Z11K2": "識別物件"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1001",
"Z11K2": "هوية"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "identità"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1181",
"Z11K2": "идентитет"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "पहचान"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1844",
"Z11K2": "pagkakakilanlan"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1823",
"Z11K2": "идентичност"
}
]
},
"Z3K4": "Z41"
},
{
"Z1K1": "Z3",
"Z3K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z3"
},
"Z3K2": "Z4K2",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "keys"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "cechy"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "নির্দেশকসমূহ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "attribut"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1645",
"Z11K2": "键"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "klíče"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "מפתחות"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Schlüssel"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1113",
"Z11K2": "keys"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1625",
"Z11K2": "lakile"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "sleutels"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "kunci"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1672",
"Z11K2": "鍵"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "clés"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "ключи"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "chei"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1001",
"Z11K2": "مفاتيح"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "chiavi"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1181",
"Z11K2": "атрибути"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "कुँजियाँ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1844",
"Z11K2": "mga susi"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1823",
"Z11K2": "ключове"
}
]
},
"Z3K4": {
"Z1K1": "Z40",
"Z40K1": "Z42"
}
},
{
"Z1K1": "Z3",
"Z3K1": "Z8",
"Z3K2": "Z4K3",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "validator"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "walidator"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "বৈধকারী"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1645",
"Z11K2": "验证函数"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "validátor"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "utvärderare"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "בודק תקינות"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Prüfer"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1113",
"Z11K2": "validator"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1625",
"Z11K2": "mpanaiky"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "validator"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "validator"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1672",
"Z11K2": "驗證函式"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "validateur"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "валидатор"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "validator"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1001",
"Z11K2": "متحقق"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "validatore"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1181",
"Z11K2": "валидатор"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "सत्यापनकर्ता"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1844",
"Z11K2": "tagapagpatunay"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1823",
"Z11K2": "валидатор"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1762",
"Z11K2": "pali pi lon ala lon"
}
]
},
"Z3K4": {
"Z1K1": "Z40",
"Z40K1": "Z42"
}
},
{
"Z1K1": "Z3",
"Z3K1": "Z8",
"Z3K2": "Z4K4",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "equality"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "porównanie"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "שוויון"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Gleichheit"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1672",
"Z11K2": "相等"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "égalité"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "равенство"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "egalitate"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1001",
"Z11K2": "مساواة"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "uguaglianza"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1181",
"Z11K2": "једнакост"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "समानता"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "gelijkheid"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "rovnost"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1844",
"Z11K2": "pagkakapantay-pantay"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1823",
"Z11K2": "равенство"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1762",
"Z11K2": "pali pi sama ala sama"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "likhet"
}
]
},
"Z3K4": "Z42"
},
{
"Z1K1": "Z3",
"Z3K1": "Z8",
"Z3K2": "Z4K5",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "display function"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "מתצג"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "formater"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Renderer"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "moteur de rendu"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "подготовитель"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "motor de randare"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1672",
"Z11K2": "轉譯函式"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1645",
"Z11K2": "转译函数"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1001",
"Z11K2": "دالة العرض"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "formattatore"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1181",
"Z11K2": "функција за приказ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "प्रदर्शन फ़ंक्शन"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "weergavefunctie"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "zobrazovací funkce"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1844",
"Z11K2": "punsiyong pampakita"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "visningsfunktion"
}
]
},
"Z3K4": {
"Z1K1": "Z40",
"Z40K1": "Z42"
}
},
{
"Z1K1": "Z3",
"Z3K1": "Z8",
"Z3K2": "Z4K6",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "reading function"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "parser"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "מפענח"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Parser"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1672",
"Z11K2": "解析函式"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1645",
"Z11K2": "解析函数"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "analyseur"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "парсер"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "analizor sintactic"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1001",
"Z11K2": "دالة القراءة"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "lettore"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1181",
"Z11K2": "рашчлањивач"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "पठन फ़ंक्शन"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "leesfunctie"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "čtecí funkce"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1844",
"Z11K2": "punsiyong pampabada"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "läsfunktion"
}
]
},
"Z3K4": {
"Z1K1": "Z40",
"Z40K1": "Z42"
}
},
{
"Z1K1": "Z3",
"Z3K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z46"
},
"Z3K2": "Z4K7",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "type converters to code"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "konwertery typu na kod źródłowy"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "ממירי הסוג לקוד"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Typumwandler in Code"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": " convertisseurs de type en code"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "конвертеры типа в код"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "convertor de tip în cod"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1001",
"Z11K2": "محوّلات النوع إلى نص برمجي"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "convertitori del tipo in codice"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1181",
"Z11K2": "конвертер из типа у код"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "प्रकार से कोड रूपांतरक"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "typeconverters naar code"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "konvertory typu na kód"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1844",
"Z11K2": "mga tagapagpalit ng uri sa kodigo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1762",
"Z11K2": "poki tawa toki ilo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "typomvandlare till kod"
}
]
},
"Z3K4": {
"Z1K1": "Z40",
"Z40K1": "Z42"
}
},
{
"Z1K1": "Z3",
"Z3K1": {
"Z1K1": "Z7",
"Z7K1": "Z881",
"Z881K1": "Z64"
},
"Z3K2": "Z4K8",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "type converters from code"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "konwertery typu z kodu źródłowego"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "ממירי הסוג מהקוד"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Typumwandler aus Code"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "convertisseurs de type à partir du code"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "конвертеры типа из кода"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "convertor de tip din cod"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1001",
"Z11K2": "محوّلات النوع من نص برمجي"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "convertitori del tipo dal codice"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "कोड से प्रकार रूपांतरक"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "typeconverters uit code"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "konvertory typu z kódu"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1844",
"Z11K2": "mga tagapagpalit ng uri mula sa kodigo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1762",
"Z11K2": "toki ilo tawa poki"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "typomvandlare från kod"
}
]
},
"Z3K4": {
"Z1K1": "Z40",
"Z40K1": "Z42"
}
}
],
"Z4K3": "Z104",
"Z4K4": "Z19084",
"Z4K7": [
"Z46"
],
"Z4K8": [
"Z64"
]
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "ধরন"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1830",
"Z11K2": "型"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1657",
"Z11K2": "ਕਿਸਮ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1083",
"Z11K2": "قسم"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "Typ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "Datatyp"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Typ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "Tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "Typ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "Тип"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1576",
"Z11K2": "tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1709",
"Z11K2": "Tips"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "סוג"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1048",
"Z11K2": "Kiểu dữ liệu"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1227",
"Z11K2": "Type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1851",
"Z11K2": "ชนิด"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1298",
"Z11K2": "Tipu"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1381",
"Z11K2": "Tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1488",
"Z11K2": "typ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1237",
"Z11K2": "Tip"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1332",
"Z11K2": "Тип"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1113",
"Z11K2": "Type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1625",
"Z11K2": "Karazana"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1051",
"Z11K2": "tyyppi"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1151",
"Z11K2": "ꯃꯈꯜ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "Tipe"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1643",
"Z11K2": "유형"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1645",
"Z11K2": "类型"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1672",
"Z11K2": "類型"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1827",
"Z11K2": "τύπος"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1531",
"Z11K2": "Jenis"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1434",
"Z11K2": "جنيس"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1003",
"Z11K2": "Tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1099",
"Z11K2": "Typ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1014",
"Z11K2": "Nbipụta"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1360",
"Z11K2": "🔲🔣"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1789",
"Z11K2": "Tipus"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1037",
"Z11K2": "Tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "Tip"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1001",
"Z11K2": "نوع"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1181",
"Z11K2": "Тип"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "प्रकार"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1597",
"Z11K2": "Tip"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1207",
"Z11K2": "навъ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1179",
"Z11K2": "Tangka̱i"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1844",
"Z11K2": "Uri"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1823",
"Z11K2": "Тип"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1762",
"Z11K2": "poki"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1630",
"Z11K2": "Macem"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1045",
"Z11K2": "نوع"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1011",
"Z31K2": [
"Z6",
"টাইপ",
"প্রকার"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1005",
"Z31K2": [
"Z6",
"тип переменной",
"тип данных"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1048",
"Z31K2": [
"Z6",
"Loại",
"Kiểu"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1592",
"Z31K2": [
"Z6",
"Typ"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1078",
"Z31K2": [
"Z6",
"Jenis"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1643",
"Z31K2": [
"Z6",
"타입",
"형"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"type"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1531",
"Z31K2": [
"Z6",
"jenis"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1381",
"Z31K2": [
"Z6",
"tipo"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1207",
"Z31K2": [
"Z6",
"тип"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1844",
"Z31K2": [
"Z6",
"uri"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1645",
"Z31K2": [
"Z6",
"类"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "A class of Z1/Object, with a set list of Z3/Keys."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "Z1/বস্তুর শ্রেণি, যার মধ্যে Z3/নির্দেশকের ধ্রুবক তালিকা"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1830",
"Z11K2": "Z1/オブジェクトのクラスで、Z3/キーのセットリストを持つ。"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "Klasa obiektów (Z1), która składa się z listy cech (Z3)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "Una classe di Z1/Oggetti, con un insieme di Z3/Chiavi"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "Třída Z1/Objektů, definující seznam Z3/Klíčů."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1576",
"Z11K2": "klaso de Z1/objekto, kun fiksa listo de Z3/ŝlosiloj"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Klasse des Objekts mit einer festgelegten Liste von Schlüsseln"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "en klass objekt (Z1) med en fastslagen lista med attribut (Z3)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "een klasse van Z1/object, met een lijst van Z3/sleutels"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1048",
"Z11K2": "Một lớp đối tượng (Z1) với một tập hợp cố định các khoá (Z3)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "une classe de Z1/objet constituée d'une liste de Z3/clés"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1298",
"Z11K2": "Na classi di Z1/Uggetti, c'unu nzemi di Z3/Chiavi"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1381",
"Z11K2": "Uma classe de Z1/Objeto, com uma lista definida de Z3/Chaves."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1237",
"Z11K2": "Z3/Keys'ten oluşan bir liste içeren bir Z1/Object sınıfı."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1113",
"Z11K2": "A class of Z1/Object, with a set list of Z3/Keys."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1851",
"Z11K2": "ชั้นของ Z1/วัตถุ พร้อมรายการของ Z3/คีย์ที่กำหนดไว้"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "Sebuah kelas dari Z1/Objek, memiliki daftar Z3/Kunci"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "המחלקה של Z1/עצם עם רשימה מוגדרת של Z3/מפתחות."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1531",
"Z11K2": "Kelas Z1/Objek, dengan senarai set Z3/Kekunci."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1434",
"Z11K2": "کلس Z1/اوبجيک، دڠن سناراي سيت Z3/ککونچي."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1003",
"Z11K2": "Una clase de Z1/Objeto con una lista fija de Z3/Claves"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1014",
"Z11K2": "Otu klas nke Z1/Ihe, yana ndepụta Z3/ igodo ahazi."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1789",
"Z11K2": "Una classe de Z1/Objecte amb una llista fixa de Z3/Claus"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "O clasă de Z1/Obiect, cu o listă fixă de Z3/Chei."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1001",
"Z11K2": "فئة من Z1/Object، مع قائمة محددة من Z3/Keys."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1181",
"Z11K2": "Врста Z1/Објекта, са одређеним Z3/Атрибутима"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "Z1/वस्तु का वर्ग, जिसकी Z3/कुँजियाँ की सेट सूची है।"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1844",
"Z11K2": "Isang klase ng Z1/Bagay, na may itinakdang listahan ng mga Z3/Susi."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1823",
"Z11K2": "Клас Z1/Обект, със зададен списък от Z3/Ключове."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1645",
"Z11K2": "一个 Z1/对象类,具有一个 Z3/键集合。"
}
]
}
}
pcqcl4ri9vt5520mu1go55x3awprd8v
Z104
0
38
294393
216145
2026-07-27T17:51:25Z
Autom
448
+sv label
294393
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z104"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z4",
"Z17K2": "Z104K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1851",
"Z11K2": "ชนิด"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "tipe"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "ধরণ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "סוג"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1381",
"Z11K2": "tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "प्रकार"
}
]
}
}
],
"Z8K2": "Z4",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z204"
],
"Z8K5": "Z104"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Validate type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Typ prüfen"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "בדיקת תקינות של סוג"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "type valideren"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1851",
"Z11K2": "ตรวจสอบชนิด"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "Validasi tipe"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "ধরণ বৈধকরন"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1381",
"Z11K2": "Validar tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "valider le type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "Valida tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "प्रकार सत्यापित करें"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "utvärdera typ"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
gxpllpkt26djaq598cmvlahisyae33r
294394
294393
2026-07-27T17:52:12Z
Autom
448
294394
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z104"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z4",
"Z17K2": "Z104K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1851",
"Z11K2": "ชนิด"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "tipe"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "ধরণ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "סוג"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1381",
"Z11K2": "tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "प्रकार"
}
]
}
}
],
"Z8K2": "Z4",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z204"
],
"Z8K5": "Z104"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Validate type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Typ prüfen"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "בדיקת תקינות של סוג"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "type valideren"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1851",
"Z11K2": "ตรวจสอบชนิด"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "Validasi tipe"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "ধরণ বৈধকরন"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1381",
"Z11K2": "Validar tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "valider le type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "Valida tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "प्रकार सत्यापित करें"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "utvärdera Datatyp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1592",
"Z31K2": [
"Z6",
"utvärdera typ"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
b7swzaluiqnx2xxd6v4aowxxccftx6r
Wikifunctions:How to create implementations
4
1180
294441
276443
2026-07-28T02:02:23Z
Tc14Hd
12202
Changed capitalization
294441
wikitext
text/x-wiki
<languages/>
<translate>
<!--T:1-->
This page provides a more detailed guide to '''creating implementations''', beyond the overview at <tvar name="1">{{ll|Wikifunctions:Introduction}}</tvar>.
== Types of Implementations == <!--T:47-->
<!--T:48-->
In Wikifunctions, an '''implementation''' can take one of two main forms: '''code''' or '''composition'''. A code implementation directly expresses the function’s logic in any of the available programming languages (currently, Python3 or JavaScript). It’s most useful when the function’s behavior can’t easily be built from existing Wikifunctions, or when precise control over data processing is needed.
<!--T:49-->
A composition implementation, on the other hand, defines the function entirely by combining other existing functions, without writing code. Compositions are easier to understand, reuse, and translate into other languages automatically, but they depend on suitable building blocks already being available and often are less performant. In general, start by checking whether your goal can be achieved through composition; if it can’t, or if performance or fine-grained logic matters, choose a code implementation instead.
<!--T:50-->
There's a third type of implementation: '''built-ins'''. These are run by system-built code, and are not editable. Most likely all pre-defined functions will have a built-in implementation. In such cases, when opening the implementation page, you will see a message stating ''"<tvar name="1">{{int|wikilambda-implementation-selector-none}}</tvar>"''
== Practice Test-Driven Development == <!--T:51-->
<!--T:52-->
'''Test-Driven Development''', or '''TDD''', is a way of creating software where you write tests before you write the actual code. Tests are just a way of understanding what your function is supposed to do by listing examples and how they should work.
<!--T:53-->
In Wikifunctions, writing tests first offers significant benefits. If you are working on an implementation, you can run your code against the existing tests to check that it behaves as expected. This makes it easier to catch errors early before even publishing your implementation. Tests are also a powerful way to describe the function you need. By writing tests, '''you clearly communicate the expected behavior''', and the community can step in and help with the implementation, or create alternative implementations.
<!--T:54-->
Imagine you want to implement a Function that combines two strings with a space in between. A basic test for this might look like:
</translate>
<syntaxhighlight lang="prolog">
join_with_space( "Hello", "world" ) => "Hello world"
</syntaxhighlight>
<translate>
<!--T:55-->
Once you have defined the basic behavior, it's important to '''think about edge cases'''—situations where the inputs are such that you might need some special behavior.
<!--T:56-->
For example, what if your first string ends in a space, or your second string starts with a space? Should the function keep all existing spaces and add another one, or should it return a neatly spaced result with just a single space between the words?
Depending on your requirements, you should build a test for such a case. For example, a test for this edge case could be either one of these — but not both!:
</translate>
<syntaxhighlight lang="prolog">
join_with_space( "Hello ", " world") => "Hello world"
</syntaxhighlight>
<translate>
<!--T:57-->
or ...
</translate>
<syntaxhighlight lang="prolog">
join_with_space( "Hello ", " world") => "Hello world"
</syntaxhighlight>
<translate>
<!--T:58-->
Make sure that all possible special cases are covered by your tests, and once you have them, make sure that they are all connected to the Function by selecting them and clicking "Connect".
== Code implementations == <!--T:59-->
</translate>
[[File:Code implementation.png|thumb|alt=<translate><!--T:60--> Wikifunctions code editor initialized with a function template</translate>|<translate><!--T:61--> When adding a new code implementation, the function template is initialized with the function and argument names</translate>]]
<translate>
<!--T:62-->
When creating an implementation using code, the Wikifunctions UI will set up a code editor with the selected language activated for syntax highlighting and validation. When the function to implement and the programming language are selected, this editor will be set with the correct function template: '''do not remove or edit this'''! Keep your code inside this function signature: if you need auxiliary functions, you can simply declare them inside your top-level function declaration.
=== Using input types in your code === <!--T:63-->
<!--T:64-->
Wikifunctions types <tvar name="1">{{Z|Z6}}</tvar> and <tvar name="2">{{Z|Z40}}</tvar> can be used as if they were native types in both JavaScript and Python3. For example, a String input can be concatenated or a Boolean be directly used in a logical expression. To use other types in your code implementations, you will have to look deeper into the type, figure out if it has a conversion to a native equivalent, and treat it accordingly.
<!--T:65-->
For example, let's say we want to write some Python code that handles an input of type <tvar name="1">{{Z|Z20420}}</tvar>. In the page for this type, let's look at its "type converters to code" and search for a Python one. The converter <tvar name="2">{{Z|Z20424}}</tvar> will be applied to our date input before our code, so looking at "native type" we know that our input will be a Python ''dict'' and looking at the implementation we can see the keys we can expect:
</translate>
<syntaxhighlight lang="python3">
return {
'K1': year,
'K2': month,
'K3': day
}
</syntaxhighlight>
<translate>
<!--T:66-->
When a type doesn't have a converter, you'll have to access its parts directly using its keys. For example, let's assume that your function <tvar name="1"><code>Z30000</code></tvar> has one input <tvar name="2"><code>Z30000K1</code></tvar> of type <tvar name="3">{{Z|Z11}}</tvar>. This type has two keys: <tvar name="4"><code>Z11K1</code></tvar> for the language (itself an object of type <tvar name="5">{{Z|Z60}}</tvar>), and <tvar name="6"><code>Z11K2</code></tvar> for the string value. Similarly, the language object has a key <tvar name="7"><code>Z60K1</code></tvar> for the language code. So, to get a string with the language code and the text, you can write:
</translate>
<syntaxhighlight lang="javascript">
function Z30000( Z30000K1 ) {
// <translate nowrap><!--T:308--> e.g. "en: some text"</translate>
return Z30000K1.Z11K1.Z60K1 + ": " + Z30000K1.Z11K2;
}
</syntaxhighlight>
<translate>
<!--T:67-->
For a quick reference of the available type conversions visit [[<tvar name="1">Special:MyLanguage/Wikifunctions:Execution targets#Default type conversion</tvar>|the default type conversion table]].
=== Returning the right outputs === <!--T:68-->
<!--T:69-->
Similarly to the way you treat inputs, outputs need to match the type specified in the function definition. Some can be treated as simply as native types, so any string output will be converted into a Wikifunctions <tvar name="1">{{Z|Z6}}</tvar> object and any native boolean returned by your implementation will be converted into a Wikifunctions <tvar name="2">{{Z|Z40}}</tvar> object.
<!--T:70-->
Those types that have "type converters from code" will apply the appropriate function to the output, in order to build the required type. Following the example of <tvar name="1">{{Z|Z20420}}</tvar>, the <tvar name="2">{{Z|Z20443}}</tvar> will transform the output from your implementation–a dict with K1, K2 and K3 keys–into its correct ZObject representation.
<!--T:71-->
For types that don't have converters from code, you can carefully build and return the output objects. For example, imagine that our function <tvar name="1"><code>Z30000</code></tvar> takes two string inputs: language code and text, and should return a <tvar name="2">{{Z|Z11}}</tvar> object. You can do this in Python by using the <tvar name="3"><code>ZObject</code></tvar> constructor:
</translate>
<syntaxhighlight lang="python3">
def Z30000(Z30000K1, Z30000K2):
lang_object = ZObject(
{"Z1K1": "Z9", "Z9K1": "Z60"},
Z60K1 = Z30000K1
)
return ZObject(
{"Z1K1": "Z9", "Z9K1": "Z11"},
Z11K1 = lang_object,
Z11K2 = Z30000K2
)
</syntaxhighlight>
<translate>
<!--T:72-->
Or in JavaScript:
</translate>
<syntaxhighlight lang="javascript">
function Z30000( Z30000K1, Z30000K2 ) {
const langObject = new ZObject(
new Map( [ [ "Z60K1", Z30000K1 ] ] ),
{ "Z1K1": "Z9", "Z9K1": "Z60" }
);
const monolingualKeys = new Map( [
[ "Z11K1", langObject ],
[ "Z11K2", Z30000K2 ]
] );
return new ZObject(
monolingualKeys,
{ "Z1K1": "Z9", "Z9K1": "Z11" }
);
}
</syntaxhighlight>
<translate>
<!--T:73-->
You can learn more about the <tvar name="1"><code>ZObject</code></tvar> class and other useful constructors in <tvar name="2">{{ll|Wikifunctions:Execution_targets#Custom_and_non-built-in_type_conversion}}</tvar>
</translate>{{phab|T392750}}<translate>
<!--T:317-->
As of 2026-05, trying to return a list of lists may fail, so you're not able to implement such functions in code.
=== Code in Python === <!--T:74-->
<!--T:3-->
In this section, we give a concrete example on how to create an implementation in the form of code in Python. Say we want to create an implementation for a function which combines two input strings by putting a space between them, returning the result of that. Let’s assume the ZID of that function is Z30000.
<!--T:5-->
The implementation is defined using the ZID of the function. So are the arguments of the function. So in the case of the function Z30000 with its two arguments, the function template should look like this:
</translate>
<syntaxhighlight lang="python3">
def Z30000(Z30000K1, Z30000K2):
</syntaxhighlight>
<translate>
<!--T:75-->
As we described before, we know that the arguments (<tvar name="1"><code>Z30000K1</code></tvar> and <tvar name="2"><code>Z30000K2</code></tvar>) are strings, so we can treat them as simply as we use native strings in Python. Also, the function should return a string. For our example, we simply return the two arguments concatenated with a space in between:
</translate>
<syntaxhighlight lang="python3">
def Z30000(Z30000K1, Z30000K2):
return Z30000K1 + " " + Z30000K2
</syntaxhighlight>
<translate>
<!--T:9-->
Since this is Python, do not forget to indent this line.
<!--T:76-->
If you have followed our advice to [[<tvar name="1">#Practice Test-Driven Development</tvar>|practice TDD]], you will already have a set of tests that you know should work. If that's the case, while building your implementation you can click on the circular arrow in the Tests panel, and see if your implementation passes all of them.
<!--T:11-->
Remember that the runtime has no state. Don’t assume values for global or static variables. If you have further questions about what you can and cannot do in Python, ask on <tvar name="1">[[Wikifunctions:Python implementations]]</tvar>.
=== Code in JavaScript === <!--T:77-->
<!--T:13-->
In this section, we give a concrete example on how to create an Implementation in the form of Code in JavaScript. Say we want to create an implementation for a Function which combines two input strings by putting a space between them, returning the result of that. Let’s assume the ZID of that function is <tvar name="1"><code>Z30000</code></tvar>.
<!--T:15-->
The implementation is defined using the ZID of the function. So are the arguments of the function. So in the case of the function <tvar name="1"><code>Z30000</code></tvar> with its two arguments, the function template should look like this:
</translate>
<syntaxhighlight lang="javascript">
function Z30000( Z30000K1, Z30000K2 ) {
}
</syntaxhighlight>
<translate>
<!--T:78-->
We know that the arguments (<tvar name="1"><code>Z30000K1</code></tvar> and <tvar name="2"><code>Z30000K2</code></tvar>) are Strings, so we can treat them as native strings in JavaScript. Also, the function should return a String. To complete our function, you can then add a line concatenating the input strings, like this:
</translate>
<syntaxhighlight lang="javascript">
function Z30000( Z30000K1, Z30000K2 ) {
return Z30000K1 + " " + Z30000K2;
}
</syntaxhighlight>
<translate>
<!--T:79-->
If you have tests as recommended in the [[<tvar name="1">#Practice Test-Driven Development</tvar>|TDD]] section above, click on the circular arrow in the Tests panel and see if your implementation passes all of them.
<!--T:21-->
Remember that the runtime has no state. Don’t assume values for global or static variables. If you have further questions about what you can and cannot do in JavaScript, ask on <tvar name="1">[[Wikifunctions:JavaScript implementations]]</tvar>.
== Compositions == <!--T:22-->
<!--T:23-->
In this section, we give a concrete example on how to create an Implementation in the form of a composition. Say we want to create an implementation for a Function which combines two input strings by putting a space between them, returning the result of that. Let’s assume the ZID of that function is <tvar name="1"><code>Z30000</code></tvar>.
<!--T:24-->
It is usually a good idea to first think about how to combine existing functions in order to create the desired output. Sometimes this might be trivial, and you can just go ahead with composing functions, but in many cases it is worthwhile to note the desired composition down.
<!--T:25-->
For example, for the given Function, we could use the existing Function <tvar name="1">{{Z|Z10000}}</tvar>. That Function takes two strings and makes one string out of them. But we need to add a space in between. So we first concatenate a space to the end of the first string, and then concatenate the second string to the result of that first concatenation. So our composition could be noted down like this:
</translate>
<syntaxhighlight lang="prolog">
join_strings( join_strings( Z30000K1, " " ), Z30000K2 )
</syntaxhighlight>
<translate>
<!--T:80-->
There are multiple ways to write a composition: notice that the same thing could be accomplished with:
</translate>
<syntaxhighlight lang="prolog">
join_strings( Z30000K1, join_strings( " ", Z30000K2 ) )
</syntaxhighlight>
<translate>
<!--T:81-->
An alternative implementation could also use the existing Function <tvar name="1">{{Z|Z15175}}</tvar>, so your composition could be:
</translate>
<syntaxhighlight lang="prolog">
join_with_separator( Z30000K1, Z30000K2, " " )
</syntaxhighlight>
<translate>
<!--T:82-->
As you can see, there are multiple ways to accomplish this, so take your time and explore the existing functions available in the <tvar name="1">{{ll|Wikifunctions:Catalogue}}</tvar>.
<!--T:83-->
Let's try to create the second example, <tvar name="1"><code>join_strings(Z30000K1, join_strings(" ", Z30000K2))</code></tvar>.
<!--T:84-->
In order to create this:
</translate>
# <translate><!--T:85--> Start adding an implementation by clicking on the "+" button in the "Implementations" table from your Function page.</translate>
# <translate><!--T:86--> Make sure that the option "composition" under "Implementation" is selected.</translate>
# <translate><!--T:87--> Click on the "›" icon or click the "Select Function" link to expand the function details.</translate>
# <translate><!--T:88--> Under "function" search for the name of the outermost function you want to use, which in this example is "join two strings". Then, select the wanted function from the dropdown list.</translate>
# <translate><!--T:89--> You will see two new fields, one for each of the arguments needed for the selected function.</translate>
# <translate><!--T:90--> For the first argument, we want to select the first input to our function:</translate>
## <translate><!--T:91--> Next to "first string", click on the "…" button and select "Argument reference".</translate>
## <translate><!--T:92--> Under "key id" you can now select the first string of your function from the dropdown, which contains all available inputs.</translate>
# <translate><!--T:93--> For the second argument, we want to use the result of another call to "join two strings":</translate>
## <translate><!--T:94--> Next to "second string", click on the "…" button and select "Function call".</translate>
## <translate><!--T:95--> Under "function", search and select the function you want to call, which is again "join two strings".</translate>
## <translate><!--T:96--> For this inner function call, configure the "first string" by simply typing a white space in the text field, and configure the "second string" as you did for step 6: change it using the "…" button to "Argument reference", and then select the second argument in the dropdown.</translate>
<translate>
<!--T:97-->
Your composition is now complete!
<!--T:98-->
You can expand and collapse the details using the chevron buttons to see how it looks. If you already have Tests as recommended in the [[<tvar name="1">#Practice Test-Driven Development</tvar>|TDD]] section above, click on the circular arrow in the Tests panel and see if your implementation passes the tests. Once your composition passes the tests, go ahead and publish it.
</translate>
[[File:Composition implementation expanded.png|frame|center|alt=<translate><!--T:99--> A Wikifunctions composition implementation in its expanded view</translate>|<translate><!--T:100--> A Wikifunctions composition implementation in its expanded view</translate>]]
[[File:Composition implementation collapsed.png|frame|center|alt=<translate><!--T:101--> A Wikifunctions composition implementation in its collapsed view</translate>|<translate><!--T:102--> A Wikifunctions composition implementation in its collapsed view</translate>]]
<translate>
== Wikifunctions error handling == <!--T:103-->
<!--T:104-->
As a Wikifunctions function creator, you might want to warn the user calling your function when something goes wrong in the code, or when their inputs do not fit a certain criteria. For example, if your Function expects a string input to contain a name, you might want to check that the name is not empty and, if it is, show an error message that the person using your Function can understand.
<!--T:105-->
For this purpose, you can use <tvar name="1"><code>Wikifunctions.Error()</code></tvar> from your code implementations or the function <tvar name="2">{{Z|Z851}}</tvar> from your compositions.
<!--T:106-->
In this section you will learn:
</translate>
* <translate><!--T:107--> How to throw errors from both code and composition implementations,</translate>
* <translate><!--T:108--> how to write tests for error cases, and</translate>
* <translate><!--T:109--> how to catch and handle errors thrown by functions that you are using in your compositions.</translate>
<translate>
=== Throwing errors from code implementations === <!--T:110-->
<!--T:111-->
When writing code, both from JavaScript and Python, you can use <tvar name="1"><code>Wikifunctions.Error()</code></tvar> to end the execution with a wanted error.
<!--T:112-->
<tvar name="1"><code>Wikifunctions.Error()</code></tvar> has two parameters:
</translate>
# <translate><!--T:113--> Error type: a string containing the ZID of the error type you want to return.</translate>
# <translate><!--T:114--> Error arguments: a list of string arguments to build the error.</translate>
<translate>
<!--T:115-->
Let's go one by one:
==== Error type ==== <!--T:116-->
<!--T:117-->
An error type is an object that describes a kind of error that could happen in the system. There are a number of built-in error types but you can also build other error types that are more suited to your use case. When using errors, the best idea is to browse through the available error types, which can be explored in [[<tvar name="1">Special:ListObjectsByType/Z50</tvar>|this list]].
<!--T:118-->
If there are no errors that fit your case, create a new one by going to the create page, and selecting "Error type" in the type selector. Then, set the necessary fields:
</translate>
[[File:Error type.png|thumb|alt=<translate><!--T:119--> Error type creation in Wikifunctions</translate>|<translate><!--T:120--> To create new Error type (Z50), edit the label and add the necessary keys.</translate>]]
* <translate><!--T:121--> '''Label''' – This is the main title of the error, which should contain a short but descriptive message. Set the error label on the right-side box titled "About".</translate>
* <translate><!--T:122--> '''Keys''' – Keys contain additional information about what caused the error. For example, if an input had the wrong format, you might want to inform the user of what was the input content when raising the error. To use them in your implementations, keys should be strings. To create a key, click on the "[+]" icon below "keys", select "String" under "value type", and add a label that describes it appropriately, for example "current input". Once you have all the necessary keys, you can Publish your error type and keep the ID of the newly created object.</translate>
<translate>
==== Error arguments ==== <!--T:123-->
<!--T:124-->
Error arguments correspond to the keys of the Error type, and they should provide additional information to understand the error. Error arguments should always be Strings.
==== Using Wikifunctions.Error() ==== <!--T:125-->
<!--T:126-->
Say that you want an error to be thrown when either your first or your second input are empty. You have already created the error type, and the assigned ZID was <tvar name="1"><code>Z30005</code></tvar>. Your error type has two string keys:
</translate>
* <translate><!--T:127--> Input key: contains the key of the failing input</translate>
* <translate><!--T:128--> Input value: contains the current value of the failing input</translate>
<translate>
<!--T:129-->
To raise an error in your JavaScript implementation you should do something like this:
</translate>
<syntaxhighlight lang="javascript">
function Z30000( Z30000K1, Z30000K2 ) {
if ( trim( Z30000K1 ) === '' ) {
// <translate nowrap><!--T:309--> If the first input is empty, raise error <tvar name="1">Z30005</tvar></translate>
// <translate nowrap><!--T:310--> with two string args: [ first input key, first input value ]</translate>
Wikifunctions.Error( 'Z30005', [ "Z30000K1", Z30000K1 ] )
}
if ( trim( Z30000K2 ) === '' ) {
// <translate nowrap><!--T:311--> If the second input is empty, raise error <tvar name="1">Z30005</tvar></translate>
// <translate nowrap><!--T:312--> with two string args: [ second input key, second input value ]</translate>
Wikifunctions.Error( 'Z30005', [ "Z30000K2", Z30000K2 ] )
}
return Z30000K1 + " " + Z30000K2;
}
</syntaxhighlight>
<translate>
<!--T:130-->
To raise an error in your Python implementation you should do something like this:
</translate>
<syntaxhighlight lang="python3">
def Z30000(Z30000K1, Z30000K2):
if Z30000K1.strip() == "":
# <translate nowrap><!--T:313--> If the first input is empty, raise error <tvar name="1">Z30005</tvar></translate>
# <translate nowrap><!--T:314--> with two string args: [ first input key, first input value ]</translate>
Wikifunctions.Error("Z30005", ["Z30000K1", Z30000K1])
if Z30000K2.strip() == "":
# <translate nowrap><!--T:315--> If the second input is empty, raise error <tvar name="1">Z30005</tvar></translate>
# <translate nowrap><!--T:316--> with two string args: [ first input key, first input value ]</translate>
Wikifunctions.Error("Z30005", ["Z30000K2", Z30000K2])
return Z30000K1 + " " + Z30000K2
</syntaxhighlight>
<translate>
<!--T:131-->
Remember that calling <tvar name="1"><code>Wikifunctions.Error()</code></tvar> ends the execution!
=== Throwing errors from compositions === <!--T:132-->
<!--T:133-->
If you are creating a composition implementation, you can throw an error by calling the special function <tvar name="1">{{Z|Z851}}</tvar>.
==== Throw Error function (Z851) ==== <!--T:134-->
<!--T:135-->
The <tvar name="1">{{Z|Z851}}</tvar> function is similar to the <tvar name="2"><code>Wikifunctions.Error()</code></tvar> method and takes two arguments:
</translate>
* <translate><!--T:136--> '''Error type''' – A reference to the Error type you want to raise</translate>
* <translate><!--T:137--> '''Error parameters''' – A list with the arguments to create your Error, which should also be Strings.</translate>
<translate>
==== Using Throw Error ==== <!--T:138-->
<!--T:139-->
Say you want to modify your composition so that it first checks that the arguments are not empty, and raises an error when it finds an empty one. Then, if none of them are empty, it runs the original composition, which is:
</translate>
<syntaxhighlight lang="prolog">
join_with_separator( Z30000K1, Z30000K2, " " )
</syntaxhighlight>
<translate>
<!--T:140-->
To do this, you need to create conditional paths, for which you can use the <tvar name="1">{{Z|Z802}}</tvar> function. Think of it like this:
</translate>
* <translate><!--T:141--> If the first argument is empty, throw an error for the first argument</translate>
* <translate><!--T:142--> Else, proceed to check the second argument</translate>
* <translate><!--T:143--> If the second argument is empty, throw an error for the second argument</translate>
* <translate><!--T:144--> Else, proceed with the success path and return the joint strings with the space separator</translate>
<translate>
<!--T:145-->
Or in functional pseudo code:
</translate>
<syntaxhighlight lang="prolog">
if (
is_empty_string( Z30000K1 ),
throw_error( Z30005, [ "Z30000K1", Z30000K1 ] ),
if(
is_empty_string( Z30000K2 ),
throw_error( Z30005, [ "Z30000K2", Z30000K2 ] ),
join_with_separator( Z30000K1, Z30000K2, " " )
)
)
</syntaxhighlight>
<translate>
<!--T:146-->
Let's create this step by step:
</translate>
# <translate><!--T:147--> Start adding an implementation by clicking on the "+” button in the "Implementations" table from your Function page.</translate>
# <translate><!--T:148--> Make sure that the option "composition" under "Implementation" is selected.</translate>
# <translate><!--T:149--> Click on the "›” icon or click the "Select Function" link to expand the function details.</translate>
# <translate><!--T:150--> Under "function" search and select the outermost function you want to use, which in this case is "if".</translate>
# <translate><!--T:151--> Check the validity of the first argument:</translate>
## <translate><!--T:152--> Next to "condition", click on the "…" button and select "function call"</translate>
## <translate><!--T:153--> Under "function", search and select the function "is empty string"</translate>
## <translate><!--T:154--> Next to "input", click on the "…" button and select "argument reference"</translate>
## <translate><!--T:155--> Under "key id", select the first input (e.g. "first string")</translate>
## <translate><!--T:156--> You can now collapse the "condition" function call if you want, by clicking on the down-chevron next to "condition". You should see something like "f(x) is empty string( → first string )"</translate>
# <translate><!--T:157--> Throw error if the condition is true:</translate>
## <translate><!--T:158--> Next to "then", click on the "…" button and select "function call"</translate>
## <translate><!--T:159--> Under "function", search and select the function "Throw Error"</translate>
## <translate><!--T:160--> Under "error type", search and select your error type (you can directly input the error ID if you know it, e.g. Z30005)</translate>
## <translate><!--T:161--> Under "error parameters", add two items by clicking on the "+" button</translate>
## <translate><!--T:162--> For "Item 1" (offending argument key), set its type to "String" and write the argument identifier (e.g. "first input", or "Z30000K1")</translate>
## <translate><!--T:163--> For "Item 2" (offending argument value), click on the "…" next to "Item 2" and select "argument reference"</translate>
## <translate><!--T:164--> Under "key id", select the first input (e.g. "first string")</translate>
## <translate><!--T:165--> You can now collapse the "then" function call if you want, by clicking on the down-chevron next to "then". You should see something like "f(x) Throw Error( Input was the wrong format, Typed list( Object, "first input", → first string ) )"</translate>
# <translate><!--T:166--> Continue to check the second argument if the first was good:</translate>
## <translate><!--T:167--> Next to "else", click on the "…" button and select "function call"</translate>
## <translate><!--T:168--> Under "function", search and select the function "if"</translate>
## <translate><!--T:169--> Set up "condition" to check the validity of the second argument by following the same process as described in step 5.</translate>
## <translate><!--T:170--> Set up "then" to throw an error for the second argument by following the same process as described in step 6.</translate>
# <translate><!--T:171--> Finally, set up the success path:</translate>
## <translate><!--T:172--> Next to the nested "else", click on the "…" button and select "function call"</translate>
## <translate><!--T:173--> Under "function", search and select the successful function, which in this case can be "join strings with separator"</translate>
## <translate><!--T:174--> Next to "first string", click on the "…" button and set it to "argument reference", then select "first string"</translate>
## <translate><!--T:175--> Next to "second string", click on the "…" button and set it to "argument reference", then select "second string"</translate>
## <translate><!--T:176--> Under "separator" add a space into the text field</translate>
<translate>
<!--T:177-->
The resulting function call should look like this:
</translate>
[[File:Throw error expanded.png|frame|center|alt=<translate><!--T:178--> Wikifunctions composition using Throw Error function</translate>|<translate><!--T:179--> Wikifunctions composition using Throw Error function</translate>]]
[[File:Throw error collapsed.png|frame|center|alt=<translate><!--T:180--> Wikifunctions composition using Throw Error function, in its collapsed view</translate>|<translate><!--T:181--> Wikifunctions composition using Throw Error function, in its collapsed view</translate>]]
<translate>
=== Handling errors in compositions === <!--T:182-->
<!--T:183-->
While it is useful to allow functions to raise expected errors, it is crucial to be able to handle errors in your compositions in order to safely use these functions.
<!--T:184-->
Say you want to create a new function "full name of a person" – we will refer to it with the ZID <tvar name="1"><code>Z30010</code></tvar>. This function should return the full name of a person given a first and last names, but if any of the two fields are empty, it should return the text "Unknown" instead.
<!--T:185-->
You could create a composition using our example function "Join two strings with a space" or <tvar name="1"><code>Z30000</code></tvar> to generate the name. If any of the inputs are empty, you know that <tvar name="1"><code>Z30000</code></tvar> will throw an error of type <tvar name="2"><code>Z30005</code></tvar>. Using the function <tvar name="3">{{Z|Z850}}</tvar> as a wrapper, you can attempt the join operation and intercept a possible error to simply return "Unknown" whenever it occurs.
==== Try-Catch function (Z850) ==== <!--T:186-->
<!--T:187-->
The <tvar name="1">{{Z|Z850}}</tvar> function is built-in with ZID <tvar name="2"><code>Z850</code></tvar> and takes three arguments:
</translate>
* <translate><!--T:188--> '''Function call''' – The initial function call to run. If nothing goes wrong, the response will be the result of this function call.</translate>
* <translate><!--T:189--> '''Error type''' – An error type to catch in case it is thrown during the execution of the first function call.</translate>
* <translate><!--T:190--> '''Error handler''' – A function call that will be run in case the error specified above is caught during the execution of the initial function call. If that happens, the result of the error handler will be the value returned.</translate>
<translate>
==== Using Try-Catch ==== <!--T:191-->
<!--T:192-->
Once we have all the functions for our composition, we can craft it like this:
</translate>
<syntaxhighlight lang="prolog">
try_catch(
join_with_space( Z30010K1, Z30010K2 ),
Z30005,
echo( "Unknown" )
)
</syntaxhighlight>
<translate>
<!--T:193-->
This means that:
</translate>
* <translate><!--T:194--> The "Join two strings with a space" function will be tried with the two inputs and, if everything goes well, the output of this function will be returned</translate>
* <translate><!--T:195--> If any of the inputs are blank, "Join two strings with a space" with raise an error of type <tvar name="1"><code>Z30005</code></tvar></translate>
* <translate><!--T:196--> Our <tvar name="1">{{Z|Z850}}</tvar> will then detect this error and run the <tvar name="2">{{Z|Z801}}</tvar> function to return "Unknown"</translate>
<translate>
<!--T:197-->
Let's create this step by step:
</translate>
# <translate><!--T:198--> Start adding an implementation by clicking on the "+" button in the "Implementations" table from your Function page.</translate>
# <translate><!--T:199--> Make sure that the option "composition" under "Implementation" is selected.</translate>
# <translate><!--T:200--> Click on the "›” icon or click the "Select Function" link to expand the function details.</translate>
# <translate><!--T:201--> Under "function" search and select the outermost function you want to use, which in this case is "Try-Catch".</translate>
# <translate><!--T:202--> Set the main function call:</translate>
## <translate><!--T:203--> Under the field where the "Try-Catch" function is selected, next to the "function call" key, click on the "…" button and select "function call"</translate>
## <translate><!--T:204--> Under "function" search and select the function "join two strings with space"</translate>
## <translate><!--T:205--> Next to "first string", click on the "…" button and select "argument reference", then select the "first name" argument from the dropdown.</translate>
## <translate><!--T:206--> Next to "second string", click on the "…" button and select "argument reference", then select the "second name" argument from the dropdown.</translate>
# <translate><!--T:207--> Select the error to catch:</translate>
## <translate><!--T:208--> Under "error type", search and select "bad string input" – you can search directly by its ZID <tvar name="1"><code>Z30005</code></tvar></translate>
# <translate><!--T:209--> Set the error handler function call:</translate>
## <translate><!--T:210--> Next to "error handler", click on the "…" button and select "function call"</translate>
## <translate><!--T:211--> Under "function", search and select the function "echo"</translate>
## <translate><!--T:212--> Under "input" and "type", search and select the type "String"</translate>
## <translate><!--T:213--> Now, under "input", type "Unknown" in the text field</translate>
<translate>
<!--T:214-->
The resulting function should look like this:
</translate>
[[File:Try catch expanded.png|frame|center|alt=<translate><!--T:215--> Wikifunctions composition using Try-catch function, in expanded mode</translate>|<translate><!--T:216--> Wikifunctions composition using Try-catch function, in expanded mode</translate>]]
[[File:Try catch collapsed.png|frame|center|alt=<translate><!--T:217--> Wikifunctions composition using Try-catch function, in collapsed mode</translate>|<translate><!--T:218--> Wikifunctions composition using Try-catch function, in collapsed mode</translate>]]
<translate>
=== Testing your failure use cases === <!--T:219-->
<!--T:220-->
As we introduced in the above section about [[<tvar name="1">#Practice Test-Driven Development</tvar>|practicing TDD]], it's important to test not only the most common paths, but also the possible edge cases. It is equally important to test failure behavior. In this section we will give you the tools necessary to test that your function fails with a given set of inputs, and that the error thrown is the expected one.
<!--T:221-->
To do that, you will need other two system functions:
==== Is error type (Z852) ==== <!--T:222-->
<!--T:223-->
The <tvar name="1">{{Z|Z852}}</tvar> function is built-in with ZID <tvar name="2"><code>Z852</code></tvar> and takes two arguments:
</translate>
* <translate><!--T:224--> '''Error''' – An <tvar name="1">{{Z|Z5}}</tvar> object, which can be thrown by a failing call. An error instance has a type and a value.</translate>
* <translate><!--T:225--> '''Error type''' – A reference to an <tvar name="1">{{Z|Z50}}</tvar> which will be compared to the type of the Error passed as a first argument. If that's the case, the function will return true.</translate>
<translate>
==== Get error thrown by function call (Z853) ==== <!--T:226-->
<!--T:227-->
The <tvar name="1">{{Z|Z853}}</tvar> function is built-in with ZID <tvar name="2"><code>Z853</code></tvar> and takes one argument:
</translate>
* <translate><!--T:228--> '''Function call''' – A function call which can either return a successful value of any type, or throw an error.</translate>
<translate>
<!--T:229-->
This function returns a <tvar name="1">{{Z|Z882}}</tvar> with a <tvar name="2">{{Z|Z40}}</tvar> in first place and an <tvar name="3">{{Z|Z1}}</tvar> in the second:
</translate>
* <translate><!--T:230--> If the Function call runs successfully and hence does not throw any error, the returned pair will contain False in the first place, and void in the second.</translate>
* <translate><!--T:231--> If the Function call throws an error, the returned pair will contain True in the first place, and the caught error in the second.</translate>
<translate>
<!--T:232-->
To use this function in your compositions, you might need to use the additional functions:
</translate>
* <translate><!--T:233--> <tvar name="1">{{Z|Z821}}</tvar>, and</translate>
* {{Z|Z822}}
<translate>
==== Testing errors ==== <!--T:234-->
<!--T:235-->
Say our target function, "Join two strings with a space" or <tvar name="1"><code>Z30000</code></tvar>, throws an error of type <tvar name="2"><code>Z30005</code></tvar> and we want to test this behavior. To do that we need to:
</translate>
* <translate><!--T:236--> Throw a failing function call</translate>
* <translate><!--T:237--> Get the error using the function <tvar name="1">{{Z|Z853}}</tvar></translate>
* <translate><!--T:238--> Check that the error is the right type with <tvar name="1">{{Z|Z852}}</tvar></translate>
<translate>
<!--T:239-->
Tests have two fields:
</translate>
* <translate><!--T:240--> '''Call''' – A function call that will produce an output with the inputs you want to test. This call will return a value.</translate>
* <translate><!--T:241--> '''Result validation''' – A function call that will validate that the value returned by the call above is the expected one. The first argument of this function call will be automatically assigned to take the return value of the first call.</translate>
<translate>
<!--T:242-->
For step-by-step instructions on how to create tests, see <tvar name="1">{{ll|Wikifunctions:Introduction#Create_tests}}</tvar>.
<!--T:243-->
In our example, we can structure it like this — but this is not the only way!
<!--T:244-->
The call, which will return an <tvar name="1">{{Z|Z5}}</tvar> object:
</translate>
<syntaxhighlight lang="prolog">
error = get_second_element_of_typed_list(
get_error_thrown_by(
join_strings_by_whitespace( "", "not empty" )
)
)
</syntaxhighlight>
<translate>
<!--T:245-->
And the result validation, which will take the <tvar name="1">{{Z|Z5}}</tvar> object as its first argument:
</translate>
<syntaxhighlight lang="prolog">
is_error_type( error, Z30005 )
</syntaxhighlight>
<translate>
<!--T:246-->
Let's do this step by step:
</translate>
# <translate><!--T:247--> Start adding a test by clicking on the "+" button in the "Tests" table from your Function page. The "call" and "result validation" fields already have some functions pre-set, but to test the errors we will need to change them.</translate>
# <translate><!--T:248--> First, let's set the call:</translate>
## <translate><!--T:249--> Under "call", click the "›" chevron button to expand the function call.</translate>
## <translate><!--T:250--> Under "function", edit the field and search and select the function "Get second element of a typed pair"</translate>
## <translate><!--T:251--> Once selected, next to "Typed pair", click on the "…" button and select "function call"</translate>
## <translate><!--T:252--> Under "function", search and select the function "Get error thrown by function call"</translate>
## <translate><!--T:253--> Next to "function call", click on the "…" button and select "function call"</translate>
## <translate><!--T:254--> Under "function", search and select the function "Join two strings with a space" (or by ZID <tvar name="1"><code>Z30000</code></tvar>)</translate>
## <translate><!--T:255--> Now set the inputs so that they cause a failure: at least one of them should be empty.</translate>
## <translate><!--T:256--> You can now collapse your "call" by clicking again on the down-chevron button if you want!</translate>
# <translate><!--T:257--> Next, let's set the result validation:</translate>
## <translate><!--T:258--> Under "result validation", click the "›" chevron button to expand the function call.</translate>
## <translate><!--T:259--> Under "function", edit the field and search and select the function "Is error type"</translate>
## <translate><!--T:260--> Now you will only be asked to configure the second argument. Under "error type", search and select your <tvar name="1"><code>Z30005</code></tvar> error type.</translate>
# <translate><!--T:261--> And you are done! You can now click the circular arrow in the "Implementations" box and you should see green checks.</translate>
<translate>
<!--T:262-->
If everything went right, you can now save your test. It should look like this:
</translate>
[[File:Get error expanded.png|frame|center|alt=<translate><!--T:263--> Testing a failure using Get error and Is error type functions, in expanded mode</translate>|<translate><!--T:264--> Testing a failure using Get error and Is error type functions, in expanded mode</translate>]]
[[File:Get error collapsed.png|frame|center|alt=<translate><!--T:265--> Testing a failure using Get error and Is error type functions, in collapsed mode</translate>|<translate><!--T:266--> Testing a failure using Get error and Is error type functions, in collapsed mode</translate>]]
<translate>
== Debugging your implementations == <!--T:267-->
<!--T:268-->
Sometimes things can go wrong. A function might behave differently than expected or a value might not look quite right. Sometimes implementations are really complex and, because they are run in a sandboxed environment, it can seem really difficult to debug. To help understand what's going on inside a function call, Wikifunctions includes a small set of debugging tools.
<!--T:269-->
These tools don't change the result of a function, but will add extra information to the returned metadata, which you can observe after running the function. You can use <tvar name="1"><code>Wikifunctions.Debug()</code></tvar> from your code implementations or the function <tvar name="2">{{Z|Z854}}</tvar> from your compositions.
<!--T:270-->
In this section you will learn:
</translate>
* <translate><!--T:271--> How to add debug messages from both code and composition implementations,</translate>
* <translate><!--T:272--> how to inspect the metadata manually or via the UI to inspect these logs.</translate>
<translate>
=== Debugging your code implementations === <!--T:273-->
<!--T:274-->
When writing code, both from JavaScript and Python3, you can use <tvar name="1"><code>Wikifunctions.Debug()</code></tvar> to add a message to your debugging log and continue the execution.
<!--T:275-->
<tvar name="1"><code>Wikifunctions.Debug()</code></tvar> has one parameter, which is generally expected to be a string. However, any other object passed as parameter will get directly converted into a string.
<!--T:276-->
If we want to add debug logs to our code implementations for our "Join two strings with a space" example function, we can do, in JavaScript:
</translate>
<syntaxhighlight lang="JavaScript">
function Z30000( Z30000K1, Z30000K2 ) {
if ( trim( Z30000K1 ) === '' ) {
Wikifunctions.Debug( `first input is empty "${ Z30000K1 }"` );
Wikifunctions.Error( 'Z30005', [ "Z30000K1", Z30000K1 ] )
}
if ( trim( Z30000K2 ) === '' ) {
Wikifunctions.Debug( `second input is empty "${ Z30000K2 }"` );
Wikifunctions.Error( 'Z30005', [ "Z30000K2", Z30000K2 ] )
}
Wikifunctions.Debug( "both inputs are fine" );
return Z30000K1 + " " + Z30000K2;
}
</syntaxhighlight>
<translate>
<!--T:277-->
And the same in your Python3 implementation will be:
</translate>
<syntaxhighlight lang="python3">
def Z30000(Z30000K1, Z30000K2):
if Z30000K1.strip() == "":
Wikifunctions.Debug( 'first input is empty "'+Z30000K1+'"' )
Wikifunctions.Error("Z30005", ["Z30000K1", Z30000K1])
if Z30000K2.strip() == "":
Wikifunctions.Debug( 'second input is empty "'+Z30000K2+'"' )
Wikifunctions.Error("Z30005", ["Z30000K2", Z30000K2])
Wikifunctions.Debug( 'both inputs are fine' )
return Z30000K1 + " " + Z30000K2
</syntaxhighlight>
<translate>
<!--T:278-->
This way, no matter what happens, we will be adding one message to your debugging logs:
</translate>
* <translate><!--T:279--> If the function call fails when checking on the first or second input, the result of the execution will be a failure, but it will contain one informative log about what branch caused the failure.</translate>
* <translate><!--T:280--> If the function call succeeds—because both inputs are valid—the function call will return the joined string, but the returned metadata will also contain a debug log.</translate>
<translate>
=== Debugging your compositions === <!--T:281-->
<!--T:282-->
To support debugging compositions, Wikifunctions provides the built-in function <tvar name="1">{{Z|Z854}}</tvar>. This function allows you to attach debug messages to the execution of any function call that generates the final output. The debug logs collected during the evaluation are returned as part of the execution metadata, under the <tvar name="2"><code>executorDebugLogs</code></tvar> key.
==== Add debug log to function call (Z854) ==== <!--T:283-->
<!--T:284-->
The <tvar name="1">{{Z|Z854}}</tvar> function is built-in with ZID <tvar name="2"><code>Z854</code></tvar> and takes two arguments:
</translate>
* <translate><!--T:285--> '''Function call''' – Any composition you want to execute.</translate>
* <translate><!--T:286--> '''Debug log''' – A string message that will be recorded if the given function call is evaluated.</translate>
<translate>
<!--T:287-->
When the wrapped function call runs, the provided message is added to the execution logs. If that function call is not executed, or its execution is not part of the final output, its debug log will not appear in the final result metadata.
<!--T:288-->
You will benefit from this built-in if you want to observe:
</translate>
* <translate><!--T:289--> Which branch of a conditional was executed, or</translate>
* <translate><!--T:290--> the order of evaluation in a composition.</translate>
<translate>
==== Using Add debug log to function call ==== <!--T:291-->
<!--T:292-->
Say that you want to add debug logs to our example function "Join two strings with a space" or <tvar name="1"><code>Z30000</code></tvar>, so that different messages are added to the different possible outcomes. You could use our debugging builtin like this:
</translate>
<syntaxhighlight lang="prolog">
if (
is_empty_string( Z30000K1 ),
add_debug_log( throw_error( Z30005, ... ), 'failed on first input' )
if(
is_empty_string( Z30000K2 ),
add_debug_log( throw_error( Z30005, ... ), 'failed on second input' ),
add_debug_log(
join_with_separator( Z30000K1, Z30000K2, " " ),
'both inputs are ok!'
)
)
)
</syntaxhighlight>
<translate>
<!--T:293-->
This way,
</translate>
* <translate><!--T:294--> when called with an empty first input, the function will return a failed response, and the metadata will contain an <tvar name="1"><code>executorDebugLogs</code></tvar> entry with the "failed on first input" log.</translate>
* <translate><!--T:295--> When called with an empty second input, the call will also fail, but the logged message will be "failed on second input"</translate>
* <translate><!--T:296--> When called with valid inputs, the function will return a successful response, and additionally the metadata will contain "both inputs are ok" in its <tvar name="1"><code>executorDebugLogs</code></tvar> key.</translate>
<translate>
<!--T:297-->
This is the way this composition would look:
</translate>
[[File:Add debug log expanded.png|frame|center|alt=<translate><!--T:298--> Composition implementation using Add debug logs to log all possible execution paths</translate>|<translate><!--T:299--> Composition implementation using Add debug logs to log all possible execution paths</translate>]]
<translate>
=== Accessing execution debug logs === <!--T:300-->
<!--T:301-->
Whether your execution logs are added via <tvar name="1"><code>Wikifunctions.Debug()</code></tvar> or via the <tvar name="2">{{Z|Z854}}</tvar> built-in function, they are returned as part of the response metadata. To see the logs, once you run your function, click on the "Details" button that appears at the bottom of the "Result" section.
<!--T:302-->
The error and debug information will appear at the top of the "Details" dialog.
<!--T:303-->
This is what you would see when running the composition from our previous example with valid and invalid inputs:
</translate>
{| class="wikitable"
| [[File:Execution logs success.png|frameless|center|alt=<translate><!--T:304--> Function metadata dialog for a successful execution with debug logs</translate>]]
| [[File:Execution logs failure.png|frameless|center|alt=<translate><!--T:305--> Function metadata dialog for a failed execution with debug logs</translate>]]
|-
| <translate><!--T:306--> Function metadata dialog for a successful execution: shows no errors, but displays the successful execution log: ''"both inputs are ok!"''</translate>
| <translate><!--T:307--> Function metadata dialog for a failed execution: shows the error information, and the additional execution log for the first failure branch: ''"failed on first input"''</translate>
|}
[[Category:How to create implementations| {{#translation:}}]]
6ruoftj657xo43iuyhofotiyd382679
294469
294441
2026-07-28T08:47:06Z
Jdforrester (WMF)
4
Undid revision [[Special:Diff/294441|294441]] by [[Special:Contributions/Tc14Hd|Tc14Hd]] ([[User talk:Tc14Hd|talk]]); proper nouns retain their capitals.
294469
wikitext
text/x-wiki
<languages/>
<translate>
<!--T:1-->
This page provides a more detailed guide to '''creating implementations''', beyond the overview at <tvar name="1">{{ll|Wikifunctions:Introduction}}</tvar>.
== Types of Implementations == <!--T:47-->
<!--T:48-->
In Wikifunctions, an '''implementation''' can take one of two main forms: '''code''' or '''composition'''. A code implementation directly expresses the function’s logic in any of the available programming languages (currently, Python3 or JavaScript). It’s most useful when the function’s behavior can’t easily be built from existing Wikifunctions, or when precise control over data processing is needed.
<!--T:49-->
A composition implementation, on the other hand, defines the function entirely by combining other existing functions, without writing code. Compositions are easier to understand, reuse, and translate into other languages automatically, but they depend on suitable building blocks already being available and often are less performant. In general, start by checking whether your goal can be achieved through composition; if it can’t, or if performance or fine-grained logic matters, choose a code implementation instead.
<!--T:50-->
There's a third type of implementation: '''built-ins'''. These are run by system-built code, and are not editable. Most likely all pre-defined functions will have a built-in implementation. In such cases, when opening the implementation page, you will see a message stating ''"<tvar name="1">{{int|wikilambda-implementation-selector-none}}</tvar>"''
== Practice Test-Driven Development == <!--T:51-->
<!--T:52-->
'''Test-Driven Development''', or '''TDD''', is a way of creating software where you write tests before you write the actual code. Tests are just a way of understanding what your function is supposed to do by listing examples and how they should work.
<!--T:53-->
In Wikifunctions, writing tests first offers significant benefits. If you are working on an implementation, you can run your code against the existing tests to check that it behaves as expected. This makes it easier to catch errors early before even publishing your implementation. Tests are also a powerful way to describe the function you need. By writing tests, '''you clearly communicate the expected behavior''', and the community can step in and help with the implementation, or create alternative implementations.
<!--T:54-->
Imagine you want to implement a Function that combines two strings with a space in between. A basic test for this might look like:
</translate>
<syntaxhighlight lang="prolog">
join_with_space( "Hello", "world" ) => "Hello world"
</syntaxhighlight>
<translate>
<!--T:55-->
Once you have defined the basic behavior, it's important to '''think about edge cases'''—situations where the inputs are such that you might need some special behavior.
<!--T:56-->
For example, what if your first string ends in a space, or your second string starts with a space? Should the function keep all existing spaces and add another one, or should it return a neatly spaced result with just a single space between the words?
Depending on your requirements, you should build a test for such a case. For example, a test for this edge case could be either one of these — but not both!:
</translate>
<syntaxhighlight lang="prolog">
join_with_space( "Hello ", " world") => "Hello world"
</syntaxhighlight>
<translate>
<!--T:57-->
or ...
</translate>
<syntaxhighlight lang="prolog">
join_with_space( "Hello ", " world") => "Hello world"
</syntaxhighlight>
<translate>
<!--T:58-->
Make sure that all possible special cases are covered by your tests, and once you have them, make sure that they are all connected to the Function by selecting them and clicking "Connect".
== Code implementations == <!--T:59-->
</translate>
[[File:Code implementation.png|thumb|alt=<translate><!--T:60--> Wikifunctions code editor initialized with a function template</translate>|<translate><!--T:61--> When adding a new code implementation, the function template is initialized with the function and argument names</translate>]]
<translate>
<!--T:62-->
When creating an implementation using code, the Wikifunctions UI will set up a code editor with the selected language activated for syntax highlighting and validation. When the function to implement and the programming language are selected, this editor will be set with the correct function template: '''do not remove or edit this'''! Keep your code inside this function signature: if you need auxiliary functions, you can simply declare them inside your top-level function declaration.
=== Using input types in your code === <!--T:63-->
<!--T:64-->
Wikifunctions types <tvar name="1">{{Z|Z6}}</tvar> and <tvar name="2">{{Z|Z40}}</tvar> can be used as if they were native types in both JavaScript and Python3. For example, a String input can be concatenated or a Boolean be directly used in a logical expression. To use other types in your code implementations, you will have to look deeper into the type, figure out if it has a conversion to a native equivalent, and treat it accordingly.
<!--T:65-->
For example, let's say we want to write some Python code that handles an input of type <tvar name="1">{{Z|Z20420}}</tvar>. In the page for this type, let's look at its "type converters to code" and search for a Python one. The converter <tvar name="2">{{Z|Z20424}}</tvar> will be applied to our date input before our code, so looking at "native type" we know that our input will be a Python ''dict'' and looking at the implementation we can see the keys we can expect:
</translate>
<syntaxhighlight lang="python3">
return {
'K1': year,
'K2': month,
'K3': day
}
</syntaxhighlight>
<translate>
<!--T:66-->
When a type doesn't have a converter, you'll have to access its parts directly using its keys. For example, let's assume that your function <tvar name="1"><code>Z30000</code></tvar> has one input <tvar name="2"><code>Z30000K1</code></tvar> of type <tvar name="3">{{Z|Z11}}</tvar>. This type has two keys: <tvar name="4"><code>Z11K1</code></tvar> for the language (itself an object of type <tvar name="5">{{Z|Z60}}</tvar>), and <tvar name="6"><code>Z11K2</code></tvar> for the string value. Similarly, the language object has a key <tvar name="7"><code>Z60K1</code></tvar> for the language code. So, to get a string with the language code and the text, you can write:
</translate>
<syntaxhighlight lang="javascript">
function Z30000( Z30000K1 ) {
// <translate nowrap><!--T:308--> e.g. "en: some text"</translate>
return Z30000K1.Z11K1.Z60K1 + ": " + Z30000K1.Z11K2;
}
</syntaxhighlight>
<translate>
<!--T:67-->
For a quick reference of the available type conversions visit [[<tvar name="1">Special:MyLanguage/Wikifunctions:Execution targets#Default type conversion</tvar>|the default type conversion table]].
=== Returning the right outputs === <!--T:68-->
<!--T:69-->
Similarly to the way you treat inputs, outputs need to match the type specified in the function definition. Some can be treated as simply as native types, so any string output will be converted into a Wikifunctions <tvar name="1">{{Z|Z6}}</tvar> object and any native boolean returned by your implementation will be converted into a Wikifunctions <tvar name="2">{{Z|Z40}}</tvar> object.
<!--T:70-->
Those types that have "type converters from code" will apply the appropriate function to the output, in order to build the required type. Following the example of <tvar name="1">{{Z|Z20420}}</tvar>, the <tvar name="2">{{Z|Z20443}}</tvar> will transform the output from your implementation–a dict with K1, K2 and K3 keys–into its correct ZObject representation.
<!--T:71-->
For types that don't have converters from code, you can carefully build and return the output objects. For example, imagine that our function <tvar name="1"><code>Z30000</code></tvar> takes two string inputs: language code and text, and should return a <tvar name="2">{{Z|Z11}}</tvar> object. You can do this in Python by using the <tvar name="3"><code>ZObject</code></tvar> constructor:
</translate>
<syntaxhighlight lang="python3">
def Z30000(Z30000K1, Z30000K2):
lang_object = ZObject(
{"Z1K1": "Z9", "Z9K1": "Z60"},
Z60K1 = Z30000K1
)
return ZObject(
{"Z1K1": "Z9", "Z9K1": "Z11"},
Z11K1 = lang_object,
Z11K2 = Z30000K2
)
</syntaxhighlight>
<translate>
<!--T:72-->
Or in JavaScript:
</translate>
<syntaxhighlight lang="javascript">
function Z30000( Z30000K1, Z30000K2 ) {
const langObject = new ZObject(
new Map( [ [ "Z60K1", Z30000K1 ] ] ),
{ "Z1K1": "Z9", "Z9K1": "Z60" }
);
const monolingualKeys = new Map( [
[ "Z11K1", langObject ],
[ "Z11K2", Z30000K2 ]
] );
return new ZObject(
monolingualKeys,
{ "Z1K1": "Z9", "Z9K1": "Z11" }
);
}
</syntaxhighlight>
<translate>
<!--T:73-->
You can learn more about the <tvar name="1"><code>ZObject</code></tvar> class and other useful constructors in <tvar name="2">{{ll|Wikifunctions:Execution_targets#Custom_and_non-built-in_type_conversion}}</tvar>
</translate>{{phab|T392750}}<translate>
<!--T:317-->
As of 2026-05, trying to return a list of lists may fail, so you're not able to implement such functions in code.
=== Code in Python === <!--T:74-->
<!--T:3-->
In this section, we give a concrete example on how to create an Implementation in the form of Code in Python. Say we want to create an implementation for a Function which combines two input strings by putting a space between them, returning the result of that. Let’s assume the ZID of that function is Z30000.
<!--T:5-->
The implementation is defined using the ZID of the function. So are the arguments of the function. So in the case of the function Z30000 with its two arguments, the function template should look like this:
</translate>
<syntaxhighlight lang="python3">
def Z30000(Z30000K1, Z30000K2):
</syntaxhighlight>
<translate>
<!--T:75-->
As we described before, we know that the arguments (<tvar name="1"><code>Z30000K1</code></tvar> and <tvar name="2"><code>Z30000K2</code></tvar>) are Strings, so we can treat them as simply as we use native strings in Python. Also, the function should return a String. For our example, we simply return the two arguments concatenated with a space in between:
</translate>
<syntaxhighlight lang="python3">
def Z30000(Z30000K1, Z30000K2):
return Z30000K1 + " " + Z30000K2
</syntaxhighlight>
<translate>
<!--T:9-->
Since this is Python, do not forget to indent this line.
<!--T:76-->
If you have followed our advice to [[<tvar name="1">#Practice Test-Driven Development</tvar>|practice TDD]], you will already have a set of tests that you know should work. If that's the case, while building your implementation you can click on the circular arrow in the Tests panel, and see if your implementation passes all of them.
<!--T:11-->
Remember that the runtime has no state. Don’t assume values for global or static variables. If you have further questions about what you can and cannot do in Python, ask on <tvar name="1">[[Wikifunctions:Python implementations]]</tvar>.
=== Code in JavaScript === <!--T:77-->
<!--T:13-->
In this section, we give a concrete example on how to create an Implementation in the form of Code in JavaScript. Say we want to create an implementation for a Function which combines two input strings by putting a space between them, returning the result of that. Let’s assume the ZID of that function is <tvar name="1"><code>Z30000</code></tvar>.
<!--T:15-->
The implementation is defined using the ZID of the function. So are the arguments of the function. So in the case of the function <tvar name="1"><code>Z30000</code></tvar> with its two arguments, the function template should look like this:
</translate>
<syntaxhighlight lang="javascript">
function Z30000( Z30000K1, Z30000K2 ) {
}
</syntaxhighlight>
<translate>
<!--T:78-->
We know that the arguments (<tvar name="1"><code>Z30000K1</code></tvar> and <tvar name="2"><code>Z30000K2</code></tvar>) are Strings, so we can treat them as native strings in JavaScript. Also, the function should return a String. To complete our function, you can then add a line concatenating the input strings, like this:
</translate>
<syntaxhighlight lang="javascript">
function Z30000( Z30000K1, Z30000K2 ) {
return Z30000K1 + " " + Z30000K2;
}
</syntaxhighlight>
<translate>
<!--T:79-->
If you have tests as recommended in the [[<tvar name="1">#Practice Test-Driven Development</tvar>|TDD]] section above, click on the circular arrow in the Tests panel and see if your implementation passes all of them.
<!--T:21-->
Remember that the runtime has no state. Don’t assume values for global or static variables. If you have further questions about what you can and cannot do in JavaScript, ask on <tvar name="1">[[Wikifunctions:JavaScript implementations]]</tvar>.
== Compositions == <!--T:22-->
<!--T:23-->
In this section, we give a concrete example on how to create an Implementation in the form of a composition. Say we want to create an implementation for a Function which combines two input strings by putting a space between them, returning the result of that. Let’s assume the ZID of that function is <tvar name="1"><code>Z30000</code></tvar>.
<!--T:24-->
It is usually a good idea to first think about how to combine existing functions in order to create the desired output. Sometimes this might be trivial, and you can just go ahead with composing functions, but in many cases it is worthwhile to note the desired composition down.
<!--T:25-->
For example, for the given Function, we could use the existing Function <tvar name="1">{{Z|Z10000}}</tvar>. That Function takes two strings and makes one string out of them. But we need to add a space in between. So we first concatenate a space to the end of the first string, and then concatenate the second string to the result of that first concatenation. So our composition could be noted down like this:
</translate>
<syntaxhighlight lang="prolog">
join_strings( join_strings( Z30000K1, " " ), Z30000K2 )
</syntaxhighlight>
<translate>
<!--T:80-->
There are multiple ways to write a composition: notice that the same thing could be accomplished with:
</translate>
<syntaxhighlight lang="prolog">
join_strings( Z30000K1, join_strings( " ", Z30000K2 ) )
</syntaxhighlight>
<translate>
<!--T:81-->
An alternative implementation could also use the existing Function <tvar name="1">{{Z|Z15175}}</tvar>, so your composition could be:
</translate>
<syntaxhighlight lang="prolog">
join_with_separator( Z30000K1, Z30000K2, " " )
</syntaxhighlight>
<translate>
<!--T:82-->
As you can see, there are multiple ways to accomplish this, so take your time and explore the existing functions available in the <tvar name="1">{{ll|Wikifunctions:Catalogue}}</tvar>.
<!--T:83-->
Let's try to create the second example, <tvar name="1"><code>join_strings(Z30000K1, join_strings(" ", Z30000K2))</code></tvar>.
<!--T:84-->
In order to create this:
</translate>
# <translate><!--T:85--> Start adding an implementation by clicking on the "+" button in the "Implementations" table from your Function page.</translate>
# <translate><!--T:86--> Make sure that the option "composition" under "Implementation" is selected.</translate>
# <translate><!--T:87--> Click on the "›" icon or click the "Select Function" link to expand the function details.</translate>
# <translate><!--T:88--> Under "function" search for the name of the outermost function you want to use, which in this example is "join two strings". Then, select the wanted function from the dropdown list.</translate>
# <translate><!--T:89--> You will see two new fields, one for each of the arguments needed for the selected function.</translate>
# <translate><!--T:90--> For the first argument, we want to select the first input to our function:</translate>
## <translate><!--T:91--> Next to "first string", click on the "…" button and select "Argument reference".</translate>
## <translate><!--T:92--> Under "key id" you can now select the first string of your function from the dropdown, which contains all available inputs.</translate>
# <translate><!--T:93--> For the second argument, we want to use the result of another call to "join two strings":</translate>
## <translate><!--T:94--> Next to "second string", click on the "…" button and select "Function call".</translate>
## <translate><!--T:95--> Under "function", search and select the function you want to call, which is again "join two strings".</translate>
## <translate><!--T:96--> For this inner function call, configure the "first string" by simply typing a white space in the text field, and configure the "second string" as you did for step 6: change it using the "…" button to "Argument reference", and then select the second argument in the dropdown.</translate>
<translate>
<!--T:97-->
Your composition is now complete!
<!--T:98-->
You can expand and collapse the details using the chevron buttons to see how it looks. If you already have Tests as recommended in the [[<tvar name="1">#Practice Test-Driven Development</tvar>|TDD]] section above, click on the circular arrow in the Tests panel and see if your implementation passes the tests. Once your composition passes the tests, go ahead and publish it.
</translate>
[[File:Composition implementation expanded.png|frame|center|alt=<translate><!--T:99--> A Wikifunctions composition implementation in its expanded view</translate>|<translate><!--T:100--> A Wikifunctions composition implementation in its expanded view</translate>]]
[[File:Composition implementation collapsed.png|frame|center|alt=<translate><!--T:101--> A Wikifunctions composition implementation in its collapsed view</translate>|<translate><!--T:102--> A Wikifunctions composition implementation in its collapsed view</translate>]]
<translate>
== Wikifunctions error handling == <!--T:103-->
<!--T:104-->
As a Wikifunctions function creator, you might want to warn the user calling your function when something goes wrong in the code, or when their inputs do not fit a certain criteria. For example, if your Function expects a string input to contain a name, you might want to check that the name is not empty and, if it is, show an error message that the person using your Function can understand.
<!--T:105-->
For this purpose, you can use <tvar name="1"><code>Wikifunctions.Error()</code></tvar> from your code implementations or the function <tvar name="2">{{Z|Z851}}</tvar> from your compositions.
<!--T:106-->
In this section you will learn:
</translate>
* <translate><!--T:107--> How to throw errors from both code and composition implementations,</translate>
* <translate><!--T:108--> how to write tests for error cases, and</translate>
* <translate><!--T:109--> how to catch and handle errors thrown by functions that you are using in your compositions.</translate>
<translate>
=== Throwing errors from code implementations === <!--T:110-->
<!--T:111-->
When writing code, both from JavaScript and Python, you can use <tvar name="1"><code>Wikifunctions.Error()</code></tvar> to end the execution with a wanted error.
<!--T:112-->
<tvar name="1"><code>Wikifunctions.Error()</code></tvar> has two parameters:
</translate>
# <translate><!--T:113--> Error type: a string containing the ZID of the error type you want to return.</translate>
# <translate><!--T:114--> Error arguments: a list of string arguments to build the error.</translate>
<translate>
<!--T:115-->
Let's go one by one:
==== Error type ==== <!--T:116-->
<!--T:117-->
An error type is an object that describes a kind of error that could happen in the system. There are a number of built-in error types but you can also build other error types that are more suited to your use case. When using errors, the best idea is to browse through the available error types, which can be explored in [[<tvar name="1">Special:ListObjectsByType/Z50</tvar>|this list]].
<!--T:118-->
If there are no errors that fit your case, create a new one by going to the create page, and selecting "Error type" in the type selector. Then, set the necessary fields:
</translate>
[[File:Error type.png|thumb|alt=<translate><!--T:119--> Error type creation in Wikifunctions</translate>|<translate><!--T:120--> To create new Error type (Z50), edit the label and add the necessary keys.</translate>]]
* <translate><!--T:121--> '''Label''' – This is the main title of the error, which should contain a short but descriptive message. Set the error label on the right-side box titled "About".</translate>
* <translate><!--T:122--> '''Keys''' – Keys contain additional information about what caused the error. For example, if an input had the wrong format, you might want to inform the user of what was the input content when raising the error. To use them in your implementations, keys should be strings. To create a key, click on the "[+]" icon below "keys", select "String" under "value type", and add a label that describes it appropriately, for example "current input". Once you have all the necessary keys, you can Publish your error type and keep the ID of the newly created object.</translate>
<translate>
==== Error arguments ==== <!--T:123-->
<!--T:124-->
Error arguments correspond to the keys of the Error type, and they should provide additional information to understand the error. Error arguments should always be Strings.
==== Using Wikifunctions.Error() ==== <!--T:125-->
<!--T:126-->
Say that you want an error to be thrown when either your first or your second input are empty. You have already created the error type, and the assigned ZID was <tvar name="1"><code>Z30005</code></tvar>. Your error type has two string keys:
</translate>
* <translate><!--T:127--> Input key: contains the key of the failing input</translate>
* <translate><!--T:128--> Input value: contains the current value of the failing input</translate>
<translate>
<!--T:129-->
To raise an error in your JavaScript implementation you should do something like this:
</translate>
<syntaxhighlight lang="javascript">
function Z30000( Z30000K1, Z30000K2 ) {
if ( trim( Z30000K1 ) === '' ) {
// <translate nowrap><!--T:309--> If the first input is empty, raise error <tvar name="1">Z30005</tvar></translate>
// <translate nowrap><!--T:310--> with two string args: [ first input key, first input value ]</translate>
Wikifunctions.Error( 'Z30005', [ "Z30000K1", Z30000K1 ] )
}
if ( trim( Z30000K2 ) === '' ) {
// <translate nowrap><!--T:311--> If the second input is empty, raise error <tvar name="1">Z30005</tvar></translate>
// <translate nowrap><!--T:312--> with two string args: [ second input key, second input value ]</translate>
Wikifunctions.Error( 'Z30005', [ "Z30000K2", Z30000K2 ] )
}
return Z30000K1 + " " + Z30000K2;
}
</syntaxhighlight>
<translate>
<!--T:130-->
To raise an error in your Python implementation you should do something like this:
</translate>
<syntaxhighlight lang="python3">
def Z30000(Z30000K1, Z30000K2):
if Z30000K1.strip() == "":
# <translate nowrap><!--T:313--> If the first input is empty, raise error <tvar name="1">Z30005</tvar></translate>
# <translate nowrap><!--T:314--> with two string args: [ first input key, first input value ]</translate>
Wikifunctions.Error("Z30005", ["Z30000K1", Z30000K1])
if Z30000K2.strip() == "":
# <translate nowrap><!--T:315--> If the second input is empty, raise error <tvar name="1">Z30005</tvar></translate>
# <translate nowrap><!--T:316--> with two string args: [ first input key, first input value ]</translate>
Wikifunctions.Error("Z30005", ["Z30000K2", Z30000K2])
return Z30000K1 + " " + Z30000K2
</syntaxhighlight>
<translate>
<!--T:131-->
Remember that calling <tvar name="1"><code>Wikifunctions.Error()</code></tvar> ends the execution!
=== Throwing errors from compositions === <!--T:132-->
<!--T:133-->
If you are creating a composition implementation, you can throw an error by calling the special function <tvar name="1">{{Z|Z851}}</tvar>.
==== Throw Error function (Z851) ==== <!--T:134-->
<!--T:135-->
The <tvar name="1">{{Z|Z851}}</tvar> function is similar to the <tvar name="2"><code>Wikifunctions.Error()</code></tvar> method and takes two arguments:
</translate>
* <translate><!--T:136--> '''Error type''' – A reference to the Error type you want to raise</translate>
* <translate><!--T:137--> '''Error parameters''' – A list with the arguments to create your Error, which should also be Strings.</translate>
<translate>
==== Using Throw Error ==== <!--T:138-->
<!--T:139-->
Say you want to modify your composition so that it first checks that the arguments are not empty, and raises an error when it finds an empty one. Then, if none of them are empty, it runs the original composition, which is:
</translate>
<syntaxhighlight lang="prolog">
join_with_separator( Z30000K1, Z30000K2, " " )
</syntaxhighlight>
<translate>
<!--T:140-->
To do this, you need to create conditional paths, for which you can use the <tvar name="1">{{Z|Z802}}</tvar> function. Think of it like this:
</translate>
* <translate><!--T:141--> If the first argument is empty, throw an error for the first argument</translate>
* <translate><!--T:142--> Else, proceed to check the second argument</translate>
* <translate><!--T:143--> If the second argument is empty, throw an error for the second argument</translate>
* <translate><!--T:144--> Else, proceed with the success path and return the joint strings with the space separator</translate>
<translate>
<!--T:145-->
Or in functional pseudo code:
</translate>
<syntaxhighlight lang="prolog">
if (
is_empty_string( Z30000K1 ),
throw_error( Z30005, [ "Z30000K1", Z30000K1 ] ),
if(
is_empty_string( Z30000K2 ),
throw_error( Z30005, [ "Z30000K2", Z30000K2 ] ),
join_with_separator( Z30000K1, Z30000K2, " " )
)
)
</syntaxhighlight>
<translate>
<!--T:146-->
Let's create this step by step:
</translate>
# <translate><!--T:147--> Start adding an implementation by clicking on the "+” button in the "Implementations" table from your Function page.</translate>
# <translate><!--T:148--> Make sure that the option "composition" under "Implementation" is selected.</translate>
# <translate><!--T:149--> Click on the "›” icon or click the "Select Function" link to expand the function details.</translate>
# <translate><!--T:150--> Under "function" search and select the outermost function you want to use, which in this case is "if".</translate>
# <translate><!--T:151--> Check the validity of the first argument:</translate>
## <translate><!--T:152--> Next to "condition", click on the "…" button and select "function call"</translate>
## <translate><!--T:153--> Under "function", search and select the function "is empty string"</translate>
## <translate><!--T:154--> Next to "input", click on the "…" button and select "argument reference"</translate>
## <translate><!--T:155--> Under "key id", select the first input (e.g. "first string")</translate>
## <translate><!--T:156--> You can now collapse the "condition" function call if you want, by clicking on the down-chevron next to "condition". You should see something like "f(x) is empty string( → first string )"</translate>
# <translate><!--T:157--> Throw error if the condition is true:</translate>
## <translate><!--T:158--> Next to "then", click on the "…" button and select "function call"</translate>
## <translate><!--T:159--> Under "function", search and select the function "Throw Error"</translate>
## <translate><!--T:160--> Under "error type", search and select your error type (you can directly input the error ID if you know it, e.g. Z30005)</translate>
## <translate><!--T:161--> Under "error parameters", add two items by clicking on the "+" button</translate>
## <translate><!--T:162--> For "Item 1" (offending argument key), set its type to "String" and write the argument identifier (e.g. "first input", or "Z30000K1")</translate>
## <translate><!--T:163--> For "Item 2" (offending argument value), click on the "…" next to "Item 2" and select "argument reference"</translate>
## <translate><!--T:164--> Under "key id", select the first input (e.g. "first string")</translate>
## <translate><!--T:165--> You can now collapse the "then" function call if you want, by clicking on the down-chevron next to "then". You should see something like "f(x) Throw Error( Input was the wrong format, Typed list( Object, "first input", → first string ) )"</translate>
# <translate><!--T:166--> Continue to check the second argument if the first was good:</translate>
## <translate><!--T:167--> Next to "else", click on the "…" button and select "function call"</translate>
## <translate><!--T:168--> Under "function", search and select the function "if"</translate>
## <translate><!--T:169--> Set up "condition" to check the validity of the second argument by following the same process as described in step 5.</translate>
## <translate><!--T:170--> Set up "then" to throw an error for the second argument by following the same process as described in step 6.</translate>
# <translate><!--T:171--> Finally, set up the success path:</translate>
## <translate><!--T:172--> Next to the nested "else", click on the "…" button and select "function call"</translate>
## <translate><!--T:173--> Under "function", search and select the successful function, which in this case can be "join strings with separator"</translate>
## <translate><!--T:174--> Next to "first string", click on the "…" button and set it to "argument reference", then select "first string"</translate>
## <translate><!--T:175--> Next to "second string", click on the "…" button and set it to "argument reference", then select "second string"</translate>
## <translate><!--T:176--> Under "separator" add a space into the text field</translate>
<translate>
<!--T:177-->
The resulting function call should look like this:
</translate>
[[File:Throw error expanded.png|frame|center|alt=<translate><!--T:178--> Wikifunctions composition using Throw Error function</translate>|<translate><!--T:179--> Wikifunctions composition using Throw Error function</translate>]]
[[File:Throw error collapsed.png|frame|center|alt=<translate><!--T:180--> Wikifunctions composition using Throw Error function, in its collapsed view</translate>|<translate><!--T:181--> Wikifunctions composition using Throw Error function, in its collapsed view</translate>]]
<translate>
=== Handling errors in compositions === <!--T:182-->
<!--T:183-->
While it is useful to allow functions to raise expected errors, it is crucial to be able to handle errors in your compositions in order to safely use these functions.
<!--T:184-->
Say you want to create a new function "full name of a person" – we will refer to it with the ZID <tvar name="1"><code>Z30010</code></tvar>. This function should return the full name of a person given a first and last names, but if any of the two fields are empty, it should return the text "Unknown" instead.
<!--T:185-->
You could create a composition using our example function "Join two strings with a space" or <tvar name="1"><code>Z30000</code></tvar> to generate the name. If any of the inputs are empty, you know that <tvar name="1"><code>Z30000</code></tvar> will throw an error of type <tvar name="2"><code>Z30005</code></tvar>. Using the function <tvar name="3">{{Z|Z850}}</tvar> as a wrapper, you can attempt the join operation and intercept a possible error to simply return "Unknown" whenever it occurs.
==== Try-Catch function (Z850) ==== <!--T:186-->
<!--T:187-->
The <tvar name="1">{{Z|Z850}}</tvar> function is built-in with ZID <tvar name="2"><code>Z850</code></tvar> and takes three arguments:
</translate>
* <translate><!--T:188--> '''Function call''' – The initial function call to run. If nothing goes wrong, the response will be the result of this function call.</translate>
* <translate><!--T:189--> '''Error type''' – An error type to catch in case it is thrown during the execution of the first function call.</translate>
* <translate><!--T:190--> '''Error handler''' – A function call that will be run in case the error specified above is caught during the execution of the initial function call. If that happens, the result of the error handler will be the value returned.</translate>
<translate>
==== Using Try-Catch ==== <!--T:191-->
<!--T:192-->
Once we have all the functions for our composition, we can craft it like this:
</translate>
<syntaxhighlight lang="prolog">
try_catch(
join_with_space( Z30010K1, Z30010K2 ),
Z30005,
echo( "Unknown" )
)
</syntaxhighlight>
<translate>
<!--T:193-->
This means that:
</translate>
* <translate><!--T:194--> The "Join two strings with a space" function will be tried with the two inputs and, if everything goes well, the output of this function will be returned</translate>
* <translate><!--T:195--> If any of the inputs are blank, "Join two strings with a space" with raise an error of type <tvar name="1"><code>Z30005</code></tvar></translate>
* <translate><!--T:196--> Our <tvar name="1">{{Z|Z850}}</tvar> will then detect this error and run the <tvar name="2">{{Z|Z801}}</tvar> function to return "Unknown"</translate>
<translate>
<!--T:197-->
Let's create this step by step:
</translate>
# <translate><!--T:198--> Start adding an implementation by clicking on the "+" button in the "Implementations" table from your Function page.</translate>
# <translate><!--T:199--> Make sure that the option "composition" under "Implementation" is selected.</translate>
# <translate><!--T:200--> Click on the "›” icon or click the "Select Function" link to expand the function details.</translate>
# <translate><!--T:201--> Under "function" search and select the outermost function you want to use, which in this case is "Try-Catch".</translate>
# <translate><!--T:202--> Set the main function call:</translate>
## <translate><!--T:203--> Under the field where the "Try-Catch" function is selected, next to the "function call" key, click on the "…" button and select "function call"</translate>
## <translate><!--T:204--> Under "function" search and select the function "join two strings with space"</translate>
## <translate><!--T:205--> Next to "first string", click on the "…" button and select "argument reference", then select the "first name" argument from the dropdown.</translate>
## <translate><!--T:206--> Next to "second string", click on the "…" button and select "argument reference", then select the "second name" argument from the dropdown.</translate>
# <translate><!--T:207--> Select the error to catch:</translate>
## <translate><!--T:208--> Under "error type", search and select "bad string input" – you can search directly by its ZID <tvar name="1"><code>Z30005</code></tvar></translate>
# <translate><!--T:209--> Set the error handler function call:</translate>
## <translate><!--T:210--> Next to "error handler", click on the "…" button and select "function call"</translate>
## <translate><!--T:211--> Under "function", search and select the function "echo"</translate>
## <translate><!--T:212--> Under "input" and "type", search and select the type "String"</translate>
## <translate><!--T:213--> Now, under "input", type "Unknown" in the text field</translate>
<translate>
<!--T:214-->
The resulting function should look like this:
</translate>
[[File:Try catch expanded.png|frame|center|alt=<translate><!--T:215--> Wikifunctions composition using Try-catch function, in expanded mode</translate>|<translate><!--T:216--> Wikifunctions composition using Try-catch function, in expanded mode</translate>]]
[[File:Try catch collapsed.png|frame|center|alt=<translate><!--T:217--> Wikifunctions composition using Try-catch function, in collapsed mode</translate>|<translate><!--T:218--> Wikifunctions composition using Try-catch function, in collapsed mode</translate>]]
<translate>
=== Testing your failure use cases === <!--T:219-->
<!--T:220-->
As we introduced in the above section about [[<tvar name="1">#Practice Test-Driven Development</tvar>|practicing TDD]], it's important to test not only the most common paths, but also the possible edge cases. It is equally important to test failure behavior. In this section we will give you the tools necessary to test that your function fails with a given set of inputs, and that the error thrown is the expected one.
<!--T:221-->
To do that, you will need other two system functions:
==== Is error type (Z852) ==== <!--T:222-->
<!--T:223-->
The <tvar name="1">{{Z|Z852}}</tvar> function is built-in with ZID <tvar name="2"><code>Z852</code></tvar> and takes two arguments:
</translate>
* <translate><!--T:224--> '''Error''' – An <tvar name="1">{{Z|Z5}}</tvar> object, which can be thrown by a failing call. An error instance has a type and a value.</translate>
* <translate><!--T:225--> '''Error type''' – A reference to an <tvar name="1">{{Z|Z50}}</tvar> which will be compared to the type of the Error passed as a first argument. If that's the case, the function will return true.</translate>
<translate>
==== Get error thrown by function call (Z853) ==== <!--T:226-->
<!--T:227-->
The <tvar name="1">{{Z|Z853}}</tvar> function is built-in with ZID <tvar name="2"><code>Z853</code></tvar> and takes one argument:
</translate>
* <translate><!--T:228--> '''Function call''' – A function call which can either return a successful value of any type, or throw an error.</translate>
<translate>
<!--T:229-->
This function returns a <tvar name="1">{{Z|Z882}}</tvar> with a <tvar name="2">{{Z|Z40}}</tvar> in first place and an <tvar name="3">{{Z|Z1}}</tvar> in the second:
</translate>
* <translate><!--T:230--> If the Function call runs successfully and hence does not throw any error, the returned pair will contain False in the first place, and void in the second.</translate>
* <translate><!--T:231--> If the Function call throws an error, the returned pair will contain True in the first place, and the caught error in the second.</translate>
<translate>
<!--T:232-->
To use this function in your compositions, you might need to use the additional functions:
</translate>
* <translate><!--T:233--> <tvar name="1">{{Z|Z821}}</tvar>, and</translate>
* {{Z|Z822}}
<translate>
==== Testing errors ==== <!--T:234-->
<!--T:235-->
Say our target function, "Join two strings with a space" or <tvar name="1"><code>Z30000</code></tvar>, throws an error of type <tvar name="2"><code>Z30005</code></tvar> and we want to test this behavior. To do that we need to:
</translate>
* <translate><!--T:236--> Throw a failing function call</translate>
* <translate><!--T:237--> Get the error using the function <tvar name="1">{{Z|Z853}}</tvar></translate>
* <translate><!--T:238--> Check that the error is the right type with <tvar name="1">{{Z|Z852}}</tvar></translate>
<translate>
<!--T:239-->
Tests have two fields:
</translate>
* <translate><!--T:240--> '''Call''' – A function call that will produce an output with the inputs you want to test. This call will return a value.</translate>
* <translate><!--T:241--> '''Result validation''' – A function call that will validate that the value returned by the call above is the expected one. The first argument of this function call will be automatically assigned to take the return value of the first call.</translate>
<translate>
<!--T:242-->
For step-by-step instructions on how to create tests, see <tvar name="1">{{ll|Wikifunctions:Introduction#Create_tests}}</tvar>.
<!--T:243-->
In our example, we can structure it like this — but this is not the only way!
<!--T:244-->
The call, which will return an <tvar name="1">{{Z|Z5}}</tvar> object:
</translate>
<syntaxhighlight lang="prolog">
error = get_second_element_of_typed_list(
get_error_thrown_by(
join_strings_by_whitespace( "", "not empty" )
)
)
</syntaxhighlight>
<translate>
<!--T:245-->
And the result validation, which will take the <tvar name="1">{{Z|Z5}}</tvar> object as its first argument:
</translate>
<syntaxhighlight lang="prolog">
is_error_type( error, Z30005 )
</syntaxhighlight>
<translate>
<!--T:246-->
Let's do this step by step:
</translate>
# <translate><!--T:247--> Start adding a test by clicking on the "+" button in the "Tests" table from your Function page. The "call" and "result validation" fields already have some functions pre-set, but to test the errors we will need to change them.</translate>
# <translate><!--T:248--> First, let's set the call:</translate>
## <translate><!--T:249--> Under "call", click the "›" chevron button to expand the function call.</translate>
## <translate><!--T:250--> Under "function", edit the field and search and select the function "Get second element of a typed pair"</translate>
## <translate><!--T:251--> Once selected, next to "Typed pair", click on the "…" button and select "function call"</translate>
## <translate><!--T:252--> Under "function", search and select the function "Get error thrown by function call"</translate>
## <translate><!--T:253--> Next to "function call", click on the "…" button and select "function call"</translate>
## <translate><!--T:254--> Under "function", search and select the function "Join two strings with a space" (or by ZID <tvar name="1"><code>Z30000</code></tvar>)</translate>
## <translate><!--T:255--> Now set the inputs so that they cause a failure: at least one of them should be empty.</translate>
## <translate><!--T:256--> You can now collapse your "call" by clicking again on the down-chevron button if you want!</translate>
# <translate><!--T:257--> Next, let's set the result validation:</translate>
## <translate><!--T:258--> Under "result validation", click the "›" chevron button to expand the function call.</translate>
## <translate><!--T:259--> Under "function", edit the field and search and select the function "Is error type"</translate>
## <translate><!--T:260--> Now you will only be asked to configure the second argument. Under "error type", search and select your <tvar name="1"><code>Z30005</code></tvar> error type.</translate>
# <translate><!--T:261--> And you are done! You can now click the circular arrow in the "Implementations" box and you should see green checks.</translate>
<translate>
<!--T:262-->
If everything went right, you can now save your test. It should look like this:
</translate>
[[File:Get error expanded.png|frame|center|alt=<translate><!--T:263--> Testing a failure using Get error and Is error type functions, in expanded mode</translate>|<translate><!--T:264--> Testing a failure using Get error and Is error type functions, in expanded mode</translate>]]
[[File:Get error collapsed.png|frame|center|alt=<translate><!--T:265--> Testing a failure using Get error and Is error type functions, in collapsed mode</translate>|<translate><!--T:266--> Testing a failure using Get error and Is error type functions, in collapsed mode</translate>]]
<translate>
== Debugging your implementations == <!--T:267-->
<!--T:268-->
Sometimes things can go wrong. A function might behave differently than expected or a value might not look quite right. Sometimes implementations are really complex and, because they are run in a sandboxed environment, it can seem really difficult to debug. To help understand what's going on inside a function call, Wikifunctions includes a small set of debugging tools.
<!--T:269-->
These tools don't change the result of a function, but will add extra information to the returned metadata, which you can observe after running the function. You can use <tvar name="1"><code>Wikifunctions.Debug()</code></tvar> from your code implementations or the function <tvar name="2">{{Z|Z854}}</tvar> from your compositions.
<!--T:270-->
In this section you will learn:
</translate>
* <translate><!--T:271--> How to add debug messages from both code and composition implementations,</translate>
* <translate><!--T:272--> how to inspect the metadata manually or via the UI to inspect these logs.</translate>
<translate>
=== Debugging your code implementations === <!--T:273-->
<!--T:274-->
When writing code, both from JavaScript and Python3, you can use <tvar name="1"><code>Wikifunctions.Debug()</code></tvar> to add a message to your debugging log and continue the execution.
<!--T:275-->
<tvar name="1"><code>Wikifunctions.Debug()</code></tvar> has one parameter, which is generally expected to be a string. However, any other object passed as parameter will get directly converted into a string.
<!--T:276-->
If we want to add debug logs to our code implementations for our "Join two strings with a space" example function, we can do, in JavaScript:
</translate>
<syntaxhighlight lang="JavaScript">
function Z30000( Z30000K1, Z30000K2 ) {
if ( trim( Z30000K1 ) === '' ) {
Wikifunctions.Debug( `first input is empty "${ Z30000K1 }"` );
Wikifunctions.Error( 'Z30005', [ "Z30000K1", Z30000K1 ] )
}
if ( trim( Z30000K2 ) === '' ) {
Wikifunctions.Debug( `second input is empty "${ Z30000K2 }"` );
Wikifunctions.Error( 'Z30005', [ "Z30000K2", Z30000K2 ] )
}
Wikifunctions.Debug( "both inputs are fine" );
return Z30000K1 + " " + Z30000K2;
}
</syntaxhighlight>
<translate>
<!--T:277-->
And the same in your Python3 implementation will be:
</translate>
<syntaxhighlight lang="python3">
def Z30000(Z30000K1, Z30000K2):
if Z30000K1.strip() == "":
Wikifunctions.Debug( 'first input is empty "'+Z30000K1+'"' )
Wikifunctions.Error("Z30005", ["Z30000K1", Z30000K1])
if Z30000K2.strip() == "":
Wikifunctions.Debug( 'second input is empty "'+Z30000K2+'"' )
Wikifunctions.Error("Z30005", ["Z30000K2", Z30000K2])
Wikifunctions.Debug( 'both inputs are fine' )
return Z30000K1 + " " + Z30000K2
</syntaxhighlight>
<translate>
<!--T:278-->
This way, no matter what happens, we will be adding one message to your debugging logs:
</translate>
* <translate><!--T:279--> If the function call fails when checking on the first or second input, the result of the execution will be a failure, but it will contain one informative log about what branch caused the failure.</translate>
* <translate><!--T:280--> If the function call succeeds—because both inputs are valid—the function call will return the joined string, but the returned metadata will also contain a debug log.</translate>
<translate>
=== Debugging your compositions === <!--T:281-->
<!--T:282-->
To support debugging compositions, Wikifunctions provides the built-in function <tvar name="1">{{Z|Z854}}</tvar>. This function allows you to attach debug messages to the execution of any function call that generates the final output. The debug logs collected during the evaluation are returned as part of the execution metadata, under the <tvar name="2"><code>executorDebugLogs</code></tvar> key.
==== Add debug log to function call (Z854) ==== <!--T:283-->
<!--T:284-->
The <tvar name="1">{{Z|Z854}}</tvar> function is built-in with ZID <tvar name="2"><code>Z854</code></tvar> and takes two arguments:
</translate>
* <translate><!--T:285--> '''Function call''' – Any composition you want to execute.</translate>
* <translate><!--T:286--> '''Debug log''' – A string message that will be recorded if the given function call is evaluated.</translate>
<translate>
<!--T:287-->
When the wrapped function call runs, the provided message is added to the execution logs. If that function call is not executed, or its execution is not part of the final output, its debug log will not appear in the final result metadata.
<!--T:288-->
You will benefit from this built-in if you want to observe:
</translate>
* <translate><!--T:289--> Which branch of a conditional was executed, or</translate>
* <translate><!--T:290--> the order of evaluation in a composition.</translate>
<translate>
==== Using Add debug log to function call ==== <!--T:291-->
<!--T:292-->
Say that you want to add debug logs to our example function "Join two strings with a space" or <tvar name="1"><code>Z30000</code></tvar>, so that different messages are added to the different possible outcomes. You could use our debugging builtin like this:
</translate>
<syntaxhighlight lang="prolog">
if (
is_empty_string( Z30000K1 ),
add_debug_log( throw_error( Z30005, ... ), 'failed on first input' )
if(
is_empty_string( Z30000K2 ),
add_debug_log( throw_error( Z30005, ... ), 'failed on second input' ),
add_debug_log(
join_with_separator( Z30000K1, Z30000K2, " " ),
'both inputs are ok!'
)
)
)
</syntaxhighlight>
<translate>
<!--T:293-->
This way,
</translate>
* <translate><!--T:294--> when called with an empty first input, the function will return a failed response, and the metadata will contain an <tvar name="1"><code>executorDebugLogs</code></tvar> entry with the "failed on first input" log.</translate>
* <translate><!--T:295--> When called with an empty second input, the call will also fail, but the logged message will be "failed on second input"</translate>
* <translate><!--T:296--> When called with valid inputs, the function will return a successful response, and additionally the metadata will contain "both inputs are ok" in its <tvar name="1"><code>executorDebugLogs</code></tvar> key.</translate>
<translate>
<!--T:297-->
This is the way this composition would look:
</translate>
[[File:Add debug log expanded.png|frame|center|alt=<translate><!--T:298--> Composition implementation using Add debug logs to log all possible execution paths</translate>|<translate><!--T:299--> Composition implementation using Add debug logs to log all possible execution paths</translate>]]
<translate>
=== Accessing execution debug logs === <!--T:300-->
<!--T:301-->
Whether your execution logs are added via <tvar name="1"><code>Wikifunctions.Debug()</code></tvar> or via the <tvar name="2">{{Z|Z854}}</tvar> built-in function, they are returned as part of the response metadata. To see the logs, once you run your function, click on the "Details" button that appears at the bottom of the "Result" section.
<!--T:302-->
The error and debug information will appear at the top of the "Details" dialog.
<!--T:303-->
This is what you would see when running the composition from our previous example with valid and invalid inputs:
</translate>
{| class="wikitable"
| [[File:Execution logs success.png|frameless|center|alt=<translate><!--T:304--> Function metadata dialog for a successful execution with debug logs</translate>]]
| [[File:Execution logs failure.png|frameless|center|alt=<translate><!--T:305--> Function metadata dialog for a failed execution with debug logs</translate>]]
|-
| <translate><!--T:306--> Function metadata dialog for a successful execution: shows no errors, but displays the successful execution log: ''"both inputs are ok!"''</translate>
| <translate><!--T:307--> Function metadata dialog for a failed execution: shows the error information, and the additional execution log for the first failure branch: ''"failed on first input"''</translate>
|}
[[Category:How to create implementations| {{#translation:}}]]
4if9rizxwo4q0t2b4kkjbee9aa8bdz9
Wikifunctions:Project chat
4
1184
294442
294030
2026-07-28T02:37:48Z
YoshiRulz
10156
Mark threads for archival
294442
wikitext
text/x-wiki
{{shortcut|[[WF:CHAT]]|[[WF:PC]]|[[WF:VP]]}}
__NEWSECTIONLINK__
[[Category:Help]] <!-- please do not remove this line -->
Welcome to the Project chat, a place to discuss any and all aspects of Wikifunctions: the project itself, policy and proposals, individual data items, technical issues, etc.
Other places to find help:
* [[Wikifunctions:Administrators' noticeboard]]
* [[Wikifunctions:Report a technical problem]]
* [[Wikifunctions:FAQ]]
{{Autoarchive resolved section
|age = 1
|archive = ((FULLPAGENAME))/Archive/((year))/((month:##))
|timeout=30
}}
{{Archives|{{#tag:div|<br />{{Flatlist|{{Special:PrefixIndex/WF:Project chat/Archive/|stripprefix=1|hideredirects=1}}
|class=mw-collapsible-content|style=font-size:92%;}}|class="mw-collapsible mw-collapsible-toggle mw-collapsed"}}
|prefix=WF:Project chat/Archive/
}}
== July 2026 Wikimedia Café meetups regarding Wikimedia governance and options for reform ==
<div class="border-box" style="background-color: var(--background-color-warning-subtle, #f8eaba); max-width: 875px; padding: 5px; border: 1px solid black; margin: 5px; color: var(--clr-dark)">
<div class="box" style="float:left; padding-top: 10px; padding-right: 10px; padding-left: 10px; padding-bottom: 10px;">[[File:Wikimedia Café logo in plain SVG format.svg|60px|alt=The logo for the Wikimedia Café]]</div>
Hello! There will be two '''[https://meta.wikimedia.org/wiki/Wikimedia_Caf%C3%A9 Wikimedia Café]''' discussion opportunities in July. Both sessions will focus on Wikimedia governance, including possible follow-ups to the [https://meta.wikimedia.org/wiki/Movement_Charter Movement Charter] and options for reform. Participants may attend either or both Café sessions.
This month, to deconflict the Café meetups from Wikimania, the meetups will be held one day later than usual.
#'''26 July 2026 15:00 UTC''' ([https://zonestamp.toolforge.org/1785078000 timestamp converter]), at a time friendly to the Americas, Africa, and Europe
#'''27 July 2026 03:00 UTC''' ([https://zonestamp.toolforge.org/1785121200 timestamp converter]), at a time friendly to Asia and the Pacific
Please see the Café page for more information, including [https://meta.wikimedia.org/wiki/Wikimedia_Caf%C3%A9#How_to_attend_the_session how to register]!
<br />
[[File:Buntstifte Eberhard Faber crop 64h.jpg|860px|alt=cropped image of colored pencils]]</div>
<span style="white-space:nowrap;">[[User:Pine|<span style="color:#01796f; text-shadow:#00BFFF 0 0 1.0em">↠Pine</span>]] [[User talk:Pine|<span style="color:DeepSkyBlue">(<b style="color:#FFDF00;text-shadow:#FFDF00 0 0 1.0em">✉</b>)</span>]]</span> 03:31, 13 July 2026 (UTC)
{{Section resolved|1=[[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 02:37, 28 July 2026 (UTC)}}
==Discussion at [[Meta:Requests_for_comment/The_future_of_Abstract_Wikipedia|Meta Requests for comment: The future of Abstract Wikipedia]]==
[[File:Symbol watching blue lashes high contrast.svg|20px|link=|alt=]] You are invited to join the discussion at [[Meta:Requests_for_comment/The_future_of_Abstract_Wikipedia|Meta Requests for comment: The future of Abstract Wikipedia]]. <!-- Template:Please see --> [[User:Qcne|Qcne]] ([[User talk:Qcne|talk]]) 11:35, 14 July 2026 (UTC)
:Isn't it too early for this RFC? The project was released for public preview in March-only four months ago—and it has already demonstrated its technical feasibility. Furthermore, some of the examples cited in the RFC depend entirely on specific function choices. Since this is a community-built project, contributors should remain free to use the functions they prefer. Personally, I feel the repetition of words in every sentence simply shows that active contributors currently view this issue as a low priority. After all, fixing it would require rewriting sentences to use pronouns, or correcting them with a comma-separated list of occupations. [[User:Jsamwrites|John Samuel]] 13:37, 14 July 2026 (UTC)
::Thanks John. The project was approved in 2020 and WMF expected the first articles in 2023 so it is not four months old. Integration into language Wikipedias is planned for Q1 of the current annual plan. If it is too early to evaluate, it is too early to ship. I'd welcome your thoughts on the Meta RfC itself. [[User:Qcne|Qcne]] ([[User talk:Qcne|talk]]) 13:40, 14 July 2026 (UTC)
:<s>Speaking of "too early", [[abstract:Project:Response to English Wikipedia criticism]] has ~3 days left, so I'll hold off on commenting until then.</s> But on a first reading, I can see some of the same misunderstandings repeated. You could delete most of the text above your three proposals and get the same effect.<!--
--><br>edit: Yep, misunderstandings all the way down (the page). I've left [[meta:Requests_for_comment/The_future_of_Abstract_Wikipedia#c-YoshiRulz-20260716205200-Grapesurgeon-20260714140300|a brief comment]] since all my points had already been made by others. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 20:56, 16 July 2026 (UTC)
== Wikifunctions & Abstract Wikipedia Newsletter #257: Beyond syntactic tables ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-07-16|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we discuss syntactic tables and news in Types, we show some community blogposts and tools, we remind you of the Wikifunctions and Abstract Wikipedia events at Wikimania 2026, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
We also remind you that in the next weeks these newsletter reminders will be paused, and that they will resume in mid-August.
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 10:55, 17 July 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30755600 -->
== Update on Blockly editor ==
In case anyone is actually using [[User:YoshiRulz/Blockly|my external editor based on Blockly]] (there's no analytics so I have no idea): I cleared out my "papercut" backlog yesterday, fixing bugs, making exporting smoother, and adding more blocks necessary for NLG functions. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:35, 20 July 2026 (UTC)
:Great! I'll try it out now. [[User:So9q|So9q]] ([[User talk:So9q|talk]]) 18:15, 21 July 2026 (UTC)
== Building reproducible, computable phenotypes on WikiFunctions ==
Hello all! Very new to WikiFunctions, more involved in the Wikidata side of things, but I was thinking that WikiFunctions may be a great space for computable phenotypes. These are structures (lists of rules) used in medicine to determine if a person has or doesn't have a particular condition (type 2 diabetes, asthma, etc.). There is a constant issue in my field of recreating the wheel for these phenotypes and very few resources where they are openly available (there was PheKB but it isn't updated often and only contains natural language descriptions of the phenotypes and often no code or other information to reproduce). My thought process was that an algorithm for a computable phenotype would essentially be a list of synthetic (fake) patients with certain characteristics, and then the computable phenotype would be run, and it would return a list of patients who have that condition. The major use case would be allowing individuals to download these code snippets to increase general reproducibility in medical care and studies overall. Would it be possible to utilize WikiFunctions for this? [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 08:25, 23 July 2026 (UTC)
:({{Q|25203551}})<br>What system(s) are currently in use for doing such computations? Python scripts?<br>{{SITENAME}} currently does not cater to offline execution, so I imagine it wouldn't be suitable for medical ''practice'' where there are strict data protections. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 11:35, 23 July 2026 (UTC)
::Currently this involves something along the lines of a structured series of descriptors that make up the computable phenotype (ICD codes, RxNorm codes, lab test levels, age ranges, etc.), a fake "patient" (or list of "fake" patients) as input, and the patients that fit the computable phenotype criteria as output. In terms of systems currently in use, they are kind of-- everything. SQL, Java, SPARQL, Python, Perl, Ruby, etc. Currently I develop mostly using Python, so I would likely use that for implementation. And of course, yes, they would not be suitable for practice due to protections! For an example of an algorithm that I think could be useful to adapt, see: https://phekb.org/phenotype/type-2-diabetes-mellitus. [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 12:02, 23 July 2026 (UTC)
:::So your reference is a decision tree, and are each of the "questions" evaluated by looking up a property/element in the input? That could be translated into a Function relatively easily. Most examples I can think of are NLG-related, like [[Z36580]], but there are [[WF:Catalogue/Wikidata_operations#Real_life_information_retrieved_using_Wikidata|some simpler Functions]] which extract parts of a given Wikidata Item, and [[Z34840]] works with the representations of numbers. What is the structure of the input EMR? [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 13:54, 23 July 2026 (UTC)
::::Precisely-- I think most of these would be simple implementations, but good to generally have archived as most of them become lost media(-ish). Best-case, the input EMR would be a set of synthetic patients using the OMOP CDM (https://ohdsi.github.io/CommonDataModel/), the most common open data model in the space. It does mean it wouldn't be completely system agnostic, but it would most in the majority of situations. [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 14:07, 23 July 2026 (UTC)
:::::If you decide to go ahead with this, you should [[WF:Type_proposals#Templates|propose a new type]] since it looks like a simple [[Z881|list]] or [[Z883|dict]] won't cover it. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:31, 23 July 2026 (UTC)
:Did you look much into the possibility of encoding these in Wikidata somehow? Have [[d:WD:WikiProject Medicine]] / [[meta:Wiki Project Med]] investigated it before? [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:31, 23 July 2026 (UTC)
::I don't think so-- it could potentially be somewhat encoded in Wikidata-- main issue is that it uses a list of codes which Wikidata sometimes attaches to the same entity in ways that don't match up 1-to-1. And there may be drift in those codes over time, so the list of codes would have to be hard-coded. But there should generally be a way to link from the WikiFunction to Wikidata right? [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 22:06, 23 July 2026 (UTC)
:::Linking ''to WF'' from an Item on Wikidata [[d:WD:Wikifunctions/Development|is an open question]], beyond sitelinks of course. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 12:02, 24 July 2026 (UTC)
::::So maybe creating functions here makes the most sense for the time being? I want to make sure I'm following the rules as intended but would that be okay for now? (Creating one or two and then presenting to the community to see if things look acceptable?) [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 06:46, 25 July 2026 (UTC)
:::::Yes, you're welcome to try! --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 06:53, 25 July 2026 (UTC)
== OWID's replacement for Extension:Graph ==
[[meta:OWID Gadget]] / [[c:Module:Owidslider]]<br>I'm currently watching the Wikimania talk "[https://wikimedia.eventyay.com/wm/wikimania2026/talk/CMPQQJ/ Bringing Interactive Graphs from Our World in Data to Wikipedia]" going through the latest iteration of their interactive graphs, and they seem to be in a good position now, including <abbr title="internationalisation">i18n</abbr>. I think it would be nice to use them in Abstract Wikipedia articles as well, but it's implemented as a Lua module + JS gadget. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 13:00, 23 July 2026 (UTC)
== Friday's talks at Wikimania ==
{{noping|Mahir256}} just finished his talk/workshop "[https://wikimedia.eventyay.com/wm/wikimania2026/talk/HYTQBF From Abstract Content to Concrete Text with Wikidata Lexemes]" on {{Q|136813071}}. You can [https://www.youtube.com/watch?v=hvpOFVZhgnE&t=24370s watch it on YouTube here] (though there were audio problems, '''volume warning''').
<br>The workshop immediately before that was "[https://wikimedia.eventyay.com/wm/wikimania2026/talk/TWGKWB/ Making indigenous languages ready for Wikifunctions]". Hello to anyone who came from there! [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:58, 24 July 2026 (UTC)
:@[[User:YoshiRulz|YoshiRulz]]: Thanks for highlighting these! There's also today's workshop [https://www.youtube.com/watch?v=nCVeXaAk77c on YouTube] about 90 minutes after the start of the stream, though that might not be as interesting to watch. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 13:28, 25 July 2026 (UTC)
== Error with [[Z37683]] ==
Hello,
I am a newcomer and trying to use {{Z|Z37683}}, which apparently fails in English and succeeds in Swedish (see the test cases I added).
If I understand correctly, the English sub-function {{Z|Z36185}} is wrong because it expects {{Z|Z6001}} and should expect {{Z|Z6091}} (which is what the Swedish sub-function {{Z|Z37686}} expects). Am I right? If so, can I change it myself, or is it necessary to ask someone who has more rights than me? [[User:Seudo|Seudo]] ([[User talk:Seudo|talk]]) 12:39, 25 July 2026 (UTC)
:Fixed, sorry about that. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 12:57, 25 July 2026 (UTC)
::Thanks, it works now! [[User:Seudo|Seudo]] ([[User talk:Seudo|talk]]) 13:05, 25 July 2026 (UTC)
{{Section resolved|1=[[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 02:37, 28 July 2026 (UTC)}}
== Connecting tests and implementations ==
Is there any documentation about how to connect tests or implementations as a functioneer? I did so by editing the raw JSON, after looking at diffs of other users having connected tests and implementations. Maybe there is even an easier way to do so? --[[User:Volvox|Volvox]] ([[User talk:Volvox|talk]]) 14:10, 25 July 2026 (UTC)
:Huh? You check the box and then click <q>{{int:wikilambda-function-details-table-approve}}</q>. It's documented on [[WF:Introduction#Connect_an_Implementation_or_Test_to_a_Function|WF:Introduction]] FWIW. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:02, 25 July 2026 (UTC)
::Oof, thank you, and sorry for missing that ^^ --[[User:Volvox|Volvox]] ([[User talk:Volvox|talk]]) 20:28, 25 July 2026 (UTC)
{{Section resolved|1=[[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 02:37, 28 July 2026 (UTC)}}
rmej2dpi599jxa70cfwsnm9plsz6oea
294470
294442
2026-07-28T11:06:04Z
Superraptor123
96092
/* Building reproducible, computable phenotypes on WikiFunctions */ Reply
294470
wikitext
text/x-wiki
{{shortcut|[[WF:CHAT]]|[[WF:PC]]|[[WF:VP]]}}
__NEWSECTIONLINK__
[[Category:Help]] <!-- please do not remove this line -->
Welcome to the Project chat, a place to discuss any and all aspects of Wikifunctions: the project itself, policy and proposals, individual data items, technical issues, etc.
Other places to find help:
* [[Wikifunctions:Administrators' noticeboard]]
* [[Wikifunctions:Report a technical problem]]
* [[Wikifunctions:FAQ]]
{{Autoarchive resolved section
|age = 1
|archive = ((FULLPAGENAME))/Archive/((year))/((month:##))
|timeout=30
}}
{{Archives|{{#tag:div|<br />{{Flatlist|{{Special:PrefixIndex/WF:Project chat/Archive/|stripprefix=1|hideredirects=1}}
|class=mw-collapsible-content|style=font-size:92%;}}|class="mw-collapsible mw-collapsible-toggle mw-collapsed"}}
|prefix=WF:Project chat/Archive/
}}
== July 2026 Wikimedia Café meetups regarding Wikimedia governance and options for reform ==
<div class="border-box" style="background-color: var(--background-color-warning-subtle, #f8eaba); max-width: 875px; padding: 5px; border: 1px solid black; margin: 5px; color: var(--clr-dark)">
<div class="box" style="float:left; padding-top: 10px; padding-right: 10px; padding-left: 10px; padding-bottom: 10px;">[[File:Wikimedia Café logo in plain SVG format.svg|60px|alt=The logo for the Wikimedia Café]]</div>
Hello! There will be two '''[https://meta.wikimedia.org/wiki/Wikimedia_Caf%C3%A9 Wikimedia Café]''' discussion opportunities in July. Both sessions will focus on Wikimedia governance, including possible follow-ups to the [https://meta.wikimedia.org/wiki/Movement_Charter Movement Charter] and options for reform. Participants may attend either or both Café sessions.
This month, to deconflict the Café meetups from Wikimania, the meetups will be held one day later than usual.
#'''26 July 2026 15:00 UTC''' ([https://zonestamp.toolforge.org/1785078000 timestamp converter]), at a time friendly to the Americas, Africa, and Europe
#'''27 July 2026 03:00 UTC''' ([https://zonestamp.toolforge.org/1785121200 timestamp converter]), at a time friendly to Asia and the Pacific
Please see the Café page for more information, including [https://meta.wikimedia.org/wiki/Wikimedia_Caf%C3%A9#How_to_attend_the_session how to register]!
<br />
[[File:Buntstifte Eberhard Faber crop 64h.jpg|860px|alt=cropped image of colored pencils]]</div>
<span style="white-space:nowrap;">[[User:Pine|<span style="color:#01796f; text-shadow:#00BFFF 0 0 1.0em">↠Pine</span>]] [[User talk:Pine|<span style="color:DeepSkyBlue">(<b style="color:#FFDF00;text-shadow:#FFDF00 0 0 1.0em">✉</b>)</span>]]</span> 03:31, 13 July 2026 (UTC)
{{Section resolved|1=[[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 02:37, 28 July 2026 (UTC)}}
==Discussion at [[Meta:Requests_for_comment/The_future_of_Abstract_Wikipedia|Meta Requests for comment: The future of Abstract Wikipedia]]==
[[File:Symbol watching blue lashes high contrast.svg|20px|link=|alt=]] You are invited to join the discussion at [[Meta:Requests_for_comment/The_future_of_Abstract_Wikipedia|Meta Requests for comment: The future of Abstract Wikipedia]]. <!-- Template:Please see --> [[User:Qcne|Qcne]] ([[User talk:Qcne|talk]]) 11:35, 14 July 2026 (UTC)
:Isn't it too early for this RFC? The project was released for public preview in March-only four months ago—and it has already demonstrated its technical feasibility. Furthermore, some of the examples cited in the RFC depend entirely on specific function choices. Since this is a community-built project, contributors should remain free to use the functions they prefer. Personally, I feel the repetition of words in every sentence simply shows that active contributors currently view this issue as a low priority. After all, fixing it would require rewriting sentences to use pronouns, or correcting them with a comma-separated list of occupations. [[User:Jsamwrites|John Samuel]] 13:37, 14 July 2026 (UTC)
::Thanks John. The project was approved in 2020 and WMF expected the first articles in 2023 so it is not four months old. Integration into language Wikipedias is planned for Q1 of the current annual plan. If it is too early to evaluate, it is too early to ship. I'd welcome your thoughts on the Meta RfC itself. [[User:Qcne|Qcne]] ([[User talk:Qcne|talk]]) 13:40, 14 July 2026 (UTC)
:<s>Speaking of "too early", [[abstract:Project:Response to English Wikipedia criticism]] has ~3 days left, so I'll hold off on commenting until then.</s> But on a first reading, I can see some of the same misunderstandings repeated. You could delete most of the text above your three proposals and get the same effect.<!--
--><br>edit: Yep, misunderstandings all the way down (the page). I've left [[meta:Requests_for_comment/The_future_of_Abstract_Wikipedia#c-YoshiRulz-20260716205200-Grapesurgeon-20260714140300|a brief comment]] since all my points had already been made by others. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 20:56, 16 July 2026 (UTC)
== Wikifunctions & Abstract Wikipedia Newsletter #257: Beyond syntactic tables ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-07-16|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we discuss syntactic tables and news in Types, we show some community blogposts and tools, we remind you of the Wikifunctions and Abstract Wikipedia events at Wikimania 2026, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
We also remind you that in the next weeks these newsletter reminders will be paused, and that they will resume in mid-August.
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 10:55, 17 July 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30755600 -->
== Update on Blockly editor ==
In case anyone is actually using [[User:YoshiRulz/Blockly|my external editor based on Blockly]] (there's no analytics so I have no idea): I cleared out my "papercut" backlog yesterday, fixing bugs, making exporting smoother, and adding more blocks necessary for NLG functions. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:35, 20 July 2026 (UTC)
:Great! I'll try it out now. [[User:So9q|So9q]] ([[User talk:So9q|talk]]) 18:15, 21 July 2026 (UTC)
== Building reproducible, computable phenotypes on WikiFunctions ==
Hello all! Very new to WikiFunctions, more involved in the Wikidata side of things, but I was thinking that WikiFunctions may be a great space for computable phenotypes. These are structures (lists of rules) used in medicine to determine if a person has or doesn't have a particular condition (type 2 diabetes, asthma, etc.). There is a constant issue in my field of recreating the wheel for these phenotypes and very few resources where they are openly available (there was PheKB but it isn't updated often and only contains natural language descriptions of the phenotypes and often no code or other information to reproduce). My thought process was that an algorithm for a computable phenotype would essentially be a list of synthetic (fake) patients with certain characteristics, and then the computable phenotype would be run, and it would return a list of patients who have that condition. The major use case would be allowing individuals to download these code snippets to increase general reproducibility in medical care and studies overall. Would it be possible to utilize WikiFunctions for this? [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 08:25, 23 July 2026 (UTC)
:({{Q|25203551}})<br>What system(s) are currently in use for doing such computations? Python scripts?<br>{{SITENAME}} currently does not cater to offline execution, so I imagine it wouldn't be suitable for medical ''practice'' where there are strict data protections. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 11:35, 23 July 2026 (UTC)
::Currently this involves something along the lines of a structured series of descriptors that make up the computable phenotype (ICD codes, RxNorm codes, lab test levels, age ranges, etc.), a fake "patient" (or list of "fake" patients) as input, and the patients that fit the computable phenotype criteria as output. In terms of systems currently in use, they are kind of-- everything. SQL, Java, SPARQL, Python, Perl, Ruby, etc. Currently I develop mostly using Python, so I would likely use that for implementation. And of course, yes, they would not be suitable for practice due to protections! For an example of an algorithm that I think could be useful to adapt, see: https://phekb.org/phenotype/type-2-diabetes-mellitus. [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 12:02, 23 July 2026 (UTC)
:::So your reference is a decision tree, and are each of the "questions" evaluated by looking up a property/element in the input? That could be translated into a Function relatively easily. Most examples I can think of are NLG-related, like [[Z36580]], but there are [[WF:Catalogue/Wikidata_operations#Real_life_information_retrieved_using_Wikidata|some simpler Functions]] which extract parts of a given Wikidata Item, and [[Z34840]] works with the representations of numbers. What is the structure of the input EMR? [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 13:54, 23 July 2026 (UTC)
::::Precisely-- I think most of these would be simple implementations, but good to generally have archived as most of them become lost media(-ish). Best-case, the input EMR would be a set of synthetic patients using the OMOP CDM (https://ohdsi.github.io/CommonDataModel/), the most common open data model in the space. It does mean it wouldn't be completely system agnostic, but it would most in the majority of situations. [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 14:07, 23 July 2026 (UTC)
:::::If you decide to go ahead with this, you should [[WF:Type_proposals#Templates|propose a new type]] since it looks like a simple [[Z881|list]] or [[Z883|dict]] won't cover it. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:31, 23 July 2026 (UTC)
:Did you look much into the possibility of encoding these in Wikidata somehow? Have [[d:WD:WikiProject Medicine]] / [[meta:Wiki Project Med]] investigated it before? [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:31, 23 July 2026 (UTC)
::I don't think so-- it could potentially be somewhat encoded in Wikidata-- main issue is that it uses a list of codes which Wikidata sometimes attaches to the same entity in ways that don't match up 1-to-1. And there may be drift in those codes over time, so the list of codes would have to be hard-coded. But there should generally be a way to link from the WikiFunction to Wikidata right? [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 22:06, 23 July 2026 (UTC)
:::Linking ''to WF'' from an Item on Wikidata [[d:WD:Wikifunctions/Development|is an open question]], beyond sitelinks of course. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 12:02, 24 July 2026 (UTC)
::::So maybe creating functions here makes the most sense for the time being? I want to make sure I'm following the rules as intended but would that be okay for now? (Creating one or two and then presenting to the community to see if things look acceptable?) [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 06:46, 25 July 2026 (UTC)
:::::Yes, you're welcome to try! --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 06:53, 25 July 2026 (UTC)
::::::Thanks! I've been thinking about this a little bit-- in terms of objects, it may make sense to have an object that is an OMOP CDM database (which is allowed by their licensing, as the database schema is open source). But I'm wondering if it should instead be an extension of a more generic database object? [[User:Superraptor123|Superraptor123]] ([[User talk:Superraptor123|talk]]) 11:06, 28 July 2026 (UTC)
== OWID's replacement for Extension:Graph ==
[[meta:OWID Gadget]] / [[c:Module:Owidslider]]<br>I'm currently watching the Wikimania talk "[https://wikimedia.eventyay.com/wm/wikimania2026/talk/CMPQQJ/ Bringing Interactive Graphs from Our World in Data to Wikipedia]" going through the latest iteration of their interactive graphs, and they seem to be in a good position now, including <abbr title="internationalisation">i18n</abbr>. I think it would be nice to use them in Abstract Wikipedia articles as well, but it's implemented as a Lua module + JS gadget. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 13:00, 23 July 2026 (UTC)
== Friday's talks at Wikimania ==
{{noping|Mahir256}} just finished his talk/workshop "[https://wikimedia.eventyay.com/wm/wikimania2026/talk/HYTQBF From Abstract Content to Concrete Text with Wikidata Lexemes]" on {{Q|136813071}}. You can [https://www.youtube.com/watch?v=hvpOFVZhgnE&t=24370s watch it on YouTube here] (though there were audio problems, '''volume warning''').
<br>The workshop immediately before that was "[https://wikimedia.eventyay.com/wm/wikimania2026/talk/TWGKWB/ Making indigenous languages ready for Wikifunctions]". Hello to anyone who came from there! [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:58, 24 July 2026 (UTC)
:@[[User:YoshiRulz|YoshiRulz]]: Thanks for highlighting these! There's also today's workshop [https://www.youtube.com/watch?v=nCVeXaAk77c on YouTube] about 90 minutes after the start of the stream, though that might not be as interesting to watch. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 13:28, 25 July 2026 (UTC)
== Error with [[Z37683]] ==
Hello,
I am a newcomer and trying to use {{Z|Z37683}}, which apparently fails in English and succeeds in Swedish (see the test cases I added).
If I understand correctly, the English sub-function {{Z|Z36185}} is wrong because it expects {{Z|Z6001}} and should expect {{Z|Z6091}} (which is what the Swedish sub-function {{Z|Z37686}} expects). Am I right? If so, can I change it myself, or is it necessary to ask someone who has more rights than me? [[User:Seudo|Seudo]] ([[User talk:Seudo|talk]]) 12:39, 25 July 2026 (UTC)
:Fixed, sorry about that. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 12:57, 25 July 2026 (UTC)
::Thanks, it works now! [[User:Seudo|Seudo]] ([[User talk:Seudo|talk]]) 13:05, 25 July 2026 (UTC)
{{Section resolved|1=[[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 02:37, 28 July 2026 (UTC)}}
== Connecting tests and implementations ==
Is there any documentation about how to connect tests or implementations as a functioneer? I did so by editing the raw JSON, after looking at diffs of other users having connected tests and implementations. Maybe there is even an easier way to do so? --[[User:Volvox|Volvox]] ([[User talk:Volvox|talk]]) 14:10, 25 July 2026 (UTC)
:Huh? You check the box and then click <q>{{int:wikilambda-function-details-table-approve}}</q>. It's documented on [[WF:Introduction#Connect_an_Implementation_or_Test_to_a_Function|WF:Introduction]] FWIW. [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 15:02, 25 July 2026 (UTC)
::Oof, thank you, and sorry for missing that ^^ --[[User:Volvox|Volvox]] ([[User talk:Volvox|talk]]) 20:28, 25 July 2026 (UTC)
{{Section resolved|1=[[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 02:37, 28 July 2026 (UTC)}}
90lxhigws3k3b2pob7kkmc22pqc54in
Wikifunctions:Requests for deletions
4
1696
294444
294350
2026-07-28T03:08:08Z
SpBot
978
archive 2 sections: 2 to [[Wikifunctions:Requests for deletions/Archive/2026/07]] (after section [[Wikifunctions:Requests for deletions/Archive/2026/07#Z38204_and_Z38211|Z38204_and_Z38211]]) - previous edit: [[:User:Jdforrester (WMF)|Jdforrester (WMF)]], 2026-07-27 08:40
294444
wikitext
text/x-wiki
<noinclude>__NEWSECTIONLINK__ __FORCETOC__</noinclude>
Functions or implementations or tests which do not work properly, do not meet notability criteria or are duplicates of another object can be deleted. Please nominate items for deletions under the "Requests for deletion" section below.
If it is obvious vandalism, just report it in [[Wikifunctions:Report vandalism]], or ping an [[Special:ListAdmins|administrator]]. Contact can also be made with an administrator on [https://t.me/Wikifunctions Telegram] or IRC [irc://irc.libera.chat/wikipedia-abstract #wikipedia-abstract].
If it is a predefined object (its ZID is less than 10000), please see [[Wikifunctions:Report a technical problem]].
{{Autoarchive resolved section
|age = 1
|archive = ((FULLPAGENAME))/Archive/((year))/((month:##))
|level = 2
}}
{{Archives|{{Special:PrefixIndex/Wikifunctions:Requests for deletions/Archive/|stripprefix=1}}}}
= Requests for deletion =
== [[Z13148]] ==
Can we delete this one, now that we have [[Z19460]]? --[[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 19:52, 26 July 2026 (UTC)
:@[[User:Ameisenigel|Ameisenigel]]: They're for different Types, and the latter is collared. @[[User:FenrisAureus|FenrisAureus]] created it, and @[[User:99of9|99of9]] [https://www.wikifunctions.org/wiki/Z13148?diff=prev&oldid=108053 added "(!)"] presumably to tell people not to use it, both in 2024; perhaps they might have views. [[User:Jdforrester (WMF)|Jdforrester (WMF)]] ([[User talk:Jdforrester (WMF)|talk]]) 08:40, 27 July 2026 (UTC)
m7m6n0vlzx7b1gd50zv70zzjo6gjgn0
Wikifunctions:Requests for user groups
4
3790
294422
290566
2026-07-27T21:16:10Z
Ameisenigel
44
Mark section resolved ([[User:Bunnypranav/sectionResolved.js|sectionResolved]])
294422
wikitext
text/x-wiki
{{shortcut|[[WF:RFG]]|[[WF:PERM]]|[[WF:RFUG]]}}
This is the place to request specific user groups:
{{ombox
| image = [[File:Echo user-rights icon.svg|60x60px|alt=|link=]]
| text = '''How to make a request'''
# Edit the section for the user group you wish to request
# Copy the following and ''append'' it to the text-area:
## Requests without required discussion: <code><nowiki>{{subst:rfg|1={{subst:REVISIONUSER}}|2=reason ~~~~}}</nowiki></code>
## Functioneer requests (required 48-hour discussion): <code><nowiki>{{subst:rfg|3=1|length=2 days|1={{subst:REVISIONUSER}}|2=reason ~~~~}}</nowiki></code>
## Requests with required 1-week discussion: <code><nowiki>{{subst:rfg|3=1|1={{subst:REVISIONUSER}}|2=reason ~~~~}}</nowiki></code>
# Replace <code>reason</code> with a rationale based on the guidelines specified for the user group
}}
: ''Archived requests can be found at [[Wikifunctions:Requests for user groups/Archive]]''
{{Autoarchive resolved section
| age = 1
| archive = ((FULLPAGENAME))/Archive/((year))/((month:##))
| level = 3
}}
== Functioneer ==
{{see also|Wikifunctions:Functioneers}}
=== TheAhasan ===
:{{UL2.0
|1=TheAhasan
|contributions=1
|deletedcontributions=1
|editcount=1
|blocklog=1
|groups=1
|rights=1
|centralauth=1
}}
: I would like to request Functioneer rights. I have created several functions and test cases on Wikifunctions and am continuing to learn how the project works. Having the Functioneer permission would help me contribute more effectively by managing implementations and test cases as my contributions grow. I understand the responsibilities associated with this user right and will use it carefully in accordance with Wikifunctions policies. Thank you for your consideration.[[User:TheAhasan|TheAhasan]] ([[User talk:TheAhasan|talk]]) 05:02, 11 July 2026 (UTC)
::{{s}} Well done on a good start to Wikifunctions. I support your application to be a Functioneer. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 05:46, 13 July 2026 (UTC)
:{{done}} [[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 21:16, 27 July 2026 (UTC)
{{Section resolved|1=[[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 21:16, 27 July 2026 (UTC)}}
=== Balû ===
:{{UL2.0
|1=Balû
|contributions=1
|deletedcontributions=1
|editcount=1
|blocklog=1
|groups=1
|rights=1
|centralauth=1
}}
:I've created several implementations and tests, and I've also defined a new function ({{Z|37533}}). Unfortunately, I can't test it because I can't link the implementation. --[[User:Balû|Balû]] ([[User talk:Balû|talk]]) 05:42, 13 July 2026 (UTC)
::{{s}} Well done on a good start to Wikifunctions. I support your application to be a Functioneer. I've also connected your implementation and tests. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 05:47, 13 July 2026 (UTC)
== Autopatroller ==
{{See also|Wikifunctions:Autopatrollers}}
== Administrator ==
{{see also|Wikifunctions:Administrators}}
== Interface administrator ==
{{see also|Wikifunctions:Interface administrators}}
== Translation administrator ==
{{see also|Wikifunctions:Translation administrators}}
== Bureaucrat ==
{{see also|Wikifunctions:Bureaucrats}}
== Miscellaneous requests ==
== See also ==
* [[Wikifunctions:User groups]]
** [[mw:Help:Wikifunctions/User rights]] for additional context about functioneers, maintainers, sysops, and bureaucrats
[[Category:User groups|*]]
hlebeapb0n4oqqjg2uhok925kw0p0y4
294423
294422
2026-07-27T21:17:25Z
Ameisenigel
44
Mark section resolved ([[User:Bunnypranav/sectionResolved.js|sectionResolved]])
294423
wikitext
text/x-wiki
{{shortcut|[[WF:RFG]]|[[WF:PERM]]|[[WF:RFUG]]}}
This is the place to request specific user groups:
{{ombox
| image = [[File:Echo user-rights icon.svg|60x60px|alt=|link=]]
| text = '''How to make a request'''
# Edit the section for the user group you wish to request
# Copy the following and ''append'' it to the text-area:
## Requests without required discussion: <code><nowiki>{{subst:rfg|1={{subst:REVISIONUSER}}|2=reason ~~~~}}</nowiki></code>
## Functioneer requests (required 48-hour discussion): <code><nowiki>{{subst:rfg|3=1|length=2 days|1={{subst:REVISIONUSER}}|2=reason ~~~~}}</nowiki></code>
## Requests with required 1-week discussion: <code><nowiki>{{subst:rfg|3=1|1={{subst:REVISIONUSER}}|2=reason ~~~~}}</nowiki></code>
# Replace <code>reason</code> with a rationale based on the guidelines specified for the user group
}}
: ''Archived requests can be found at [[Wikifunctions:Requests for user groups/Archive]]''
{{Autoarchive resolved section
| age = 1
| archive = ((FULLPAGENAME))/Archive/((year))/((month:##))
| level = 3
}}
== Functioneer ==
{{see also|Wikifunctions:Functioneers}}
=== TheAhasan ===
:{{UL2.0
|1=TheAhasan
|contributions=1
|deletedcontributions=1
|editcount=1
|blocklog=1
|groups=1
|rights=1
|centralauth=1
}}
: I would like to request Functioneer rights. I have created several functions and test cases on Wikifunctions and am continuing to learn how the project works. Having the Functioneer permission would help me contribute more effectively by managing implementations and test cases as my contributions grow. I understand the responsibilities associated with this user right and will use it carefully in accordance with Wikifunctions policies. Thank you for your consideration.[[User:TheAhasan|TheAhasan]] ([[User talk:TheAhasan|talk]]) 05:02, 11 July 2026 (UTC)
::{{s}} Well done on a good start to Wikifunctions. I support your application to be a Functioneer. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 05:46, 13 July 2026 (UTC)
:{{done}} [[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 21:16, 27 July 2026 (UTC)
{{Section resolved|1=[[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 21:16, 27 July 2026 (UTC)}}
=== Balû ===
:{{UL2.0
|1=Balû
|contributions=1
|deletedcontributions=1
|editcount=1
|blocklog=1
|groups=1
|rights=1
|centralauth=1
}}
:I've created several implementations and tests, and I've also defined a new function ({{Z|37533}}). Unfortunately, I can't test it because I can't link the implementation. --[[User:Balû|Balû]] ([[User talk:Balû|talk]]) 05:42, 13 July 2026 (UTC)
::{{s}} Well done on a good start to Wikifunctions. I support your application to be a Functioneer. I've also connected your implementation and tests. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 05:47, 13 July 2026 (UTC)
:{{done}} [[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 21:17, 27 July 2026 (UTC)
{{Section resolved|1=[[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 21:17, 27 July 2026 (UTC)}}
== Autopatroller ==
{{See also|Wikifunctions:Autopatrollers}}
== Administrator ==
{{see also|Wikifunctions:Administrators}}
== Interface administrator ==
{{see also|Wikifunctions:Interface administrators}}
== Translation administrator ==
{{see also|Wikifunctions:Translation administrators}}
== Bureaucrat ==
{{see also|Wikifunctions:Bureaucrats}}
== Miscellaneous requests ==
== See also ==
* [[Wikifunctions:User groups]]
** [[mw:Help:Wikifunctions/User rights]] for additional context about functioneers, maintainers, sysops, and bureaucrats
[[Category:User groups|*]]
l1b1ha4eqipnltvrm5p3dvlbf5t9cs5
User:99of9
2
11573
294368
291308
2026-07-27T13:35:23Z
99of9
1622
/* Useful tools */ Special:FunctionUsage
294368
wikitext
text/x-wiki
{{#babel:en|en-gb|de-1|fr-1}}
If you need to know about me, see my Wikidata/Commons/en-wiki userpages. If you like puzzles, this is my character: {{#function:Z15631|U+990f9}}.
I've been contributing for {{#function:Z20744|22/08/2023|{{#time:j/n/Y}}}} days.
Functions of special interest
* [[Z10919]]
* [[Z10938]]
* [[Z11089]]
* [[Z11208]] [https://hub-paws.wmcloud.org/user/99of9/lab/tree/SMILES.ipynb PAWS analysis]
* [[Z13419]]
==Queries==
*Items with multiple Lexemes linked to them as Item for this sense: [https://w.wiki/DxaQ], break out details of one example: [https://w.wiki/DxaV]
*English adjectives [https://w.wiki/GBYj] to try to categorise for {{Z|Z19512}}
*Poorly set "in timezone" values [https://w.wiki/GJU7]
*Timezone long-list [https://w.wiki/GJVy]
==Not currently working==
*[[Z27518]] (lexeme only without fallback)
==Sandboxes==
* [[User:99of9/sandbox]]
* [[User:99of9/Sandbox]]
* [[User:99of9/Sandbox2]]
==Useful tools==
*[https://noc.wikimedia.org/conf/highlight.php?file=dblists/wikifunctionsclient.dblist WMF projects using WF]
*[[Wikifunctions:Projects_using_Wikifunctions]]
* [https://williamavery.github.io/formcheck/ Formcheck] for Wikidata lexemes. Seems to only use functions from beta at the moment.
* [[:wikidata:Wikidata:Wikidata_Lexeme_Forms]]
* [https://www.wikifunctions.org/w/index.php?search=Z14K3+eval&title=Special:Search&profile=advanced&fulltext=1&ns0=1 search for eval]
* [https://abstract-data.toolforge.org/ Abstract Data Tool] by David S
* [[Special:FunctionUsage]]
[[Category:Pages with Wikifunctions calls]]
j1h9goxphenhb1xd2a907qwkglxqevg
Z46
0
24712
294396
260357
2026-07-27T17:54:53Z
Autom
448
+sv
294396
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z46"
},
"Z2K2": {
"Z1K1": "Z4",
"Z4K1": "Z46",
"Z4K2": [
"Z3",
{
"Z1K1": "Z3",
"Z3K1": "Z46",
"Z3K2": "Z46K1",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "identity"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "tożsamość"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "זהות"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Identität"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "identité"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "identità"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "पहचान"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "identita"
}
]
},
"Z3K4": {
"Z1K1": "Z40",
"Z40K1": "Z41"
}
},
{
"Z1K1": "Z3",
"Z3K1": "Z4",
"Z3K2": "Z46K2",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "typ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "סוג"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Typ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "प्रकार"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "typ"
}
]
},
"Z3K4": {
"Z1K1": "Z40",
"Z40K1": "Z42"
}
},
{
"Z1K1": "Z3",
"Z3K1": "Z16",
"Z3K2": "Z46K3",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "converter"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "konwerter"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "ממיר הסוג לקוד"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Umwandler"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "convertisseur"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "convertitore"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "रूपांतरक"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "převodník"
}
]
},
"Z3K4": {
"Z1K1": "Z40",
"Z40K1": "Z42"
}
},
{
"Z1K1": "Z3",
"Z3K1": "Z6",
"Z3K2": "Z46K4",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "native type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "typ natywny dla języka"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "nativer Typ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "type natif"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "tipo nativo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "आंतरिक प्रकार"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "nativní typ"
}
]
},
"Z3K4": {
"Z1K1": "Z40",
"Z40K1": "Z42"
}
}
],
"Z4K3": "Z161",
"Z4K7": [
"Z46"
],
"Z4K8": [
"Z64"
]
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Type converter to code"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "ধরন থেকে কোডে রূপান্তরকারী"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "Konwerter typu na kod źródłowy"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Typumwandler in Code"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "Konverter tipe ke kode"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1014",
"Z11K2": "Pịnye ihe ntụgharị ka ọ bụrụ koodu"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "ממירי הסוג לקוד"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1381",
"Z11K2": "Conversor de tipo para código"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "convertisseur de type en code"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1332",
"Z11K2": "Перетворювач типів у код"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "Convertor de tip în cod"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "Конвертер типа в код"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "Convertitore del tipo in codice"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "प्रकार से कोड रूपांतरक"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "Typový převodník do kódu"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "Typomvandlare till kod"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "A function that converts an instance of a Wikifunctions type into one understood by a programming language"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "একটি ফাংশন, যা একটি উইকিফাংশন ধরনকে কোড দ্বারা যেন বোঝা যায় এমনভাবে রূপান্তর করে"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "Funkcja, która konwertuje obiekt Wikifunkcji na odpowiedni dla danego środowiska wykonawczego"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "wandelt einen Wikifunctions-Typ in einen Typ um, der von einer Programmiersprache verstanden wird"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "Fungsi yang mengubah suatu contoh dari tipe Wikifunctions menjadi tipe yang dapat dipahami bahasa pemrograman"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1014",
"Z11K2": "Ọrụ na-agbanwe ihe atụ nke ụdị Wikifunctions ka ọ bụrụ nke asụsụ mmemme aghọtara."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1381",
"Z11K2": "Uma função que converte uma instância de um tipo da Wikifunções em uma compreendida por uma linguagem de programação"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "une fonction qui convertit une instance d'un type Wikifunctions en une instance comprise par un langage de programmation"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1332",
"Z11K2": "Функція, яка перетворює екземпляр типу Wikifunctions у тип, зрозумілий мовою програмування"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "O funcție care convertește o instanță a unui tip Wikifuncții într-unul înțeles de un limbaj de programare"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "Una fozione che converte un'istanza di un tipo di Wikifunctions in uno comprensibile da un linguaggio di programmazione"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "एक फ़ंक्शन जो किसी विकिफ़ंक्शन्स के प्रकार के एक उदाहरण को एक प्रोग्रामिंग भाषा द्वारा समझे जाने वाले प्रकार में बदलता है।"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "Funkce, která převádí instanci typu ve Wikifunkcích na hodnotu typu v programovacím jazyce"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "en funktion som omvandlar Datatyper på Wikifunktions till en datatyp som kan förstås av programspråk"
}
]
}
}
42ahqiftxwj5w9i8ocxhoz74xyss03u
Z64
0
24713
294397
260353
2026-07-27T17:56:20Z
Autom
448
+sv
294397
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z64"
},
"Z2K2": {
"Z1K1": "Z4",
"Z4K1": "Z64",
"Z4K2": [
"Z3",
{
"Z1K1": "Z3",
"Z3K1": "Z64",
"Z3K2": "Z64K1",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "identity"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "tożsamość"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "זהות"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Identität"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "identité"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "itentità"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "identita"
}
]
},
"Z3K4": {
"Z1K1": "Z40",
"Z40K1": "Z41"
}
},
{
"Z1K1": "Z3",
"Z3K1": "Z4",
"Z3K2": "Z64K2",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "typ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "סוג"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Typ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "typ"
}
]
},
"Z3K4": {
"Z1K1": "Z40",
"Z40K1": "Z42"
}
},
{
"Z1K1": "Z3",
"Z3K1": "Z16",
"Z3K2": "Z64K3",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "converter"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "konwerter"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "ממיר הסוג מהקוד"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Umwandler"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "convertisseur"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "convertitore"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "převodník"
}
]
},
"Z3K4": {
"Z1K1": "Z40",
"Z40K1": "Z42"
}
},
{
"Z1K1": "Z3",
"Z3K1": "Z6",
"Z3K2": "Z64K4",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "native type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "typ natywny"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "nativer Typ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "type natif"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "tipo nativo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "nativní typ"
}
]
},
"Z3K4": {
"Z1K1": "Z40",
"Z40K1": "Z42"
}
}
],
"Z4K3": "Z161",
"Z4K7": [
"Z46"
],
"Z4K8": [
"Z64"
]
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Type converter from code"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "Konwerter typu z kodu źródłowego"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Typumwandler aus Code"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "কোড থেকে ধরণ রূপান্তরকারী"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "Konverter tipe dari kode"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1014",
"Z11K2": "Pịnye ihe ntụgharị site na koodu"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1186",
"Z11K2": "ממירי הסוג מהקוד"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "convertisseur de type à partir du code"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "Convertor de tip din cod"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1005",
"Z11K2": "Конвертер типа из кода"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "Convertitore del tipo dal codice"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1181",
"Z11K2": "конвертер из кода у тип"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "कोड से प्रकार रूपांतरक"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "Typový převodník z kódu"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "Typomvandlare från kod"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1664",
"Z31K2": [
"Z6",
"Convertor din cod în tip"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "A function that converts an instance of a programming language's type into a Wikifunctions one"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "Funkcja, która konwertuje obiekt typu natywnego dla języka programowania na obiekt Wikifunkcji"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "wandelt den Typ aus einer Programmiersprache in einen Wikifunctions-Typ um"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "এটি একটি ফাংশন যা কোনো প্রোগ্রামিং ভাষার ধরণকে উইকিফাংশনের ধরণে রূপান্তর করে"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1078",
"Z11K2": "Fungsi yang mengubah suatu contoh dari tipe di bahasa pemrograman menjadi tipe Wikifunctions"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1014",
"Z11K2": "Ọrụ na-agbanwe ihe atụ nke ụdị asụsụ mmemme ka ọ bụrụ nke Wikifunctions."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "une fonction qui convertit une instance du type d'un langage de programmation en une instance Wikifunctions"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "O funcție care convertește o instanță a unui tip din limbajul de programare într-unul Wikifuncții"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "Una funzione che converte un'istanza di un tipo di un linguaggio di programmazione in una di Wikifunctions"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "एक फ़ंक्शन जो किसी प्रोग्रामिंग भाषा के प्रकार को विकिफ़ंक्शन्स के प्रकार में बदलता है।"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "Funkce, která převádí instanci typu v programovacím jazyce na hodnotu typu ve Wikifunkcích"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "en funktion som omvandlar en datatyp i ett programspråk till motsvarande Datatyp på Wikifunctions"
}
]
}
}
1nu4ou8awk0aj9ku7qlyxhcz90b3ank
User:Jsamwrites
2
39114
294406
292146
2026-07-27T21:01:41Z
Jsamwrites
938
/* Sentences */
294406
wikitext
text/x-wiki
== Introduction ==
This is the Wikifunctions user page of John Samuel. For more information, refer page on [[:d:User:Jsamwrites|Wikidata User:Jsamwrites]].
== Phrases ==
List of objects:
* {{Z|Z18928}}
* {{Z|Z18929}}
* {{Z|Z18979}}
== Function application ==
* {{Z|Z873}}
== Configuration ==
* {{Z|Z14294}}
== Types ==
* [[Special:ListObjectsByType|All supported types]]
== Wikidata ==
* {{Z|Z22220}}
* {{Z|Z22222}}
== Sentences ==
{| class="wikitable"
|+
!No.
!Function
!Configuration
!Example
|-
|1.
|{{Z|Z34282}}
|{{Z|Z34281}}
|Lyon is a commune of France
|-
|2.
|{{Z|Z32581}}
|{{Z|Z32534}}
|Mona Lisa is a painting by Leonardo da Vinci
|-
|3.
|{{Z|Z34637}}
|{{Z|Z34682}}
|Sunday is part of the weekend
|-
|4.
|{{Z|Z36141}}
|{{Z|Z36148}}
|Space Needle was built in 1961.
|-
|5.
|{{Z|Z36151}}
|{{Z|Z36155}}
|Eiffel Tower was built between 1887 and 1889.
|-
|6.
|{{Z|Z37005}}
|{{Z|Z37017}}
|Earth-Moon system consists of Earth and Moon.
|-
|7.
|main subject
|
|The main subject(s) of a painting is/are.
|-
|8.
|{{Z|Z37761}}
|{{Z|Z37760}}
|Abel depicts Abel, death, and landscape.
|-
|9.
|{{Z|Z37777}}
|{{Z|Z37776}}
|BCPL is influenced by CPL.
|-
|10.
|{{Z|Z37873}}
|{{Z|Z37874}}
|Inkscaped was programmed in C++ and C.
|-
|11.
|{{Z|Z37870}}
|{{Z|Z37869}}
|C++, C, and Java
|-
|12.
|{{Z|Z37951}}
|{{Z|Z37945}}
|Software/It is developed by
|-
|13.
|created by
|
|Creative work is created by
|-
|14.
|depicted by
|
|Topics is depicted by
|-
|15.
|{{Z|Z37890}}
|{{Z|Z37889}}
|Object was made from.
|-
|16.
|uses
|
|It uses.
|-
|18.
|has use
|
|It has use in.
|}
== Infoboxes ==
Check [[User:Jsamwrites/Infoboxes]]
== Useful functions ==
* {{Z|Z36303}}
* {{Z|Z34943}}
* {{Z|Z36083}}
* {{Z|Z36218}}
* {{Z|Z32962}}
* {{Z|Z32179}}
* {{Z|Z32428}}
* {{Z|Z27243}}
* {{Z|Z31917}}
* {{Z|Z33690}}
* {{Z|Z28016}}
* {{Z|Z36193}}
* {{Z|Z29749}}
* {{Z|Z36038}}
* {{Z|Z36993}}
=== References ===
* {{Z|Z31921}}
== Catalogue ==
* [[Wikifunctions:Catalogue|Catalogue of important functions]]
* [[Wikifunctions:Catalogue/Natural language operations/Global language functions|Global language functions]]
== Documentation ==
* [[Wikifunctions:Catalogue/Wikidata operations|Wikidata operations]]
gs3gruydzowerqwaim94fzscevt3ngo
294409
294406
2026-07-27T21:08:40Z
Jsamwrites
938
/* Sentences */
294409
wikitext
text/x-wiki
== Introduction ==
This is the Wikifunctions user page of John Samuel. For more information, refer page on [[:d:User:Jsamwrites|Wikidata User:Jsamwrites]].
== Phrases ==
List of objects:
* {{Z|Z18928}}
* {{Z|Z18929}}
* {{Z|Z18979}}
== Function application ==
* {{Z|Z873}}
== Configuration ==
* {{Z|Z14294}}
== Types ==
* [[Special:ListObjectsByType|All supported types]]
== Wikidata ==
* {{Z|Z22220}}
* {{Z|Z22222}}
== Sentences ==
{| class="wikitable"
|+
!No.
!Function
!Configuration
!Example
|-
|1.
|{{Z|Z34282}}
|{{Z|Z34281}}
|Lyon is a commune of France
|-
|2.
|{{Z|Z32581}}
|{{Z|Z32534}}
|Mona Lisa is a painting by Leonardo da Vinci
|-
|3.
|{{Z|Z34637}}
|{{Z|Z34682}}
|Sunday is part of the weekend
|-
|4.
|{{Z|Z36141}}
|{{Z|Z36148}}
|Space Needle was built in 1961.
|-
|5.
|{{Z|Z36151}}
|{{Z|Z36155}}
|Eiffel Tower was built between 1887 and 1889.
|-
|6.
|{{Z|Z37005}}
|{{Z|Z37017}}
|Earth-Moon system consists of Earth and Moon.
|-
|7.
|main subject
|
|The main subject(s) of a painting is/are.
|-
|8.
|{{Z|Z37761}}
|{{Z|Z37760}}
|Abel depicts Abel, death, and landscape.
|-
|9.
|{{Z|Z37777}}
|{{Z|Z37776}}
|BCPL is influenced by CPL.
|-
|10.
|{{Z|Z37873}}
|{{Z|Z37874}}
|Inkscaped was programmed in C++ and C.
|-
|11.
|{{Z|Z37870}}
|{{Z|Z37869}}
|C++, C, and Java
|-
|12.
|{{Z|Z37951}}
|{{Z|Z37945}}
|Software/It is developed by
|-
|13.
|created by
|
|Creative work is created by
|-
|14.
|depicted by
|
|Topics is depicted by
|-
|15.
|{{Z|Z37890}}
|{{Z|Z37889}}
|Object was made from.
|-
|16.
|uses
|
|It uses.
|-
|18.
|has use
|
|It has use in.
|18.
|has characteristic
|
|It has following characteristics.
|19.
|platform
|
|It is available on
|20.
|characteristic of
|
|It is characteristic of
|21.
|depends on software
|
|It is dependent on
|22.
|color
|
|It uses the following colors:
|23.
|symbolizes
|
|It symbolizes
|}
== Infoboxes ==
Check [[User:Jsamwrites/Infoboxes]]
== Useful functions ==
* {{Z|Z36303}}
* {{Z|Z34943}}
* {{Z|Z36083}}
* {{Z|Z36218}}
* {{Z|Z32962}}
* {{Z|Z32179}}
* {{Z|Z32428}}
* {{Z|Z27243}}
* {{Z|Z31917}}
* {{Z|Z33690}}
* {{Z|Z28016}}
* {{Z|Z36193}}
* {{Z|Z29749}}
* {{Z|Z36038}}
* {{Z|Z36993}}
=== References ===
* {{Z|Z31921}}
== Catalogue ==
* [[Wikifunctions:Catalogue|Catalogue of important functions]]
* [[Wikifunctions:Catalogue/Natural language operations/Global language functions|Global language functions]]
== Documentation ==
* [[Wikifunctions:Catalogue/Wikidata operations|Wikidata operations]]
ma0ghtvpw3f7xmeliv29h4l5z5tym4a
294414
294409
2026-07-27T21:09:27Z
Jsamwrites
938
/* Sentences */
294414
wikitext
text/x-wiki
== Introduction ==
This is the Wikifunctions user page of John Samuel. For more information, refer page on [[:d:User:Jsamwrites|Wikidata User:Jsamwrites]].
== Phrases ==
List of objects:
* {{Z|Z18928}}
* {{Z|Z18929}}
* {{Z|Z18979}}
== Function application ==
* {{Z|Z873}}
== Configuration ==
* {{Z|Z14294}}
== Types ==
* [[Special:ListObjectsByType|All supported types]]
== Wikidata ==
* {{Z|Z22220}}
* {{Z|Z22222}}
== Sentences ==
{| class="wikitable"
|+
!No.
!Function
!Configuration
!Example
|-
|1.
|{{Z|Z34282}}
|{{Z|Z34281}}
|Lyon is a commune of France
|-
|2.
|{{Z|Z32581}}
|{{Z|Z32534}}
|Mona Lisa is a painting by Leonardo da Vinci
|-
|3.
|{{Z|Z34637}}
|{{Z|Z34682}}
|Sunday is part of the weekend
|-
|4.
|{{Z|Z36141}}
|{{Z|Z36148}}
|Space Needle was built in 1961.
|-
|5.
|{{Z|Z36151}}
|{{Z|Z36155}}
|Eiffel Tower was built between 1887 and 1889.
|-
|6.
|{{Z|Z37005}}
|{{Z|Z37017}}
|Earth-Moon system consists of Earth and Moon.
|-
|7.
|main subject
|
|The main subject(s) of a painting is/are.
|-
|8.
|{{Z|Z37761}}
|{{Z|Z37760}}
|Abel depicts Abel, death, and landscape.
|-
|9.
|{{Z|Z37777}}
|{{Z|Z37776}}
|BCPL is influenced by CPL.
|-
|10.
|{{Z|Z37873}}
|{{Z|Z37874}}
|Inkscaped was programmed in C++ and C.
|-
|11.
|{{Z|Z37870}}
|{{Z|Z37869}}
|C++, C, and Java
|-
|12.
|{{Z|Z37951}}
|{{Z|Z37945}}
|Software/It is developed by
|-
|13.
|created by
|
|Creative work is created by
|-
|14.
|depicted by
|
|Topics is depicted by
|-
|15.
|{{Z|Z37890}}
|{{Z|Z37889}}
|Object was made from.
|-
|16.
|uses
|
|It uses.
|-
|17.
|has use
|
|It has use in.
|-
|18.
|has characteristic
|
|It has following characteristics.
|19.
|platform
|
|It is available on
|20.
|characteristic of
|
|It is characteristic of
|21.
|depends on software
|
|It is dependent on
|22.
|color
|
|It uses the following colors:
|23.
|symbolizes
|
|It symbolizes
|}
== Infoboxes ==
Check [[User:Jsamwrites/Infoboxes]]
== Useful functions ==
* {{Z|Z36303}}
* {{Z|Z34943}}
* {{Z|Z36083}}
* {{Z|Z36218}}
* {{Z|Z32962}}
* {{Z|Z32179}}
* {{Z|Z32428}}
* {{Z|Z27243}}
* {{Z|Z31917}}
* {{Z|Z33690}}
* {{Z|Z28016}}
* {{Z|Z36193}}
* {{Z|Z29749}}
* {{Z|Z36038}}
* {{Z|Z36993}}
=== References ===
* {{Z|Z31921}}
== Catalogue ==
* [[Wikifunctions:Catalogue|Catalogue of important functions]]
* [[Wikifunctions:Catalogue/Natural language operations/Global language functions|Global language functions]]
== Documentation ==
* [[Wikifunctions:Catalogue/Wikidata operations|Wikidata operations]]
nud8arkgn3nnal9ejg3q5v11evvotxo
294417
294414
2026-07-27T21:10:21Z
Jsamwrites
938
/* Sentences */
294417
wikitext
text/x-wiki
== Introduction ==
This is the Wikifunctions user page of John Samuel. For more information, refer page on [[:d:User:Jsamwrites|Wikidata User:Jsamwrites]].
== Phrases ==
List of objects:
* {{Z|Z18928}}
* {{Z|Z18929}}
* {{Z|Z18979}}
== Function application ==
* {{Z|Z873}}
== Configuration ==
* {{Z|Z14294}}
== Types ==
* [[Special:ListObjectsByType|All supported types]]
== Wikidata ==
* {{Z|Z22220}}
* {{Z|Z22222}}
== Sentences ==
{| class="wikitable"
|+
!No.
!Function
!Configuration
!Example
|-
|1.
|{{Z|Z34282}}
|{{Z|Z34281}}
|Lyon is a commune of France
|-
|2.
|{{Z|Z32581}}
|{{Z|Z32534}}
|Mona Lisa is a painting by Leonardo da Vinci
|-
|3.
|{{Z|Z34637}}
|{{Z|Z34682}}
|Sunday is part of the weekend
|-
|4.
|{{Z|Z36141}}
|{{Z|Z36148}}
|Space Needle was built in 1961.
|-
|5.
|{{Z|Z36151}}
|{{Z|Z36155}}
|Eiffel Tower was built between 1887 and 1889.
|-
|6.
|{{Z|Z37005}}
|{{Z|Z37017}}
|Earth-Moon system consists of Earth and Moon.
|-
|7.
|main subject
|
|The main subject(s) of a painting is/are.
|-
|8.
|{{Z|Z37761}}
|{{Z|Z37760}}
|Abel depicts Abel, death, and landscape.
|-
|9.
|{{Z|Z37777}}
|{{Z|Z37776}}
|BCPL is influenced by CPL.
|-
|10.
|{{Z|Z37873}}
|{{Z|Z37874}}
|Inkscaped was programmed in C++ and C.
|-
|11.
|{{Z|Z37870}}
|{{Z|Z37869}}
|C++, C, and Java
|-
|12.
|{{Z|Z37951}}
|{{Z|Z37945}}
|Software/It is developed by
|-
|13.
|created by
|
|Creative work is created by
|-
|14.
|depicted by
|
|Topics is depicted by
|-
|15.
|{{Z|Z37890}}
|{{Z|Z37889}}
|Object was made from.
|-
|16.
|uses
|
|It uses.
|-
|17.
|has use
|
|It has use in.
|-
|18.
|has characteristic
|
|It has following characteristics.
|-
|19.
|platform
|
|It is available on
|-
|20.
|characteristic of
|
|It is characteristic of
|-
|21.
|depends on software
|
|It is dependent on
|-
|22.
|color
|
|It uses the following colors:
|-
|23.
|symbolizes
|
|It symbolizes
|}
== Infoboxes ==
Check [[User:Jsamwrites/Infoboxes]]
== Useful functions ==
* {{Z|Z36303}}
* {{Z|Z34943}}
* {{Z|Z36083}}
* {{Z|Z36218}}
* {{Z|Z32962}}
* {{Z|Z32179}}
* {{Z|Z32428}}
* {{Z|Z27243}}
* {{Z|Z31917}}
* {{Z|Z33690}}
* {{Z|Z28016}}
* {{Z|Z36193}}
* {{Z|Z29749}}
* {{Z|Z36038}}
* {{Z|Z36993}}
=== References ===
* {{Z|Z31921}}
== Catalogue ==
* [[Wikifunctions:Catalogue|Catalogue of important functions]]
* [[Wikifunctions:Catalogue/Natural language operations/Global language functions|Global language functions]]
== Documentation ==
* [[Wikifunctions:Catalogue/Wikidata operations|Wikidata operations]]
7a99mgkx0mkyxkl54rqajff2a334ru6
Z19084
0
40481
294395
280276
2026-07-27T17:52:57Z
Autom
448
+sv label
294395
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19084"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z4",
"Z17K2": "Z19084K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "this Type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "premier type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "একটি ধরণ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "primo tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "dieser Typ"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z4",
"Z17K2": "Z19084K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "that Type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "second type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "আরেকটি ধরণ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "secondo tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "dieser andere Typ"
}
]
}
}
],
"Z8K2": "Z40",
"Z8K3": [
"Z20",
"Z19087",
"Z19092",
"Z19096",
"Z19097",
"Z19099",
"Z23438",
"Z29405"
],
"Z8K4": [
"Z14",
"Z28731",
"Z19088",
"Z19101"
],
"Z8K5": "Z19084"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "same Type"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "est-ce le même type ?"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "ধরনের সমতা"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "stesso tipo"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "gleicher Typ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "samma Datatyp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"Type identities are equal",
"Type equality",
"==Z4",
"equal types",
"both types are the same"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1360",
"Z31K2": [
"Z6",
"==Z4"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1011",
"Z31K2": [
"Z6",
"ধরনের পরিচয় এক",
"একই ধরণ"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1430",
"Z31K2": [
"Z6",
"Typgleichheit",
"Beide Typen sind gleich"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1592",
"Z31K2": [
"Z6",
"likhet för Datatyp",
"typlikhet"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "two Types are the same if their Z4K1/identities are the same or the Z2K2/value of the Type referenced in one identity is the same as the full Type supplied by the other"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "যাচাই করে যে প্রদত্ত দুটি ধরণ কি একই না ভিন্ন। "
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Beide Typen sind gleich, wenn ihre Z4K1/Identitäten das gleiche sind oder wenn der Z2K2/Wert des Typ, auf den in einer Identität verwiesen wird, der gleiche ist wie der vollständige Typ vom Anderen"
}
]
}
}
oy1ouxgqixnkrd18h6rr3n6jurkqx07
Z19461
0
41768
294426
141858
2026-07-27T22:02:34Z
Ameisenigel
44
de
294426
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19461"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z19460",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z600",
"Z16K2": "function Z19460( Z19460K1, Z19460K2, Z19460K3 ) {\n let x = Number(Z19460K1) || 123456789;\n let y = 362436069;\n let z = 521288629;\n let w = 88675123;\n\n let t = x ^ (x \u003C\u003C 11);\n x = y;\n y = z;\n z = w;\n w = (w ^ (w \u003E\u003E 19)) ^ (t ^ (t \u003E\u003E 8));\n\n let randomNumber = Math.abs(w / 0x7FFFFFFF); \n\n return Math.floor(randomNumber * (Number(Z19460K3) - Number(Z19460K2) + 1)) + Number(Z19460K2);\n}"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Xorshift JS"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Xorshift in JavaScript"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
hr666x0lrmeuj6vsjdsxezwqq4qqsei
Z19462
0
41773
294427
135704
2026-07-27T22:03:01Z
Ameisenigel
44
de
294427
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19462"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z19217",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z19217(Z19217K1):\n import re\n regexString = '^[+-]?(\\d{1,3}\\.\\d+|\\d{1,3})[NS] [+-]?(\\d{1,3}\\.\\d+|\\d{1,3})[EW]$';\n # Match the pattern\n if not re.search(regexString, Z19217K1):\n return False; # Not matching the regex\n\n # Extract latitude and longitude\n lat = Z19217K1.split(' ')[0];\n lon = Z19217K1.split(' ')[1];\n\n # Validate latitude and longitude ranges\n latitude = float(lat.split(\"N\")[0].split(\"S\")[0]) #don't question it works\n longitude = float(lon.split(\"W\")[0].split(\"E\")[0])\n\n # Check latitude range\n if (latitude \u003C -90 or latitude \u003E 90):\n return False # Invalid latitude\n\n # Check longitude range\n if (longitude \u003C -180 or longitude \u003E 180):\n return False # Invalid longitude\n\n return True # Valid ISO 6709 coordinate"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "is it a valid ISO 6709 code Python"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Ist es ein gültiger ISO 6709 Code in Python"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
9xuvu3lgag3m766r78ks0z6sk4xvywc
Z19464
0
41775
294428
135179
2026-07-27T22:03:52Z
Ameisenigel
44
de
294428
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19464"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z19463",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z17132",
"Z17132K1": {
"Z1K1": "Z7",
"Z7K1": "Z19441",
"Z19441K1": {
"Z1K1": "Z18",
"Z18K1": "Z19463K1"
},
"Z19441K2": {
"Z1K1": "Z16683",
"Z16683K1": {
"Z1K1": "Z16659",
"Z16659K1": "Z16661"
},
"Z16683K2": {
"Z1K1": "Z13518",
"Z13518K1": "0"
}
},
"Z19441K3": {
"Z1K1": "Z16683",
"Z16683K1": {
"Z1K1": "Z16659",
"Z16659K1": "Z16660"
},
"Z16683K2": {
"Z1K1": "Z13518",
"Z13518K1": "1"
}
}
},
"Z17132K2": {
"Z1K1": "Z16683",
"Z16683K1": {
"Z1K1": "Z16659",
"Z16659K1": "Z16661"
},
"Z16683K2": {
"Z1K1": "Z13518",
"Z13518K1": "0"
}
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Random bool composition"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Zufälliger boolescher Wert als Komposition"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
js9y833l8nlgpw7upaj7eelseb37te1
Z19467
0
41778
294429
279403
2026-07-27T22:04:28Z
Ameisenigel
44
294429
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19467"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z13518",
"Z17K2": "Z19467K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "light years"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Lichtjahr"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20",
"Z19471"
],
"Z8K4": [
"Z14",
"Z19468",
"Z19469"
],
"Z8K5": "Z19467"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "light year to parsec"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Lichtjahr zu Parsec"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Convert the astronomical distance unit Light Year to Parsec"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Konvertiert die astronomische Entfernungseinheit Lichtjahr in Parsec"
}
]
}
}
lm1zcxyejk5xt8wm30of39o9dsf6bjv
Z19468
0
41779
294430
135208
2026-07-27T22:05:06Z
Ameisenigel
44
de
294430
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19468"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z19467",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z610",
"Z16K2": "def Z19467(Z19467K1):\n\tif float(Z19467K1) \u003E 0:\n\t\tly = float(Z19467K1)\n\t\tparsec = ly * 0.3066014\n\t\t\n\t\treturn str(parsec)"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Light Year to Parsec python"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Lichtjahr zu Parsec in Python"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Converts light year to parsec"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "wandelt Lichtjahre in Parsec um"
}
]
}
}
jqd2k9eelpyagkvx9b3e484y2tsmes2
Z19469
0
41780
294431
279315
2026-07-27T22:05:41Z
Ameisenigel
44
de
294431
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19469"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z19467",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z25656",
"Z25656K1": {
"Z1K1": "Z7",
"Z7K1": "Z19706",
"Z19706K1": {
"Z1K1": "Z7",
"Z7K1": "Z21653",
"Z21653K1": {
"Z1K1": "Z18",
"Z18K1": "Z19467K1"
}
},
"Z19706K2": {
"Z1K1": "Z19677",
"Z19677K1": {
"Z1K1": "Z16659",
"Z16659K1": "Z16660"
},
"Z19677K2": {
"Z1K1": "Z13518",
"Z13518K1": "3066014"
},
"Z19677K3": {
"Z1K1": "Z13518",
"Z13518K1": "10000000"
}
}
},
"Z25656K2": "Z1002"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Light Year to Parsec composition"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Lichtjahr zu Parsec als Komposition"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
n9nngrw7zqc5rjpvnqomtcxfb2rzrqp
Z19470
0
41782
294432
135203
2026-07-27T22:06:01Z
Ameisenigel
44
de
294432
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z19470"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z14189",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z600",
"Z16K2": "function Z14189(Z14189K1) {\r\n let byte_string = [];\r\n for (let i = 0; i \u003C Z14189K1.length; i++) {\r\n byte_string.push(Z14189K1.charCodeAt(i));\r\n }\r\n\r\n // Manual Base32 encoding\r\n const base32Chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\r\n let encoded = \"\";\r\n let bits = 0;\r\n let value = 0;\r\n\r\n for (let i = 0; i \u003C byte_string.length; i++) {\r\n value = (value \u003C\u003C 8) | byte_string[i];\r\n bits += 8;\r\n\r\n while (bits \u003E= 5) {\r\n encoded += base32Chars[(value \u003E\u003E (bits - 5)) \u0026 31];\r\n bits -= 5;\r\n }\r\n }\r\n\r\n // Adjust padding calculation\r\n if (bits \u003E 0) {\r\n encoded += base32Chars[(value \u003C\u003C (5 - bits)) \u0026 31];\r\n let padding = 8 - (encoded.length % 8);\r\n encoded += '='.repeat(padding \u003E 0 ? padding : 0);\r\n }\r\n\r\n return encoded;\r\n}"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Base32 Encode JS"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Base32-Codierung in JavaScript"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
5p41qfhulok4o104k2uc7zkcj5q4zz7
Z22112
0
48906
294391
282426
2026-07-27T17:45:02Z
Autom
448
+sv label
294391
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z22112"
},
"Z2K2": {
"Z1K1": "Z4",
"Z4K1": "Z22112",
"Z4K2": [
"Z3",
{
"Z1K1": "Z3",
"Z3K1": "Z22112",
"Z3K2": "Z22112K1",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "identity"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "identité"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Identität"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "পরিচয়"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "identità"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "पहचान"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "identiteit"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "identitate"
}
]
},
"Z3K4": {
"Z1K1": "Z40",
"Z40K1": "Z41"
}
}
],
"Z4K3": "Z101",
"Z4K4": "Z22120",
"Z4K7": [
"Z46",
"Z22116",
"Z22118"
],
"Z4K8": [
"Z64",
"Z22464",
"Z22117"
]
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Kleenean"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "triléen"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "dreiwertig"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1001",
"Z11K2": "ثلاثي التكافئ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "ত্রিমূলক যুক্তি"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "Kleeneano"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "क्लीनियन"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "kleeneaan "
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "Kleeneho logická hodnota"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "Tip ternar"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1645",
"Z11K2": "三值"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "Kleenesk"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"three-valued logic",
"trivalent truth values",
"truth values with uncertainty"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1001",
"Z31K2": [
"Z6",
"كلينياني"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1011",
"Z31K2": [
"Z6",
"ক্লীনিয়ান",
"ত্রিমাত্রিক যুক্তি"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1004",
"Z31K2": [
"Z6",
"logique ternaire",
"trois états",
"trinaire",
"trivalente",
"triléenne"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1820",
"Z31K2": [
"Z6",
"तीन-मानीय तर्क"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1062",
"Z31K2": [
"Z6",
"Tříhodnotová logika"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1664",
"Z31K2": [
"Z6",
"Kleenean, ternar, tip logic ternar, tip trivalent"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1645",
"Z31K2": [
"Z6",
"三元逻辑",
"三价逻辑",
"三值逻辑"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "valeurs logiques consistant en vrai, faux et peut-être"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "Un valore logico che può assumere 3 valori (Vero, Falso, Forse)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "logic values consisting of true, false and maybe"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1820",
"Z11K2": "'सच', 'झूठ' और 'शायद' वाला तर्क मान"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1157",
"Z11K2": "driewaardige logica, driewaardige waarheidswaarden, waarheidswaarden met onzekerheid"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "Typ pro tříhodnotovou logiku, jedna z: pravda, nepravda, možná"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1664",
"Z11K2": "valori logice constând în adevărat, fals și probabil"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1645",
"Z11K2": "包含真、假和或的逻辑"
}
]
}
}
rs826qgtwp098jp5rx2aq7jf877wawz
Wikifunctions:Type proposals/Value with error
4
54123
294403
274232
2026-07-27T20:29:15Z
YoshiRulz
10156
/* Comments */
294403
wikitext
text/x-wiki
== Summary ==
Two rational numbers representing the value and the error.
== Uses ==
To represent and handle causual (gaussian) errors and their propagation in mathematical operations. This type would be useful primarily in science for calculations involving measured quantities, involving error propagation.
== Structure ==
It should consist in two values of type [[Z19677]]: the value (here represented with key ZnnnK1) and the error (here represented with key ZnnnK2). The error should be interpreted as a casual error.
=== Example values ===
15.6 ± 0.3
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "Value with error",
"value": {
"type": "Rational number",
"sign": "positive",
"numerator": {
"type": "Natural number",
"value": "156"
},
"denominator": {
"type": "Natural number",
"value": "10"
}
},
"error": {
"type": "Rational number",
"sign": "positive",
"numerator": {
"type": "Natural number",
"value": "3"
},
"denominator": {
"type": "Natural number",
"value": "10"
}
}
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Znnn",
"ZnnnK1": {
"Z1K1": "Z19677",
"Z19677K1": "Z16660",
"Z19677K2": {
"Z1K1": "Z13518",
"Z13518K1": "156"
},
"Z19677K3": {
"Z1K1": "Z13518",
"Z13518K1": "10"
}
},
"ZnnnK2": {
"Z1K1": "Z19677",
"Z19677K1": "Z16660",
"Z19677K2": {
"Z1K1": "Z13518",
"Z13518K1": "3"
},
"Z19677K3": {
"Z1K1": "Z13518",
"Z13518K1": "10"
}
}
}</syntaxhighlight>
|}
== Validator ==
The validator ensures that:
* both values are valid
* the error is positive (or zero)
== Identity ==
Two values with error are the same if both the values and the errors are the same.
== Converting to code ==
=== Python ===
As a Dictionary containing the value and the error (in the form of Fractions).
=== JavaScript ===
As an Object containing the value and the error.
== Display function ==
The display function should first display the value in decimal representation, then the character "±" and then the error, also in decimal representation. Further discussion is needed on how to handle the number of meaningful digits.
== Read function ==
It should just read the two values as two rationals.
== Alternatives ==
Values could be of type [[Z20838]], but it seems to me that there is building consensus that [[Z19677]] should be viewed as the default type for scientific calculations.
== Comments ==
* {{s}} as proposer. [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 19:27, 11 April 2025 (UTC)
* I'm not sure we need this (yet?) given that [[Z6010]] has the lower and upper bounds which effectively express uncertainties. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 13:39, 7 April 2026 (UTC)
*:The main difference would be that the errors of this type have the semantic of casual error, while the errors of {{Z|Z6010}} are maximal errors. [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 05:50, 12 May 2026 (UTC)
*::Can you suggest examples of where we need to express or work with casual errors (that couldn't be done with a Z6010 object)? Also, if we did want to go down this route, why do we limit the error to be symmetric? --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 05:57, 12 May 2026 (UTC)
*:::Casual error are the standard in science; most of the scientific measurement are expressed with random error. The main difference between random and maximum error is in the error propagation rules, so this type would actually behave differently from Wikidata quantities in mathematical operations.
*:::The error is symmetric because most of the tyme, the casual errof is symmetric, but it's also true that in some niche areas of science, asymmetric random error is used. Perhaps it's something we can think of.
*:::I was also thinking to add also the systematic error, in order to have a more complete scientific error handling, and so we would better differentiate this type from Wikidata quantities. [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 06:06, 12 May 2026 (UTC)
*::::My guess is that some of the values in Wikidata that use upper and lower bounds are actually using scientific measurement errors to get them. I'm not sure if they go for one- two- or three- sigma (which are you expecting here by the way?). But in any case, we could still use a Z6010 object to represent a value with a scientific error. We'd just need to send it to the right error-propagating function when multiplying or otherwise manipulating. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 06:20, 12 May 2026 (UTC)
* '''Question''' how are negative errors handled? [[User:Feeglgeef|Feeglgeef]] ([[User talk:Feeglgeef|talk]]) 22:53, 11 May 2026 (UTC)
*:What are negative errors? [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 05:47, 12 May 2026 (UTC)
*::For example, 1 +- -1. [[User:Feeglgeef|Feeglgeef]] ([[User talk:Feeglgeef|talk]]) 09:24, 12 May 2026 (UTC)
*:::This should not be a valid value. [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 09:30, 12 May 2026 (UTC)
* {{O}}, I think Z6010 should be sufficient --[[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 08:29, 12 May 2026 (UTC)
* {{neutral|Comment}} The two kinds of error propagation are far too easy to confuse as it is; forcing people to choose between a pair of nearly-identical Types before each calculation will not help. How is the distinction made in quantity-typed Wikidata statements? A particular qualifier? [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 20:28, 27 July 2026 (UTC)
f7q8tbwrfsabwrftpq0fo9yid1nrc0w
294404
294403
2026-07-27T20:42:05Z
YoshiRulz
10156
s/casual/random/ (I believe this is the correct translation of the Italian "errore casuale")
294404
wikitext
text/x-wiki
== Summary ==
Two rational numbers representing the value and the error.
== Uses ==
To represent and handle {{Q|5399648}} and their propagation in mathematical operations. This type would be useful primarily in science for calculations involving measured quantities, involving error propagation.
== Structure ==
It should consist in two values of type [[Z19677]]: the value (here represented with key ZnnnK1) and the error (here represented with key ZnnnK2). The error should be interpreted as a random error.
=== Example values ===
15.6 ± 0.3
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "Value with error",
"value": {
"type": "Rational number",
"sign": "positive",
"numerator": {
"type": "Natural number",
"value": "156"
},
"denominator": {
"type": "Natural number",
"value": "10"
}
},
"error": {
"type": "Rational number",
"sign": "positive",
"numerator": {
"type": "Natural number",
"value": "3"
},
"denominator": {
"type": "Natural number",
"value": "10"
}
}
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Znnn",
"ZnnnK1": {
"Z1K1": "Z19677",
"Z19677K1": "Z16660",
"Z19677K2": {
"Z1K1": "Z13518",
"Z13518K1": "156"
},
"Z19677K3": {
"Z1K1": "Z13518",
"Z13518K1": "10"
}
},
"ZnnnK2": {
"Z1K1": "Z19677",
"Z19677K1": "Z16660",
"Z19677K2": {
"Z1K1": "Z13518",
"Z13518K1": "3"
},
"Z19677K3": {
"Z1K1": "Z13518",
"Z13518K1": "10"
}
}
}</syntaxhighlight>
|}
== Validator ==
The validator ensures that:
* both values are valid
* the error is positive (or zero)
== Identity ==
Two values with error are the same if both the values and the errors are the same.
== Converting to code ==
=== Python ===
As a Dictionary containing the value and the error (in the form of Fractions).
=== JavaScript ===
As an Object containing the value and the error.
== Display function ==
The display function should first display the value in decimal representation, then the character "±" and then the error, also in decimal representation. Further discussion is needed on how to handle the number of meaningful digits.
== Read function ==
It should just read the two values as two rationals.
== Alternatives ==
Values could be of type [[Z20838]], but it seems to me that there is building consensus that [[Z19677]] should be viewed as the default type for scientific calculations.
== Comments ==
* {{s}} as proposer. [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 19:27, 11 April 2025 (UTC)
* I'm not sure we need this (yet?) given that [[Z6010]] has the lower and upper bounds which effectively express uncertainties. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 13:39, 7 April 2026 (UTC)
*:The main difference would be that the errors of this type have the semantic of casual error, while the errors of {{Z|Z6010}} are maximal errors. [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 05:50, 12 May 2026 (UTC)
*::Can you suggest examples of where we need to express or work with casual errors (that couldn't be done with a Z6010 object)? Also, if we did want to go down this route, why do we limit the error to be symmetric? --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 05:57, 12 May 2026 (UTC)
*:::Casual error are the standard in science; most of the scientific measurement are expressed with random error. The main difference between random and maximum error is in the error propagation rules, so this type would actually behave differently from Wikidata quantities in mathematical operations.
*:::The error is symmetric because most of the tyme, the casual errof is symmetric, but it's also true that in some niche areas of science, asymmetric random error is used. Perhaps it's something we can think of.
*:::I was also thinking to add also the systematic error, in order to have a more complete scientific error handling, and so we would better differentiate this type from Wikidata quantities. [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 06:06, 12 May 2026 (UTC)
*::::My guess is that some of the values in Wikidata that use upper and lower bounds are actually using scientific measurement errors to get them. I'm not sure if they go for one- two- or three- sigma (which are you expecting here by the way?). But in any case, we could still use a Z6010 object to represent a value with a scientific error. We'd just need to send it to the right error-propagating function when multiplying or otherwise manipulating. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 06:20, 12 May 2026 (UTC)
*:: By "casual" and "maximal", do you mean "[[d:Q5399648|random]]" and "[[d:Q2257880|systematic]]"? I've edited the proposal to use those. ("Random" is the idiomatic English adjective for things relating to chance, and it prevents confusion with the term "ca'''us'''al".) [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 20:41, 27 July 2026 (UTC)
* '''Question''' how are negative errors handled? [[User:Feeglgeef|Feeglgeef]] ([[User talk:Feeglgeef|talk]]) 22:53, 11 May 2026 (UTC)
*:What are negative errors? [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 05:47, 12 May 2026 (UTC)
*::For example, 1 +- -1. [[User:Feeglgeef|Feeglgeef]] ([[User talk:Feeglgeef|talk]]) 09:24, 12 May 2026 (UTC)
*:::This should not be a valid value. [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 09:30, 12 May 2026 (UTC)
* {{O}}, I think Z6010 should be sufficient --[[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 08:29, 12 May 2026 (UTC)
* {{neutral|Comment}} The two kinds of error propagation are far too easy to confuse as it is; forcing people to choose between a pair of nearly-identical Types before each calculation will not help. How is the distinction made in quantity-typed Wikidata statements? A particular qualifier? [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 20:28, 27 July 2026 (UTC)
68g8z26ji3tb8ec442y0pg1axwhd3st
294405
294404
2026-07-27T20:59:39Z
Dv103
11127
/* Comments */ Reply
294405
wikitext
text/x-wiki
== Summary ==
Two rational numbers representing the value and the error.
== Uses ==
To represent and handle {{Q|5399648}} and their propagation in mathematical operations. This type would be useful primarily in science for calculations involving measured quantities, involving error propagation.
== Structure ==
It should consist in two values of type [[Z19677]]: the value (here represented with key ZnnnK1) and the error (here represented with key ZnnnK2). The error should be interpreted as a random error.
=== Example values ===
15.6 ± 0.3
{|class="wikitable" style="margin:.6em 1.6em"
|-
| <syntaxhighlight lang="json" line="line">{
"type": "Value with error",
"value": {
"type": "Rational number",
"sign": "positive",
"numerator": {
"type": "Natural number",
"value": "156"
},
"denominator": {
"type": "Natural number",
"value": "10"
}
},
"error": {
"type": "Rational number",
"sign": "positive",
"numerator": {
"type": "Natural number",
"value": "3"
},
"denominator": {
"type": "Natural number",
"value": "10"
}
}
}</syntaxhighlight>
| <syntaxhighlight lang="json">{
"Z1K1": "Znnn",
"ZnnnK1": {
"Z1K1": "Z19677",
"Z19677K1": "Z16660",
"Z19677K2": {
"Z1K1": "Z13518",
"Z13518K1": "156"
},
"Z19677K3": {
"Z1K1": "Z13518",
"Z13518K1": "10"
}
},
"ZnnnK2": {
"Z1K1": "Z19677",
"Z19677K1": "Z16660",
"Z19677K2": {
"Z1K1": "Z13518",
"Z13518K1": "3"
},
"Z19677K3": {
"Z1K1": "Z13518",
"Z13518K1": "10"
}
}
}</syntaxhighlight>
|}
== Validator ==
The validator ensures that:
* both values are valid
* the error is positive (or zero)
== Identity ==
Two values with error are the same if both the values and the errors are the same.
== Converting to code ==
=== Python ===
As a Dictionary containing the value and the error (in the form of Fractions).
=== JavaScript ===
As an Object containing the value and the error.
== Display function ==
The display function should first display the value in decimal representation, then the character "±" and then the error, also in decimal representation. Further discussion is needed on how to handle the number of meaningful digits.
== Read function ==
It should just read the two values as two rationals.
== Alternatives ==
Values could be of type [[Z20838]], but it seems to me that there is building consensus that [[Z19677]] should be viewed as the default type for scientific calculations.
== Comments ==
* {{s}} as proposer. [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 19:27, 11 April 2025 (UTC)
* I'm not sure we need this (yet?) given that [[Z6010]] has the lower and upper bounds which effectively express uncertainties. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 13:39, 7 April 2026 (UTC)
*:The main difference would be that the errors of this type have the semantic of casual error, while the errors of {{Z|Z6010}} are maximal errors. [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 05:50, 12 May 2026 (UTC)
*::Can you suggest examples of where we need to express or work with casual errors (that couldn't be done with a Z6010 object)? Also, if we did want to go down this route, why do we limit the error to be symmetric? --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 05:57, 12 May 2026 (UTC)
*:::Casual error are the standard in science; most of the scientific measurement are expressed with random error. The main difference between random and maximum error is in the error propagation rules, so this type would actually behave differently from Wikidata quantities in mathematical operations.
*:::The error is symmetric because most of the tyme, the casual errof is symmetric, but it's also true that in some niche areas of science, asymmetric random error is used. Perhaps it's something we can think of.
*:::I was also thinking to add also the systematic error, in order to have a more complete scientific error handling, and so we would better differentiate this type from Wikidata quantities. [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 06:06, 12 May 2026 (UTC)
*::::My guess is that some of the values in Wikidata that use upper and lower bounds are actually using scientific measurement errors to get them. I'm not sure if they go for one- two- or three- sigma (which are you expecting here by the way?). But in any case, we could still use a Z6010 object to represent a value with a scientific error. We'd just need to send it to the right error-propagating function when multiplying or otherwise manipulating. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 06:20, 12 May 2026 (UTC)
*:: By "casual" and "maximal", do you mean "[[d:Q5399648|random]]" and "[[d:Q2257880|systematic]]"? I've edited the proposal to use those. ("Random" is the idiomatic English adjective for things relating to chance, and it prevents confusion with the term "ca'''us'''al".) [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 20:41, 27 July 2026 (UTC)
*:::No, with "causal" I meant normal gaussian errors, while "maximal" errors indicated the maximum possible error. Both random and systematic errors can be gaussian or systematic. [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 20:59, 27 July 2026 (UTC)
* '''Question''' how are negative errors handled? [[User:Feeglgeef|Feeglgeef]] ([[User talk:Feeglgeef|talk]]) 22:53, 11 May 2026 (UTC)
*:What are negative errors? [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 05:47, 12 May 2026 (UTC)
*::For example, 1 +- -1. [[User:Feeglgeef|Feeglgeef]] ([[User talk:Feeglgeef|talk]]) 09:24, 12 May 2026 (UTC)
*:::This should not be a valid value. [[User:Dv103|Dv103]] ([[User talk:Dv103|talk]]) 09:30, 12 May 2026 (UTC)
* {{O}}, I think Z6010 should be sufficient --[[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 08:29, 12 May 2026 (UTC)
* {{neutral|Comment}} The two kinds of error propagation are far too easy to confuse as it is; forcing people to choose between a pair of nearly-identical Types before each calculation will not help. How is the distinction made in quantity-typed Wikidata statements? A particular qualifier? [[User:YoshiRulz|YoshiRulz]] ([[User talk:YoshiRulz|talk]]) 20:28, 27 July 2026 (UTC)
o3csx8ikpl4yfwqgm0bxbxooa8ktc5x
User talk:Rachmat04
3
79351
294446
292345
2026-07-28T03:08:11Z
SpBot
978
archive 1 section: 1 to [[User talk:Rachmat04/Archives/2026]] (after section [[User talk:Rachmat04/Archives/2026#Wikifunctions_&_Abstract_Wikipedia_Newsletter_#254:_Working_on_Functions,_together|Wikifunctions_&_Abstract_Wikipedia_Newsletter_#254:_Working_on_Functions,_together]]) - previous edit: [[:User:SpBot|SpBot]], 2026-07-20 03:08
294446
wikitext
text/x-wiki
{{Autoarchive resolved section
|age=3
|timeout=30
|show=yes
|archive='((FULLPAGENAME))/Archives/((year))'
|overview=
|latest archive=[[{{FULLPAGENAME}}/Archives/{{CURRENTYEAR}}|Archives/{{CURRENTYEAR}}]]
}}
== Wikifunctions & Abstract Wikipedia Newsletter #255: Integration on test wiki and annual plan ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-07-01|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we discuss integration of Abstract Wikipedia in Test Wiki and our objectives for the new Wikimedia Foundation Fiscal Year, we remind you of the Wikifunctions and Abstract Wikipedia events at Wikimania 2026, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Also, we remind you that if you have questions or ideas to discuss, the next '''Volunteers' Corner''' will be held on '''[https://zonestamp.toolforge.org/1783359000 July 6, at 17:30 UTC]''' ([https://meet.google.com/xuy-njxh-rkw link to the meeting]).
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 08:22, 2 July 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30755600 -->
== Wikifunctions & Abstract Wikipedia Newsletter #256: Moving toward our first Abstract Wikipedia integration milestone ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-07-08|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we discuss further our objectives for the new Wikimedia Foundation Fiscal Year, we show the latest community tool, we remind you of the Wikifunctions and Abstract Wikipedia events at Wikimania 2026, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 09:43, 9 July 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30755600 -->
== Wikifunctions & Abstract Wikipedia Newsletter #257: Beyond syntactic tables ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-07-16|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we discuss syntactic tables and news in Types, we show some community blogposts and tools, we remind you of the Wikifunctions and Abstract Wikipedia events at Wikimania 2026, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
We also remind you that in the next weeks these newsletter reminders will be paused, and that they will resume in mid-August.
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 10:55, 17 July 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30755600 -->
1i56hnicteu8mdxlm4ezgllq63g4sdq
User talk:Rachmat04/Archives/2026
3
82370
294445
292344
2026-07-28T03:08:11Z
SpBot
978
archiving 1 section from [[User talk:Rachmat04]] (after section [[User talk:Rachmat04/Archives/2026#Wikifunctions_&_Abstract_Wikipedia_Newsletter_#254:_Working_on_Functions,_together|Wikifunctions_&_Abstract_Wikipedia_Newsletter_#254:_Working_on_Functions,_together]])
294445
wikitext
text/x-wiki
{{Talkarchive}}
== Wikifunctions & Abstract Wikipedia Newsletter #242 is out: Request for Discussion: Syntactic tables ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-04-02|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we introduce a proposal for Natural Language Generation, we introduce a page for function suggestions from Abstract Wikipedia, we inform you that there will be a presentation about Abstract Wikipedia at WikiCon Australia, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Also, we remind you that if you have questions or ideas to discuss, the next '''Volunteers' Corner''' will be held on '''[https://zonestamp.toolforge.org/1776101400 April 13, at 17:30 UTC]''' ([https://meet.google.com/xuy-njxh-rkw link to the meeting]).
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 13:37, 3 April 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30325620 -->
== Wikifunctions & Abstract Wikipedia Newsletter #243 is out: Community proposals for capturing meaning ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-04-10|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we report on three community proposals on syntactic approaches, we introduce a new Type (Complex numbers), we report on current hiccups on Abstract Wikipedia, we share more information about a presentation about Abstract Wikipedia at WikiCon Australia, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Also, we remind you that if you have questions or ideas to discuss, the next '''Volunteers' Corner''' will be held on '''[https://zonestamp.toolforge.org/1776101400 April 13, at 17:30 UTC]''' ([https://meet.google.com/xuy-njxh-rkw link to the meeting]).
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 15:35, 10 April 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30325620 -->
== Wikifunctions & Abstract Wikipedia Newsletter #244 is out: Milestones; Some major issues hopefully resolved ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-04-16|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we celebrate 4000 functions on Wikifunctions and 1000 abstract articles on Abstract Wikipedia, we announce that we should have fixed some major issues with the websites, we inform you on our latest outreach activities, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 10:22, 17 April 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30325620 -->
== Wikifunctions & Abstract Wikipedia Newsletter #245 is out: The Foundation's search for the perfect language ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-04-25|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we present an academic paper about Abstract Wikipedia, we discuss our latest Type created, and we take a look at the newest created functions.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 09:54, 25 April 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30325620 -->
== Wikifunctions & Abstract Wikipedia Newsletter #246 is out: Request for input: what should we count for Abstract Wikipedia ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-05-02|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we ask you what would be the relevant metrics for Abstract Wikipedia, we discuss our latest news on Composition Language v2, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 12:21, 2 May 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30325620 -->
== Wikifunctions & Abstract Wikipedia Newsletter #247 is out: References from Wikidata now available ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-05-08|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we announce that is now possible to pass references in Wikidata statements, we introduce the [https://abstract-data.toolforge.org/ Abstract Data dashboard], we report you on the presentation about Abstract Wikipedia at WikiCon Australia, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Also, we remind you that if you have questions or ideas to discuss, the next '''Volunteers' Corner''' will be held on '''[https://zonestamp.toolforge.org/1778520600 May 11, at 17:30 UTC]''' ([https://meet.google.com/xuy-njxh-rkw link to the meeting]).
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 11:16, 8 May 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30325620 -->
== Wikifunctions & Abstract Wikipedia Newsletter #248 is out: A higher meaning ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-05-15|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we discuss functions creating language fragments, we present our latest news in Types, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 14:36, 15 May 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30536976 -->
== Wikifunctions & Abstract Wikipedia Newsletter #249 is out: Annual plan 2026-2027 ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-05-23|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we present you the current draft of objectives for Wikifunctions and Abstract Wikipedia in the WMF Annual Plan 2026-2027, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 09:48, 25 May 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30536976 -->
== Wikifunctions & Abstract Wikipedia Newsletter #250 is out: Looking back and forward ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-05-30|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we present you a recollection of our work so far, now that we celebrate our 250th newsletter, we share with you a summary of our latest outreach activities, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 10:04, 1 June 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30606821 -->
== Wikifunctions & Abstract Wikipedia Newsletter #251 is out: The illustrated encyclopaedia ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-06-05|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we introduce our first function to import images on Abstract Wikipedia, we present our Functions of the Week, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Also, we remind you that if you have questions or ideas to discuss, the next '''Volunteers' Corner''' will be held on '''[https://zonestamp.toolforge.org/1780939800 June 8, at 17:30 UTC]''' ([https://meet.google.com/xuy-njxh-rkw link to the meeting]).
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 14:14, 5 June 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30606821 -->
== Wikifunctions & Abstract Wikipedia Newsletter #252 is out: Improved loading and display of Test results ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-06-12|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we present you an improvement in loading and display of Test results, we talk about our next events, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Also, we remind you that Denny will lead a discussion on the [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-05-15#News in Types: way forward for natural language generation types|new NLG types]] in the next '''Natural Language Generation Special Interest Group meeting''', that will be held on '''[https://zonestamp.toolforge.org/1781625600 June 16, at 16:00 UTC]''' ([https://meet.google.com/xzn-kqer-mah link to the meeting]).
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 15:29, 12 June 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30606821 -->
== Wikifunctions & Abstract Wikipedia Newsletter #253 is out: The or not the, this is (the?) question ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-06-19|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we present you a delicate question regarding grammatical framework, we talk about our next events and about the results of our latest online meetings, we discuss news about Types, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 12:34, 19 June 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30701693 -->
== Wikifunctions & Abstract Wikipedia Newsletter #254: Working on Functions, together ==
There is [[:f:Special:MyLanguage/Wikifunctions:Status updates/2026-06-26|a new update]] for Abstract Wikipedia and Wikifunctions. Please, come and read it!
In this issue, we report on new collaborative patterns emerging in our community, we discuss news in Types, we share some events that relate to Wikifunctions and Abstract Wikipedia at Wikimania 2026, and we take a look at the latest software developments.
Want to catch up with the previous updates? Check [[:f:Special:MyLanguage/Wikifunctions:Status updates|our archive]]!
Also, we remind you that if you have questions or ideas to discuss, the next '''Volunteers' Corner''' will be held on '''[https://zonestamp.toolforge.org/1783359000 July 6, at 17:30 UTC]''' ([https://meet.google.com/xuy-njxh-rkw link to the meeting]).
Enjoy the reading! -- [[User:Sannita (WMF)|User:Sannita (WMF)]] ([[User talk:Sannita (WMF)|talk]]) 09:58, 27 June 2026 (UTC)
<!-- Message sent by User:Sannita (WMF)@metawiki using the list at https://meta.wikimedia.org/w/index.php?title=Global_message_delivery/Targets/Wikifunctions_%26_Abstract_Wikipedia&oldid=30724999 -->
ldlq77hbqhb178ih5z63m555j5iyuqv
Z35370
0
83822
294402
293651
2026-07-27T18:18:25Z
Autom
448
+sv
294402
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z35370"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z35370K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "persona"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "person"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "personne"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "person"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z35370K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "lingua"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "langue"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "språk"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z35373",
"Z37780"
],
"Z8K4": [
"Z14",
"Z37781"
],
"Z8K5": "Z35370"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "infobox per persona"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for person"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "infobox pour les personnes (2)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1237",
"Z11K2": "kişi bilgi kutusu"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "infobox person"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"biography infobox"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1237",
"Z31K2": [
"Z6",
"bilgi kutusu, kişi için"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1592",
"Z31K2": [
"Z6",
"infobox människa"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "infobox för en icke-fiktiv människa"
}
]
}
}
18p3pai7qxdh50lfq0klp6bxct9nf2g
Z310
0
84841
294425
293678
2026-07-27T21:28:10Z
Ornithorynque liminaire
1539
French label
294425
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z310"
},
"Z2K2": {
"Z1K1": "Z4",
"Z4K1": "Z310",
"Z4K2": [
"Z3",
{
"Z1K1": "Z3",
"Z3K1": "Z6",
"Z3K2": "Z310K1",
"Z3K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Commons media id"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "id media Commons"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "কমন্স মিডিয়া আইডি"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Commons-Medien-ID"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "ID stránky na Commons"
}
]
}
}
],
"Z4K3": "Z101"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Commons image reference"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "Riferimento a immagine Commons"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "কমন্স ছবি উল্লেখ"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Commons-Bildreferenz"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "Reference na obrázek na Commons"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "odwołanie do pliku obrazu z Commons"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1004",
"Z11K2": "référence de l'image Commons"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1011",
"Z31K2": [
"Z6",
"কমন্স ছবি রেফারেন্স"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1062",
"Z31K2": [
"Z6",
"Commons obrázek"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1025",
"Z31K2": [
"Z6",
"odwołanie do obrazu z Commons"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "A reference to a Wikimedia Commons image, using the file's Commons page ID (M-ID)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1787",
"Z11K2": "Un riferimento ad una immagine Wikimedia Commons, usando l'ID della pagina Commons (M-ID)"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "উইকিমিডিয়া কমন্স হতে কোনো ছবির কমন্স পেইজ আইডি ব্যবহার করে সেই ছবিটির উল্লেখ। "
},
{
"Z1K1": "Z11",
"Z11K1": "Z1430",
"Z11K2": "Referenz auf ein Bild von Wikimedia Commons unter Verwendung der Seiten-ID (MID) der Datei auf Commons"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1062",
"Z11K2": "Reference na soubor s obrázkem uložený na Wikimedia Commons prostřednictvím M-ID stránky na Commons"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1025",
"Z11K2": "Odwołanie do pliku obrazu z Wikimedia Commons przy użyciu identyfikatora strony pliku w Commons (M-ID)"
}
]
}
}
jr44ja0bowzmjn6lsrvfmbc2gpc3co0
Z36185
0
85298
294398
293715
2026-07-27T17:59:28Z
Autom
448
294398
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z36185"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z36185K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "person"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z36185K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z36186"
],
"Z8K4": [
"Z14",
"Z36187"
],
"Z8K5": "Z36185"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "birth sentence from Wikidata person, English"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"date of birth",
"place of birth",
"birth sentence from Wikidata"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Given a Wikidata person item, fetches date of birth (P569) and place of birth (P19), then returns an English sentence in the form \"[name] was born [date] in [place].\""
}
]
}
}
501kxkkteo5x1ltyw3tzgr34jk6m2vj
Z36678
0
86219
294401
294322
2026-07-27T18:08:53Z
Autom
448
+sv
294401
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z36678"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z36678K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "plats"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z36678K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "språk"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z37550"
],
"Z8K4": [
"Z14",
"Z36679"
],
"Z8K5": "Z36678"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for populated place"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "infobox samhälle"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"infobox for city"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1592",
"Z31K2": [
"Z6",
"infobox stad",
"infobox tätort"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "infobox för en plats där människor bor"
}
]
}
}
jfl8cn6fycz9ayb9z9jqddz729m3rt2
Wikifunctions:Requests for deletions/Archive/2026/07
4
87275
294443
293596
2026-07-28T03:08:07Z
SpBot
978
archiving 2 sections from [[Wikifunctions:Requests for deletions]] (after section [[Wikifunctions:Requests for deletions/Archive/2026/07#Z38204_and_Z38211|Z38204_and_Z38211]])
294443
wikitext
text/x-wiki
{{Talkarchive}}
== [[Z37290]] ==
Test case created by myself, but with wrong output format. Please delete [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 18:33, 4 July 2026 (UTC)
:{{done}} [[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 19:11, 4 July 2026 (UTC)
:<small>This section was archived on a request by: [[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 19:11, 4 July 2026 (UTC)</small>
== [[Z36494]] ==
Please delete the function I created which does not work, and its implementation and test case:
*{{Z|Z36494}}
*{{Z|Z36495}}
*{{Z|Z36496}}
[[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 06:37, 11 July 2026 (UTC)
:{{done}} <span style="font-family:monospace;font-weight:bold">[[User:Bunnypranav|<span style="color:#63b3ed">~/Bunny</span><span style="color:#2c5282">pranav</span>]]:<[[User talk:Bunnypranav|<span style="color:#63b3ed">ping</span>]]></span> 06:52, 11 July 2026 (UTC)
:<small>This section was archived on a request by: <span style="font-family:monospace;font-weight:bold">[[User:Bunnypranav|<span style="color:#63b3ed">~/Bunny</span><span style="color:#2c5282">pranav</span>]]:<[[User talk:Bunnypranav|<span style="color:#63b3ed">ping</span>]]></span> 06:52, 11 July 2026 (UTC)</small>
== [[Z37624]] ==
Please delete test case I created with incorrect input type. [[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 21:34, 14 July 2026 (UTC)
:{{done}} <span style="font-family:monospace;font-weight:bold">[[User:Bunnypranav|<span style="color:#63b3ed">~/Bunny</span><span style="color:#2c5282">pranav</span>]]:<[[User talk:Bunnypranav|<span style="color:#63b3ed">ping</span>]]></span> 14:58, 15 July 2026 (UTC)
:<small>This section was archived on a request by: <span style="font-family:monospace;font-weight:bold">[[User:Bunnypranav|<span style="color:#63b3ed">~/Bunny</span><span style="color:#2c5282">pranav</span>]]:<[[User talk:Bunnypranav|<span style="color:#63b3ed">ping</span>]]></span> 14:58, 15 July 2026 (UTC)</small>
== [[Z37709]] ==
Please delete this duplicate function, implementation and test
* {{Z|Z37709}}
* {{Z|Z37711}}
* {{Z|Z37710}}
[[User:HenkvD|HenkvD]] ([[User talk:HenkvD|talk]]) 21:33, 14 July 2026 (UTC)
:{{done}} <span style="font-family:monospace;font-weight:bold">[[User:Bunnypranav|<span style="color:#63b3ed">~/Bunny</span><span style="color:#2c5282">pranav</span>]]:<[[User talk:Bunnypranav|<span style="color:#63b3ed">ping</span>]]></span> 15:00, 15 July 2026 (UTC)
:<small>This section was archived on a request by: <span style="font-family:monospace;font-weight:bold">[[User:Bunnypranav|<span style="color:#63b3ed">~/Bunny</span><span style="color:#2c5282">pranav</span>]]:<[[User talk:Bunnypranav|<span style="color:#63b3ed">ping</span>]]></span> 15:00, 15 July 2026 (UTC)</small>
== [[Z37790]] ==
Redundant to [[Z37921]]. [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 02:45, 19 July 2026 (UTC)
:{{done}} Blank function, author request. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 04:41, 19 July 2026 (UTC)
:<small>This section was archived on a request by: [[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 16:54, 21 July 2026 (UTC)</small>
== [[Z32876]] ==
Don't remember what this was supposed to be. [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 07:54, 20 July 2026 (UTC)
:{{done}} incomplete, author request --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 08:00, 20 July 2026 (UTC)
:<small>This section was archived on a request by: [[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 16:54, 21 July 2026 (UTC)</small>
== [[Z19412]] ==
Looks like a test page --[[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 19:15, 22 July 2026 (UTC)
:Clearly a demo, deleted. Courtesy ping @[[User:Feeglgeef|Feeglgeef]], just in case it wasn't. <span style="font-family:monospace;font-weight:bold">[[User:Bunnypranav|<span style="color:#63b3ed">~/Bunny</span><span style="color:#2c5282">pranav</span>]]:<[[User talk:Bunnypranav|<span style="color:#63b3ed">ping</span>]]></span> 07:38, 23 July 2026 (UTC)
:{{done}} <span style="font-family:monospace;font-weight:bold">[[User:Bunnypranav|<span style="color:#63b3ed">~/Bunny</span><span style="color:#2c5282">pranav</span>]]:<[[User talk:Bunnypranav|<span style="color:#63b3ed">ping</span>]]></span> 07:39, 23 July 2026 (UTC)
:<small>This section was archived on a request by: <span style="font-family:monospace;font-weight:bold">[[User:Bunnypranav|<span style="color:#63b3ed">~/Bunny</span><span style="color:#2c5282">pranav</span>]]:<[[User talk:Bunnypranav|<span style="color:#63b3ed">ping</span>]]></span> 07:39, 23 July 2026 (UTC)</small>
== Z38204 and Z38211 ==
I created Z38204 and Z38211, before noticing that {{Z|Z32290}} already exists, so they can be deleted. Sorry for the inconvenience. --[[User:Volvox|Volvox]] ([[User talk:Volvox|talk]]) 20:42, 25 July 2026 (UTC)
:{{done}} <span style="font-family:monospace;font-weight:bold">[[User:Bunnypranav|<span style="color:#63b3ed">~/Bunny</span><span style="color:#2c5282">pranav</span>]]:<[[User talk:Bunnypranav|<span style="color:#63b3ed">ping</span>]]></span> 06:55, 26 July 2026 (UTC)
:<small>This section was archived on a request by: <span style="font-family:monospace;font-weight:bold">[[User:Bunnypranav|<span style="color:#63b3ed">~/Bunny</span><span style="color:#2c5282">pranav</span>]]:<[[User talk:Bunnypranav|<span style="color:#63b3ed">ping</span>]]></span> 06:55, 26 July 2026 (UTC)</small>
== Z38309 ==
Same deal as above, I created a duplicate of an existing function [[Z30043]]. [[User:EatingCarBatteries|EatingCarBatteries]] ([[User talk:EatingCarBatteries|talk]]) 07:30, 26 July 2026 (UTC)
:{{done}} <span style="font-family:monospace;font-weight:bold">[[User:Bunnypranav|<span style="color:#63b3ed">~/Bunny</span><span style="color:#2c5282">pranav</span>]]:<[[User talk:Bunnypranav|<span style="color:#63b3ed">ping</span>]]></span> 08:04, 26 July 2026 (UTC)
:<small>This section was archived on a request by: <span style="font-family:monospace;font-weight:bold">[[User:Bunnypranav|<span style="color:#63b3ed">~/Bunny</span><span style="color:#2c5282">pranav</span>]]:<[[User talk:Bunnypranav|<span style="color:#63b3ed">ping</span>]]></span> 08:04, 26 July 2026 (UTC)</small>
r3rppes3ic7ehzdq3e7zric7vc79ip5
Z37447
0
87438
294438
291245
2026-07-28T01:47:56Z
TheAhasan
91253
Added Z37549 to the approved list of test cases
294438
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z37447"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z37447K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "character"
}
]
}
}
],
"Z8K2": "Z40",
"Z8K3": [
"Z20",
"Z37448",
"Z37549"
],
"Z8K4": [
"Z14",
"Z37449"
],
"Z8K5": "Z37447"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Is Bangla vowel"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "কি বাংলা স্বরবর্ণ"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"Bangla vowel check",
"Bengali vowel check",
"Is Bengali vowel Check",
"Bengali vowel"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1011",
"Z31K2": [
"Z6",
"বাংলা স্বরবর্ণ পরিক্ষা"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Returns whether a Bengali character is a vowel."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "বাংলা অক্ষর স্বরবর্ণ কিনা যাচাই করে দেয়।"
}
]
}
}
3lzzlwhlmtll13gqdfbunk9rttxmzwn
294440
294438
2026-07-28T01:48:58Z
TheAhasan
91253
Added Z38362 to the approved list of test cases
294440
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z37447"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z37447K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "character"
}
]
}
}
],
"Z8K2": "Z40",
"Z8K3": [
"Z20",
"Z37448",
"Z37549",
"Z38362"
],
"Z8K4": [
"Z14",
"Z37449"
],
"Z8K5": "Z37447"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Is Bangla vowel"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "কি বাংলা স্বরবর্ণ"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"Bangla vowel check",
"Bengali vowel check",
"Is Bengali vowel Check",
"Bengali vowel"
]
},
{
"Z1K1": "Z31",
"Z31K1": "Z1011",
"Z31K2": [
"Z6",
"বাংলা স্বরবর্ণ পরিক্ষা"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Returns whether a Bengali character is a vowel."
},
{
"Z1K1": "Z11",
"Z11K1": "Z1011",
"Z11K2": "বাংলা অক্ষর স্বরবর্ণ কিনা যাচাই করে দেয়।"
}
]
}
}
pxt3kghc3kp5e69v0p8tjlnp41gqghb
Z37683
0
87748
294400
293745
2026-07-27T18:01:17Z
Autom
448
+sv labels
294400
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z37683"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z37683K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "person"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "person"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z37683K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "språk"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z38224",
"Z38237",
"Z38245"
],
"Z8K4": [
"Z14",
"Z37685"
],
"Z8K5": "Z37683"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "birth sentence from Wikidata"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "födelsemening från Wikidata"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Generates a sentence like \"[name] was born on [date] in [location].\""
}
]
}
}
j4ozqflst1f7aql9u4eqxgid516v7gz
Z37686
0
87751
294399
290671
2026-07-27T18:00:52Z
Autom
448
+sv label
294399
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z37686"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z37686K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "person"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "person"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z37686K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "språk"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z37697"
],
"Z8K4": [
"Z14",
"Z37687"
],
"Z8K5": "Z37686"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "birth sentence from Wikidata, Swedish"
},
{
"Z1K1": "Z11",
"Z11K1": "Z1592",
"Z11K2": "födelsemening från Wikidata, svenska"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
er28x0grvbyoa8acwcnt4cvo3okbdnd
Wikifunctions:Type proposals/Words with many forms
4
87959
294447
294224
2026-07-28T05:16:51Z
Santhosh.thottingal
2879
294447
wikitext
text/x-wiki
= What is the problem? =
A word (lexeme) often has several forms, and the right form needs to be selected for a given sentence. For example, in English, the following two sentences use two different forms of the word “''[[d:Lexeme:L536|book]]''”:
# He read a ''book'' this month.
# He read seven ''books'' this month.
English nouns are usually modelled as having two forms, so that is rather simple and small. With [[Wikifunctions:Type proposals/Syntactic table|syntactic tables]] we model it with a table with two options, one singular and one plural (example for the noun “''[[Z36617|goose]]''”).
Now, for lexemes with two forms this leads to a table with two options. That’s not very problematic.
But in other languages, some parts of speech can have many different forms. And I just came to German adjectives. German adjectives have three comparison levels (positive, comparative, superlative), two numbers (singular and plural), three genders (feminine, masculine, and neuter), four cases (nominative, dative, genitive, and accusative), and three inflections (strong, weak, and mixed). That’s [https://www.wikifunctions.org/view/en/Z13558?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z13558%22%2C%22Z13558K1%22%3A%5B%22Z13518%22%2C%7B%22Z1K1%22%3A%22Z13518%22%2C%22Z13518K1%22%3A%223%22%7D%2C%7B%22Z1K1%22%3A%22Z13518%22%2C%22Z13518K1%22%3A%222%22%7D%2C%7B%22Z1K1%22%3A%22Z13518%22%2C%22Z13518K1%22%3A%223%22%7D%2C%7B%22Z1K1%22%3A%22Z13518%22%2C%22Z13518K1%22%3A%224%22%7D%2C%7B%22Z1K1%22%3A%22Z13518%22%2C%22Z13518K1%22%3A%223%22%7D%5D%7D 3x2x3x4x3=216] forms. And three predicative forms.
To see how this can look like, here’s the adjective “''[[d:Lexeme:L343955|braun]]''” (brown) with 147 forms and here’s the page on German Wiktionary that shows all forms for the adjective "''[[:de:wikt:Flexion:schön|schön]]"'' (beautiful). Yeah, German Wiktionary moved it to its own page because it would have been so unwieldy on the page of the word itself. I tried to rebuild a German adjective on Wikifunctions, here’s “''[[Z37431|hoch]]''” (high). It “only” has 129 options, as some of the plural forms collapse along the genders and even the cases sometimes, and thus we can save on these if the functions were careful. But trying to use that in functions lead to trouble with the system ([[phab:T431734|T431734]]).
And that’s just the first kind of lexeme language and part of speech that happened to be a bit bigger.
One question is, can Wikifunctions scale to such big Syntactic tables with hundreds of options? Or do we need another solution?
In the discussion about the [[Wikifunctions:Type proposals/Syntactic type|Syntactic type proposal]], which was the predecessor to the Syntactic table proposal, the community did raise the point that the current proposal will lead to a lot of unnecessary computation. This argument turned out to be correct in practice. This proposal tries to remedy that issue.
= Possible approaches =
== A. Large tables ==
We have built a full table with 129 forms for the German adjective “[[Z37431|''hoch'']]”. This worked, but using them in functions did not ([[phab:T431734|T431734]]). For now it is unclear whether that is a substantial problem or just a minor bug. And even 129 forms is not the end of it: [[:en:wikt:açmak|this Turkish verb on the English Wiktionary]] has more than 300 forms, and [[:tr:wikt:açmak|the same one on the Turkish Wiktionary]] has even more, over 400 forms. In reality, these Lexemes have thousands of forms, and the tables on Wiktionary are woefully incomplete. Lists with so many elements will likely run into recursion limits, as well as being very hard for most users to understand let alone correct.
'''Formatting tables''': formatting content works by formatting every option, as they are all HTML fragments. (This is how the system works right now.)
'''Compatibility to Syntactic tables''': no issue, since they are still just tables.
'''Scalability''': we need to always evaluate every single option, no matter if we need it or not. If a table has a few hundred options, and we bold these, we need to bold a few hundred HTML fragments, and yet in the end we throw all but one out, wasting resources and slowing things down.
'''Plausibility of implementation''': can be done without changes to the backend, but won’t scale in the current system. Making this scale would be quite an effort.
=== Replacing materialized options with function calls ===
Now, one general rule in linguistics (which, as is often true, has plenty of exceptions) is that the more forms a kind of word has, the more regular they are. That’s why the forms in the German Wiktionary are all created from three or four inputs, not from hundreds. Same for the Turkish verbs mentioned above, they even have a single input only.
So instead of having to materialize all the options beforehand, ''i.e.'' making the whole inflection table available with all the individual options, we could collapse some or all of the table options into functions. Here, to visualize it with a small, artificial example in a made-up language:
{| class="wikitable"
|'''Gender \ Number'''
|'''Singular'''
|'''Plural'''
|-
|'''Masculine'''
|blond
|blonds
|-
|'''Feminine'''
|blonde
|blondes
|}
Any such regular table can always be replaced by a function ''form from stem(“blond”, gender, number)''
One example can be seen with [[Z37477|this function implementation for German adjectives]], which takes four base forms (the stems of the positive, comparative, and superlative as well as the positive predicative) and creates all the other functions through function calls.
One interesting question becomes, how do we use these function calls in Wikifunctions? If we evaluate them all beforehand, we create tons of computation that is never used (in fact, of the hundreds of options we know that only one will be used!). So we have two questions: how do we represent these function calls, and how do we integrate them in an NLG system that allows us to merge the individual tables / lexemes into larger sentence fragments and eventually sentences?
== B. Encode them as text in the fragments ==
Instead of having all options materialized, we materialize some, if any of the dimensions of the table, and we string encode the function calls for the remaining dimensions in the fragment. So instead of having the four options for the four forms for the made up language above, we have one function, e.g. <code>Z7133</code>, and placeholders for the two arguments, the number and the gender. As the tables get merged, and we figure out with which specific gender and number the table has to agree with, the placeholders for the arguments get replaced with the respective values, until the arguments are all given and then the function can be evaluated and the correct form replaces the function call.
So the single option for the table above could look like this as a fragment:
<code>※λZ7133blondQQλ※</code>
Say, we now learn that the form has to agree with a feminine noun. Now we replace one of the placeholder arguments and it becomes:
<code>※λZ7133blondQ1775415Qλ※</code>
Once we know that the form has to be singular, the second Q also gets replaced with the respective value. Now we can evaluate the represented function call and just replace it with “blonde”.
The exact syntax of how to store the embedded function calls as strings has plenty of room for bikeshedding. Note that, rather intentionally, in order to keep things reasonably simple, we only have a single level of function calls and do not embed these. Also the argument types are strictly limited to a single string followed by Wikidata item references. Both of these restrictions can be lifted with a smarter syntax.
(B2.) One alternative would be to reuse the syntax of embedded functions we already have instead of introducing a new one. So it would look like this:
<code><nowiki>{{#function:Z7133|blond|Q1775415|Q}}</nowiki></code>
This would have the advantage of having a more powerful syntax (we have a larger selection of arguments and combinations of arguments). It would have the disadvantage of bringing a syntax designed for wikitext into HTML fragments, which might be confusing expectations, users, and implementation.
'''Formatting tables''': since these are HTML fragments, they can be formatted the same way as the current HTML fragments.
'''Compatibility with Syntactic tables''': merge functions need to be aware of this shift. They need to know when to augment the argument list instead of using options, and when to replace the encoded function call with the actual text. But they are compatible otherwise.
'''Plausibility of implementation''': can be done with the system as is.
== C. A new Type for quoted and partial function calls ==
Instead of using text-encoded function calls in unsuspecting HTML fragments, we introduce a new type for essentially the same behaviour, so a real type representing a quoted, potentially partial function call.
We would have a type that looks a lot like a Z7, but is a different type (e.g. a Z77). This type is basically a [[:en:Closure_(computer_programming)|closure]], if I understand it correctly. Unlike a Z7 it does not get evaluated. It also can have missing arguments. Some core functions for this new type are:
* Does the function have all arguments set?
* Set a given argument to a given value
* Evaluate the function call
These functions would be needed in Option B as well, but there they would work on the string syntax.
A list of quoted, partial function calls would then be part of every Syntactic Option, on a new key. The HTML fragments themselves would have placeholders where the results of the function calls would be inserted.
Note that a quoted and partial function call will be a useful type also outside of this particular use case.
'''Formatting tables''': Since we retain the HTML fragments, we can continue to use the current approach for formatting. Boldening a table means we will still create the HTML fragment that bolds the placeholder, and once the function calls are resolved, the placeholder is replaced with the text.
'''Compatibility with Syntactic tables''': We need to add one key to each option, holding a list of quoted and partial function calls. The merge functions need to know about these, add the appropriate arguments, resolve function calls at the right time, and replace placeholders with the result.
'''Plausibility of implementation''': I think that the backend would require some small changes, but the frontend would need quite a bit of fiddly work.
== D. A new type enveloping a lispy representation of function calls ==
This and the next approach assume we are composing the whole text fragment as a function call. This avoids having any placeholders in the HTML fragment. Once the function call is fully specified, it can be evaluated and the result becomes the HTML fragment.
Here we propose to introduce a very simple new type: [[:en:Anonymous_function|anonymous functions]] (also known as lambdas).
It is quite similar to a Z8, but we drop the identity key, we drop the tests, and we allow for only one single composition as the implementation, represented by an untyped list as described below. So the structure is:
* K1: typed list of anonymous argument declarations
* K2: type of the return value
* K3: untyped list
An anonymous argument declaration also has three keys:
* K1: string for the identifier
* K2: type of the argument
* K3: Wikidata item reference for the meaning of the argument
A very simple representation for anonymous functions is to have an untyped list of objects, where the first object is the function to be called and the following are the argument values. (Basically, [[:en:Lisp_(programming_language)|LISP syntax]]. This is also inspired by [[Wikifunctions:Type proposals/Semantic unit|Mahir’s proposal for semantic units]].) if an argument is a function call itself, it is represented by a new list.
Values that are not given yet are represented by a Z18/argument reference.
A list that does not start with a function but has a different type as the first value instead evaluates to itself.
Note that anonymous functions are a useful type outside of this particular use case too. They also cover in their entirety all the use cases for quoted and partial function calls suggested in approach C and are strictly more powerful than these.
'''Formatting tables''':Formatting happens by wrapping the existing function call with the new call, e.g. in order to make a word bold, we take the function creating the word,
[ Z711, “blond”, Q1775415, K1 ]
and turn it into
[ Z36961, [ Z711, “blond”, Q1775415, K1 ] ]
'''Compatibility with Syntactic tables''': there are at least three possible ways on how to use this representation:
D1. We keep the existing structure, and extend syntactic options with a new key that takes a list of anonymous functions. Both the existing key for the list of HTML fragments and this new key may have empty lists. Merge functions would need to know how to use the fragments and the functions correctly. In the end, it should always boil down to just having options with HTML fragments.
D2. On Syntactic options, we replace the existing key with a list of HTML fragments with a list of anonymous functions. Note that a list with HTML fragments evaluates to itself, that means that existing HTML fragments just continue the same way (but would need to be wrapped with the new type).
D3. We entirely replace Syntactic options with an anonymous function call (and drop Syntactic options altogether). All features of options become arguments for the anonymous function call. In that case it would probably also make sense to rename the Syntactic table type, since it's not really a table anymore.
'''Plausibility of implementation''': can be done with the system as is, I think.
== E. A new Type for anonymous functions ==
This approach is basically the same as approach D, but has a more useful internal representation for anonymous function calls. Instead of an untyped list, we use a composition.
The argument declarations are the unbound arguments. We can either make a call to an anonymous function and provide the missing arguments ([[:en:Function_application|application]]), or we can replace one of the arguments with a value, leading to a new anonymous function that has one less argument ([[:en:Partial_application|currying]]). Once the anonymous function has no arguments left, it can be evaluated any time.
'''Formatting tables''': we envelop the implementation with the formatting function.
'''Compatibility with Syntactic tables''': E1, E2 or E3, as with D1, D2, D3 respectively.
'''Plausibility of implementation''': the backend should be able to deal with this pretty much as is, if I understand it correctly. The frontend would need some fiddly work, but that should be roughly comparable to approach C.
= Discussion =
{| class="wikitable"
|
|A
|B
|C
|D
|E
|-
|Can be implemented right away
|<nowiki>++</nowiki>
|<nowiki>++</nowiki>
|<nowiki>-</nowiki>
|<nowiki>++</nowiki>
|<nowiki>-</nowiki>
|-
|Decent UX with a bit of effort
|<nowiki>+</nowiki>
|<nowiki>- -</nowiki>
|<nowiki>+</nowiki>
|<nowiki>-</nowiki>
|<nowiki>+</nowiki>
|-
|Speed and scalability?
|<nowiki>-</nowiki>
|<nowiki>+</nowiki>
|<nowiki>+</nowiki>
|<nowiki>+</nowiki>
|<nowiki>+</nowiki>
|-
|Allows for composition
|<nowiki>+</nowiki>
|<nowiki>- -</nowiki>
|<nowiki>- -</nowiki>
|<nowiki>++</nowiki>
|<nowiki>++</nowiki>
|-
|How does it fit with the existing table type?
|<nowiki>++</nowiki>
|<nowiki>++</nowiki>
|<nowiki>+</nowiki>
|<nowiki>-</nowiki>
|<nowiki>-</nowiki>
|-
|Does it allow formatting content?
|<nowiki>++</nowiki>
|<nowiki>++</nowiki>
|<nowiki>++</nowiki>
|<nowiki>++</nowiki>
|<nowiki>++</nowiki>
|}
'''Denny’s recommendation''': while writing up the problem, although I initially wasn’t clear about how to proceed, I am now in favor of eventually moving to approach E but starting with approach D. Semantically, the lispy representation from D can be transformed automatically into an E, once the system supports anonymous functions in its UX, and until then, we can use the lispy representation. The lispy representation is not great from an UX perspective, but the goal is to replace it with something better. But we wouldn’t be blocked on that better UX in order to proceed. Out of inertia, I would prefer D1, but maybe D3 is the better solution as it is simpler.
* Honestly, I find it difficult to understand the difference between D and E. However, I agree that these two options might be the best one. Looking at 1/2/3 I would have considered 2 the best because we would not have to worry about merge functions and we could also keep the syntactic tables. Just my two cents, --[[User:Ameisenigel|Ameisenigel]] ([[User talk:Ameisenigel|talk]]) 18:35, 26 July 2026 (UTC)
'''Santhosh's feedback'''
As a native speaker a language with productive morphology with high inflection and agglutination — Malayalam, a word paradigm is a function. A Malayalam noun takes plural marking, then case, then postpositional and clitic material (-ഉം, -ഓ, -ഏ, -ആണ്...), and these stack productively. A verb combines tense/aspect/mood, causatives, negation-as-morphology, adverbial and conditional participles, and then cliticizes further. There is no finite table to materialize. So the proposal's direction — from enumerated options toward function-valued forms - it is the right direction.
In that sense, Proposal A, B and C does not help. D and E are where the proposal converges on the theoretically correct answer, which is that Wikifunctions needs first-class lambdas with partial application. This is, I'd argue, inevitable. Wikifunctions is a functional programming system, and any functional system that grows real use cases eventually discovers it needs closures and currying. E is simply lambda calculus done properly; D is E encoded as S-expressions. The lispy list is homoiconic and trivially manipulable (formatting-by-wrapping, [Z36961, [Z711, "blond", Q1775415, K1]], is genuinely elegant), but it's untyped, so you lose static checking of arity and argument types until evaluation time. This is important when a volunteer contributor is least equipped to debug a failure - at least when our debugging and authoring system is in early days.
One governance issue the proposal may have: Wikidata models lexeme forms as enumerated statements. Once forms are generated by Wikifunctions rather than stored, the source of truth for "what are the forms of this word" migrates partly from Wikidata to Wikifunctions, and the two can disagree. For Turkish and Malayalam this is unavoidable. Wikidata cannot enumerate the forms, but the projects should decide deliberately which system is authoritative for which layer.
While I would chose E as the best of these options, what strikes me most is that the proposal quietly reinvents smart paradigm (Détrez and Ranta, 2012) of Grammatical Framework. Am I right?
While A is not useful as such, it can be helpful in a mixed strategy where functions as source of truth, memoized materialization of frequent forms as a cache layer.
I don't fully get the idea of why we need to start with D and move towards E. By wiki standards(You mentioned it as "...due to inertia.."), D will always remain(nothing temporary in wiki world 🙂️ ). Regarding D1 and D2, I think the html fragment is misplaced. Isn't it a conflation of linguistic realization with presentation markup? Bold-ness is not a property of a wordform; it's a property of the rendered document.
For Malayalam, under materialized tables, lexicographic effort scales with lexemes × forms — hopeless for Malayalam, where Wikidata lexeme coverage is thin and nobody will hand-enter thousands of forms per verb. Under D/E, effort scales with lexemes × principal parts plus a one-time investment in grammar functions. Store a stem and an inflection class; generate the rest. That's the only model under which Malayalam coverage is achievable by a small volunteer community.
But there is a catch, someone has to encode the grammar as functions. This is [http://morph.smc.org.in where I am struggling since 2016]. The algorithmic understanding of Malayalam morphology is itself incomplete. It is not because some technical issue my efforts to make the grammar implementation is not able to parse a general corpus. I arrived at about 60% at 2020 and not able to expand further. This is because we are dealing with a living language. Prescriptive grammar takes you only to this far. My attempts to explain the grammar in some computable fashion hit a wall. Scholars are not able to explain the rules behind some patterns. MT systems and LLMs are doing better even though they produce Malayalam that no Malayalam speaker would write.
--[[User:Santhosh.thottingal|Santhosh.thottingal]] ([[User talk:Santhosh.thottingal|talk]]) 05:16, 28 July 2026 (UTC)
* (Add your comments here)
t9qebzpr88v2lsq0stvw7yazpupaqke
Z37830
0
87973
294377
292299
2026-07-27T14:42:37Z
Jsamwrites
938
Removed Z37831 from the approved list of test cases
294377
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z37830"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z37830K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6092",
"Z17K2": "Z37830K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "property"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z37830K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z37832"
],
"Z8K5": "Z37830"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox row, string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "a table row with two columns: Property and string from Wikidata"
}
]
}
}
oymmp00wwbo3x9j65s3dmi3zyy16etw
294378
294377
2026-07-27T14:42:40Z
Jsamwrites
938
Removed Z37832 from the approved list of implementations
294378
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z37830"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z37830K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6092",
"Z17K2": "Z37830K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "property"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z37830K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z6",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z37830"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox row, string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "a table row with two columns: Property and string from Wikidata"
}
]
}
}
po9qp0f38cfhrqxeddukb11htx327e9
294379
294378
2026-07-27T14:42:53Z
Jsamwrites
938
294379
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z37830"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z37830K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6092",
"Z17K2": "Z37830K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "property"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z37830K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z37830"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox row, string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "a table row with two columns: Property and string from Wikidata"
}
]
}
}
pbtadr3omajw8w8ha0875esmreifa00
294380
294379
2026-07-27T14:42:59Z
Jsamwrites
938
Added Z37832 to the approved list of implementations
294380
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z37830"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z37830K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6092",
"Z17K2": "Z37830K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "property"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z37830K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z37832"
],
"Z8K5": "Z37830"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox row, string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "a table row with two columns: Property and string from Wikidata"
}
]
}
}
6g7x3qnpl8ntpsmzvcrt7tdv0lryx9d
294381
294380
2026-07-27T14:43:07Z
Jsamwrites
938
Added Z37831 to the approved list of test cases
294381
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z37830"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z37830K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6092",
"Z17K2": "Z37830K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "property"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z37830K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z37831"
],
"Z8K4": [
"Z14",
"Z37832"
],
"Z8K5": "Z37830"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox row, string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "a table row with two columns: Property and string from Wikidata"
}
]
}
}
m738o782sgbienprrrj0z9a0jtv6bw5
Z37831
0
87974
294382
292297
2026-07-27T14:43:48Z
Jsamwrites
938
294382
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z37831"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z37830",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z37830",
"Z37830K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q140"
},
"Z37830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P225"
},
"Z37830K3": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z877",
"Z877K2": {
"Z1K1": "Z89",
"Z89K1": "\u003Ctr\u003E\u003Ctd\u003EScientific name\u003C/td\u003E\u003Ctd\u003EPanthera leo\u003C/td\u003E\u003C/tr\u003E"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Taxon name Panthera leo"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
8nfocfc6242siv18bfd5mvzd9rqmntf
Z38042
0
88241
294367
293160
2026-07-27T13:24:23Z
99of9
1622
Added Z38353 and Z38354 to the approved list of test cases
294367
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38042"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z38042K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "word"
}
]
}
}
],
"Z8K2": "Z40",
"Z8K3": [
"Z20",
"Z38043",
"Z38044",
"Z38353",
"Z38354"
],
"Z8K4": [
"Z14",
"Z38109"
],
"Z8K5": "Z38042"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "string beginning with \"h\" is aspirant in French?"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31",
{
"Z1K1": "Z31",
"Z31K1": "Z1002",
"Z31K2": [
"Z6",
"word beginning with \"h\" is aspirant in French?",
"phrase beginning with \"h\" is aspirant in French?"
]
}
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Checking for the h should already be done elsewhere. Default false unless certain."
}
]
}
}
dsvxrwph8xqecmgu3s852vcr4bs7jev
Z38109
0
88356
294369
293157
2026-07-27T14:08:17Z
VIGNERON
96
small corrections
294369
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38109"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38042",
"Z14K3": {
"Z1K1": "Z16",
"Z16K1": "Z600",
"Z16K2": "function Z38042( Z38042K1 ) {\n\tconst list = [\n'ha! Ha!', \n'habanera', \n'habeuse', \n'hâbler', \n'hâblerie', \n'hâbleur', \n'hachage', \n'hache', \n'hache-écorce', \n'hache-écorces', \n'hache-fourrage', \n'hache-légumes', \n'hache-maïs', \n'hache-paille', \n'hacher', \n'hachereau', \n'hachereaux', \n'hache-sarment', \n'hache-sarments', \n'hachette', \n'hacheur', \n'hacheuse', \n'hache-viande', \n'hachich', \n'hachis', \n'hachisch', \n'hachoir', \n'hachure', \n'hack', \n'hacquebute', \n'hacquebutier', \n'hadal', \n'hadaux', \n'haddock', \n'hadîth', \n'hadj', \n'hadji', \n'hagard', \n'Haguais', \n'Haguaise', \n'Hague', \n'haha', \n'hahé!', \n'haie', \n'haïe', \n'haïk', \n'haillon', \n'haillonneuse', \n'haillonneux', \n'haine', \n'haineuse', \n'haineusement', \n'haineux', \n'haïr', \n'haïssable', \n'halage', \n'halbran', \n'hâle', \n'halecret', \n'haler', \n'hâler', \n'halètement', \n'haleter', \n'hall', \n'halle', \n'hallebarde', \n'hallebardier', \n'hallier', \n'Hallstatt',\n'hallstattien', \n'hallstattienne', \n'halo', \n'haloir', \n'halophile', \n'halot', \n'halte', \n'hamac', \n'hamada', \n'hamal', \n'Hambourg', \n'hamburger', \n'hameau', \n'hameaux', \n'hammal', \n'hammam', \n'hammerless', \n'hampe', \n'hamster', \n'han!', \n'hanap', \n'hanche', \n'hanchement', \n'hancher', \n'hand', \n'handball', \n'handballeur', \n'handballeuse', \n'handicap', \n'handicaper', \n'hangar', \n'hanneton', \n'hannetonner', \n'hanse', \n'hanséatique', \n'hanter', \n'hantise', \n'happe', \n'happelourde', \n'happement', \n'happening', \n'happer', \n'happy-end', \n'haquebute', \n'haquebutier', \n'haquenée', \n'haquet', \n'hara-kiri', \n'harangue', \n'haranguer', \n'harangueur', \n'harangueuse', \n'haras', \n'harassant', \n'harassement', \n'harasser', \n'harcèlement', \n'harceler', \n'harceleur', \n'harceleuse', \n'harde', \n'harder', \n'hardes', \n'hardi', \n'hardiesse', \n'hardiment', \n'hardware', \n'harem', \n'hareng', \n'harengère', \n'haret', \n'harfang', \n'hargne', \n'hargneuse', \n'hargneusement', \n'hargneux', \n'haricot', \n'haricoter', \n'haridelle', \n'harissa', \n'harka', \n'harki', \n'harle', \n'harlou!', \n'harnachement', \n'harnacher', \n'harnacheur', \n'harnacheuse', \n'harnais', \n'harnois', \n'haro!', \n'harpailler', \n'harpe', \n'harper', \n'harpie', \n'harpiste', \n'harpon', \n'harponnage', \n'harponner', \n'harponneur', \n'harponneuse', \n'hart', \n'hasard', \n'hasarder', \n'hasardeuse', \n'hasardeusement', \n'hasardeux', \n'haschich', \n'hase', \n'hast', \n'hastaire', \n'haste', \n'hâte', \n'hâtelet', \n'hâtelette', \n'hâter', \n'hâtier', \n'hâtif', \n'hâtive', \n'hâtiveau', \n'hâtivement', \n'hauban', \n'haubanner', \n'haubanneur', \n'haubanneuse', \n'haubergeon', \n'haubert', \n'hausse', \n'hausse-col', \n'haussement', \n'hausse-pied', \n'hausser', \n'hausseur', \n'hausseuse', \n'hausseusement', \n'haussier', \n'haussière', \n'haut', \n'hautain', \n'hautaine', \n'hautbois', \n'haut-de-chausses', \n'haut-de-forme', \n'haute-contre', \n'haute-forme', \n'hautement', \n'hautes-contre', \n'hautes-formes', \n'hautesse', \n'hauteur', \n'haut-fond', \n'hautin', \n'haut-le-cœur', \n'haut-le-corps', \n'haut-le-pied', \n'haut-parleur', \n'haut-parleurs', \n'haut-relief', \n'hauts-de-chausses', \n'hauts-de-forme', \n'hauts-fonds', \n'hauts-reliefs', \n'hauturier', \n'hauturière', \n'havage', \n'Havanais', \n'Havanaise', \n'havane', \n'hâve', \n'haveneau', \n'havenet', \n'haver', \n'haveur', \n'haveuse', \n'havir', \n'Havrais', \n'Havraise', \n'havre', \n'havresac', \n'havresacs', \n'Hayden', \n'hayon',\n'hé bien!', \n'hé!', \n'heaume', \n'heaumier', \n'heimatlos', \n'hein?', \n'hélas!', \n'hèlement', \n'héler', \n'héleur', \n'héleuse', \n'hello:', \n'hem!', \n'henné', \n'hennir', \n'hennissant', \n'hennissement', \n'hennisseur', \n'hennisseuse', \n'Henri', \n'Henriette', \n'henry', \n'hentai', \n'hep!', \n'héraut', \n'herchage', \n'hercher', \n'hercheur', \n'hercheuse', \n'hère', \n'hérissement', \n'hérisser', \n'hérisseur', \n'hérisson', \n'hérissonner', \n'hermitique', \n'herniaire', \n'hernie', \n'hernieuse', \n'hernieux', \n'héron', \n'héronnier', \n'héronnière', \n'héros', \n'herschage', \n'herscher', \n'herscheur', \n'herscheuse', \n'herse', \n'herser', \n'hertz', \n'hertzien', \n'hertzienne', \n'hêtraie', \n'hêtre', \n'heulandite', \n'heurt', \n'heurtement', \n'heurtequin', \n'heurter', \n'heurteur', \n'heurteuse', \n'heurtoir', \n'hi!', \n'hiatal', \n'hiataux', \n'hiatus', \n'hibou', \n'hiboux', \n'hic et nunc', \n'hic!', \n'hickories', \n'hickory', \n'hidalgo', \n'hideur', \n'hideuse', \n'hideusement', \n'hideux', \n'hie', \n'hiement', \n'hier', \n'hiéracocéphale', \n'hiérarchie', \n'hiérarchique', \n'hiérarchiquement', \n'hiérarchisation', \n'hiérarchiser', \n'hiératique', \n'hiératiquement', \n'hiératisant', \n'hiératisé', \n'hiératisme', \n'hiérochromie', \n'hiérocrate', \n'hiérocratisme', \n'hiérodrame', \n'hiérogamie', \n'hiérogamique', \n'hiéroglyphe', \n'hiéroglyphé', \n'hiéroglyphie', \n'hiéroglyphié', \n'hiéroglyphique', \n'hiéroglyphiquement', \n'hiéroglyphisme', \n'hiéroglyphite', \n'hiérogrammate', \n'hiérogrammatisme', \n'hiérogramme', \n'hiérographe', \n'hiéromancie', \n'hiéromoine', \n'hiérophanie', \n'hiéroscopie', \n'hiéroscopique', \n'hi-fi', \n'highlandais', \n'highlandaise', \n'Highlander', \n'Highlands', \n'high-life', \n'highlifer', \n'highlifeur', \n'hi-han!', \n'hilaire', \n'Hilbert', \n'Hildegarde', \n'hile', \n'hindi', \n'hip hip hip!', \n'hip-hop', \n'hippie', \n'hippies', \n'hissage', \n'hissement', \n'hisser', \n'hisseur', \n'hisseuse', \n'hit', \n'hit-parade', \n'hit-parades', \n'hittite', \n'ho!', \n'Hobart', \n'hobbies', \n'hobby', \n'hobereau', \n'hobereautaille', \n'hobereaux', \n'hoberelle', \n'hoc', \n'hoca', \n'hocco', \n'hoche', \n'hochement', \n'hochepot', \n'hochequeue', \n'hochequeues', \n'hocher', \n'hochet', \n'hockey', \n'hockeyeur', \n'hockeyeuse', \n'hocko', \n'hodja', \n'hoffmannesque', \n'hoffmannien', \n'hoffmannienne', \n'hognement', \n'hogner', \n'holà!', \n'holding', \n'hold-up', \n'hôler', \n'Hollandais', \n'Hollandaise', \n'hollandaisement', \n'hollande', \n'hollandé', \n'hollandiser', \n'hollando-belge', \n'hollando-français', \n'hollando-française', \n'hollando-norvégien', \n'hollando-norvégienne', \n'hollando-saxon', \n'hollando-saxonne', \n'Hollywood', \n'hollywoodesque', \n'hollywoodien', \n'hollywoodienne', \n'homard', \n'homarderie', \n'homardier', \n'home', \n'homespun', \n'hon!', \n'Honduras', \n'hondurien', \n'Hondurienne', \n'hongre', \n'hongreline', \n'hongrer', \n'hongreur', \n'hongreuse', \n'Hongrie', \n'hongrois', \n'Hongroise', \n'hongroyage', \n'hongroyer', \n'hongroyeur', \n'hongroyeuse', \n'honnir', \n'honnissement', \n'honte', \n'honteuse', \n'honteusement', \n'honteux', \n'hop!', \n'hoquet', \n'hoquètement', \n'hoqueter', \n'hoqueton', \n'horde', \n'horion', \n'hormis', \n'hornblende', \n'hors', \n'horsain', \n'hors-bord', \n'hors-bords', \n'hors-caste', \n'hors-castes', \n'hors-d\\'œuvre', \n'horseguard', \n'horseguards', \n'horse-pox', \n'hors-jeu', \n'hors-la-loi', \n'hors-série', \n'horst', \n'hors-texte', \n'hosanna', \n'hosannahs', \n'hosannas', \n'hosannière', \n'hotdog', \n'hotdogs', \n'hotte', \n'hottée', \n'hottentot', \n'hottentote', \n'hotter', \n'hotteur', \n'hotteuse', \n'hou!', \n'houblon', \n'houblonner', \n'houblonneur', \n'houblonneuse', \n'houblonnière', \n'houdan', \n'houe', \n'houhou', \n'houille', \n'houiller', \n'houillère', \n'houilleuse', \n'houilleux', \n'houka', \n'houle', \n'houler', \n'houlette', \n'houleuse', \n'houleusement', \n'houleux', \n'houlier', \n'houlque', \n'houp!', \n'houppe', \n'houppelande', \n'houppette', \n'houppier', \n'houque', \n'houraillis', \n'hourd', \n'hourdage', \n'hourder', \n'hourdi', \n'hourdis', \n'houret', \n'houri', \n'hourque', \n'hourra!', \n'hourvari', \n'houseau', \n'houseaux', \n'houspillement', \n'houspiller', \n'houspilleur', \n'houspilleuse', \n'houssage', \n'houssaie', \n'housse', \n'housser', \n'houssine', \n'houssoir', \n'Houston', \n'houx', \n'hoyau', \n'hoyaux', \n'huard', \n'hublot', \n'huche', \n'huchée', \n'hucher', \n'huchet', \n'huchier', \n'hue!', \n'huée', \n'huehau!', \n'huer', \n'huerta', \n'huertas', \n'Hugo', \n'hugolâtre', \n'hugolâtrie', \n'hugolien', \n'hugolienne', \n'hugotique', \n'hugotisme', \n'huguenot', \n'huguenote', \n'Hugues', \n'Huguette', \n'huis-clos', \n'huit', \n'huitain', \n'huitaine', \n'huitante', \n'huitième', \n'Hulk', \n'Hulkette', \n'hulotte', \n'hululation', \n'hululer', \n'hum!', \n'humage', \n'humement', \n'humer', \n'humeuse', \n'humeux', \n'humoter', \n'hune', \n'hunier', \n'hunter', \n'huppe', \n'huppé', \n'huque', \n'hure', \n'hurlade', \n'hurlée', \n'hurlement', \n'hurler', \n'hurleur', \n'hurleuse', \n'huro-iroquois', \n'huro-iroquoise', \n'huron', \n'huronien', \n'huronienne', \n'huronne', \n'hurricane', \n'huskies', \n'husky', \n'hussard', \n'hussite', \n'hussitisme', \n'hutin', \n'hutinet', \n'hutte', \n'hutteau', \n'hutter', \n'huttier'\n];\n\n\treturn (list.includes(Z38042K1));\n}"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "hardcoded list of aspirant \"h\" from enwiki"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Reasonable but not rigorous. Processed semi-manually from [[:w:Aspirated_h]]."
}
]
}
}
9q6iuvpxr525icfik8f81ea4hzc55nl
Z38129
0
88377
294436
293457
2026-07-28T01:41:08Z
TheAhasan
91253
Added Z38361 to the approved list of test cases
294436
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38129"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6",
"Z17K2": "Z38129K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "text"
}
]
}
}
],
"Z8K2": "Z13518",
"Z8K3": [
"Z20",
"Z38131",
"Z38132",
"Z38133",
"Z38134",
"Z38135",
"Z38136",
"Z38361"
],
"Z8K4": [
"Z14",
"Z38130"
],
"Z8K5": "Z38129"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Bangla syllable count"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Returns the number of syllables in a Bangla word or text."
}
]
}
}
7cv45qddhc7qbkm2rekuuin9mxvox2i
Wikifunctions:Status updates/2026-07-16/de
4
88589
294408
294221
2026-07-27T21:08:24Z
Ameisenigel
44
Created page with "=== John Samuel: In diesem Pride Month konzentriere ich mich auf die Abstrakte Wikipedia ==="
294408
wikitext
text/x-wiki
<languages/>
{{Wikifunctions updates
| prevlabel = Vorheriges Update
| prev = 2026-07-08
| nextlabel = Nächstes Update
| next =
}}
Willkommen bei Newsletter #257, der [https://www.wikifunctions.org/view/en/Z14629?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z14629%22%2C%22Z14629K1%22%3A%7B%22Z1K1%22%3A%22Z13518%22%2C%22Z13518K1%22%3A%223%22%7D%7D dritten Fermat-Zahl]!
<span id="Beyond_syntactic_tables"></span>
=== Über syntaktische Tabellen hinaus ===
In den letzten Wochen haben einige Freiwillige und ich mit [[Wikifunctions:Type proposals/Syntactic table|dem Vorschlag für syntaktische Tabellen]] experimentiert. Die Community hat uns bereits früh gewarnt, dass dieser Ansatz wahrscheinlich nicht für morphologisch reiche Sprachen, wie etwa Türkisch oder Finnisch, skalierbar wäre, da Wörter dort Hunderte, wenn nicht gar Tausende von Formen haben könnten.
Und tatsächlich sind wir auf Probleme gestoßen. Glücklicherweise nicht so schnell wie erwartet, aber doch recht bald. Vielleicht sind diese Schwierigkeiten nur vorübergehender Natur und betreffen lediglich unsere aktuellen Vorhaben, es ist jedoch zu erwarten, dass sie uns mit wachsenden Ambitionen irgendwann überfordern werden. Daher bin ich der Meinung, dass wir die derzeitigen syntaktischen Tabellen verbessern müssen. Ich habe [[Wikifunctions:Type proposals/Words with many forms|ein Dokument zu möglichen Lösungsansätzen]] verfasst und möchte die Community dazu einladen, darüber zu diskutieren und ihre Gedanken zu äußern. Sofern keine Einwände bestehen, würde ich die Ergebnisse dieser Diskussion gerne in der Woche nach der Wikimania umsetzen und sehen, wohin uns das führt.
<span id="John_Samuel:_This_Pride_Month,_I_Am_Focusing_on_Abstract_Wikipedia"></span>
=== John Samuel: In diesem Pride Month konzentriere ich mich auf die Abstrakte Wikipedia ===
<div lang="en" dir="ltr" class="mw-content-ltr">
[[User:Jsamwrites|John Samuel]] wrote a blog post describing his thoughts and hopes for Abstract Wikipedia:
[https://jsamwrites.medium.com/this-pride-month-i-am-focusing-on-abstract-wikipedia-287bbae593c8 jsamwrites.medium.com/this-pride-month-i-am-focusing-on-abstract-wikipedia-287bbae593c8]
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
I quote John:
</div>
<blockquote><span lang="en" dir="ltr" class="mw-content-ltr">''“Research on multilingual Wikipedia has shown that different language communities develop their own perspectives, priorities, and cultural contexts. Knowledge is not merely translated; it is shaped by communities.''</span>
<span lang="en" dir="ltr" class="mw-content-ltr">''Abstract Wikipedia will not replace those communities. Instead, it offers an opportunity to share certain forms of knowledge more broadly while preserving linguistic diversity.”''</span></blockquote>
<div lang="en" dir="ltr" class="mw-content-ltr">
Particularly noteworthy are [[:commons:File:Wikicafe-JohnSAMUEL.pdf|his presentation slides which he presented in Lyon last month]] (in French).
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Jens Ohlig: Calling Wikifunctions for der, die, das ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
[[User:Jens Ohlig|Jens Ohlig]] wrote a blog post on the implementation of the der, die, das tool that we have pointed to last week: [https://blog.johl.io/calling-wikifunctions-for-der-die-das/ blog.johl.io/calling-wikifunctions-for-der-die-das]
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
It offers a great write-up into one way Wikifunctions can be used, and how it connects to Wikidata. I quote Jens:
</div>
<blockquote><span lang="en" dir="ltr" class="mw-content-ltr">''“To extract the information on the grammatical gender, we use Wikifunctions. Wikifunctions is a Wikimedia project that aims to create a collaboratively maintained library of functions. A function is a procedure that takes one or more inputs and produces an output. Examples include converting units, transforming singular words into plural forms, or carrying out simple calculations. Wikifunctions is intended to support the reuse of such functions across Wikimedia projects and other software environments. It’s also the foundation of Abstract Wikipedia. And, last, but not least, we can use these functions in remote calls from the command line.”''</span></blockquote>
<div lang="en" dir="ltr" class="mw-content-ltr">
Thank you, Jens!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Recent Changes in the software ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This week, we fixed a bug that meant that moving complex items up and down in a list would show the wrong expanded "view" ([[:phab:T431714|T431714]]). And to make it easier to recognise what you're searching for, we now show a Function icon or Language icon in the search field, like we do for Wikidata items.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
As part of wider work to support new languages in MediaWiki, we created Z2051/kix "Khiamniungan Naga" ([[:phab:T428856|T428856]]) and Z2052/uzs "Southern Uzbek" ([[:phab:T423735|T423735]]).
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Wikifunctions and Abstract Wikipedia at Wikimania 2026 ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Next week is [[:wikimania:Special:MyLanguage/2026:Wikimania|Wikimania 2026]], the annual main conference for all things Wikimedia. Wikimania will be in Paris, France from 21–25 July. We hope to see many of you there. There will be a number of events about Abstract Wikipedia and Wikifunctions (all times local):
</div>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Dnshitobu|Dnshitobu]] has session “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/TWGKWB/ Making indigenous languages ready for Wikifunctions]” on Friday, 14:30</span>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Mahir256|Mahir256]] will organize a workshop “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/HYTQBF/ From Abstract Content to Concrete Text with Wikidata Lexemes]” on Friday, 16:00</span>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Jdforrester (WMF)|James]], [[User:Sannita (WMF)|Luca]], and [[User:DVrandecic (WMF)|Denny]] will be running “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/AKFG8R/ Abstract Wikipedia workshop: Let's create a multi-lingual article!]” on Saturday, 11:00</span>
<div lang="en" dir="ltr" class="mw-content-ltr">
If there are any further related events, let us know, and we are happy to tell folks about them!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Due to Wikimania next week, we are skipping the newsletter.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== News in Types: Thoughts on Wikifunctions Object References ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We invite you all to create new and discuss the existing [[Wikifunctions:Type proposals|Type proposals]] so we can keep on creating new Types. Thanks to all the community members contributing to the discussion and writing proposals, making it possible to extend the Wikifunctions to new domains!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We have been particularly discussing the proposal for [[Wikifunctions:Type proposals/Wikifunctions object reference|Wikifunctions Object References]] in the team and like it. The only thing we are considering to change is to make it a generic type, stating the object’s type.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Furthermore, we are discussing [[Wikifunctions:Type proposals/Words with many forms|an evolution]] of the (experimental) [[Wikifunctions:Type proposals/Syntactic table|Syntactic tables]], as you can see in the top news above.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Fresh Functions weekly: 45 new Functions ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This week we had 45 new functions. Here is an incomplete list of functions with implementations and passing tests to get a taste of what functions have been created. We crossed 4700 functions, and are just one week shy of Wikimania – maybe we can get to a round number during Wikimania? Thanks everybody for contributing!
</div>
* {{Z|Z37348}}
* {{Z|Z37353}}
* {{Z|Z37354}}
* {{Z|Z37357}}
* {{Z|Z37361}}
* {{Z|Z37367}}
* {{Z|Z37375}}
* {{Z|Z37387}}
* {{Z|Z37389}}
* {{Z|Z37391}}
* {{Z|Z37393}}
* {{Z|Z37395}}
* {{Z|Z37403}}
* {{Z|Z37415}}
* {{Z|Z37419}}
* {{Z|Z37422}}
* {{Z|Z37424}}
* {{Z|Z37426}}
* {{Z|Z37436}}
* {{Z|Z37441}}
* {{Z|Z37447}}
* {{Z|Z37450}}
* {{Z|Z37454}}
* {{Z|Z37459}}
* {{Z|Z37464}}
* {{Z|Z37465}}
* {{Z|Z37473}}
* {{Z|Z37481}}
* {{Z|Z37482}}
* {{Z|Z37493}}
* {{Z|Z37507}}
* {{Z|Z37510}}
* {{Z|Z37512}}
* {{Z|Z37518}}
* {{Z|Z37533}}
* {{Z|Z37541}}
* {{Z|Z37551}}
* {{Z|Z37609}}
* {{Z|Z37623}}
* {{Z|Z37633}}
* {{Z|Z37640}}
* {{Z|Z37644}}
* {{Z|Z37647}}
* {{Z|Z37655}}
<div lang="en" dir="ltr" class="mw-content-ltr">
A [https://www.wikifunctions.org/wiki/Special:ListObjectsByType?type=Z8&orderby=latest complete list of all functions sorted by when they were created] is available.
</div>
[[Category:Status updates{{#translation:}}|2026-07-16]]
0oaa07oeqv718vc1f5n6023bur430vj
294411
294408
2026-07-27T21:09:01Z
Ameisenigel
44
Created page with "[[$1|John Samuel]] hat einen Blogbeitrag verfasst, in dem er seine Gedanken und Hoffnungen für die Abstrakte Wikipedia schildert: [$2 jsamwrites.medium.com/this-pride-month-i-am-focusing-on-abstract-wikipedia-287bbae593c8]"
294411
wikitext
text/x-wiki
<languages/>
{{Wikifunctions updates
| prevlabel = Vorheriges Update
| prev = 2026-07-08
| nextlabel = Nächstes Update
| next =
}}
Willkommen bei Newsletter #257, der [https://www.wikifunctions.org/view/en/Z14629?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z14629%22%2C%22Z14629K1%22%3A%7B%22Z1K1%22%3A%22Z13518%22%2C%22Z13518K1%22%3A%223%22%7D%7D dritten Fermat-Zahl]!
<span id="Beyond_syntactic_tables"></span>
=== Über syntaktische Tabellen hinaus ===
In den letzten Wochen haben einige Freiwillige und ich mit [[Wikifunctions:Type proposals/Syntactic table|dem Vorschlag für syntaktische Tabellen]] experimentiert. Die Community hat uns bereits früh gewarnt, dass dieser Ansatz wahrscheinlich nicht für morphologisch reiche Sprachen, wie etwa Türkisch oder Finnisch, skalierbar wäre, da Wörter dort Hunderte, wenn nicht gar Tausende von Formen haben könnten.
Und tatsächlich sind wir auf Probleme gestoßen. Glücklicherweise nicht so schnell wie erwartet, aber doch recht bald. Vielleicht sind diese Schwierigkeiten nur vorübergehender Natur und betreffen lediglich unsere aktuellen Vorhaben, es ist jedoch zu erwarten, dass sie uns mit wachsenden Ambitionen irgendwann überfordern werden. Daher bin ich der Meinung, dass wir die derzeitigen syntaktischen Tabellen verbessern müssen. Ich habe [[Wikifunctions:Type proposals/Words with many forms|ein Dokument zu möglichen Lösungsansätzen]] verfasst und möchte die Community dazu einladen, darüber zu diskutieren und ihre Gedanken zu äußern. Sofern keine Einwände bestehen, würde ich die Ergebnisse dieser Diskussion gerne in der Woche nach der Wikimania umsetzen und sehen, wohin uns das führt.
<span id="John_Samuel:_This_Pride_Month,_I_Am_Focusing_on_Abstract_Wikipedia"></span>
=== John Samuel: In diesem Pride Month konzentriere ich mich auf die Abstrakte Wikipedia ===
[[User:Jsamwrites|John Samuel]] hat einen Blogbeitrag verfasst, in dem er seine Gedanken und Hoffnungen für die Abstrakte Wikipedia schildert:
[https://jsamwrites.medium.com/this-pride-month-i-am-focusing-on-abstract-wikipedia-287bbae593c8 jsamwrites.medium.com/this-pride-month-i-am-focusing-on-abstract-wikipedia-287bbae593c8]
<div lang="en" dir="ltr" class="mw-content-ltr">
I quote John:
</div>
<blockquote><span lang="en" dir="ltr" class="mw-content-ltr">''“Research on multilingual Wikipedia has shown that different language communities develop their own perspectives, priorities, and cultural contexts. Knowledge is not merely translated; it is shaped by communities.''</span>
<span lang="en" dir="ltr" class="mw-content-ltr">''Abstract Wikipedia will not replace those communities. Instead, it offers an opportunity to share certain forms of knowledge more broadly while preserving linguistic diversity.”''</span></blockquote>
<div lang="en" dir="ltr" class="mw-content-ltr">
Particularly noteworthy are [[:commons:File:Wikicafe-JohnSAMUEL.pdf|his presentation slides which he presented in Lyon last month]] (in French).
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Jens Ohlig: Calling Wikifunctions for der, die, das ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
[[User:Jens Ohlig|Jens Ohlig]] wrote a blog post on the implementation of the der, die, das tool that we have pointed to last week: [https://blog.johl.io/calling-wikifunctions-for-der-die-das/ blog.johl.io/calling-wikifunctions-for-der-die-das]
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
It offers a great write-up into one way Wikifunctions can be used, and how it connects to Wikidata. I quote Jens:
</div>
<blockquote><span lang="en" dir="ltr" class="mw-content-ltr">''“To extract the information on the grammatical gender, we use Wikifunctions. Wikifunctions is a Wikimedia project that aims to create a collaboratively maintained library of functions. A function is a procedure that takes one or more inputs and produces an output. Examples include converting units, transforming singular words into plural forms, or carrying out simple calculations. Wikifunctions is intended to support the reuse of such functions across Wikimedia projects and other software environments. It’s also the foundation of Abstract Wikipedia. And, last, but not least, we can use these functions in remote calls from the command line.”''</span></blockquote>
<div lang="en" dir="ltr" class="mw-content-ltr">
Thank you, Jens!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Recent Changes in the software ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This week, we fixed a bug that meant that moving complex items up and down in a list would show the wrong expanded "view" ([[:phab:T431714|T431714]]). And to make it easier to recognise what you're searching for, we now show a Function icon or Language icon in the search field, like we do for Wikidata items.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
As part of wider work to support new languages in MediaWiki, we created Z2051/kix "Khiamniungan Naga" ([[:phab:T428856|T428856]]) and Z2052/uzs "Southern Uzbek" ([[:phab:T423735|T423735]]).
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Wikifunctions and Abstract Wikipedia at Wikimania 2026 ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Next week is [[:wikimania:Special:MyLanguage/2026:Wikimania|Wikimania 2026]], the annual main conference for all things Wikimedia. Wikimania will be in Paris, France from 21–25 July. We hope to see many of you there. There will be a number of events about Abstract Wikipedia and Wikifunctions (all times local):
</div>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Dnshitobu|Dnshitobu]] has session “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/TWGKWB/ Making indigenous languages ready for Wikifunctions]” on Friday, 14:30</span>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Mahir256|Mahir256]] will organize a workshop “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/HYTQBF/ From Abstract Content to Concrete Text with Wikidata Lexemes]” on Friday, 16:00</span>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Jdforrester (WMF)|James]], [[User:Sannita (WMF)|Luca]], and [[User:DVrandecic (WMF)|Denny]] will be running “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/AKFG8R/ Abstract Wikipedia workshop: Let's create a multi-lingual article!]” on Saturday, 11:00</span>
<div lang="en" dir="ltr" class="mw-content-ltr">
If there are any further related events, let us know, and we are happy to tell folks about them!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Due to Wikimania next week, we are skipping the newsletter.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== News in Types: Thoughts on Wikifunctions Object References ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We invite you all to create new and discuss the existing [[Wikifunctions:Type proposals|Type proposals]] so we can keep on creating new Types. Thanks to all the community members contributing to the discussion and writing proposals, making it possible to extend the Wikifunctions to new domains!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We have been particularly discussing the proposal for [[Wikifunctions:Type proposals/Wikifunctions object reference|Wikifunctions Object References]] in the team and like it. The only thing we are considering to change is to make it a generic type, stating the object’s type.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Furthermore, we are discussing [[Wikifunctions:Type proposals/Words with many forms|an evolution]] of the (experimental) [[Wikifunctions:Type proposals/Syntactic table|Syntactic tables]], as you can see in the top news above.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Fresh Functions weekly: 45 new Functions ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This week we had 45 new functions. Here is an incomplete list of functions with implementations and passing tests to get a taste of what functions have been created. We crossed 4700 functions, and are just one week shy of Wikimania – maybe we can get to a round number during Wikimania? Thanks everybody for contributing!
</div>
* {{Z|Z37348}}
* {{Z|Z37353}}
* {{Z|Z37354}}
* {{Z|Z37357}}
* {{Z|Z37361}}
* {{Z|Z37367}}
* {{Z|Z37375}}
* {{Z|Z37387}}
* {{Z|Z37389}}
* {{Z|Z37391}}
* {{Z|Z37393}}
* {{Z|Z37395}}
* {{Z|Z37403}}
* {{Z|Z37415}}
* {{Z|Z37419}}
* {{Z|Z37422}}
* {{Z|Z37424}}
* {{Z|Z37426}}
* {{Z|Z37436}}
* {{Z|Z37441}}
* {{Z|Z37447}}
* {{Z|Z37450}}
* {{Z|Z37454}}
* {{Z|Z37459}}
* {{Z|Z37464}}
* {{Z|Z37465}}
* {{Z|Z37473}}
* {{Z|Z37481}}
* {{Z|Z37482}}
* {{Z|Z37493}}
* {{Z|Z37507}}
* {{Z|Z37510}}
* {{Z|Z37512}}
* {{Z|Z37518}}
* {{Z|Z37533}}
* {{Z|Z37541}}
* {{Z|Z37551}}
* {{Z|Z37609}}
* {{Z|Z37623}}
* {{Z|Z37633}}
* {{Z|Z37640}}
* {{Z|Z37644}}
* {{Z|Z37647}}
* {{Z|Z37655}}
<div lang="en" dir="ltr" class="mw-content-ltr">
A [https://www.wikifunctions.org/wiki/Special:ListObjectsByType?type=Z8&orderby=latest complete list of all functions sorted by when they were created] is available.
</div>
[[Category:Status updates{{#translation:}}|2026-07-16]]
cju33c2ytnq0o0l5jfw1l9q1gsj8syy
294413
294411
2026-07-27T21:09:05Z
Ameisenigel
44
Created page with "Ich zitiere John:"
294413
wikitext
text/x-wiki
<languages/>
{{Wikifunctions updates
| prevlabel = Vorheriges Update
| prev = 2026-07-08
| nextlabel = Nächstes Update
| next =
}}
Willkommen bei Newsletter #257, der [https://www.wikifunctions.org/view/en/Z14629?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z14629%22%2C%22Z14629K1%22%3A%7B%22Z1K1%22%3A%22Z13518%22%2C%22Z13518K1%22%3A%223%22%7D%7D dritten Fermat-Zahl]!
<span id="Beyond_syntactic_tables"></span>
=== Über syntaktische Tabellen hinaus ===
In den letzten Wochen haben einige Freiwillige und ich mit [[Wikifunctions:Type proposals/Syntactic table|dem Vorschlag für syntaktische Tabellen]] experimentiert. Die Community hat uns bereits früh gewarnt, dass dieser Ansatz wahrscheinlich nicht für morphologisch reiche Sprachen, wie etwa Türkisch oder Finnisch, skalierbar wäre, da Wörter dort Hunderte, wenn nicht gar Tausende von Formen haben könnten.
Und tatsächlich sind wir auf Probleme gestoßen. Glücklicherweise nicht so schnell wie erwartet, aber doch recht bald. Vielleicht sind diese Schwierigkeiten nur vorübergehender Natur und betreffen lediglich unsere aktuellen Vorhaben, es ist jedoch zu erwarten, dass sie uns mit wachsenden Ambitionen irgendwann überfordern werden. Daher bin ich der Meinung, dass wir die derzeitigen syntaktischen Tabellen verbessern müssen. Ich habe [[Wikifunctions:Type proposals/Words with many forms|ein Dokument zu möglichen Lösungsansätzen]] verfasst und möchte die Community dazu einladen, darüber zu diskutieren und ihre Gedanken zu äußern. Sofern keine Einwände bestehen, würde ich die Ergebnisse dieser Diskussion gerne in der Woche nach der Wikimania umsetzen und sehen, wohin uns das führt.
<span id="John_Samuel:_This_Pride_Month,_I_Am_Focusing_on_Abstract_Wikipedia"></span>
=== John Samuel: In diesem Pride Month konzentriere ich mich auf die Abstrakte Wikipedia ===
[[User:Jsamwrites|John Samuel]] hat einen Blogbeitrag verfasst, in dem er seine Gedanken und Hoffnungen für die Abstrakte Wikipedia schildert:
[https://jsamwrites.medium.com/this-pride-month-i-am-focusing-on-abstract-wikipedia-287bbae593c8 jsamwrites.medium.com/this-pride-month-i-am-focusing-on-abstract-wikipedia-287bbae593c8]
Ich zitiere John:
<blockquote><span lang="en" dir="ltr" class="mw-content-ltr">''“Research on multilingual Wikipedia has shown that different language communities develop their own perspectives, priorities, and cultural contexts. Knowledge is not merely translated; it is shaped by communities.''</span>
<span lang="en" dir="ltr" class="mw-content-ltr">''Abstract Wikipedia will not replace those communities. Instead, it offers an opportunity to share certain forms of knowledge more broadly while preserving linguistic diversity.”''</span></blockquote>
<div lang="en" dir="ltr" class="mw-content-ltr">
Particularly noteworthy are [[:commons:File:Wikicafe-JohnSAMUEL.pdf|his presentation slides which he presented in Lyon last month]] (in French).
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Jens Ohlig: Calling Wikifunctions for der, die, das ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
[[User:Jens Ohlig|Jens Ohlig]] wrote a blog post on the implementation of the der, die, das tool that we have pointed to last week: [https://blog.johl.io/calling-wikifunctions-for-der-die-das/ blog.johl.io/calling-wikifunctions-for-der-die-das]
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
It offers a great write-up into one way Wikifunctions can be used, and how it connects to Wikidata. I quote Jens:
</div>
<blockquote><span lang="en" dir="ltr" class="mw-content-ltr">''“To extract the information on the grammatical gender, we use Wikifunctions. Wikifunctions is a Wikimedia project that aims to create a collaboratively maintained library of functions. A function is a procedure that takes one or more inputs and produces an output. Examples include converting units, transforming singular words into plural forms, or carrying out simple calculations. Wikifunctions is intended to support the reuse of such functions across Wikimedia projects and other software environments. It’s also the foundation of Abstract Wikipedia. And, last, but not least, we can use these functions in remote calls from the command line.”''</span></blockquote>
<div lang="en" dir="ltr" class="mw-content-ltr">
Thank you, Jens!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Recent Changes in the software ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This week, we fixed a bug that meant that moving complex items up and down in a list would show the wrong expanded "view" ([[:phab:T431714|T431714]]). And to make it easier to recognise what you're searching for, we now show a Function icon or Language icon in the search field, like we do for Wikidata items.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
As part of wider work to support new languages in MediaWiki, we created Z2051/kix "Khiamniungan Naga" ([[:phab:T428856|T428856]]) and Z2052/uzs "Southern Uzbek" ([[:phab:T423735|T423735]]).
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Wikifunctions and Abstract Wikipedia at Wikimania 2026 ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Next week is [[:wikimania:Special:MyLanguage/2026:Wikimania|Wikimania 2026]], the annual main conference for all things Wikimedia. Wikimania will be in Paris, France from 21–25 July. We hope to see many of you there. There will be a number of events about Abstract Wikipedia and Wikifunctions (all times local):
</div>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Dnshitobu|Dnshitobu]] has session “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/TWGKWB/ Making indigenous languages ready for Wikifunctions]” on Friday, 14:30</span>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Mahir256|Mahir256]] will organize a workshop “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/HYTQBF/ From Abstract Content to Concrete Text with Wikidata Lexemes]” on Friday, 16:00</span>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Jdforrester (WMF)|James]], [[User:Sannita (WMF)|Luca]], and [[User:DVrandecic (WMF)|Denny]] will be running “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/AKFG8R/ Abstract Wikipedia workshop: Let's create a multi-lingual article!]” on Saturday, 11:00</span>
<div lang="en" dir="ltr" class="mw-content-ltr">
If there are any further related events, let us know, and we are happy to tell folks about them!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Due to Wikimania next week, we are skipping the newsletter.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== News in Types: Thoughts on Wikifunctions Object References ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We invite you all to create new and discuss the existing [[Wikifunctions:Type proposals|Type proposals]] so we can keep on creating new Types. Thanks to all the community members contributing to the discussion and writing proposals, making it possible to extend the Wikifunctions to new domains!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We have been particularly discussing the proposal for [[Wikifunctions:Type proposals/Wikifunctions object reference|Wikifunctions Object References]] in the team and like it. The only thing we are considering to change is to make it a generic type, stating the object’s type.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Furthermore, we are discussing [[Wikifunctions:Type proposals/Words with many forms|an evolution]] of the (experimental) [[Wikifunctions:Type proposals/Syntactic table|Syntactic tables]], as you can see in the top news above.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Fresh Functions weekly: 45 new Functions ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This week we had 45 new functions. Here is an incomplete list of functions with implementations and passing tests to get a taste of what functions have been created. We crossed 4700 functions, and are just one week shy of Wikimania – maybe we can get to a round number during Wikimania? Thanks everybody for contributing!
</div>
* {{Z|Z37348}}
* {{Z|Z37353}}
* {{Z|Z37354}}
* {{Z|Z37357}}
* {{Z|Z37361}}
* {{Z|Z37367}}
* {{Z|Z37375}}
* {{Z|Z37387}}
* {{Z|Z37389}}
* {{Z|Z37391}}
* {{Z|Z37393}}
* {{Z|Z37395}}
* {{Z|Z37403}}
* {{Z|Z37415}}
* {{Z|Z37419}}
* {{Z|Z37422}}
* {{Z|Z37424}}
* {{Z|Z37426}}
* {{Z|Z37436}}
* {{Z|Z37441}}
* {{Z|Z37447}}
* {{Z|Z37450}}
* {{Z|Z37454}}
* {{Z|Z37459}}
* {{Z|Z37464}}
* {{Z|Z37465}}
* {{Z|Z37473}}
* {{Z|Z37481}}
* {{Z|Z37482}}
* {{Z|Z37493}}
* {{Z|Z37507}}
* {{Z|Z37510}}
* {{Z|Z37512}}
* {{Z|Z37518}}
* {{Z|Z37533}}
* {{Z|Z37541}}
* {{Z|Z37551}}
* {{Z|Z37609}}
* {{Z|Z37623}}
* {{Z|Z37633}}
* {{Z|Z37640}}
* {{Z|Z37644}}
* {{Z|Z37647}}
* {{Z|Z37655}}
<div lang="en" dir="ltr" class="mw-content-ltr">
A [https://www.wikifunctions.org/wiki/Special:ListObjectsByType?type=Z8&orderby=latest complete list of all functions sorted by when they were created] is available.
</div>
[[Category:Status updates{{#translation:}}|2026-07-16]]
3nxu2yyz9m0nuzvksq92iwwgae8bip1
294416
294413
2026-07-27T21:10:05Z
Ameisenigel
44
Created page with "''“Untersuchungen zur mehrsprachigen Wikipedia haben gezeigt, dass verschiedene Sprachgemeinschaften ihre eigenen Perspektiven, Prioritäten und kulturellen Kontexte entwickeln. Wissen wird nicht bloß übersetzt; es wird von Gemeinschaften geprägt.''"
294416
wikitext
text/x-wiki
<languages/>
{{Wikifunctions updates
| prevlabel = Vorheriges Update
| prev = 2026-07-08
| nextlabel = Nächstes Update
| next =
}}
Willkommen bei Newsletter #257, der [https://www.wikifunctions.org/view/en/Z14629?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z14629%22%2C%22Z14629K1%22%3A%7B%22Z1K1%22%3A%22Z13518%22%2C%22Z13518K1%22%3A%223%22%7D%7D dritten Fermat-Zahl]!
<span id="Beyond_syntactic_tables"></span>
=== Über syntaktische Tabellen hinaus ===
In den letzten Wochen haben einige Freiwillige und ich mit [[Wikifunctions:Type proposals/Syntactic table|dem Vorschlag für syntaktische Tabellen]] experimentiert. Die Community hat uns bereits früh gewarnt, dass dieser Ansatz wahrscheinlich nicht für morphologisch reiche Sprachen, wie etwa Türkisch oder Finnisch, skalierbar wäre, da Wörter dort Hunderte, wenn nicht gar Tausende von Formen haben könnten.
Und tatsächlich sind wir auf Probleme gestoßen. Glücklicherweise nicht so schnell wie erwartet, aber doch recht bald. Vielleicht sind diese Schwierigkeiten nur vorübergehender Natur und betreffen lediglich unsere aktuellen Vorhaben, es ist jedoch zu erwarten, dass sie uns mit wachsenden Ambitionen irgendwann überfordern werden. Daher bin ich der Meinung, dass wir die derzeitigen syntaktischen Tabellen verbessern müssen. Ich habe [[Wikifunctions:Type proposals/Words with many forms|ein Dokument zu möglichen Lösungsansätzen]] verfasst und möchte die Community dazu einladen, darüber zu diskutieren und ihre Gedanken zu äußern. Sofern keine Einwände bestehen, würde ich die Ergebnisse dieser Diskussion gerne in der Woche nach der Wikimania umsetzen und sehen, wohin uns das führt.
<span id="John_Samuel:_This_Pride_Month,_I_Am_Focusing_on_Abstract_Wikipedia"></span>
=== John Samuel: In diesem Pride Month konzentriere ich mich auf die Abstrakte Wikipedia ===
[[User:Jsamwrites|John Samuel]] hat einen Blogbeitrag verfasst, in dem er seine Gedanken und Hoffnungen für die Abstrakte Wikipedia schildert:
[https://jsamwrites.medium.com/this-pride-month-i-am-focusing-on-abstract-wikipedia-287bbae593c8 jsamwrites.medium.com/this-pride-month-i-am-focusing-on-abstract-wikipedia-287bbae593c8]
Ich zitiere John:
<blockquote>''“Untersuchungen zur mehrsprachigen Wikipedia haben gezeigt, dass verschiedene Sprachgemeinschaften ihre eigenen Perspektiven, Prioritäten und kulturellen Kontexte entwickeln. Wissen wird nicht bloß übersetzt; es wird von Gemeinschaften geprägt.''
<span lang="en" dir="ltr" class="mw-content-ltr">''Abstract Wikipedia will not replace those communities. Instead, it offers an opportunity to share certain forms of knowledge more broadly while preserving linguistic diversity.”''</span></blockquote>
<div lang="en" dir="ltr" class="mw-content-ltr">
Particularly noteworthy are [[:commons:File:Wikicafe-JohnSAMUEL.pdf|his presentation slides which he presented in Lyon last month]] (in French).
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Jens Ohlig: Calling Wikifunctions for der, die, das ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
[[User:Jens Ohlig|Jens Ohlig]] wrote a blog post on the implementation of the der, die, das tool that we have pointed to last week: [https://blog.johl.io/calling-wikifunctions-for-der-die-das/ blog.johl.io/calling-wikifunctions-for-der-die-das]
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
It offers a great write-up into one way Wikifunctions can be used, and how it connects to Wikidata. I quote Jens:
</div>
<blockquote><span lang="en" dir="ltr" class="mw-content-ltr">''“To extract the information on the grammatical gender, we use Wikifunctions. Wikifunctions is a Wikimedia project that aims to create a collaboratively maintained library of functions. A function is a procedure that takes one or more inputs and produces an output. Examples include converting units, transforming singular words into plural forms, or carrying out simple calculations. Wikifunctions is intended to support the reuse of such functions across Wikimedia projects and other software environments. It’s also the foundation of Abstract Wikipedia. And, last, but not least, we can use these functions in remote calls from the command line.”''</span></blockquote>
<div lang="en" dir="ltr" class="mw-content-ltr">
Thank you, Jens!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Recent Changes in the software ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This week, we fixed a bug that meant that moving complex items up and down in a list would show the wrong expanded "view" ([[:phab:T431714|T431714]]). And to make it easier to recognise what you're searching for, we now show a Function icon or Language icon in the search field, like we do for Wikidata items.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
As part of wider work to support new languages in MediaWiki, we created Z2051/kix "Khiamniungan Naga" ([[:phab:T428856|T428856]]) and Z2052/uzs "Southern Uzbek" ([[:phab:T423735|T423735]]).
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Wikifunctions and Abstract Wikipedia at Wikimania 2026 ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Next week is [[:wikimania:Special:MyLanguage/2026:Wikimania|Wikimania 2026]], the annual main conference for all things Wikimedia. Wikimania will be in Paris, France from 21–25 July. We hope to see many of you there. There will be a number of events about Abstract Wikipedia and Wikifunctions (all times local):
</div>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Dnshitobu|Dnshitobu]] has session “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/TWGKWB/ Making indigenous languages ready for Wikifunctions]” on Friday, 14:30</span>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Mahir256|Mahir256]] will organize a workshop “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/HYTQBF/ From Abstract Content to Concrete Text with Wikidata Lexemes]” on Friday, 16:00</span>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Jdforrester (WMF)|James]], [[User:Sannita (WMF)|Luca]], and [[User:DVrandecic (WMF)|Denny]] will be running “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/AKFG8R/ Abstract Wikipedia workshop: Let's create a multi-lingual article!]” on Saturday, 11:00</span>
<div lang="en" dir="ltr" class="mw-content-ltr">
If there are any further related events, let us know, and we are happy to tell folks about them!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Due to Wikimania next week, we are skipping the newsletter.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== News in Types: Thoughts on Wikifunctions Object References ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We invite you all to create new and discuss the existing [[Wikifunctions:Type proposals|Type proposals]] so we can keep on creating new Types. Thanks to all the community members contributing to the discussion and writing proposals, making it possible to extend the Wikifunctions to new domains!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We have been particularly discussing the proposal for [[Wikifunctions:Type proposals/Wikifunctions object reference|Wikifunctions Object References]] in the team and like it. The only thing we are considering to change is to make it a generic type, stating the object’s type.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Furthermore, we are discussing [[Wikifunctions:Type proposals/Words with many forms|an evolution]] of the (experimental) [[Wikifunctions:Type proposals/Syntactic table|Syntactic tables]], as you can see in the top news above.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Fresh Functions weekly: 45 new Functions ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This week we had 45 new functions. Here is an incomplete list of functions with implementations and passing tests to get a taste of what functions have been created. We crossed 4700 functions, and are just one week shy of Wikimania – maybe we can get to a round number during Wikimania? Thanks everybody for contributing!
</div>
* {{Z|Z37348}}
* {{Z|Z37353}}
* {{Z|Z37354}}
* {{Z|Z37357}}
* {{Z|Z37361}}
* {{Z|Z37367}}
* {{Z|Z37375}}
* {{Z|Z37387}}
* {{Z|Z37389}}
* {{Z|Z37391}}
* {{Z|Z37393}}
* {{Z|Z37395}}
* {{Z|Z37403}}
* {{Z|Z37415}}
* {{Z|Z37419}}
* {{Z|Z37422}}
* {{Z|Z37424}}
* {{Z|Z37426}}
* {{Z|Z37436}}
* {{Z|Z37441}}
* {{Z|Z37447}}
* {{Z|Z37450}}
* {{Z|Z37454}}
* {{Z|Z37459}}
* {{Z|Z37464}}
* {{Z|Z37465}}
* {{Z|Z37473}}
* {{Z|Z37481}}
* {{Z|Z37482}}
* {{Z|Z37493}}
* {{Z|Z37507}}
* {{Z|Z37510}}
* {{Z|Z37512}}
* {{Z|Z37518}}
* {{Z|Z37533}}
* {{Z|Z37541}}
* {{Z|Z37551}}
* {{Z|Z37609}}
* {{Z|Z37623}}
* {{Z|Z37633}}
* {{Z|Z37640}}
* {{Z|Z37644}}
* {{Z|Z37647}}
* {{Z|Z37655}}
<div lang="en" dir="ltr" class="mw-content-ltr">
A [https://www.wikifunctions.org/wiki/Special:ListObjectsByType?type=Z8&orderby=latest complete list of all functions sorted by when they were created] is available.
</div>
[[Category:Status updates{{#translation:}}|2026-07-16]]
ayxcreyxh7qkof3z7kylk1zzjv5h6u5
294419
294416
2026-07-27T21:10:39Z
Ameisenigel
44
Created page with "''Die Abstrakte Wikipedia wird diese Gemeinschaften nicht ersetzen. Stattdessen bietet sie die Möglichkeit, bestimmte Wissensformen breiter zu teilen und dabei die sprachliche Vielfalt zu bewahren.”''"
294419
wikitext
text/x-wiki
<languages/>
{{Wikifunctions updates
| prevlabel = Vorheriges Update
| prev = 2026-07-08
| nextlabel = Nächstes Update
| next =
}}
Willkommen bei Newsletter #257, der [https://www.wikifunctions.org/view/en/Z14629?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z14629%22%2C%22Z14629K1%22%3A%7B%22Z1K1%22%3A%22Z13518%22%2C%22Z13518K1%22%3A%223%22%7D%7D dritten Fermat-Zahl]!
<span id="Beyond_syntactic_tables"></span>
=== Über syntaktische Tabellen hinaus ===
In den letzten Wochen haben einige Freiwillige und ich mit [[Wikifunctions:Type proposals/Syntactic table|dem Vorschlag für syntaktische Tabellen]] experimentiert. Die Community hat uns bereits früh gewarnt, dass dieser Ansatz wahrscheinlich nicht für morphologisch reiche Sprachen, wie etwa Türkisch oder Finnisch, skalierbar wäre, da Wörter dort Hunderte, wenn nicht gar Tausende von Formen haben könnten.
Und tatsächlich sind wir auf Probleme gestoßen. Glücklicherweise nicht so schnell wie erwartet, aber doch recht bald. Vielleicht sind diese Schwierigkeiten nur vorübergehender Natur und betreffen lediglich unsere aktuellen Vorhaben, es ist jedoch zu erwarten, dass sie uns mit wachsenden Ambitionen irgendwann überfordern werden. Daher bin ich der Meinung, dass wir die derzeitigen syntaktischen Tabellen verbessern müssen. Ich habe [[Wikifunctions:Type proposals/Words with many forms|ein Dokument zu möglichen Lösungsansätzen]] verfasst und möchte die Community dazu einladen, darüber zu diskutieren und ihre Gedanken zu äußern. Sofern keine Einwände bestehen, würde ich die Ergebnisse dieser Diskussion gerne in der Woche nach der Wikimania umsetzen und sehen, wohin uns das führt.
<span id="John_Samuel:_This_Pride_Month,_I_Am_Focusing_on_Abstract_Wikipedia"></span>
=== John Samuel: In diesem Pride Month konzentriere ich mich auf die Abstrakte Wikipedia ===
[[User:Jsamwrites|John Samuel]] hat einen Blogbeitrag verfasst, in dem er seine Gedanken und Hoffnungen für die Abstrakte Wikipedia schildert:
[https://jsamwrites.medium.com/this-pride-month-i-am-focusing-on-abstract-wikipedia-287bbae593c8 jsamwrites.medium.com/this-pride-month-i-am-focusing-on-abstract-wikipedia-287bbae593c8]
Ich zitiere John:
<blockquote>''“Untersuchungen zur mehrsprachigen Wikipedia haben gezeigt, dass verschiedene Sprachgemeinschaften ihre eigenen Perspektiven, Prioritäten und kulturellen Kontexte entwickeln. Wissen wird nicht bloß übersetzt; es wird von Gemeinschaften geprägt.''
''Die Abstrakte Wikipedia wird diese Gemeinschaften nicht ersetzen. Stattdessen bietet sie die Möglichkeit, bestimmte Wissensformen breiter zu teilen und dabei die sprachliche Vielfalt zu bewahren.”''</blockquote>
<div lang="en" dir="ltr" class="mw-content-ltr">
Particularly noteworthy are [[:commons:File:Wikicafe-JohnSAMUEL.pdf|his presentation slides which he presented in Lyon last month]] (in French).
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Jens Ohlig: Calling Wikifunctions for der, die, das ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
[[User:Jens Ohlig|Jens Ohlig]] wrote a blog post on the implementation of the der, die, das tool that we have pointed to last week: [https://blog.johl.io/calling-wikifunctions-for-der-die-das/ blog.johl.io/calling-wikifunctions-for-der-die-das]
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
It offers a great write-up into one way Wikifunctions can be used, and how it connects to Wikidata. I quote Jens:
</div>
<blockquote><span lang="en" dir="ltr" class="mw-content-ltr">''“To extract the information on the grammatical gender, we use Wikifunctions. Wikifunctions is a Wikimedia project that aims to create a collaboratively maintained library of functions. A function is a procedure that takes one or more inputs and produces an output. Examples include converting units, transforming singular words into plural forms, or carrying out simple calculations. Wikifunctions is intended to support the reuse of such functions across Wikimedia projects and other software environments. It’s also the foundation of Abstract Wikipedia. And, last, but not least, we can use these functions in remote calls from the command line.”''</span></blockquote>
<div lang="en" dir="ltr" class="mw-content-ltr">
Thank you, Jens!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Recent Changes in the software ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This week, we fixed a bug that meant that moving complex items up and down in a list would show the wrong expanded "view" ([[:phab:T431714|T431714]]). And to make it easier to recognise what you're searching for, we now show a Function icon or Language icon in the search field, like we do for Wikidata items.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
As part of wider work to support new languages in MediaWiki, we created Z2051/kix "Khiamniungan Naga" ([[:phab:T428856|T428856]]) and Z2052/uzs "Southern Uzbek" ([[:phab:T423735|T423735]]).
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Wikifunctions and Abstract Wikipedia at Wikimania 2026 ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Next week is [[:wikimania:Special:MyLanguage/2026:Wikimania|Wikimania 2026]], the annual main conference for all things Wikimedia. Wikimania will be in Paris, France from 21–25 July. We hope to see many of you there. There will be a number of events about Abstract Wikipedia and Wikifunctions (all times local):
</div>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Dnshitobu|Dnshitobu]] has session “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/TWGKWB/ Making indigenous languages ready for Wikifunctions]” on Friday, 14:30</span>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Mahir256|Mahir256]] will organize a workshop “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/HYTQBF/ From Abstract Content to Concrete Text with Wikidata Lexemes]” on Friday, 16:00</span>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Jdforrester (WMF)|James]], [[User:Sannita (WMF)|Luca]], and [[User:DVrandecic (WMF)|Denny]] will be running “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/AKFG8R/ Abstract Wikipedia workshop: Let's create a multi-lingual article!]” on Saturday, 11:00</span>
<div lang="en" dir="ltr" class="mw-content-ltr">
If there are any further related events, let us know, and we are happy to tell folks about them!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Due to Wikimania next week, we are skipping the newsletter.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== News in Types: Thoughts on Wikifunctions Object References ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We invite you all to create new and discuss the existing [[Wikifunctions:Type proposals|Type proposals]] so we can keep on creating new Types. Thanks to all the community members contributing to the discussion and writing proposals, making it possible to extend the Wikifunctions to new domains!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We have been particularly discussing the proposal for [[Wikifunctions:Type proposals/Wikifunctions object reference|Wikifunctions Object References]] in the team and like it. The only thing we are considering to change is to make it a generic type, stating the object’s type.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Furthermore, we are discussing [[Wikifunctions:Type proposals/Words with many forms|an evolution]] of the (experimental) [[Wikifunctions:Type proposals/Syntactic table|Syntactic tables]], as you can see in the top news above.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Fresh Functions weekly: 45 new Functions ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This week we had 45 new functions. Here is an incomplete list of functions with implementations and passing tests to get a taste of what functions have been created. We crossed 4700 functions, and are just one week shy of Wikimania – maybe we can get to a round number during Wikimania? Thanks everybody for contributing!
</div>
* {{Z|Z37348}}
* {{Z|Z37353}}
* {{Z|Z37354}}
* {{Z|Z37357}}
* {{Z|Z37361}}
* {{Z|Z37367}}
* {{Z|Z37375}}
* {{Z|Z37387}}
* {{Z|Z37389}}
* {{Z|Z37391}}
* {{Z|Z37393}}
* {{Z|Z37395}}
* {{Z|Z37403}}
* {{Z|Z37415}}
* {{Z|Z37419}}
* {{Z|Z37422}}
* {{Z|Z37424}}
* {{Z|Z37426}}
* {{Z|Z37436}}
* {{Z|Z37441}}
* {{Z|Z37447}}
* {{Z|Z37450}}
* {{Z|Z37454}}
* {{Z|Z37459}}
* {{Z|Z37464}}
* {{Z|Z37465}}
* {{Z|Z37473}}
* {{Z|Z37481}}
* {{Z|Z37482}}
* {{Z|Z37493}}
* {{Z|Z37507}}
* {{Z|Z37510}}
* {{Z|Z37512}}
* {{Z|Z37518}}
* {{Z|Z37533}}
* {{Z|Z37541}}
* {{Z|Z37551}}
* {{Z|Z37609}}
* {{Z|Z37623}}
* {{Z|Z37633}}
* {{Z|Z37640}}
* {{Z|Z37644}}
* {{Z|Z37647}}
* {{Z|Z37655}}
<div lang="en" dir="ltr" class="mw-content-ltr">
A [https://www.wikifunctions.org/wiki/Special:ListObjectsByType?type=Z8&orderby=latest complete list of all functions sorted by when they were created] is available.
</div>
[[Category:Status updates{{#translation:}}|2026-07-16]]
i3it8dt13x5rspc3wciwy911kt0qsm7
294421
294419
2026-07-27T21:11:02Z
Ameisenigel
44
Created page with "Besonders erwähnenswert sind [[$1|seine Präsentationsfolien, die er letzten Monat in Lyon präsentiert hat]] (auf Französisch)."
294421
wikitext
text/x-wiki
<languages/>
{{Wikifunctions updates
| prevlabel = Vorheriges Update
| prev = 2026-07-08
| nextlabel = Nächstes Update
| next =
}}
Willkommen bei Newsletter #257, der [https://www.wikifunctions.org/view/en/Z14629?call=%7B%22Z1K1%22%3A%22Z7%22%2C%22Z7K1%22%3A%22Z14629%22%2C%22Z14629K1%22%3A%7B%22Z1K1%22%3A%22Z13518%22%2C%22Z13518K1%22%3A%223%22%7D%7D dritten Fermat-Zahl]!
<span id="Beyond_syntactic_tables"></span>
=== Über syntaktische Tabellen hinaus ===
In den letzten Wochen haben einige Freiwillige und ich mit [[Wikifunctions:Type proposals/Syntactic table|dem Vorschlag für syntaktische Tabellen]] experimentiert. Die Community hat uns bereits früh gewarnt, dass dieser Ansatz wahrscheinlich nicht für morphologisch reiche Sprachen, wie etwa Türkisch oder Finnisch, skalierbar wäre, da Wörter dort Hunderte, wenn nicht gar Tausende von Formen haben könnten.
Und tatsächlich sind wir auf Probleme gestoßen. Glücklicherweise nicht so schnell wie erwartet, aber doch recht bald. Vielleicht sind diese Schwierigkeiten nur vorübergehender Natur und betreffen lediglich unsere aktuellen Vorhaben, es ist jedoch zu erwarten, dass sie uns mit wachsenden Ambitionen irgendwann überfordern werden. Daher bin ich der Meinung, dass wir die derzeitigen syntaktischen Tabellen verbessern müssen. Ich habe [[Wikifunctions:Type proposals/Words with many forms|ein Dokument zu möglichen Lösungsansätzen]] verfasst und möchte die Community dazu einladen, darüber zu diskutieren und ihre Gedanken zu äußern. Sofern keine Einwände bestehen, würde ich die Ergebnisse dieser Diskussion gerne in der Woche nach der Wikimania umsetzen und sehen, wohin uns das führt.
<span id="John_Samuel:_This_Pride_Month,_I_Am_Focusing_on_Abstract_Wikipedia"></span>
=== John Samuel: In diesem Pride Month konzentriere ich mich auf die Abstrakte Wikipedia ===
[[User:Jsamwrites|John Samuel]] hat einen Blogbeitrag verfasst, in dem er seine Gedanken und Hoffnungen für die Abstrakte Wikipedia schildert:
[https://jsamwrites.medium.com/this-pride-month-i-am-focusing-on-abstract-wikipedia-287bbae593c8 jsamwrites.medium.com/this-pride-month-i-am-focusing-on-abstract-wikipedia-287bbae593c8]
Ich zitiere John:
<blockquote>''“Untersuchungen zur mehrsprachigen Wikipedia haben gezeigt, dass verschiedene Sprachgemeinschaften ihre eigenen Perspektiven, Prioritäten und kulturellen Kontexte entwickeln. Wissen wird nicht bloß übersetzt; es wird von Gemeinschaften geprägt.''
''Die Abstrakte Wikipedia wird diese Gemeinschaften nicht ersetzen. Stattdessen bietet sie die Möglichkeit, bestimmte Wissensformen breiter zu teilen und dabei die sprachliche Vielfalt zu bewahren.”''</blockquote>
Besonders erwähnenswert sind [[:commons:File:Wikicafe-JohnSAMUEL.pdf|seine Präsentationsfolien, die er letzten Monat in Lyon präsentiert hat]] (auf Französisch).
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Jens Ohlig: Calling Wikifunctions for der, die, das ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
[[User:Jens Ohlig|Jens Ohlig]] wrote a blog post on the implementation of the der, die, das tool that we have pointed to last week: [https://blog.johl.io/calling-wikifunctions-for-der-die-das/ blog.johl.io/calling-wikifunctions-for-der-die-das]
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
It offers a great write-up into one way Wikifunctions can be used, and how it connects to Wikidata. I quote Jens:
</div>
<blockquote><span lang="en" dir="ltr" class="mw-content-ltr">''“To extract the information on the grammatical gender, we use Wikifunctions. Wikifunctions is a Wikimedia project that aims to create a collaboratively maintained library of functions. A function is a procedure that takes one or more inputs and produces an output. Examples include converting units, transforming singular words into plural forms, or carrying out simple calculations. Wikifunctions is intended to support the reuse of such functions across Wikimedia projects and other software environments. It’s also the foundation of Abstract Wikipedia. And, last, but not least, we can use these functions in remote calls from the command line.”''</span></blockquote>
<div lang="en" dir="ltr" class="mw-content-ltr">
Thank you, Jens!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Recent Changes in the software ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This week, we fixed a bug that meant that moving complex items up and down in a list would show the wrong expanded "view" ([[:phab:T431714|T431714]]). And to make it easier to recognise what you're searching for, we now show a Function icon or Language icon in the search field, like we do for Wikidata items.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
As part of wider work to support new languages in MediaWiki, we created Z2051/kix "Khiamniungan Naga" ([[:phab:T428856|T428856]]) and Z2052/uzs "Southern Uzbek" ([[:phab:T423735|T423735]]).
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Wikifunctions and Abstract Wikipedia at Wikimania 2026 ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Next week is [[:wikimania:Special:MyLanguage/2026:Wikimania|Wikimania 2026]], the annual main conference for all things Wikimedia. Wikimania will be in Paris, France from 21–25 July. We hope to see many of you there. There will be a number of events about Abstract Wikipedia and Wikifunctions (all times local):
</div>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Dnshitobu|Dnshitobu]] has session “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/TWGKWB/ Making indigenous languages ready for Wikifunctions]” on Friday, 14:30</span>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Mahir256|Mahir256]] will organize a workshop “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/HYTQBF/ From Abstract Content to Concrete Text with Wikidata Lexemes]” on Friday, 16:00</span>
* <span lang="en" dir="ltr" class="mw-content-ltr">[[User:Jdforrester (WMF)|James]], [[User:Sannita (WMF)|Luca]], and [[User:DVrandecic (WMF)|Denny]] will be running “[https://wikimedia.eventyay.com/wm/wikimania2026/talk/AKFG8R/ Abstract Wikipedia workshop: Let's create a multi-lingual article!]” on Saturday, 11:00</span>
<div lang="en" dir="ltr" class="mw-content-ltr">
If there are any further related events, let us know, and we are happy to tell folks about them!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Due to Wikimania next week, we are skipping the newsletter.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== News in Types: Thoughts on Wikifunctions Object References ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We invite you all to create new and discuss the existing [[Wikifunctions:Type proposals|Type proposals]] so we can keep on creating new Types. Thanks to all the community members contributing to the discussion and writing proposals, making it possible to extend the Wikifunctions to new domains!
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
We have been particularly discussing the proposal for [[Wikifunctions:Type proposals/Wikifunctions object reference|Wikifunctions Object References]] in the team and like it. The only thing we are considering to change is to make it a generic type, stating the object’s type.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
Furthermore, we are discussing [[Wikifunctions:Type proposals/Words with many forms|an evolution]] of the (experimental) [[Wikifunctions:Type proposals/Syntactic table|Syntactic tables]], as you can see in the top news above.
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
=== Fresh Functions weekly: 45 new Functions ===
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
This week we had 45 new functions. Here is an incomplete list of functions with implementations and passing tests to get a taste of what functions have been created. We crossed 4700 functions, and are just one week shy of Wikimania – maybe we can get to a round number during Wikimania? Thanks everybody for contributing!
</div>
* {{Z|Z37348}}
* {{Z|Z37353}}
* {{Z|Z37354}}
* {{Z|Z37357}}
* {{Z|Z37361}}
* {{Z|Z37367}}
* {{Z|Z37375}}
* {{Z|Z37387}}
* {{Z|Z37389}}
* {{Z|Z37391}}
* {{Z|Z37393}}
* {{Z|Z37395}}
* {{Z|Z37403}}
* {{Z|Z37415}}
* {{Z|Z37419}}
* {{Z|Z37422}}
* {{Z|Z37424}}
* {{Z|Z37426}}
* {{Z|Z37436}}
* {{Z|Z37441}}
* {{Z|Z37447}}
* {{Z|Z37450}}
* {{Z|Z37454}}
* {{Z|Z37459}}
* {{Z|Z37464}}
* {{Z|Z37465}}
* {{Z|Z37473}}
* {{Z|Z37481}}
* {{Z|Z37482}}
* {{Z|Z37493}}
* {{Z|Z37507}}
* {{Z|Z37510}}
* {{Z|Z37512}}
* {{Z|Z37518}}
* {{Z|Z37533}}
* {{Z|Z37541}}
* {{Z|Z37551}}
* {{Z|Z37609}}
* {{Z|Z37623}}
* {{Z|Z37633}}
* {{Z|Z37640}}
* {{Z|Z37644}}
* {{Z|Z37647}}
* {{Z|Z37655}}
<div lang="en" dir="ltr" class="mw-content-ltr">
A [https://www.wikifunctions.org/wiki/Special:ListObjectsByType?type=Z8&orderby=latest complete list of all functions sorted by when they were created] is available.
</div>
[[Category:Status updates{{#translation:}}|2026-07-16]]
gu49ym8j67eqt6cda843xupkh8nj8ho
Z38350
0
88674
294437
294362
2026-07-28T01:44:17Z
TheAhasan
91253
Added Z38352 to the approved list of test cases
294437
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38350"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38350K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38350K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z38352"
],
"Z8K4": [
"Z14",
"Z38351"
],
"Z8K5": "Z38350"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for Wikimedia project"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
8lwqsn5rw3mlxhysxy8d8qnlvrz05fx
Z38353
0
88677
294365
2026-07-27T13:21:26Z
99of9
1622
294365
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38353"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z38042",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z38042",
"Z38042K1": "héroïne"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z844",
"Z844K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "héroïne: false"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
gi847a9ym1vvbsfmn4sgn9f1ndkpcgr
Z38354
0
88678
294366
2026-07-27T13:21:58Z
99of9
1622
294366
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38354"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z38042",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z38042",
"Z38042K1": "héros"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z844",
"Z844K2": {
"Z1K1": "Z40",
"Z40K1": "Z41"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "héros: true"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
m4smne2dtimmu7xzvyuh1i71o3dfnqg
Z38355
0
88679
294370
2026-07-27T14:17:31Z
Jsamwrites
938
294370
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38355"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38355K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38355K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z38355"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for chemical"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
7s7guck4agsnv6yroutb16pnif65ipj
294372
294370
2026-07-27T14:24:18Z
Jsamwrites
938
Added Z38356 to the approved list of implementations
294372
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38355"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38355K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38355K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z38356"
],
"Z8K5": "Z38355"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for chemical"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
dwdo672t536all5crvryuilofp9h0np
294433
294372
2026-07-28T00:34:41Z
99of9
1622
294433
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38355"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38355K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38355K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z38356"
],
"Z8K5": "Z38355"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "(#) infobox for chemical"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
5lit4a3dr9wxaeuntzge4wkt1xe44qt
294454
294433
2026-07-28T05:59:23Z
Jsamwrites
938
Replaced "Inventor" by mass and density
294454
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38355"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38355K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38355K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z38356"
],
"Z8K5": "Z38355"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for chemical"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
dwdo672t536all5crvryuilofp9h0np
294455
294454
2026-07-28T05:59:30Z
Jsamwrites
938
Added Z38363 to the approved list of test cases
294455
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38355"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38355K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38355K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z38363"
],
"Z8K4": [
"Z14",
"Z38356"
],
"Z8K5": "Z38355"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for chemical"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
0rdccr85l1ij718mg1tf1et0uiex2py
Z38356
0
88680
294371
2026-07-27T14:24:04Z
Jsamwrites
938
294371
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38356"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38355",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z33328",
"Z33328K1": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K2": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K3": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z37644",
"Z37644K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z37644K2": "default",
"Z37644K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z37623",
"Z37623K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z37623K2": {
"Z1K1": "Z6092",
"Z6092K1": "P274"
},
"Z37623K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z38216",
"Z38216K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z38216K2": {
"Z1K1": "Z6092",
"Z6092K1": "P61"
},
"Z38216K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for chemical, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
11qibwfkkbqpru0tsfzvrrghezlsujp
294373
294371
2026-07-27T14:25:14Z
Jsamwrites
938
294373
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38356"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38355",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z33328",
"Z33328K1": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K2": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K3": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z37644",
"Z37644K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z37644K2": "default",
"Z37644K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z37623",
"Z37623K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z37623K2": {
"Z1K1": "Z6092",
"Z6092K1": "P274"
},
"Z37623K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z38216",
"Z38216K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z38216K2": {
"Z1K1": "Z6092",
"Z6092K1": "P61"
},
"Z38216K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for chemical, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
lf0vsn1ssrxdpgozazacglyujvhagk4
294374
294373
2026-07-27T14:27:27Z
Jsamwrites
938
294374
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38356"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38355",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z33328",
"Z33328K1": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K2": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K3": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z37644",
"Z37644K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z37644K2": "default",
"Z37644K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z38216",
"Z38216K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z38216K2": {
"Z1K1": "Z6092",
"Z6092K1": "P61"
},
"Z38216K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for chemical, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
4oejx7q6iireogx3ootp50zko4xlf5s
294376
294374
2026-07-27T14:36:16Z
Jsamwrites
938
294376
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38356"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38355",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z33328",
"Z33328K1": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K2": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K3": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z37644",
"Z37644K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z37644K2": "default",
"Z37644K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z38216",
"Z38216K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z38216K2": {
"Z1K1": "Z6092",
"Z6092K1": "P61"
},
"Z38216K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z38357",
"Z38357K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z38357K2": {
"Z1K1": "Z6092",
"Z6092K1": "P274"
},
"Z38357K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for chemical, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
tkue0jbkfqvwuec2eukoculn2tsqx5o
294384
294376
2026-07-27T14:47:35Z
Jsamwrites
938
294384
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38356"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38355",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z33328",
"Z33328K1": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K2": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K3": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z37644",
"Z37644K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z37644K2": "default",
"Z37644K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z38216",
"Z38216K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z38216K2": {
"Z1K1": "Z6092",
"Z6092K1": "P61"
},
"Z38216K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z37830",
"Z37830K1": {
"Z1K1": "Z18",
"Z18K1": ""
},
"Z37830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P274"
},
"Z37830K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for chemical, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
8l7f67341hznsglwdj4ybul9vesf48u
294385
294384
2026-07-27T14:47:52Z
Jsamwrites
938
294385
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38356"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38355",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z33328",
"Z33328K1": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K2": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K3": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z37644",
"Z37644K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z37644K2": "default",
"Z37644K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z38216",
"Z38216K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z38216K2": {
"Z1K1": "Z6092",
"Z6092K1": "P61"
},
"Z38216K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z37830",
"Z37830K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z37830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P274"
},
"Z37830K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for chemical, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
arlh9extv9xroq4d56rviu5xcx27p6f
294450
294385
2026-07-28T05:56:24Z
Jsamwrites
938
294450
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38356"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38355",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z33328",
"Z33328K1": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K2": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K3": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z37644",
"Z37644K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z37644K2": "default",
"Z37644K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z38357",
"Z38357K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z38357K2": {
"Z1K1": "Z6092",
"Z6092K1": "P2067"
},
"Z38357K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z38357",
"Z38357K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z38357K2": {
"Z1K1": "Z6092",
"Z6092K1": "P2067"
},
"Z38357K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z37830",
"Z37830K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z37830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P274"
},
"Z37830K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for chemical, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
7dzsex2xt5eborqkoyifulxcidov2he
294451
294450
2026-07-28T05:56:47Z
Jsamwrites
938
294451
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38356"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38355",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z33328",
"Z33328K1": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K2": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K3": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z37644",
"Z37644K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z37644K2": "default",
"Z37644K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z38357",
"Z38357K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z38357K2": {
"Z1K1": "Z6092",
"Z6092K1": "P2067"
},
"Z38357K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z38357",
"Z38357K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z38357K2": {
"Z1K1": "Z6092",
"Z6092K1": "P2054"
},
"Z38357K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z37830",
"Z37830K1": {
"Z1K1": "Z18",
"Z18K1": "Z38355K1"
},
"Z37830K2": {
"Z1K1": "Z6092",
"Z6092K1": "P274"
},
"Z37830K3": {
"Z1K1": "Z18",
"Z18K1": "Z38355K2"
}
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for chemical, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
5a50lfllqeqd48s5mfembhh60wvcbaa
Z38357
0
88681
294375
2026-07-27T14:30:38Z
Jsamwrites
938
294375
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38357"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38357K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6092",
"Z17K2": "Z38357K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "property"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38357K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z38357"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox row for string"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
oamkudmmh275u2duen04okwa4syig4x
294386
294375
2026-07-27T14:49:57Z
Jsamwrites
938
294386
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38357"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38357K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6092",
"Z17K2": "Z38357K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "property"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38357K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z38357"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox row for quantity"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
0mvjw3fuj1r692fsmi8sa07nxrucwt6
294388
294386
2026-07-27T14:57:14Z
Jsamwrites
938
Added Z38359 to the approved list of implementations
294388
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38357"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38357K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6092",
"Z17K2": "Z38357K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "property"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38357K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z38359"
],
"Z8K5": "Z38357"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox row for quantity"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
ma0gfzekho4lgo2z104rbicmczdrbd9
Z38358
0
88682
294383
2026-07-27T14:45:15Z
99of9
1622
294383
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38358"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z36218",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z36218",
"Z36218K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q1140026"
},
"Z36218K2": {
"Z1K1": "Z6092",
"Z6092K1": "P1619"
},
"Z36218K3": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z37436",
"Z37436K2": "unexpected type"
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "date does not contain \"unexpected type\""
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
354ezw39evc1l4x9ay6nfmp2syklaer
Z38359
0
88683
294387
2026-07-27T14:57:01Z
Jsamwrites
938
294387
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38359"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38357",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z37640",
"Z37640K1": {
"Z1K1": "Z7",
"Z7K1": "Z27299",
"Z27299K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z38357K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60",
"Z1360"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
]
},
"Z27299K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
},
"Z37640K2": {
"Z1K1": "Z7",
"Z7K1": "Z33319",
"Z33319K1": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z33315",
"Z33315K1": {
"Z1K1": "Z7",
"Z7K1": "Z34096",
"Z34096K1": {
"Z1K1": "Z7",
"Z7K1": "Z24766",
"Z24766K1": {
"Z1K1": "Z7",
"Z7K1": "Z35364",
"Z35364K1": {
"Z1K1": "Z7",
"Z7K1": "Z35036",
"Z35036K1": {
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
},
"Z35036K2": [
"Z6030",
"Z6036"
],
"Z35036K3": [
"Z60"
],
"Z35036K4": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P1629"
}
]
}
},
"Z24766K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K3"
}
},
"Z34096K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K3"
}
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z33315",
"Z33315K1": {
"Z1K1": "Z7",
"Z7K1": "Z25326",
"Z25326K1": {
"Z1K1": "Z7",
"Z7K1": {
"Z1K1": "Z7",
"Z7K1": "Z23459",
"Z23459K1": {
"Z1K1": "Z18",
"Z18K1": "Z38357K1"
},
"Z23459K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
}
},
"Z25326K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K3"
}
}
}
]
},
"Z37640K3": {
"Z1K1": "Z89",
"Z89K1": ""
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox row for quantity, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
iwql8nt3oi4pk2vwrs06aycd1zsimnw
294389
294387
2026-07-27T15:00:22Z
Jsamwrites
938
294389
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38359"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38357",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z37640",
"Z37640K1": {
"Z1K1": "Z7",
"Z7K1": "Z27299",
"Z27299K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z38357K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60",
"Z1360"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
]
},
"Z27299K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
},
"Z37640K2": {
"Z1K1": "Z7",
"Z7K1": "Z33319",
"Z33319K1": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z33315",
"Z33315K1": {
"Z1K1": "Z7",
"Z7K1": "Z34096",
"Z34096K1": {
"Z1K1": "Z7",
"Z7K1": "Z24766",
"Z24766K1": {
"Z1K1": "Z7",
"Z7K1": "Z35364",
"Z35364K1": {
"Z1K1": "Z7",
"Z7K1": "Z35036",
"Z35036K1": {
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
},
"Z35036K2": [
"Z6030",
"Z6036"
],
"Z35036K3": [
"Z60"
],
"Z35036K4": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P1629"
}
]
}
},
"Z24766K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K3"
}
},
"Z34096K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K3"
}
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z33315",
"Z33315K1": {
"Z1K1": "Z7",
"Z7K1": "Z25326",
"Z25326K1": {
"Z1K1": "Z7",
"Z7K1": {
"Z1K1": "Z7",
"Z7K1": "Z23459",
"Z23459K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z38357K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60",
"Z1360"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
]
},
"Z23459K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
}
},
"Z25326K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K3"
}
}
}
]
},
"Z37640K3": {
"Z1K1": "Z89",
"Z89K1": ""
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox row for quantity, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
j9vbmyyc0ru6cnadwhpeqpb1uza0md8
294390
294389
2026-07-27T16:01:50Z
Jsamwrites
938
294390
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38359"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38357",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z37640",
"Z37640K1": {
"Z1K1": "Z7",
"Z7K1": "Z27299",
"Z27299K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z38357K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60",
"Z1360"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
]
},
"Z27299K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
},
"Z37640K2": {
"Z1K1": "Z7",
"Z7K1": "Z33319",
"Z33319K1": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z33315",
"Z33315K1": {
"Z1K1": "Z7",
"Z7K1": "Z34096",
"Z34096K1": {
"Z1K1": "Z7",
"Z7K1": "Z24766",
"Z24766K1": {
"Z1K1": "Z7",
"Z7K1": "Z35364",
"Z35364K1": {
"Z1K1": "Z7",
"Z7K1": "Z35036",
"Z35036K1": {
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
},
"Z35036K2": [
"Z6030",
"Z6036"
],
"Z35036K3": [
"Z60"
],
"Z35036K4": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P1629"
}
]
}
},
"Z24766K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K3"
}
},
"Z34096K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K3"
}
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z33315",
"Z33315K1": {
"Z1K1": "Z7",
"Z7K1": "Z25326",
"Z25326K1": {
"Z1K1": "Z7",
"Z7K1": {
"Z1K1": "Z7",
"Z7K1": "Z19308",
"Z19308K1": {
"Z1K1": "Z7",
"Z7K1": "Z23680",
"Z23680K1": {
"Z1K1": "Z7",
"Z7K1": "Z22220",
"Z22220K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z38357K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
]
}
}
}
}
},
"Z25326K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K3"
}
}
}
]
},
"Z37640K3": {
"Z1K1": "Z89",
"Z89K1": ""
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox row for quantity, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
7ivnz11l5ajku4p4h6uez4w616fyqiq
294448
294390
2026-07-28T05:37:34Z
Jsamwrites
938
294448
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38359"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38357",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z37640",
"Z37640K1": {
"Z1K1": "Z7",
"Z7K1": "Z27299",
"Z27299K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z38357K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60",
"Z1360"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
]
},
"Z27299K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
},
"Z37640K2": {
"Z1K1": "Z7",
"Z7K1": "Z33319",
"Z33319K1": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z33315",
"Z33315K1": {
"Z1K1": "Z7",
"Z7K1": "Z34096",
"Z34096K1": {
"Z1K1": "Z7",
"Z7K1": "Z24766",
"Z24766K1": {
"Z1K1": "Z7",
"Z7K1": "Z35364",
"Z35364K1": {
"Z1K1": "Z7",
"Z7K1": "Z35036",
"Z35036K1": {
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
},
"Z35036K2": [
"Z6030",
"Z6036"
],
"Z35036K3": [
"Z60"
],
"Z35036K4": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P1629"
}
]
}
},
"Z24766K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K3"
}
},
"Z34096K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K3"
}
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z27873",
"Z27873K1": {
"Z1K1": "Z7",
"Z7K1": "Z36209",
"Z36209K1": {
"Z1K1": "Z7",
"Z7K1": {
"Z1K1": "Z7",
"Z7K1": "Z19308",
"Z19308K1": {
"Z1K1": "Z7",
"Z7K1": "Z23680",
"Z23680K1": {
"Z1K1": "Z7",
"Z7K1": "Z22220",
"Z22220K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z38357K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
]
}
}
}
}
},
"Z36209K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K3"
}
},
"Z27873K2": "td",
"Z27873K3": [
"Z6"
],
"Z27873K4": [
"Z6"
]
}
]
},
"Z37640K3": {
"Z1K1": "Z89",
"Z89K1": ""
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox row for quantity, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
m8vthryj8totjar0hsg61gqq9k2gpzi
294449
294448
2026-07-28T05:46:57Z
Jsamwrites
938
294449
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38359"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38357",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z37640",
"Z37640K1": {
"Z1K1": "Z7",
"Z7K1": "Z27299",
"Z27299K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z38357K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60",
"Z1360"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
]
},
"Z27299K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
},
"Z37640K2": {
"Z1K1": "Z7",
"Z7K1": "Z33319",
"Z33319K1": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z33315",
"Z33315K1": {
"Z1K1": "Z7",
"Z7K1": "Z34096",
"Z34096K1": {
"Z1K1": "Z7",
"Z7K1": "Z24766",
"Z24766K1": {
"Z1K1": "Z7",
"Z7K1": "Z35364",
"Z35364K1": {
"Z1K1": "Z7",
"Z7K1": "Z35036",
"Z35036K1": {
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
},
"Z35036K2": [
"Z6030",
"Z6036"
],
"Z35036K3": [
"Z60"
],
"Z35036K4": [
"Z6092",
{
"Z1K1": "Z6092",
"Z6092K1": "P1629"
}
]
}
},
"Z24766K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K3"
}
},
"Z34096K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K3"
}
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z27873",
"Z27873K1": {
"Z1K1": "Z7",
"Z7K1": "Z36209",
"Z36209K1": {
"Z1K1": "Z7",
"Z7K1": "Z19308",
"Z19308K1": {
"Z1K1": "Z7",
"Z7K1": "Z23680",
"Z23680K1": {
"Z1K1": "Z7",
"Z7K1": "Z22220",
"Z22220K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z38357K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z18",
"Z18K1": "Z38357K2"
}
]
}
}
}
},
"Z36209K2": {
"Z1K1": "Z18",
"Z18K1": "Z38357K3"
}
},
"Z27873K2": "td",
"Z27873K3": [
"Z6"
],
"Z27873K4": [
"Z6"
]
}
]
},
"Z37640K3": {
"Z1K1": "Z89",
"Z89K1": ""
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox row for quantity, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
onl8fr5y1wmj3pmtolssuissdxzy4yj
Translations:Wikifunctions:Status updates/2026-07-16/6/de
1198
88684
294407
2026-07-27T21:08:23Z
Ameisenigel
44
Created page with "=== John Samuel: In diesem Pride Month konzentriere ich mich auf die Abstrakte Wikipedia ==="
294407
wikitext
text/x-wiki
=== John Samuel: In diesem Pride Month konzentriere ich mich auf die Abstrakte Wikipedia ===
0xf7kalvazfhoabzozyeystspirhhte
Translations:Wikifunctions:Status updates/2026-07-16/29/de
1198
88685
294410
2026-07-27T21:09:00Z
Ameisenigel
44
Created page with "[[$1|John Samuel]] hat einen Blogbeitrag verfasst, in dem er seine Gedanken und Hoffnungen für die Abstrakte Wikipedia schildert: [$2 jsamwrites.medium.com/this-pride-month-i-am-focusing-on-abstract-wikipedia-287bbae593c8]"
294410
wikitext
text/x-wiki
[[$1|John Samuel]] hat einen Blogbeitrag verfasst, in dem er seine Gedanken und Hoffnungen für die Abstrakte Wikipedia schildert:
[$2 jsamwrites.medium.com/this-pride-month-i-am-focusing-on-abstract-wikipedia-287bbae593c8]
763aceemx919mlej68p0ed0ppzqamvw
Translations:Wikifunctions:Status updates/2026-07-16/7/de
1198
88686
294412
2026-07-27T21:09:05Z
Ameisenigel
44
Created page with "Ich zitiere John:"
294412
wikitext
text/x-wiki
Ich zitiere John:
97vo18hqzs0q0tpwbqdagqvief24oup
Translations:Wikifunctions:Status updates/2026-07-16/8/de
1198
88687
294415
2026-07-27T21:10:04Z
Ameisenigel
44
Created page with "''“Untersuchungen zur mehrsprachigen Wikipedia haben gezeigt, dass verschiedene Sprachgemeinschaften ihre eigenen Perspektiven, Prioritäten und kulturellen Kontexte entwickeln. Wissen wird nicht bloß übersetzt; es wird von Gemeinschaften geprägt.''"
294415
wikitext
text/x-wiki
''“Untersuchungen zur mehrsprachigen Wikipedia haben gezeigt, dass verschiedene Sprachgemeinschaften ihre eigenen Perspektiven, Prioritäten und kulturellen Kontexte entwickeln. Wissen wird nicht bloß übersetzt; es wird von Gemeinschaften geprägt.''
t5t5bwl8y9q7qv0aphvssgnuc13v5p8
Translations:Wikifunctions:Status updates/2026-07-16/9/de
1198
88688
294418
2026-07-27T21:10:38Z
Ameisenigel
44
Created page with "''Die Abstrakte Wikipedia wird diese Gemeinschaften nicht ersetzen. Stattdessen bietet sie die Möglichkeit, bestimmte Wissensformen breiter zu teilen und dabei die sprachliche Vielfalt zu bewahren.”''"
294418
wikitext
text/x-wiki
''Die Abstrakte Wikipedia wird diese Gemeinschaften nicht ersetzen. Stattdessen bietet sie die Möglichkeit, bestimmte Wissensformen breiter zu teilen und dabei die sprachliche Vielfalt zu bewahren.”''
cakwacgfhj8jkf55y7dykm0558kyfsq
Translations:Wikifunctions:Status updates/2026-07-16/10/de
1198
88689
294420
2026-07-27T21:11:02Z
Ameisenigel
44
Created page with "Besonders erwähnenswert sind [[$1|seine Präsentationsfolien, die er letzten Monat in Lyon präsentiert hat]] (auf Französisch)."
294420
wikitext
text/x-wiki
Besonders erwähnenswert sind [[$1|seine Präsentationsfolien, die er letzten Monat in Lyon präsentiert hat]] (auf Französisch).
9tmlnbjjjs1zpf587xc72tmah4480ir
Z38360
0
88690
294424
2026-07-27T21:22:18Z
EatingCarBatteries
61191
294424
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38360"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38360K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z38360"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox row, population"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
5yb4q8tsya4u3x1q03zl51dadgldd0f
Talk:Z38355
1
88691
294434
2026-07-28T00:35:52Z
99of9
1622
/* Not ready */ new section
294434
wikitext
text/x-wiki
== Not ready ==
I've marked this with a (#) because IMO it's not ready. "inventor" is not appropriate, and even "discoverer" is not the main thing we would want in an element infobox. Please don't mass recreate chemical elements for now. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 00:35, 28 July 2026 (UTC)
i0w5ckbe5orcyxx14fj3txq3qvro2ul
294453
294434
2026-07-28T05:58:53Z
Jsamwrites
938
/* Not ready */ Reply
294453
wikitext
text/x-wiki
== Not ready ==
I've marked this with a (#) because IMO it's not ready. "inventor" is not appropriate, and even "discoverer" is not the main thing we would want in an element infobox. Please don't mass recreate chemical elements for now. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 00:35, 28 July 2026 (UTC)
:Thanks for your quick feedback. I have replaced "Inventor" by two other properties : mass and density. [[User:Jsamwrites|John Samuel]] 05:58, 28 July 2026 (UTC)
fwnr6w00wjut0jyx4cfevfcnszcio9z
294456
294453
2026-07-28T06:26:04Z
99of9
1622
/* Not ready */ Reply
294456
wikitext
text/x-wiki
== Not ready ==
I've marked this with a (#) because IMO it's not ready. "inventor" is not appropriate, and even "discoverer" is not the main thing we would want in an element infobox. Please don't mass recreate chemical elements for now. --[[User:99of9|99of9]] ([[User talk:99of9|talk]]) 00:35, 28 July 2026 (UTC)
:Thanks for your quick feedback. I have replaced "Inventor" by two other properties : mass and density. [[User:Jsamwrites|John Samuel]] 05:58, 28 July 2026 (UTC)
::Okay, that's much better, thanks. [[User:99of9|99of9]] ([[User talk:99of9|talk]]) 06:26, 28 July 2026 (UTC)
0ohsno18xjtcpxcaw2drz9tcxz40zkp
Z38361
0
88692
294435
2026-07-28T01:40:35Z
TheAhasan
91253
new test case
294435
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38361"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z38129",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z38129",
"Z38129K1": "বিক্ষোভ"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z13522",
"Z13522K2": {
"Z1K1": "Z13518",
"Z13518K1": "2"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "Counts syllables in \"বিক্ষোভ\""
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
mdwrkccarqq2vwo0805l5tglwrlkzdj
Z38362
0
88693
294439
2026-07-28T01:48:45Z
TheAhasan
91253
new test case
294439
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38362"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z37447",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z37447",
"Z37447K1": "1"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z844",
"Z844K2": {
"Z1K1": "Z40",
"Z40K1": "Z42"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "is '1' a bangla vowel"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
9tzeyn6ztt6571untidywu4o3j8ayaq
Z38363
0
88694
294452
2026-07-28T05:57:51Z
Jsamwrites
938
294452
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38363"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z38355",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z38355",
"Z38355K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q1997"
},
"Z38355K2": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z877",
"Z877K2": {
"Z1K1": "Z89",
"Z89K1": "\u003Ctable style=\"background-color:var(--background-color-interactive-subtle,#F8F9FA);border:1px solid var(--border-color-base,#A2A9B1);border-spacing:3px;clear:inline-end;float: inline-end;margin:0.5em 0 0.5em 1em;padding:0.2em;width:250px;\"\u003E\u003Ctr\u003E\u003Ctd colspan=\"2\" align=\"center\" style=\"--infobox-accent-hue:264deg;background-color:oklch(from var(--background-color-success-subtle,#DFF2EB) calc(0.8*l + 0.15) calc(c + 0.05) var(--infobox-accent-hue,264deg));\"\u003ECarbon dioxide\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EMass\u003C/td\u003E\u003Ctd\u003E43.99 Da\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EMass density\u003C/td\u003E\u003Ctd\u003E1.9768 g/m³\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EChemical formula\u003C/td\u003E\u003Ctd\u003ECO₂\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for CO2, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
09p8rkljljy084asa0w0g22r4bbdzlv
Z38364
0
88695
294457
2026-07-28T08:21:53Z
Jsamwrites
938
Create infobox
294457
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38364"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38364K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38364K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z38364"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for planet"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
hv8ywl0n4dyc1i6g1rys1c1jtexykuj
294459
294457
2026-07-28T08:25:40Z
Jsamwrites
938
Added Z38365 to the approved list of implementations
294459
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38364"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38364K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38364K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z38365"
],
"Z8K5": "Z38364"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for planet"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
qpi6in57uii45fu5zxwdkryz6ha4p24
294461
294459
2026-07-28T08:30:06Z
Jsamwrites
938
Added Z38366 to the approved list of test cases
294461
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38364"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38364K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38364K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z38366"
],
"Z8K4": [
"Z14",
"Z38365"
],
"Z8K5": "Z38364"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for planet"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
7fucbvxdfg0ziwbacsgx0n2y0v0775s
Z38365
0
88696
294458
2026-07-28T08:25:29Z
Jsamwrites
938
294458
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38365"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38364",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z33328",
"Z33328K1": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K2": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K3": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z37644",
"Z37644K1": {
"Z1K1": "Z18",
"Z18K1": "Z38364K1"
},
"Z37644K2": "default",
"Z37644K3": {
"Z1K1": "Z18",
"Z18K1": "Z38364K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z37623",
"Z37623K1": {
"Z1K1": "Z18",
"Z18K1": "Z38364K1"
},
"Z37623K2": {
"Z1K1": "Z6092",
"Z6092K1": "P276"
},
"Z37623K3": {
"Z1K1": "Z18",
"Z18K1": "Z38364K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z37782",
"Z37782K1": {
"Z1K1": "Z18",
"Z18K1": "Z38364K1"
},
"Z37782K2": {
"Z1K1": "Z6092",
"Z6092K1": "P575"
},
"Z37782K3": {
"Z1K1": "Z18",
"Z18K1": "Z38364K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z37623",
"Z37623K1": {
"Z1K1": "Z18",
"Z18K1": "Z38364K1"
},
"Z37623K2": {
"Z1K1": "Z6092",
"Z6092K1": "P397"
},
"Z37623K3": {
"Z1K1": "Z18",
"Z18K1": "Z38364K2"
}
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for planet, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
7xrzt66rtk1d4sdt99ab0o2we3txsch
294467
294458
2026-07-28T08:39:44Z
Jsamwrites
938
294467
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38365"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38364",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z33328",
"Z33328K1": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K2": {
"Z1K1": "Z89",
"Z89K1": ""
},
"Z33328K3": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z37644",
"Z37644K1": {
"Z1K1": "Z18",
"Z18K1": "Z38364K1"
},
"Z37644K2": "default",
"Z37644K3": {
"Z1K1": "Z18",
"Z18K1": "Z38364K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z37623",
"Z37623K1": {
"Z1K1": "Z18",
"Z18K1": "Z38364K1"
},
"Z37623K2": {
"Z1K1": "Z6092",
"Z6092K1": "P276"
},
"Z37623K3": {
"Z1K1": "Z18",
"Z18K1": "Z38364K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z38367",
"Z38367K1": {
"Z1K1": "Z18",
"Z18K1": "Z38364K1"
},
"Z38367K2": {
"Z1K1": "Z6092",
"Z6092K1": "P575"
},
"Z38367K3": {
"Z1K1": "Z6091",
"Z6091K1": "Q12772819"
},
"Z38367K4": {
"Z1K1": "Z18",
"Z18K1": "Z38364K2"
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z37623",
"Z37623K1": {
"Z1K1": "Z18",
"Z18K1": "Z38364K1"
},
"Z37623K2": {
"Z1K1": "Z6092",
"Z6092K1": "P397"
},
"Z37623K3": {
"Z1K1": "Z18",
"Z18K1": "Z38364K2"
}
}
]
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for planet, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
2q8k2a7a9k2oiu0p3njc96335ek8mat
Z38366
0
88697
294460
2026-07-28T08:26:47Z
Jsamwrites
938
294460
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38366"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z38364",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z38364",
"Z38364K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q332"
},
"Z38364K2": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z877",
"Z877K2": {
"Z1K1": "Z89",
"Z89K1": "\u003Ctable style=\"background-color:var(--background-color-interactive-subtle,#F8F9FA);border:1px solid var(--border-color-base,#A2A9B1);border-spacing:3px;clear:inline-end;float: inline-end;margin:0.5em 0 0.5em 1em;padding:0.2em;width:250px;\"\u003E\u003Ctr\u003E\u003Ctd colspan=\"2\" align=\"center\" style=\"--infobox-accent-hue:264deg;background-color:oklch(from var(--background-color-success-subtle,#DFF2EB) calc(0.8*l + 0.15) calc(c + 0.05) var(--infobox-accent-hue,264deg));\"\u003ENeptune\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EPhysical location\u003C/td\u003E\u003Ctd\u003EOuter Solar System\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EInvention\u003C/td\u003E\u003Ctd\u003E23 September 1846\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EPrimary body\u003C/td\u003E\u003Ctd\u003ESun\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for Neptune, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
r1m2mlcha2vc1l6ykv3tk2zcw4xiuvx
294468
294460
2026-07-28T08:40:29Z
Jsamwrites
938
294468
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38366"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z38364",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z38364",
"Z38364K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q332"
},
"Z38364K2": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z877",
"Z877K2": {
"Z1K1": "Z89",
"Z89K1": "\u003Ctable style=\"background-color:var(--background-color-interactive-subtle,#F8F9FA);border:1px solid var(--border-color-base,#A2A9B1);border-spacing:3px;clear:inline-end;float: inline-end;margin:0.5em 0 0.5em 1em;padding:0.2em;width:250px;\"\u003E\u003Ctr\u003E\u003Ctd colspan=\"2\" align=\"center\" style=\"--infobox-accent-hue:264deg;background-color:oklch(from var(--background-color-success-subtle,#DFF2EB) calc(0.8*l + 0.15) calc(c + 0.05) var(--infobox-accent-hue,264deg));\"\u003ENeptune\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EPhysical location\u003C/td\u003E\u003Ctd\u003EOuter Solar System\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EDiscovery\u003C/td\u003E\u003Ctd\u003E23 September 1846\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EPrimary body\u003C/td\u003E\u003Ctd\u003ESun\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for Neptune, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
e61zt8ifkk32byxkyal1bmfxv63g882
Z38367
0
88698
294462
2026-07-28T08:33:06Z
Jsamwrites
938
create infobox row with column name
294462
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38367"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38367K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6092",
"Z17K2": "Z38367K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "property"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38367K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "column name entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38367K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14"
],
"Z8K5": "Z38367"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for row, date with column name"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
dg2mcljgfhq6mnlzkxe5l1llgrpc46r
294464
294462
2026-07-28T08:35:50Z
Jsamwrites
938
Added Z38368 to the approved list of implementations
294464
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38367"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38367K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6092",
"Z17K2": "Z38367K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "property"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38367K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "column name entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38367K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20"
],
"Z8K4": [
"Z14",
"Z38368"
],
"Z8K5": "Z38367"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for row, date with column name"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
44ypar86lv4vuoe65p5lkwxbzef41dc
294466
294464
2026-07-28T08:38:23Z
Jsamwrites
938
Added Z38369 to the approved list of test cases
294466
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38367"
},
"Z2K2": {
"Z1K1": "Z8",
"Z8K1": [
"Z17",
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38367K1",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6092",
"Z17K2": "Z38367K2",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "property"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z6091",
"Z17K2": "Z38367K3",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "column name entity"
}
]
}
},
{
"Z1K1": "Z17",
"Z17K1": "Z60",
"Z17K2": "Z38367K4",
"Z17K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "language"
}
]
}
}
],
"Z8K2": "Z89",
"Z8K3": [
"Z20",
"Z38369"
],
"Z8K4": [
"Z14",
"Z38368"
],
"Z8K5": "Z38367"
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for row, date with column name"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
95owv3mevbo6n7xj4206ktih7r4ot1r
Z38368
0
88699
294463
2026-07-28T08:35:36Z
Jsamwrites
938
294463
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38368"
},
"Z2K2": {
"Z1K1": "Z14",
"Z14K1": "Z38367",
"Z14K2": {
"Z1K1": "Z7",
"Z7K1": "Z37640",
"Z37640K1": {
"Z1K1": "Z7",
"Z7K1": "Z27299",
"Z27299K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z38367K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60",
"Z1360"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z18",
"Z18K1": "Z38367K2"
}
]
},
"Z27299K2": {
"Z1K1": "Z18",
"Z18K1": "Z38367K2"
}
},
"Z37640K2": {
"Z1K1": "Z7",
"Z7K1": "Z33319",
"Z33319K1": [
"Z89",
{
"Z1K1": "Z7",
"Z7K1": "Z33315",
"Z33315K1": {
"Z1K1": "Z7",
"Z7K1": "Z34096",
"Z34096K1": {
"Z1K1": "Z7",
"Z7K1": "Z24766",
"Z24766K1": {
"Z1K1": "Z18",
"Z18K1": "Z38367K3"
},
"Z24766K2": {
"Z1K1": "Z18",
"Z18K1": "Z38367K4"
}
},
"Z34096K2": {
"Z1K1": "Z18",
"Z18K1": "Z38367K4"
}
}
},
{
"Z1K1": "Z7",
"Z7K1": "Z33315",
"Z33315K1": {
"Z1K1": "Z7",
"Z7K1": "Z35192",
"Z35192K1": {
"Z1K1": "Z7",
"Z7K1": "Z23451",
"Z23451K1": {
"Z1K1": "Z7",
"Z7K1": "Z30120",
"Z30120K1": {
"Z1K1": "Z18",
"Z18K1": "Z38367K1"
},
"Z30120K2": [
"Z6030",
"Z6036"
],
"Z30120K3": [
"Z60",
"Z1360"
],
"Z30120K4": [
"Z6092",
{
"Z1K1": "Z18",
"Z18K1": "Z38367K2"
}
]
},
"Z23451K2": {
"Z1K1": "Z18",
"Z18K1": "Z38367K2"
}
},
"Z35192K2": {
"Z1K1": "Z18",
"Z18K1": "Z38367K4"
}
}
}
]
},
"Z37640K3": {
"Z1K1": "Z89",
"Z89K1": ""
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox for row, date with column name, comp"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
sxofpe2x2nc8oof9pm3rsj1qkinxapk
Z38369
0
88700
294465
2026-07-28T08:38:09Z
Jsamwrites
938
294465
zobject
text/plain
{
"Z1K1": "Z2",
"Z2K1": {
"Z1K1": "Z6",
"Z6K1": "Z38369"
},
"Z2K2": {
"Z1K1": "Z20",
"Z20K1": "Z38367",
"Z20K2": {
"Z1K1": "Z7",
"Z7K1": "Z38367",
"Z38367K1": {
"Z1K1": "Z6091",
"Z6091K1": "Q332"
},
"Z38367K2": {
"Z1K1": "Z6092",
"Z6092K1": "P575"
},
"Z38367K3": {
"Z1K1": "Z6091",
"Z6091K1": "Q12772819"
},
"Z38367K4": "Z1002"
},
"Z20K3": {
"Z1K1": "Z7",
"Z7K1": "Z877",
"Z877K2": {
"Z1K1": "Z89",
"Z89K1": "\u003Ctr\u003E\u003Ctd\u003EDiscovery\u003C/td\u003E\u003Ctd\u003E23 September 1846\u003C/td\u003E\u003C/tr\u003E"
}
}
},
"Z2K3": {
"Z1K1": "Z12",
"Z12K1": [
"Z11",
{
"Z1K1": "Z11",
"Z11K1": "Z1002",
"Z11K2": "infobox row with column name, test"
}
]
},
"Z2K4": {
"Z1K1": "Z32",
"Z32K1": [
"Z31"
]
},
"Z2K5": {
"Z1K1": "Z12",
"Z12K1": [
"Z11"
]
}
}
0pqp1q7lp7bd0vz9ut80hmsjku5zkb1