The on-wiki version of this newsletter can be found here: https://www.wikifunctions.org/wiki/Wikifunctions:Status_updates/2026-05-15 ---- A higher meaning
One of the big questions about Abstract Wikipedia is: how many functions constructing fragments https://www.wikifunctions.org/wiki/Wikifunctions:Abstract_Wikipedia/2025_fragment_experiments will we need? Because if that number is large, doesn’t that mean that we will need many functions implementing these fragments in many languages? And that would increase the effort needed for each language, and at some point it might be easier to just translate and validate the translations of the texts, instead of creating all these functions?
We don’t know how big that number will be. But today I want to discuss one reason why I think it will remain limited: not every fragment will need to be implemented through language-specific functions.
How would that be the case? Don’t we need to implement every fragment with a language-specific function in every language we want to support?
Well, yes, but sometimes these implementations can be compositions of other abstract functions!
Here is a concrete example: Year-specific sentence from statement (Z28436) https://www.wikifunctions.org/wiki/Z28436 creates a sentence from a statement with a point in time property. For example, a sentence such as “The population of North Epping was 4657 in 2021.” or "The population of Donji Humac was 157 in 2011."
The function Z28436 is implemented using a configuration object, currently with implementations in English and Bangla.
Now, let’s take a look at the function Most recent year-specific sentence about item (Z28445) https://www.wikifunctions.org/wiki/Z28445. Instead of taking an object and a statement, it takes an object and a property, and returns the value for the statement with the most recent point in time for that property. So if we do run this for Donji Humac and population, it will result in "The population of Donji Humac was 173 in 2021.", as this was the most recent population statement we have in Wikidata for Donji Humac.
And if we now look at the implementation of Z28445, we don’t see a configuration. Instead, we see a function that is composed of the function above, Z28436, and Most recent qualified statement from item (WIP) (Z28446) https://www.wikifunctions.org/wiki/Z28446. Nothing in this implementation is language specific. Instead, the language is being passed through to the underlying function.
So we see here an abstract function that has an entirely abstract implementation.
This is a general pattern that can be reused: given we have a solid foundation, it is hopefully often possible to have “higher” abstract functions be grounded in more foundational functions, which are nevertheless abstract.
For example, consider the sentences
- “The Huns attacked the Roman empire in the 5th century.” - “John Wilkes Booth assassinated Abraham Lincoln on April 14, 1865.” - “John Lennon met Yoko Ono on November 7, 1966.” - “Leonard Cohen wrote ‘Hallelujah’ in 1984.” - “Microsoft launched Windows 3.1 on August 24, 1995.” - “Hubble discovered Osiris on November 28, 2001.”
They all describe very different events, but in the end, in English, they all have a very similar structure, involving a predicate, a subject, a direct object, and a more or less specific point in time. All of these sentences could, in English, be created by a single function.
Maybe it will turn out that all of these sentences could be created through a single abstract function in several languages. Let’s call this a grounded function.
And now we could have several higher-level functions, implemented through grounded functions like these, and all we have to do is pick the right predicate.
This won’t always work. But the good thing is that if we have these higher-level functions, we can try to capture the exception at that higher level, redirect it for the relevant language, and otherwise select the right predicate and just use the grounded function.
For example, in English we would usually say
- “Goldie Hawn gave birth to Kate Hudson on April 19, 1979.”
Which is a slightly different grammatical structure than the one above. The grammatical structure we have above would lead to “Goldie Hawn birthed Kate Hudson on April 19, 1979.” – which would be an unusual sentence in English, but works in some other languages, e.g. Croatian, without problems.
So a function that creates that sentence could choose for this use case a different grounded function, or could even have a one-off implementation, for English and other languages where the grounded function introduced above wouldn’t work, and use the grounded function for the other languages.
This kind of pattern could considerably reduce the number of language specific implementations needed for Abstract Wikipedia to work, making our goal more viable. Recent Changes in the software
This week, we added support in Wikifunctions for several dozen natural languages that were already supported by TranslateWiki.net https://translatewiki.net/ (and used for translating Wikimedia software) but not yet supported by Wikifunctions. We also updated Abstract pages to display a copyable QID next to the page title, making it easier to quickly copy the corresponding Wikidata QID, similar to the copyable ZID shown next to titles in Wikifunctions (T423651 https://phabricator.wikimedia.org/T423651, T424265 https://phabricator.wikimedia.org/T424265). News in Types: way forward for natural language generation types
I have been reading and thinking about the currently open proposals and their discussion for types supporting natural language generation https://www.wikifunctions.org/wiki/Wikifunctions:Status_updates/2026-04-10 for a while, and I am honestly not sure about the best approach forward. But I am getting the feeling that figuring out the best answer might be getting in the way of moving forward. Given that, I would suggest that within the next two weeks we get the following three types specific enough to implement them, then actually implement them, then use them, and learn from their usage:
- Semantic Unit https://www.wikifunctions.org/wiki/Wikifunctions:Type_proposals/Semantic_unit - Syntactic Unit https://www.wikifunctions.org/wiki/Wikifunctions:Type_proposals/Syntactic_unit - Syntactic table https://www.wikifunctions.org/wiki/Wikifunctions:Type_proposals/Syntactic_table
All three proposals have garnered some, but not unanimous approval, and I think they all have advantages and disadvantages. But I wonder if instead of thinking through these in detail, we just try them out, and see what works.
If anyone has better proposals moving forward, I am all ears. Recording of the May 11 Volunteers’ Corner
This Monday’s volunteer’s corner (11 May 2026) is now available as a recording on Commons https://commons.wikimedia.org/wiki/File:Abstract%20Wikipedia%20Volunteer%20Corner%202026-05.webm. Thank you for the lively conversation, and for the well-attended meeting. Fresh Functions weekly: 40 new Functions
This week we had 40 new functions. Here is an incomplete list of functions with implementations and passing tests to get a taste of what functions have been created. Thanks everybody for contributing!
- signum (float64) (Z34780) https://www.wikifunctions.org/wiki/Z34780 - run-length encoding (Z34790) https://www.wikifunctions.org/wiki/Z34790 - most common element(s) in list (Z34793) https://www.wikifunctions.org/wiki/Z34793 - is valid pinyin for single character (Z34797) https://www.wikifunctions.org/wiki/Z34797 - short form of label for Type (Z34802) https://www.wikifunctions.org/wiki/Z34802 - short form of label for Type, English (Z34804) https://www.wikifunctions.org/wiki/Z34804 - label of persistent Type in language or fallback (Z34810) https://www.wikifunctions.org/wiki/Z34810 - is float64 finite? (Z34827) https://www.wikifunctions.org/wiki/Z34827 - Monolingual stringset equality (Z832) https://www.wikifunctions.org/wiki/Z832 - Natural language equality (Z862) https://www.wikifunctions.org/wiki/Z862 - select Forms with given features from Lexeme (Z34899) https://www.wikifunctions.org/wiki/Z34899 - select Monolingual texts in any of several langs (Z34902) https://www.wikifunctions.org/wiki/Z34902 - Wikifunctions sitelink for Wikidata item (Z34914) https://www.wikifunctions.org/wiki/Z34914 - string from lexeme or label given item ref. & lang (Z34927) https://www.wikifunctions.org/wiki/Z34927 - better matching multilingual text form from lexeme (Z34943) https://www.wikifunctions.org/wiki/Z34943 - best monolingual text of multilang, with lang list (Z34947) https://www.wikifunctions.org/wiki/Z34947 - monolingual text from multilingual with fallback (Z34953) https://www.wikifunctions.org/wiki/Z34953 - writing direction(s) of script as WD Item(s) (Z34993) https://www.wikifunctions.org/wiki/Z34993 - length of Typed map <entity, entity> (Z34999) https://www.wikifunctions.org/wiki/Z34999 - get element of entity-keyed map (Z35004) https://www.wikifunctions.org/wiki/Z35004 - Bengali -এ suffix form (Z35010) https://www.wikifunctions.org/wiki/Z35010 - display year in Bangla no খ্রিস্টাব্দ after 1899 (Z35013) https://www.wikifunctions.org/wiki/Z35013 - wrap HTML fragment in cell (td/th) element (Z35017) https://www.wikifunctions.org/wiki/Z35017 - Year specific sentence from statement in Bangla (Z35018) https://www.wikifunctions.org/wiki/Z35018 - inception sentence (Z35022) https://www.wikifunctions.org/wiki/Z35022 - inception sentence, English (Z35023) https://www.wikifunctions.org/wiki/Z35023 - abstractwiki 18-col periodic table to nth period (Z35031) https://www.wikifunctions.org/wiki/Z35031 - wrap an HTML fragment in a simple tag (Z35049) https://www.wikifunctions.org/wiki/Z35049
A complete list of all functions sorted by when they were created https://www.wikifunctions.org/wiki/Special:ListObjectsByType?type=Z8&orderby=latest is available.
abstract-wikipedia@lists.wikimedia.org