Nested Context Language
Criada no Laboratório TeleMídia da PUC-Rio, a linguagem NCL - Nested Context Language - é uma linguagem declarativa para autoria de documentos hipermídia baseados no modelo conceitual NCM - Nested Context Model.
O modelo da linguagem NCL visa não apenas o suporte declarativo à interação do usuário, mas ao sincronismo espacial e temporal em sua forma mais geral, tratando a interação do usuário como um caso particular. NCL visa também o suporte declarativo a adaptações de conteúdo e de formas de apresentação de conteúdo; o suporte declarativo a múltiplos dispositivos de exibição, interligados através de redes residenciais (HAN – Home Area Networks) ou mesmo em área mais abrangente; e a edição/produção da aplicação em tempo de exibição, ou seja, ao vivo. Como esses são os focos da maioria das aplicações para TV digital, NCL se torna a opção preferencial no desenvolvimento da maioria de tais aplicações. Para os poucos casos particulares, como por exemplo, quando a geração dinâmica de conteúdo é necessária, NCL provê o suporte de sua linguagem de script Lua.
NCL define como objetos de mídia são estruturados e relacionados, no tempo e espaço. Como uma linguagem de cola, NCL não restringe ou prescreve os tipos de conteúdo dos objetos de mídia. Nesse sentido, podemos ter como objetos de mídia NCL: objetos perceptuais de imagem, de vídeo, de áudio, e de texto; objetos com código imperativo (Lua, entre outros); e objetos com código declarativo (XHTML, entre outros), incluindo objetos com código NCL aninhados. Quais objetos de mídia têm suporte depende apenas dos exibidores de objetos de mídia que estão acoplados ao exibidor (player) NCL. Essa definição depende do Sistema de TV Digital onde o Ginga será utilizado. Por exemplo, no caso do ISDB-TB, objetos com código imperativo podem ser Java (XLet) ou Lua (NCLua); objetos com código declarativo podem ser XHTML (com as funcionalidades mínimas definidas pelas Normas do Sistema) ou outras aplicações NCL embutidas.
Lua é a linguagem de script de NCL. Lua é uma linguagem de programação imperativa eficiente, rápida e leve, projetada para estender aplicações. Lua combina uma sintaxe simples para programação imperativa com construções poderosa para descrição de dados baseadas em tabelas associativas e em semântica extensível. Lua é tipada dinamicamente, é interpretada e tem gerenciamento automático de memória, com coleta de lixo incremental. Essas características fazem de Lua uma linguagem ideal para configuração, automação (scripting) e prototipagem rápida (geração rápida de aplicações).