TEIMETA Meta-Metadata editor

An editor (generated automatically from a ODD description) for subparts of an XML file

Downloading or using the tool

Online use: http://ct3.ortolang.fr/teimeta/

Downloading the tool for MacOs: http://ct3.ortolang.fr/download/teimeta-macos.zip

Downloading the tool for windows 64: http://ct3.ortolang.fr/download/teimeta-x64.exe

Downloading the tool for windows 32: http://ct3.ortolang.fr/download/teimeta-x86.exe

Downloading the TEI Spoken language ODD: http://ct3.ortolang.fr/teimeta/teispoken.odd

Downloading the TEI Media ODD: http://ct3.ortolang.fr/teimeta/media.odd

Downloading the DC/OLAC ODD: http://ct3.ortolang.fr/teimeta/olac.odd


TEIMETA is a tool for editing XML files. The editing structure, possibilies, and information are described in an XML ODD TEI file. TEIMETA uses this description (the model) to produce automatically a user interface in a webbrowser or an independant Electron application.

Integration of the tool in another application is possible through two different method: 1) integrate the library as a plugin in another website, using your own functions to load and save the data 2) redesign the HTML interface using the full power of the tool.

The tool was created to edit TEI files, but it can be used for any type of XML format. XML schema control of the XML created files is not (yet) implemented. The quality of the final files is automatically controled by the description (the ODD model) but the quality of what the model generates is not controlled by TEIMETA (note that it would be very difficult to control that the ODD are garantied to allways build correct XML files).

TEIMETA allows to edit any XML node but not to move this node around in the XML file. New nodes can be created and nodes can be erased (if this is allowed by the model). The ODD describes node position from the root. The values of an XML node not described in the ODD file will never be modified. This means that it is possible to edit parts of an XML file respecting the integrity of the rest of the file.

Version information

Organization of the data

The main editing features are:

Editing the ODD and XML examples

The ODD is using the TEI support for inserting tags into the TEI. Actually, we don't do that but we use desc field to provide rich information that will be provided to the user when editing data. The corresp, rend et rendition have a different fonctionnaly than in the TEI. They allow to describe the control of the data edited by TEIMETA. This is also the case for the remarks tag which is used to describe the visual presentation of the data to be edited. The other fields follow the TEI guidelines.

Description format for the XML nodes

The ODD is made of elementSpec elements that can refer (using elementRef) to other elements of the same type. Each elementSpec contains the description of the node content, attributes, and pointer to descendants. moduleRef are not used.


<schemaSpec ident="NameOfOdd" ns="http://basic-namespace.org" start="olac:olac"
                    <altIdent type="xmlns:olac">http://www.language-archives.org/OLAC/1.1/</altIdent>

        <classRef key="filedesc" source="filedesc.odd"/>

        <elementSpec ident="tag_TEI" module="header"
            <desc xml:lang="fr">... in French ... - partie affichée pour décrire
            <desc xml:lang="en">... in English ... - information for the user</desc>
                <sequence minOccurs="0" maxOccurs="unbounded">
                    <elementRef key="sub_tag_1"
                    <elementRef key="sub_tag_2"/>
                <elementRef key="idno" corresp="handle" minOccurs="1" maxOccurs="unbounded"/>
                <dataRef name="NCName"/>
                <attDef ident="mimeType" usage="req" mode="change">
                    <valList type="closed">
                        <valItem ident="audio/wav"/>
                        <valItem ident="audio/mp3"/>
                        <valItem ident="other"/>
                    <!-- this will display the current attribute (mimeType) as it is described in the <ab> field -->
                        <ab>color:red; width: 400px;</ab>
                <attDef ident="dur-iso" usage="req" mode="change">
                    <desc xml:lang="fr">durée du média : chaque medias peut avoir une durée
                    <desc xml:lang="en">media duration : each media could have a different
                        duration </desc>
                        <dataRef name="duration"/>
            <!-- this will display the elementSpec block as it is described in the <ab> field -->
            <remarks style="element">
                <ab>background-color: lightgreen; border-radius: 8px; margin: 3px; margin-top: 10px;</ab>
            <!-- this will display the texnode/datatype in the content part as it is described in the <ab> field -->
            <remarks style="content">
                <ab>color: blue; width: 500px;</ab>

Use the application

HTML Page Version (implemented)

The soft works in a static webpage that can be used locally or distantly. Nothing is required from the server. Local ODD and XML files can be produced. Saving is done using the download facility of the web browser.

npm run page
        # creating a sub-directory temp-page
        $ open temp-page/teimeta.html
npm run test
        # creating a sub-directory temp-page and a localhost test run in /Library/WebServer/Documents/
        $ open http://localhost/temp-page/teimeta.html
        # creating a distribution sub-directory in ./dist/ and a copy in /Library/WebServer/Documents/dist/
        # test runs are done by calling node test/test1.js up to test/test4.js

A free available version is found here: http://ct3.ortolang.fr/teimeta/ The software running on that page can be easily run on a static web server. It is only necessary to copy the dist directory (from the sources) on the web server. The models sub-directory can be tailored to your needed. To do this, edit the models.json file and provide your own files in the models directory.

Stand Alone Version (implemented)

TEIMETA Application

The soft is integrated within Electron. It has the same functionnalities as the Html version. It can be started as a classical software.

npm run electron
        # creating a sub-directory temp-electron
        npm start

Use as a library in another software using basic library (implemented)

TEIMETA is written using typescript and it can be easily interface with javascript or typescript using the distribution file or directly from the sources.

Include lib.js and directory fonts (found in folder dist) Instructions are within lib.ts file in teimeta folder in sources. Five functions that are sufficient to use teimeta as a library are integrated in the global object: window.teimeta.loadXmlOddCss - load from raw data window.teimeta.readXmlOddCss - load from url addresses window.teimeta.finalizeHTML - finalize HTML display window.teimeta.generateXml - get results of edition from the user window.teimeta.teimetaParams - set parameters Two supplementary function are available for easy implementation of a standalone HTML page software such as TEIMETA. window.teimeta.readTextFile - read an url as raw data window.teimeta.saveFileLocal - save raw data as a local file in the download section


        <script src="../dist/lib.js"></script>
        pre {
            white-space: pre-wrap;       /* Since CSS 2.1 */
            word-wrap: break-word;       /* Internet Explorer 5.5+ */
          <span><b>Please edit the data and then</b></span>
          <button id="test102" type="button" onclick="saveTheData();"><b><em>Save the data</em></b></button>
          <div id="teimeta"></div>
          <pre id="info">Nothing yet.</pre>

        window.teimeta.teimetaParams.defaultNewElement = false;
        window.teimeta.readXmlOddCss('http://localhost/test/test102.xml', 'http://localhost/test/test102.odd', null,
          function (h) {
            var el = document.getElementById('teimeta');
            el.innerHTML = h;

        function saveTheData() {
          var r = window.teimeta.generateXml();
          window.teimeta.saveFileLocal('xml', 'test102-result.xml', r);
          var el = document.getElementById('info');
          info.textContent = r;


Use as a library in another software using the full implementation (implemented)

Include the dist directory minus lib.js (unneeded) and teimeta.html (or you can redesing this file). This takes advantage of all functions implemented. It only requires to redesign the HTML page. The software can runned calling all internal basic functions. Include bundle.js and directory fonts (found in folder dist)

Use the sources with require/import

For people which want to use the source code, then they can download it and then use the require() / import features of javascript or typescript. For example:

Download source code and distribution: https://github.com/christopheparisse/teimeta/

Issues, questions and comments issues.

License CC0 (Public Domain)