sillsdev / sillsdev/TheCombine

Create LivingDictionary issue and pr for LIFT export

Open
#4,332 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
22
Forks
10
Avg merge
2d 2h
Merged PRs (30d)
9

Description

https://github.com/livingtongues/living-dictionaries

Issue draft, possibly to post with a companion pr implementing it:

Title: Native LIFT export — a portable, tool-neutral copy of a community's dictionary

What this is

A proposal to add LIFT as a second structured export format alongside CSV (revisiting #44, closed in 2024, and complementing the export improvements discussed in #627).

LIFT ("Lexicon Interchange FormaT") is a plain-XML file format designed specifically for moving dictionary data between programs. It is a common interchange format of the language documentation ecosystem: FieldWorks, The Combine, WeSay, ELAN (for interlinearized texts), and Dictionary App Builder all read it, and archives accept it.

Spec: https://github.com/sillsdev/lift-standard (stable v0.13 is widely used; there are no active plans to proceed to the proposed v0.14 or v0.15).

Why it helps Living Dictionaries communities

  • Data ownership becomes portable in practice, not just in principle. Communities own their data on the platform; a LIFT export lets them take it anywhere — into desktop tools for offline work, into The Combine for expansion via Rapid Word Collection, into a mobile-app builder, into an institutional archive — without a bespoke converter per destination.
  • CSV can't carry the structure a dictionary actually has. The current CSV export flattens multi-sense entries, keeps only the first audio/photo/sentence, and exports semantic domains as translated display text. LIFT natively represents entries → senses → examples, multiple writing systems per headword, audio/photo references, and stable entry ids (so a later re-import can update rather than duplicate).

Why it's smaller than it sounds

  • Writing LIFT is much easier than parsing it — an exporter only emits the subset of constructs that the Living Dictionaries model has; it never faces the full spec's optionality or malformed input. Realistically a few hundred lines of dependency-free TypeScript: a multitext helper (LD's MultiString maps 1:1 onto LIFT's <form lang><text> pattern), per-entry/sense serialization, XML escaping, and a .lift-ranges companion file for the semantic-domain and part-of-speech vocabularies.
  • EntryData is already assembled identically on server and client, so the exporter is a serializer over an existing read model, not new data plumbing.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the existing CSV export and the shared EntryData read model, including how MultiString values are represented on server and client. Then compare the model fields with the LIFT v0.13 specification and define the export and .lift-ranges scope. Done means a dependency-free TypeScript exporter can represent the supported dictionary data in valid, portable LIFT output.

Written by the indexing model from the issue text.

Assessment

Tech stack
typescript
Domain
data
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.