# Nested Context Language

Nested Context Language (NCL) é uma linguagem de autoria declarativa para documentos hipermídia utilizada no campo da televisão digital e interatividade. Em sua concepção, a NCL é o resultado de uma combinação de módulos da XML, o que permite que a própria linguagem possa combinar módulos internos e gerar perfis para objetivos específicos.
Os documentos NCL, não contêm objetos de mídia, em vez disso, funcionam fazendo associação (como uma linguagem de cola) dos elementos em uma apresentação multimídia. A linguagem também conecta e define a relação e a temporização dos elementos. Não ha restrição em relação a tipo de mídia, podendo ser imagens (GIF, JPEG e etc.), vídeo (MPEG, MOV e etc.), audios (MP3, WMA e etc.), arquivos de texto (TXT, PDF, etc.) e até action scripts (Xlet, Lua, etc.).
A NCL foi inicialmente projetada para o ambiente Web, mas uma das principais aplicações da NCL é o uso como linguagem declarativa do middleware do SBTVD (sistema brasileiro de televisão digital) denominado Ginga, mais especificamente no modulo Ginga-NCL. É também uma tecnologia padronizada para pela ITU-T para serviços de TVIP (Televisão por IP). Em ambos os casos é utilizado para desenvolver aplicações interativas para televisão digital.

## Estrutura

O NCL foi projetado para ser modular para permitir o uso de subconjuntos de módulos de acordo com as necessidades da aplicação específica.
Exemplo de estrutura básica de um arquivo NCL:
Na segunda linha é possível ver a especificação de qual Perfil NCL este documento vai usar :
A versão 3.1 do padrão é dividida em 14 áreas com cada módulo atribuído a uma área. Cada módulo, por sua vez, define um ou mais elementos XML. As áreas e módulos associados são:
* Estrutura
** Modulo Estrutura
* Componentes
** Modulo Mídia
** Modulo Contexto
* Interfaces
** Modulo MediaContentAnchor
** Modulo CompositeNodeInterface
** Modulo PropertyAnchor
** Modulo SwitchInterface
* Layout
** Módulo Layout
* Especificação de apresentação
** Modulo Descritor
* Temporização
** Módulo Temporização
* Efeitos de Transição
** Módulo TransitionBase
** Módulo Transição
* Navigational Key
** Module KeyNavigation
* Controle de Apresentação
** Módulo TestRule
** Módulo TestRuleUse
** Módulo ContentControl
** Módulo DescriptorControl
* Linking
** Módulo Linking
* Conectores
** Módulo ConnectorCommonPart
** Módulo ConnectorAssessmentExpression
** Módulo ConnectorCausalExpression
** Módulo CausalConnector
** Módulo CausalConnectorFunctionality
** Módulo ConnectorBase
* Animação
** Módulo Animação
* Reuse
** Módulo Importação
** Módulo EntityReuse
** Módulo ExtendedEntityReuse
* Meta-Information
** Módulo Metainformation

## Perfis NCL

Perfis são subconjuntos padrão de módulos. Os perfis definidos pela norma incluem:
* Perfil completo – Inclui todos os módulos NCL
* Perfil Aprimorado de TV Digital (EDTV) - Inclui Estrutura, Layout, Mídia, Contexto, MediaContentAnchor, CompositeNodeInterface, PropertyAnchor, SwitchInterface, Descriptor, Linking, CausalConnectorFunctionality, ConnectorBase, TestRule, TestRuleUse, ContentControl, DescriptorControl, Timing, Import, EntityReuse, ExtendedEntityReuse, Módulos KeyNavigation, Animation, TransitionBase, Transition e Metainformation
* Perfil Básico de TV Digital (BDTV) – Inclui os perfil Aprimorado de TV Digital (EDTV), exceto os módulos Animation, TransitionBase e Transition