===== About NCL =====
==== What is NCL? ====
NCL is the acronym for //Nested Context Language//.
NCL is a declarative language, indeed an XML application, which has been
specified in a modular way, aiming at combining its modules into language
profiles.
Among the NCL profiles are those targeting DTV domain. The NCL flexibility,
its reuse facility, multi-device support, application content and
presentation adaptability, and mainly, its intrinsic support for easily
defining spatio-temporal synchronization among media assets, including those
coming from viewer interactions, make NCL an outstanding solution for all
kinds of interactive DTV systems.
NCL is the declarative language of the Japanese-Brazilian DTV middleware
ISDB-TB((Associação Brasileira de Normas Técnicas. NBR 15606-2. Digital terrestrial
television -- Data coding and transmission specification for digital
broadcasting -- Part 2: Ginga-NCL for fixed and mobile receivers -- XML
application language for application coding. 2nd Edition. May,
2011. Available at http://forumsbtvd.org.br/materias.asp?id=112))
((Associação Brasileira de Normas Técnicas. NBR 15606-5. Digital terrestrial
television -- Data coding and transmission specification for digital
broadcasting -- Part 5: Ginga-NCL for portable receivers -- XML application
language for application coding. 2nd Edition. May,
2011. Available at http://forumsbtvd.org.br/merias.asp?id=112)), and also ITU-T Recommendation for IPTV services((ITU-T Recommendation H.761. Nested Context Language (NCL) and Ginga-NCL for
IPTV Services. Geneva, April, 2009. Available at
http://www.itu.int/rec/T-REC-H.761)).
NCL has a stricter separation between application content and structure.
NCL does not define any media content itself. Instead, it defines the glue
that holds media together in multimedia presentations. Thus, an NCL
document only defines how media objects are structured and related in time
and space.
As a //glue// language, NCL does not restrict or prescribe any
media-object content type. Which media objects are supported depends on the
media players embedded in the NCL formatter (the NCL player).
Therefore, we can have perceptual content, like videos, images, audios, and
texts, as NCL media objects. We can also have media objects with imperative
code content, like Lua code, ECMAScript code, Java code, etc. In addition,
we can have media objects with declarative code content, like HTML-based
code, SVG code, X3D code, SMIL code, NCL code (yes, NCL applications embed
other NCL applications), etc. Therefore, NCL does not substitute but embeds
other language's applications, relating all objects in time and space in a
multiple device distributed presentation.
==== NCL Versions ====
The following processing instructions must be written in an NCL document.
They identify NCL applications and the NCL version to which the document
conforms.
A specific version is specified in the URI path, where the version number
"x.y" is written immediately after the "/NCL".
The version number of an NCL document specification consists of a major
number and a minor number, separated by a dot. The numbers are represented
as decimal character strings with leading zeros suppressed. The initial
standard version number is 3.0.
New NCL versions shall be released in accordance to the following versioning
policy. If NCL players that conform to older versions can still receive a
document based on the revised specification, due to error corrections,
operational reasons, or the addition of a new concise syntax notation
("syntax sugar") that can be translated at compile time to the old one, the
new version of NCL shall be released with the minor number updated. If NCL
players that conform to older versions cannot receive a document based on
the revised specifications, the major number must be updated.
==== NCL Profiles ====
NCL allows for the combination of its modules in language profiles.
Any document in conformance with NCL profiles shall have the [[ncl|]]
element as its root element.
The "profileName" string in the URI path, identifies the language profile
used to specify the document. Currently, seven language profiles have been
defined:
* The //NCL 3.0 Full Profile//, also called //NCL 3.0 Language
Profile//, is the complete profile of the NCL 3.0 language. It
comprises all NCL modules and provides all facilities for the
declarative authoring of NCL documents.
* The //NCL 3.1 Language Profile// extends the version 3.0 with a
"syntactic sugar" for defining relations and relationships.
* The //NCL 3.0 Raw Profile// has the same expressiveness of the NCL
3.0 Language Profile, but without any reuse facilities and with a
minimum number of "syntactic sugars". It has the minimum possible
number of elements and attributes although maintaining the same
expressiveness of the Full Profile.
* The //NCL 3.0 Enhanced DTV Profile (EDTV Profile)// aims at the DTV
domain. It is the standard declarative language of the
Japanese-Brazilian DTV middleware ISDB-TB for fixed and mobile
receivers, and also ITU-T Recommendation for IPTV services.
* The //NCL 3.0 Basic DTV Profile (BDTV Profile)// is a simplification
of the EDTV profile in which transition effects and metadata
functionalities are optional. It is the standard declarative language
of the Japanese-Brazilian DTV middleware ISDB-TB for portable
receivers.
* The //NCL 3.0 Connector Profile// allows for the creation of causal
and constraint relations that can be imported by any of the previously
listed profiles, except the NCL 3.0 Raw profile.
* The //NCL 3.0 CausalConnector Profile// is simplified version of the
NCL 3.0 Connector profile, which only allows for defining causal
relations.