===== 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.