ABNT NBR 15606-1 - Universidad de Buenos Aires

Anuncio
BRAZILIAN
STANDARD
ABNT NBR
15606-1
First edition
2007.11.30
Valid from
2007.12.01
Digital terrestrial television — Data coding
and transmission specification for digital
broadcasting
Part 1: Data coding specification
Descriptors: Digital terrestrial television. Digital broadcasting. Data coding.
ICS 33.160.01
ISBN 978-85-07-00614-5
Reference number
ABNT NBR 15606-1:2007
24 pages
© ABNT 2007
ABNT NBR 15606-1:2007
ABNT office
All rights reserved. Unless otherwise specified, no part of this publication may be reproduced or utilized in any form or by any
means, electronic or mechanical, including photocopying and microfilm, without permission in writing from either ABNT.
ABNT office
Av.Treze de Maio, 13 - 28º andar
20031-901 - Rio de Janeiro - RJ
Tel.: + 55 21 3974-2300
Fax: + 55 21 2220-1762
[email protected]
www.abnt.org.br
Published in Brazil
ii
© ABNT 2007 – All rights reserved
ABNT NBR 15606-1:2007
Contents
Pages
Foreword......................................................................................................................................................................v
1
Scope ..............................................................................................................................................................1
2
Normative references ....................................................................................................................................1
3
Terms and definitions ...................................................................................................................................2
4
Abbreviations.................................................................................................................................................3
5
5.1
5.1.1
5.1.2
5.2
5.2.1
5.2.2
Basic architecture..........................................................................................................................................3
System architecture ......................................................................................................................................3
Reference model............................................................................................................................................3
Interface specification...................................................................................................................................4
Middleware architecture................................................................................................................................5
Application environment structure..............................................................................................................5
Application environment description ..........................................................................................................5
6
6.1
6.2
Protocol ..........................................................................................................................................................6
Protocol stack ................................................................................................................................................6
Data transmission modes.............................................................................................................................6
7
7.1
7.2
7.2.1
7.2.2
7.3
7.4
7.5
Receiver ..........................................................................................................................................................7
Reference model for receiver .......................................................................................................................7
Receiving and storing function ...................................................................................................................7
Data storage ...................................................................................................................................................7
Data and video storage .................................................................................................................................7
Presentation function....................................................................................................................................7
Decoding process and display.....................................................................................................................7
Plug-in.............................................................................................................................................................8
8
8.1
8.1.1
8.1.2
8.2
8.3
Presentation process ....................................................................................................................................9
Logical coordinate.........................................................................................................................................9
Logical coordinate and display coordinate in square pixel format..........................................................9
Logical coordinate and display coordinate in non-square pixel format..................................................9
Colorimetry.....................................................................................................................................................9
Composition between planes.......................................................................................................................9
9
Profiles specification...................................................................................................................................10
10
10.1
10.2
Requirements for data broadcasting and available services..................................................................14
Requirements of data broadcasting for digital broadcasting system ...................................................14
Data service for digital broadcasting ........................................................................................................17
11
11.1
11.1.1
11.1.2
11.1.3
11.1.4
11.2
11.2.1
11.2.2
11.2.3
11.2.4
11.2.5
11.2.6
11.2.7
11.2.8
Monomedia...................................................................................................................................................19
Video coding ................................................................................................................................................19
MPEG-1 video...............................................................................................................................................19
MPEG-2 video...............................................................................................................................................19
MPEG-4 video...............................................................................................................................................19
H.264|MPEG-4 AVC......................................................................................................................................19
Still pictures and graphics coding.............................................................................................................19
I-frames .........................................................................................................................................................19
JPEG .............................................................................................................................................................20
PNG ...............................................................................................................................................................20
MNG...............................................................................................................................................................20
MPEG-2 video “drips” .................................................................................................................................20
GIF .................................................................................................................................................................20
MPEG-4 video clips .....................................................................................................................................20
H.264|MPEG-4 AVC clips.............................................................................................................................20
© ABNT 2007 – All rights reserved
iii
ABNT NBR 15606-1:2007
11.3
11.3.1
11.3.2
11.3.3
11.3.4
11.3.5
11.3.6
11.3.7
11.4
11.4.1
11.4.2
11.4.3
11.4.4
11.5
11.6
iv
Audio coding................................................................................................................................................20
MPEG-2 audio ..............................................................................................................................................20
PCM (AIFF) ...................................................................................................................................................20
MPEG-4 audio ..............................................................................................................................................20
Coding of synthesized sound ....................................................................................................................21
Monomedia format for audio clips (GEM) .................................................................................................21
MPEG-1 audio layer 3 (MP3) .......................................................................................................................21
Audio AC3 ....................................................................................................................................................21
Character coding .........................................................................................................................................21
8 bits character coding ...............................................................................................................................21
Universal multi-octet coded character set (UCS).....................................................................................23
Shift-JIS coding ...........................................................................................................................................24
EUC-JP..........................................................................................................................................................24
Geometric description of commands coding ...........................................................................................24
Subtitles and superimposed characters ...................................................................................................24
© ABNT 2007 – All rights reserved
ABNT NBR 15606-1:2007
Foreword
Associação Brasileira de Normas Técnicas (ABNT) is the Brazilian Standardization Forum. Brazilian Standards,
which content is responsability of the Brazilian Committees (Comitês Brasileiros – ABNT/CB), Sectorial
Standardization Bodies (Organismos de Normalização Setorial – ABNT/ONS) and Special Studies Committees
(Comissões de Estudo Especiais – ABNT/CEE), are prepared by Study Committees (Comissões de Estudo – CE),
made up of representants from the sectors involved including: producers, consumers and neutral entities
(universities, laboratories and others).
Brazilian Standards are drafted in accordance with the rules given in the ABNT Directives (Diretivas), Part 2.
Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights.
ABNT shall not be held responsible for identifying any or all such patent rights.
ABNT NBR 15606-1 was prepared within the purview of the Special Studies Committees of Digital Television
(ABNT/CEE-00:001.85). The Draft Standard was circulated for National Consultation in accordance with
ABNT Notice (Edital) nº 09, from September 06, 2007 to November 05, 2007, with the number Draft 00:001.85-006/1.
Should any doubts arise regarding the interpretation of the English version, the provisions in the original text
in Portuguese shall prevail at all time.
This standard is based on the work of the Brazilian Digital Television Forum as established by the Presidential
Decree number 5.820 of June, 29th 2006.
ABNT NBR 15606 consists of the following parts, under the general title “Digital terrestrial television —
Data coding and transmission specifications for digital broadcasting”:
⎯ Part 1: Data coding specification;
⎯ Part 2: Ginga-NCL for fixed and mobile receivers – XML application language for application coding;
⎯ Part 3: Data transmission specification;
⎯ Part 4: Ginga-J – The environment for the execution of procedural applications;
⎯ Part 5: Ginga-NCL for portable receivers – XML application language for application coding.
This Standard is the English version of the corrected version dated 2008.04.07 of ABNT NBR 15606-1:2007.
© ABNT 2007 – All rights reserved
v
BRAZILIAN STANDARD
ABNT NBR 15606-1:2007
Digital terrestrial television — Data coding and transmission specification
for digital broadcasting
Part 1: Data coding specification
1
Scope
This part of ABNT NBR 15606 specifies the reference model enabling data broadcasting, which is part of the digital
broadcasting system specified as Brazilian system digital television (SBTVD), besides the monomedia supported
by the data broadcasting system and code of caption e superimpose characters.
2
Normative references
The following referenced documents are indispensable for the application of this document. For dated references,
only the edition cited applies. For undated references, the latest edition of the referenced document (including any
amendments) applies.
ABNT NBR 15602-1:2007, Digital terrestrial television – Video coding, audio coding and multiplexing –
Part 1: Video coding
ABNT NBR 15602-2, Digital terrestrial television – Video coding, audio coding and multiplexing – Part 2: Audio
coding
ABNT 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
ABNT NBR 15606-3, Digital terrestrial television – Data coding and transmission specification for digital
broadcasting — Part 3: Data transmission specification
ISO/IEC 8859-15, Information technology – 8-bit single-byte coded graphic character sets – Part 15: Latin alphabet
No. 9
ISO/IEC 10646-1, Universal multiple-octet coded character set (UCS) – Part 1: Architecture and basic multilingual
plane (BMP)
ISO/IEC 10918-1, Information technology – Digital compression and coding of continuous – Tone still images:
Requirements and guidelines
ISO/IEC 11172-2, Information technology – Coding of moving pictures and associated audio for digital storage
media at up to about 1,5 Mbit/s - Part 2: Video
ISO/IEC 11172-3, Information technology – Coding of moving pictures and associated audio for digital storage
media at up to about 1,5 Mbit/s – Part 3: Audio
ISO/IEC 13818-1, Information technology – Generic coding of moving pictures and associated audio information:
Systems
ISO/IEC 13818-2, Information technology – Generic coding of moving pictures and associated audio information –
Part 2: Video
© ABNT 2007 – All rights reserved
1
ABNT NBR 15606-1:2007
ISO/IEC 13818-3, Information technology – Generic coding of moving pictures and associated audio information –
Part 3: Audio
ISO/IEC 13818-7, Information technology – Generic coding of moving pictures and associated audio information –
Part 7: Advanced Audio Coding (AAC)
ISO/IEC 14496-2, Information technology – Coding of audio-visual objects – Part 2: Visual
ISO/IEC 14496-3, Information technology – Coding of audio-visual objects - Part 3: Audio
ISO/IEC 14496-10, Information technology – Coding of audio-visual objects – Part 10: Advanced video coding
ITU Recommendation BT.470-7, Conventional television systems
ITU Recommendation BT.709, Parameter values for the HDTV standards for production and internacional
programmer exchange
ITU Recommendation J.200:2001, Worldwide common core – Application environment for digital interactive
television services
ITU Recommendation H.222.0, Information technology – Generic coding of moving pictures and associated audio
information: Systems
ITU Recommendation H.262, Information technology – Generic coding of moving pictures and associated audio
information: Systems
ITU Recommendation H.264, Advanced video coding for generic audiovisual services
ARIB STD-B24:2007, Data coding and transmission specifications for digital broadcasting
ARIB STD-B23:2004, Application execution engine platform for digital broadcasting
ARIB STD-B5, Standard television data multiplex broadcasting by transmission method using vertical blanking
interval
ATSC A52B, Digital audio compression standard
MHP 1.0:2003, Multimedia home platform – MHP specification 1.03
GEM 1.0:2005, Globally executable MHP
W3C Recommendation PNG:2003, Portable network graphics specification
W3C Recommendation GIF89a, Graphics interchance format (sm)
3
Terms and definitions
For the purposes of this part of ABNT NBR 15606, the following terms and definitions apply.
3.1
monomedia
individual media font to presentation
EXAMPLE
2
Video, audio, text, image, etc.
© ABNT 2007 – All rights reserved
ABNT NBR 15606-1:2007
3.2
stream
type of continuous communications that values time factor
3.3
transport stream
TS
communication protocol for audio, video and data broadcasting
4
Abbreviations
For the purposes of this part of ABNT NBR 15606, the following abbreviations apply.
AAC
Advanced Audio Coding
AIFF
Audio Interchange File Format
CATV
Cable Television
DSM-CC
Digital Storage Media – Command and Control
EPG
Eletronic Program Guide
GEM
Globally Executable MHP
GIF
Graphics Interchange Format
HDTV
High Definition Television
JPEG
Joint Picture coding Experts Group
MHP
Multimedia Home Platform
MNG
Multiple-image Network Graphics
MPEG
Moving Picture Expert Group
PCM
Pulse Code Modulation
PES
Packetized Elementary Stream
PNG
Portable Network Graphics
SBTVD
Brazilian system digital television
UCS
Universal multi-octet coded Character Set
5
Basic architecture
5.1
5.1.1
System architecture
Reference model
In order to the viewer receive and present such services properly, some receivers' characteristics specification
is also necessary.
NOTE
This Standard shows the reference model for the data broadcasting system, which extend the model defined by
ARIB STD-B24:2007, volume 1, part 1, clause 4, including applications coding and objects carrousel. The suitable presentation
of a data service refers to the service presentation as planned by the diffusion service operator.
The system that implements data broadcasting service in digital broadcasting shall be according to Figure 1.
© ABNT 2007 – All rights reserved
3
ABNT NBR 15606-1:2007
Figure 1 — System structure
5.1.2
Interface specification
Detailed specification shall be according to each interface:
⎯ monomedia coding: coding system for character string, bit map etc., that shall be used in multimedia coding
according to 11.1,11.2 e 11.3;
⎯ coding of subtitle and superimpose: coding system of subtitle and superimpose on bitmap according to 11.6;
⎯ multimedia coding: coding system of XML adopted as multimedia coding system and its profile according to
ABNT NBR 15606-2;
⎯ content transmission format: content transmission format of objects and data carousel transmission method
according to ABNT NBR 15606-3;
⎯ subtitle and superimpose transmission format: independent PES transmission format to transmit subtitles and
superimpose according to 11.6;
⎯ applications coding: coding system of Java adopted as applications coding system and its profile, in
accordance with the procedural environment.
4
© ABNT 2007 – All rights reserved
ABNT NBR 15606-1:2007
5.2
5.2.1
Middleware architecture
Application environment structure
Middleware architecture for interactive television of SBTVD shall be according to ITU Recommendation J.200:2001,
subclause 4.1, and it can be basically represented by two important components: execution engine and
presentation engine. Such components can not be independent being necessary to establish proper bridges
between the engines. Additionally to these basic components, native applications, or other specific and content
software may exist.
The applications environment structure shall be according to Figure 2.
Figure 2 — Application environment structure
5.2.2
Application environment description
Applications environment shall be composed by the following architectural elements:
⎯ presentation and execution engine according to ABNT NBR 15606-2 and procedural environment respectively;
⎯ bridge: applications mechanism which allows bidirectional mapping among the API Java and DOM,
ECMAScript and LUAScript objects and methods according to ABNT NBR 15606-2 and procedural
environment;
⎯ application life cycle monitor: application or resource of the operating system for control of the state of the
software. Its function includes management of the entire application life cycle, including initialization, end and
control. Applications life cycle monitor shall be according to procedural environment;
⎯ applications: may be written for presentation engine, execution engine, or both;
© ABNT 2007 – All rights reserved
5
ABNT NBR 15606-1:2007
⎯ other media: include media streams like audio and data or mono-media as still pictures and characters string
(see 11.1, 11.2 and 11.3);
⎯ native software: includes legacy software or written software using additional API with functionalities.
NOTE
6
Legacy software or software written using API with additional functionality are not specified in the standard.
Protocol
6.1
Protocol stack
In the digital broadcasting system, video, audio as well as all the data services shall be multiplexed in the TS
specified by MPEG2 (see ITU Recommendation H.222.0 and ISO/IEC 13818-1) system, which shall be transmitted
over a radio wave. Interaction channel shall be provided through independent network of this protocol stack.
The protocol stack used in digital broadcasting is in accordance with ARIB STD-B24:2007, volume 1, clause 5.
The system stack protocol stack shall be according to Figure 3.
Figure 3 — System protocol stack
6.2
Data transmission modes
The data transmission supported by the data diffusion system shall be one of the following modes:
⎯ data transmission system through PES packet stream: this system shall be used for real time services. It shall
be used with information that need time control, such as video, audio, subtitles and data synchronised with
other streams, like the main video. This system shall be specified as data stream;
⎯ data transmission system using section: this system shall be used for stored services. The data shall be
transmitted repeatedly until it is completed your download at the receiver side. This system shall be specified
as data carousel (DC) and as object carousel (OC).
NOTE
6
The system of data transmission using the transport stream packages is specified in ABNT NBR 15606-3.
© ABNT 2007 – All rights reserved
ABNT NBR 15606-1:2007
7
Receiver
7.1 Reference model for receiverReference model for the receiver shall be in accordance with ARIB STDB24:2007, volume 1, part 1, clause 6.
Some basic functions are specified to enable several multimedia services offer. The receivers shall have functions
to receive, display, store and communicate with the data broadcasting service, in addition to keeping basic
functions to view normal television programs.
7.2
7.2.1
Receiving and storing function
Data storage
The data storage consists in the reception and storing of data received by the data broadcasting system.
This function shall be available in all the receivers.
7.2.2
Data and video storage
Both the video and data received by the receiver can be stored. The storage of video can be held in secondary
devices such as disk or tape. And the data storage will be made in flash memory.
Video storage can also be made available by primary storage device such as flash memory, when some restriction
is set to data broadcasting volume. During normal view, receiving and storing functions shall be performed in
background mode. Video storing shall be optional in the receivers.
7.3
Presentation function
Presentation function shall ensure the multimedia services are reproduced according to the content producer’s
specification, in all the receivers. The presentation function shall be designed based on the logical structure of
television screen, which is composed of five planes: video plane, still picture plane, selection plane switching
video/still picture, text and graphic plane and subtitle plane. This logical planes structure is in accordance with sub
ARIB STD-B24:2007, volume 1, part 1, subclause 6.2. The planes structure for services presentation shall be in
accordance with Figure 4.
Figure 4 — Planes structure for services presentation
7.4
Decoding process and display
The model structure of decoding function in receiver is indicated in Figure 5, showing how data is processed.
© ABNT 2007 – All rights reserved
7
ABNT NBR 15606-1:2007
Figure 5 — Model decoder in receiver showed with data processing flow
The decoding process in receiver can be divided in the following steps:
a)
data broadcasting decoding process: mono-media such as character figure, still pictures, videos, audio, are
transmitted in data stream or object and data carousel. These data are decoded and divided so that they are
individually processed as coded mono-media;
b)
mono-media decoding process: coded mono-media data is decoded by an appropriate decoder. Generally,
video and audio are decoded by exclusive hardware decoder, but it may be optionally made by software for
interactive applications use such as still picture, mpeg2-I frame;
c)
execution and presentation process: mono-media shall be presented in video, still pictures, text and graphic
and subtitles planes. In multimedia service control and transmitted applications is made as the specified in
multimedia coding and application coding, respectively; and the subtitle and superimpose service control is
made as specified in 11.6.
7.5
Plug-in
A plug-in is a functionality which may be added to a generic platform intended to extend the execution capacities of
mono-media and multimedia application and format decoding which can not be required in the terminals for access.
8
© ABNT 2007 – All rights reserved
ABNT NBR 15606-1:2007
8
Presentation process
8.1
Logical coordinate
8.1.1
Logical coordinate and display coordinate in square pixel format
8.1.1.1
Logical coordinate of video plane and still picture plane
The logical coordinate of video plane and still image plane shall be according to ARIB STD-B24:2007, volume 1,
part 1, subclause 7.1.1.1.
8.1.1.2
Text and graphic plane
The text and graphic plane shall be in accordance with ARIB STD-B24:2007, volume 1, part 1, subclause 7.1.1.2.
8.1.1.3
Subtitle plane
The subtitle plane shall be in accordance with ARIB STD-B24 :2007, volume 1, part 1, subclause 7.1.1.3.
8.1.1.4
Video and still picture switching plane
The video and still picture plane shall be in accordance with ARIB STD-B24:2007, volume 1, part 1,
subclause 7.1.1.4.
8.1.2
Logical coordinate and display coordinate in non-square pixel format
The logical coordinate and display coordinate in non-square pixel format shall be in accordance with
ARIB STD-B24:2007, volume 1, part 1, subclause 7.1.2.
8.2
Colorimetry
The colorimetry shall be in accordance with ITU Recommendation BT.470-7, ITU Recommendation BT.709
and ABNT NBR 15602-1:2007, subclause 6.1.11.
8.3
Composition between planes
The composition between planes shall be in accordance with ARIB STD-B24:2007, volume 1, part 1, subclause 7.3.
The composition between planes function shall be according to Table 1.
Table 1 — Composition control function between planes
Planes
Specification range
Between video and still picture plane and
another plane
Switching in 2-pixel unit
Between text and graphic plane and other plane
α-blending in pixel unit 1/256 steps
Between subtitle plane and other plane
α-blending in pixel unit 1/256 steps
© ABNT 2007 – All rights reserved
9
ABNT NBR 15606-1:2007
9
Profiles specification
Products in accordance with profiles shall provide all the marked resources as mandatory in the corresponding
column of Table 2. In some cases this implies that further hardware shall be added to the device.
Table 2 — Profiles especification
Parameters for full-seg and one-seg receivers
Type of receptor
Features specified
Area
Coments
Full-seg
One-seg
PNG with restrictions
Required
Required
PNG unrestricted
Optional
Optional
GIF
Optional
Optional
MPEG-2 "I - Frame"
Optional
Optional
MPEG-4 "I – VOP"
Optional
Optional
H.264 / MPEG-4 AVC "I - Picture"
Required
Required
JPEG with restrictions
Required
Required
JPEG unrestricted
Optional
Optional
MNG with restrictions
Required
Optional
MNG unrestricted
Optional
Optional
MPEG-2 audio AAC LC/BC
Optional
Optional
Optional
Not
applicable
MPEG-4 audio AAC-LC
Required
Required
Encoding of synthesized sounds
Optional
Optional
Áudio monomedia format-clips MPEG-1 áudio
(Layers 1 e 2)
Required
Required
MPEG-1 audio layer 3 (MP3)
Optional
Optional
Not
applicable
Not
applicable
MPEG-2 video drips
Optional
Optional
MPEG-4 video clips
Optional
Optional
H.264 / MPEG-4 AVC clips
Required
Optional
Codes character of 8 bits
Required
Optional
Required
Optional
Codes character Shift-JIS
Not
applicable
Not
applicable
Monomedia - format for text
Required
Required
Required
Required
Bitmap pictures
Static Format (monomedias)
PCM (AIFF-C)
Audio
Audio AC-3
Text Codinbg
Vídeo
clips
Universal multi-octect
coded character set
Color
Minimum number of colors
10
65 536 colors
© ABNT 2007 – All rights reserved
ABNT NBR 15606-1:2007
Table 2 (continuation)
Parameters for full-seg and one-seg receivers
Type of receptor
Features specified
Area
Coments
Full-seg
One-seg
Main program video
Required
Required
Audio
Main program audio
Required
Required
Optional
Optional
Optional
Optional
Hide language
Optional
Optional
Brazilian Signs language
Locked events
Required
Required
Indicated rating
Required
Required
Resident
Tirésias
Required
Optional
Verdana
Optional
Required
Downloadable
Required
Optional
PFR (Portable Fonts Resource)
Optional
Optional
Open types
Optional
Optional
Subtitle
Video
Downloadable
Media Streaming Format
Subtitles and caracteres
Superimposed
Closed-
Caracteres
caption
superimposed
LIBRAS
Signs language
rating
Parental
Parental Rating
Source
© ABNT 2007 – All rights reserved
11
ABNT NBR 15606-1:2007
Table 2 (continuation)
Parameters for full-seg and one-seg receivers
Type of receptor
Area
Features specified
Full-seg
One-seg
MPEG-2 section
Required
Required
Object carousel – DSM-CC
Required
Required
Data carousel– DSM-CC
Optional
Optional
Comments
IP Multicast
Broadcast Channel Protocol
o
Receiver software update
Optional
Optional
o
Broadcast parameter update
Optional
Optional
Optional
Optional
Not
applicable
Not
applicable
Optional
Required
(RX Full seg) – Required, only
with return channel
Optional
Required
(RX Full seg) – Required, only
with return channel
Optional
Required
(RX Full seg) – Required, only
with return channel
Optional
Required
(RX Full seg) – Required, only
with return channel
Optional
Required
(RX Full seg) – Required, only
with return channel
Optional
Required
(RX Full seg) – Required, only
with return channel
User Datagram Protocol (UDP)
Optional
Required
(RX Full seg) – Required, only
with return channel
UNO-RPC
Optional
Optional
UNO-CDR
Optional
Optional
DCM-CC User to User
Optional
Optional
Optional
Required
Not
applicable
Not
applicable
Optional
Required
Pilha IP multicast:
o
Protocolo IP multicast via broadcast
channel
o
Encapsulated multiprotocol DVB
o
Internet Protocol “IP”
o
User Datagram Protocol (UDP)
o
IP signalling
Interactive Channel Protocol
TCP
/ IP
UDP
U-U RPC
DSM-CC
/ IP
Transmission Control Protocol (TCP)
Internet Protocol (IP)
Internet Protocol (IP)
HTTP 1.1
HTTP
MHP profile de HTTP 1.0
DNS
12
DNS
(RX Full seg) – Required, only
with return channel
(RX Full seg) – Required, only
with return channel
© ABNT 2007 – All rights reserved
ABNT NBR 15606-1:2007
Table 2 (continuation)
Parameters for full-seg and one-seg receivers
Type of receptor
Features specified
Comments
One-seg
HTTPS
Optional
Optional
File system implemented only via the
interaction channel
Optional
Optional
Hybrid between broadcast stream and
interaction channel
Optional
Optional
Interactivity security channel
Optional
Optional
External devices autentication
Optional
Optional
Conditional access
Not
applicable
Not
applicable
DRM
Not
applicable
Not
applicable
Module common interface
Not
applicable
Not
applicable
Autentication for applications
Required
Required
Security politics for applications
Required
Required
Certificate management
Required
Required
IPv4 e IPv6
Optional
Optional
Port ethernet
Optional
Not
applicable
Port USB
Optional
Not
applicable
External devices management
Optional
Not
applicable
Autentication management
Optional
Not
applicable
Modem configuration
Optional
Not
applicable
Modem selection
Optional
Not
applicable
Modem
Security
HTTPS
Interaction
Channel file
system
Full-seg
DSM-CC /
HTTP
Hybrid
Area
© ABNT 2007 – All rights reserved
Required, only with external device
return channel
Required, only with return channel
in external device
Mandatory for receivers with
interactivity channel and external
devices connection
13
ABNT NBR 15606-1:2007
Table 2 (continuation)
Parameters for full-seg and one-seg receivers
Type of receptor
Area
Features specified
Comments
Full-seg
One-seg
NCL
Required
Required
Java
Required
Optional
Full-seg receivers - Ginga-J is
mandatory
LUA
Required
Optional
One-seg receivers is mandatory if
there is Java implemented.
ECMAScript
Optional
Optional
Java virtual machine
Required
Optional
LUA
Required
Required
Software adaptation
Optional
Optional
Complex graphics elements
Optional
Optional
Aplication development
Optional
Optional
Messages pré-programed
Optional
Optional
Residential media center control and
distribution.
Optional
Optional
Middleware dinamic reconfiguration
Optional
Not
applicable
Device control and audio import
Optional
Not
applicable
Resident aplication remote instalation
Optional
Not
applicable
Multi device
Optional
Not
applicable
Multi user
Optional
Not
applicable
Program Language
Ginga
Bridge linkage between languages
Bridge
Execution Machine
Engine
Red APIs
Yellow APIs
Exclusive Ginga APIs
10 Requirements for data broadcasting and available services
NOTE
About available services, it is possible to assume that the multimedia services include: subtitles, interactive
applications, etc. It is possible to consider multimedia services as the interactive presentation of multiple integrated mono-media
through digital features.
10.1 Requirements of data broadcasting for digital broadcasting system
The digital broadcasting system shall be according to Tables 3 to 6.
14
© ABNT 2007 – All rights reserved
ABNT NBR 15606-1:2007
Table 3 — System overview
- Enable to display subtitles and superimpose overlapped on HDTV
and SDTV
- Enable to view HDTV, SDTV and audio services or independent
multimedia information a
Service contents
- It shall be possibilities of service not only other broadcast service,
but also combination with various services such as communication,
traditional package services, etc.
- It shall be considered interactive services utilizing public
communication services such as telephone, networks, etc.
- It shall be considered services corresponding to various viewers
such as elderly or handicapped people
Service
- EPG, functions for automatic indexing and recording etc. shall be
made available to facilitate the selection of programmes.
Accessibility
Extensibility
- It shall be considered time range for smooth program switching not
to be annoying to viewer’s actual operations. (avoid expectancy
break)
- It shall be considered extensibilities of service styles, coding
specification, conditional access system and receivers
- It shall be considered possibilities to correspond the new services
in the future
- Enable receiving, even in the ordinary receivers, similar services to
existing HDTV or SDTV broadcasting
Inter-operability
- Broadcasting media such as broadcasting station satellite,
terrestrial or cable, shall be as most similar as possible
- Common receiver shall be able to use the various specified media
types
- Consider flexible system control by using transmission capacity
effectively, by transmission control of HDTV, SDTV and audio in the
digital broadcasting
Control ability of system
- Consider control function for appropriate copyright protection
- Consider automatic reception control function such as emergency
broadcasting
Display timing
- In services related to HDTV, SDTV and audio services, timing
errors when displaying subtitles, superimpose and multimedia
information should be operated within the range so that viewers
would not feel uncomfortable or notice that the system has problems
a
Multimedia information means information that enables the integrated interactive view of multiple media such as text,
still pictures, video and audio etc.
© ABNT 2007 – All rights reserved
15
ABNT NBR 15606-1:2007
Table 4 — Broadcasting service quality
Presentation (display)
- Display quality of data services shall be able to reproduce programs with
good quality of picture and sound of HDTV, SDTV and audio services
- Quality balance of picture, sound and data shall be considered because
transmission trouble, such as ray attenuation etc.
Transmission characteristics
- In case of temporary disconnection, it shall be considered
countermeasures in order to not display error information, as far as
possible, like keeping the last picture
- In case of transmission trouble, it shall be considered time to reestablish
signal as short as possible
Table 5 — Technical specification
- It shall be considered existing data coding formats
Data coding
- It shall be considered future extensions
- It shall be considered possibility of software downloading
(update) and data interface for secure extendibility
- It shall be considered multiplexing for various and flexible
services
General technical
specification
Data multiplexing
specification
- It shall be considered multiplexing service by multiple service
providers
- It shall be considered transmission features and efficient
multiplexing
- It shall be enabled conditional access system for flexible
operation of content service
Data conditional access
system
- It shall be enabled suitable security and safety services for
service contents
- It shall be considered secure and independent operations for
multiple service providers
- It shall be enabled the program production, according to the
intention of the program producer
Subtitle and superimpose coding
- Standardized multimedia type service of digital broadcasting
should be maintained as far as possible to coordinate with
existing broadcast service
- International standardization
whenever possible
should
be
considered
- Enable realizing program production, according to the
intention of the program producer
Multimedia coding service
- On the condition of displaying the multimedia information
such as HDTV, SDTV, audio services, or independent
multimedia information, it should enable to realize multimediadisplaying function such as displaying or linking presentation
object for the specific duration on the specified position
(media timing)
- Consider the development of various services such as
storage-based and interactive type services
- Consider the standardization among digital broadcasting of
other media such as communication and packages
- International standardization should be considered
16
© ABNT 2007 – All rights reserved
ABNT NBR 15606-1:2007
Table 6 — Receiver (set-top box)
- Operation method of basic function shall be unique and easy to learn
Operability
- Settings which release advanced operations should only be enabled according to the
users or service providers’ request
- Selection of service should be considered so that it can be made by one operation
- Operation settings appropriate for elderly or handicapped people shall be also
considered
- It shall be made possible the implementation of a adapters to receive new services
by connecting to existing broadcasting receiver
Interoperability
- Consider the inter-operability between medias of other broadcasting systems such
as satellite broadcasting, terrestrial broadcasting and CATV
- Coordination with communication systems and media package should be considered
as far as possible
Implementation
Extendibility
- Consumers shall have access to a cheap receiver, which has functions and
characteristics appropriate for service contents to be implemented
- Implementation of several terminals (monofunction, advanced function, etc.) should
be considered
- It shall be considered the extension corresponding to new services in the future
- It shall be considered the possibility to connect the receiver to multiple devices
10.2 Data service for digital broadcasting
Table 7 shows examples about advanced data broadcasting services added to some technical demands.
© ABNT 2007 – All rights reserved
17
ABNT NBR 15606-1:2007
Index
Program title,
Category of each item
Program selection, item
selection
X
Subtitle
For hearing handicapped
person For foreigner
Subtitle, multilingual display
X
Audio with
commentary
For visually handicapped
person
Audio with comments
Participation
program
Independent
information
Additional information of the
Cast, program, product
information, news from the program, detailed information
of the program
station, etc.
Multiview television
Shopping, questionnaires,
etc.
News, weather forecast,
traffic information, market
information, disaster,
election, etc.
Display and control of
program using plural camera
angle
Access from the viewers to
the program
X
X
Time synchronous
X
Program
synchronous
X
Asynchronous
Program selection, program
scheduling, category search
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
Information service
selectable
X
X
X
X
X
X
Users inquiry
Inquiries
Corresponding to Access
from the viewer
Software
distribution
PC software, data, game
software and general
software downloading
Application distribution
Automatic
reception
Emergency information
Automatic power on,
automatic reception
Mail function
Individual mail, sending
information for all the
users
Individual information
Download
IRD (Integrated Receiver
Decoder), error correction,
version upgrade
Decoding software
downloading
Data
distribution
Several data
Data download
Up-line need
Program guide,
program content
Metadata
Still picture
EPG
Presentation
timing
Video
Audio
Function
Text and graphics
Related
Example of contents
Multiview
television
Function service
18
Example of
service
Addtional
program
information
Independent
Broadcasting service
Classification
Necessary
media
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
Study of coding
Table 7 — Examples of advanced data broadcasting service
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
X
© ABNT 2007 – All rights reserved
ABNT NBR 15606-1:2007
When the services showed in Table 7 are received, data shall be stored in the receiver memory and displayed
interactively according to the viewer’s operation.
In order to program television by using functions such as automatic recording, scheduled recording, digest
playback etc. of television program by use of storage function of video and audio. Furthermore, resources for
program recording in different channels and advanced data acquisition by use of multiple tuner units (decoders)
can be made available.
11 Monomedia
11.1 Video coding
11.1.1 MPEG-1 video
MPEG-1 video coding shall be in accordance with ISO/IEC 11172-2 and shall be according to the method
described in ARIB STD-B24:2007, volume 1, part 2, subclause 4.1.
11.1.2 MPEG-2 video
MPEG-2 video coding shall be in accordance with ISO/IEC 13818-2 and ITU Recommendation H.262 and shall be
according to the method described in ARIB STD-B24:2007, volume 1, part 2, subclause 4.2.
11.1.3 MPEG-4 video
MPEG-4 video coding shall be in accordance with ISO/IEC 14496-2 and shall be according to the method
described in ARIB STD-B24:2007, volume 1, part 2, subclause 4.3.
11.1.4 H.264|MPEG-4 AVC
H.264|MPEG-4 AVC video coding shall be in accordance with ITU Recommendation H.264 and ISO/IEC 14496-10
and with the methods described in ABNT NBR 15602-1 and ARIB STD-B24:2007, volume 1, part 2, subclause 4.4.
11.2 Still pictures and graphics coding
11.2.1 I-frames
11.2.1.1
MPEG-2 I-frames
MPEG-2 I-Frame coding shall be in accordance with ISO/IEC 13818-2 and ITU Recommendation H.262 and with
the method described in GEM 1.0:2005, subclause 7.1.2.
11.2.1.2
MPEG-4 I-VOP
MPEG-4 I-VOP coding shall be in accordance with ISO/IEC 14496-2.
The payload of a file containing a MPEG-4 I-VOP frame shall have one coded picture as frame I between
visual_object_sequence_start_code and visual_object_sequence_end_code.
11.2.1.3
H.264|MPEG-4 AVC I-picture
H.264|MPEG-4 AVC I-picture coding shall be in accordance with ITU Recommendation H.264 and ISO/IEC 14496-10.
© ABNT 2007 – All rights reserved
19
ABNT NBR 15606-1:2007
11.2.2 JPEG
JPEG coding shall be in accordance with ISO/IEC 10918-1.
11.2.3 PNG
PNG coding shall be in accordance with W3C Recommended PNG and methods described in ARIB STD-24:2007,
volume 1, part 2, subclause 5.3 in GEM 1.0:2005, clause 15. The PNG constraints shall be in accordance with
ARIB STD-B24:2007, volume 1, part 2, subclause 5.3 and in GEM 1.0:2005, clause 15.
11.2.4 MNG
MNG (multiple-image network graphics) coding shall be in accordance with MNG and with the methods described
in ARIB STD-B24:2007, volume 1, part 2, subclause 5.4.
The MNG constraints shall be in accordance with ARIB STD-B24:2007, volume 1, part 2, subclause 5.3.
11.2.5 MPEG-2 video “drips”
MPEG-2 video “drips” is a graphic animation format which uses I-frames and P-frames of MPEG-2 coding.
MPEG-2 video “drips” graphic animation format shall be in accordance with GEM 1.0:2005, clause 15.
11.2.6 GIF
GIF is a coding format for bit maps specified in W3C Recommendation GIF 89a.
Bits maping coding by GIF shall be in accordance with the method described in GEM 1.0:2005, clause 15.
11.2.7 MPEG-4 video clips
Video clips coding in MPEG-4 format used in the graphic layer shall be in accordance with ISO/IEC 14496-2.
11.2.8 H.264|MPEG-4 AVC clips
Video clips coding in H.264 | MPEG-4 format used in the graphic layer shall be in accordance with
ITU Recommendation H.264 and ISO/IEC 14496-10.
11.3 Audio coding
11.3.1 MPEG-2 audio
MPEG-2 audio coding shall be in accordance with the AAC method LC and BC profile specified in ISO/IEC 13818-7
and shall be according to the method described in ARIB STD-B24:2007, volume 1, part 2, subclause 6.1.
11.3.2 PCM (AIFF)
PCM (AIFF) audio coding shall be in accordance with the method described in ARIB STD-B24:2007, volume 1, part 2,
subclause 6.2.
11.3.3 MPEG-4 audio
MPEG-4 audio coding shall be in accordance with the method described in ISO/IEC 14496-3 and
ABNT NBR 15602-2.
20
© ABNT 2007 – All rights reserved
ABNT NBR 15606-1:2007
11.3.4 Coding of synthesized sound
For coding of synthesized sound, a method specified in transmission standard related to television data multiplex
broadcasting (ARIB STD-B5) shall be used.
The coding of synthesized sound shall be in accordance with ARIB STD-B24:2007, volume 1, subclause 6.4.
11.3.5 Monomedia format for audio clips (GEM)
Monomedia formats for audio clips using MPEG-1 (layers 1 and 2) defined in ISO/11172-3 shall be in accordance
with of MHP 1.0:2003, subclause 15.
11.3.6 MPEG-1 audio layer 3 (MP3)
MPEG-1 Layer 3 audio coding shall be in accordance with the method described in ISO/IEC 11172-3 and
ISO/IEC 13818-3.
11.3.7 Audio AC3
AC3 audio coding shall be in accordance with the method described in ATSC A52B.
11.4 Character coding
11.4.1 8 bits character coding
8 bits characters coding shall be in accordance with ARIB STD-B5 and shall be meet the method described in ARIB
STD-B24:2007, volume 1, part 2, subclause 7.1, with the adaptations related to the Latin characters inclusion,
shown below.
Coding structure used specified in SBTVD shall be in accordance with the method described in ARIB STDB24:2007, volume 1, part 2, subclause 7.1.1.1 with the following changes:
a)
inclusion of “latin extension” characters set to the Gp characters code. The Table 8 shows “latin extension"
codes, and inclusion of special characters set Table 9 to the Gp characters code;
b)
GL page initial state change to “alphanumeric” and GR page initial state change to “latin extension”, as shown
in Figure 6; They can not be used the methods of invocation and heading in the Brazilian system of
dissemination;
c)
classification of code set and final byte in accordance with Table 10;
d)
inclusion of the entire graph of Latin characters (latin extension) and special characters in accordance with the
Table 10.
NOTE 1
Table 8 was adapted from the ISO / IEC 8859-15:1999.
NOTE 2
A Table 10 presents the words changed in Table 7-3 of the ARIB STD-B24: 2007 to SBTVD.
© ABNT 2007 – All rights reserved
21
ABNT NBR 15606-1:2007
Table 8 — Latin characters set (latin extension)
x0
x1
x2
x3
x4
x5
x6
x7
x8
x9
xA
xB
xC
xD
xE
xF
0x
NUL
1x
2x
SP
!
"
#
$
%
PAPF &
BEL
'
APB CAN
(
APF SS2
)
3x
0
1
2
3
4
5
6
7
8
9
4x
@
A
B
C
D
E
F
G
H
I
5x
P
Q
R
S
T
U
V
W
X
Y
6x
`
a
b
c
d
e
f
g
h
i
*
:
;
<
=
>
?
J
K
L
M
N
O
Z
[
\
]
^
j
k
l
m
n
o
APD
APU ESC
CS APS
APR SS3
LS1 RS
LSO US
+
,
.
/
7x
p
q
r
s
t
u
v
w
x
y
8x
9x
Ax Bx
BKF
COL
10/0 °
RDF
FLC
¡
±
GRF
CDC
¢
²
YLF
POL
£
³
BLF WMM
€
Ž
MGF MACRO ¥
μ
CNF
Š
¶
WHF
HLC
§
·
SSZ
RPC
š
ž
MSZ
SPL
©
¹
z
NSZ
{
SZX
|
}
~
DEL
STL
CSI
TIME
ª
«
¬
ÿ
®
¯
º
»
Œ
œ
Ÿ
¿
Cx
À
Á
Â
Ã
Ä
Å
Æ
Ç
È
É
Dx
Ð
Ñ
Ò
Ó
Ô
Õ
Ö
×
Ø
Ù
Ex
à
á
â
ã
ä
å
æ
ç
è
é
Fx
õ
ñ
ò
ó
ô
õ
ö
÷
ø
ù
Ê
Ë
Ì
Í
Î
Ï
Ú
Û
Ü
Ý
Þ
ß
ê
ë
ì
í
î
ï
ú
û
ü
ý
þ
15/15
Table 9 — Special Characters set as G3
0x
2x
3x
4x
♪
¤
¦
…
█
¨
‘
x3
´
’
x4
¸
“
x5
¼
”
x6
½
•
x7
x8
x9
xA
xB
xC
xD
xE
xF
¾
™
⅛
⅜
⅝
⅞
x0
x1
x2
22
1x
5x
6x
7x
© ABNT 2007 – All rights reserved
ABNT NBR 15606-1:2007
b3
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
b2
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
b1
0
0
0
0
0
1
0
1
0
1
0
1
0
1
0
1
x0
x1
x2
x3
x4
x5
x6
x7
x8
x9
xA
xB
xC
xD
xE
xF
0
0
0
0
0
0
1
0
0
0
1
0
0
1
0
0
0
1
0
1
0
1
1
0
0
1
1
1
1
0
0
0
0x 1x 2x
SP
3x
4x
5x
6x
7x
8x 9x
GL area
(Standard
Alphanumeric
Gp.)
1
0
0
1
C1 Area
b3
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
C0 Area
b8
b7
b6
b5
1
0
1
0
1
0
1
1
1
1
0
0
1
1
0
1
1
1
1
0
1
1
1
1
Ax
10/0
Bx
Cx
Dx
Ex
Fx
GR area
(Default
latin extension
Gp.)
DEL
15/15
Figure 6 — 8-bit code structure
Table 10 — Classification of code set and final byte
Classification
Graphic set
Kanji
c
Alphanumeric
G set
a
Latin extension
b
Special character
b
Final byte (F)
Remarks
04/02
2-byte code
04/10
1-byte code
04/11
1-byte code
04/12
1-byte code
Hiragana
c
03/0
1-byte code
Katakana
c
03/1
1-byte code
a
Set in use by the system.
b
Set added and in use by the system.
c
Sets not used by the system.
11.4.2 Universal multi-octet coded character set (UCS)
11.4.2.1
Character coding UCS
Character coding using the Universal multi-octet coded character set (UCS) shall be in accordance with
ISO/IEC 10646-1, ISO 8859-15, GEM 1.0:2005, subclause 7.1.5, MHP1.0:2003, subclause 11.2.11 and ARIB
STD-B23:2007, part 1, subclause 5.2.
© ABNT 2007 – All rights reserved
23
ABNT NBR 15606-1:2007
11.4.2.2
Resident fonts
The resident fonts shall include the font selection described in MHP1.0:2003, subclause 7.3.
11.4.2.3
Downloadable fonts
Shal be used the method described in MHP1.0:2003, subclause 7.4.
11.4.3 Shift-JIS coding
Shift-JIS characters coding shall be in accordance with the method described in ARIB STD-B24:2007, volume 1,
part 2, subclause 7.3.
11.4.4 EUC-JP
EUC-JP characters coding shall be in accordance with the method described in ARIB-B24:2007, volume 2,
subclause 4.1.
11.5 Geometric description of commands coding
Description of geometric commands for graphic coding shall be in accordance with ARIB STD-B5 and with the
method described in ARIB STD-B24:2007, volume 1, subclause 8.1.
11.6 Subtitles and superimposed characters
Subtitles and superimposed characters coding shall be in accordance with the method described in
ARIB STD-B24:2007, volume 1, part 3, with the following change:
⎯ changing of the system’s initial state (shown in Table 8-2, part 3, volume 1 of ARIB STD-B24:2007) according
to values shown in Table 11;
⎯ usage of G0 and G2 is as initial state;
⎯ G3 is used by means of SS3 (0x1D). SS3 means to invoke one G3 code following to it in the GL area
temporary.
Table 11 — Initial State
Item
Initial state
Designation
G0 Alphanumeric set
G1 Alphanumeric set
Invocation and
designation of
code
G2 Latin Extension set
Character
coding
G3 Special character set
Invocation
GL LS0 (G0)
GR LS2R (G2)
State
24
Character
coding
Character size
½ x 1 (middle size) (= MSZ)
© ABNT 2007 – All rights reserved
NORMA
BRASILEÑA
ABNT NBR
15606-2
Primera edición
30.11.2007
Válida a partir de
01.12.2007
Versión Corregida
19.11.2009
Televisión digital terrestre — Codificación de
datos y especificaciones de transmisión para
radiodifusión digital
Parte 2: Ginga-NCL para receptores fijos y
móviles – Lenguaje de aplicación XML para
codificación de aplicacione
Palabras clave: Televisión digital terrestre. Middleware. Ginga. NCL. Receptores
móviles y fijos. Perfil full-seg.
ICS 33.160.01
ISBN 978-85-07-00916-0
Número de referencia
ABNT NBR 15606-2:2007
294 páginas
© ABNT 2007
ABNT NBR 15606-2:2007
© ABNT 2007
Todos los derechos reservados. A menos que se especifique de otro modo, ninguna parte de esta publicación puede ser
reproducida o utilizada por cualquier medio, electrónico o mecánico, incluyendo fotocopia y microfilm, sin permiso por escrito de
la ABNT.
ABNT
Av.Treze de Maio, 13 - 28º andar
20031-901 - Rio de Janeiro - RJ
Tel.: + 55 21 3974-2300
Fax: + 55 21 2220-1762
[email protected]
www.abnt.org.br
Impreso en Brasil
ii
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Índice
Página
Prefacio......................................................................................................................................................................vii
Introducción .............................................................................................................................................................viii
1
Alcance ...........................................................................................................................................................1
2
Referencias normativas ................................................................................................................................1
3
Términos y definiciones................................................................................................................................2
4
Abreviaturas...................................................................................................................................................8
5
5.1
5.2
Arquitectura Ginga ........................................................................................................................................8
Ginga main modules .....................................................................................................................................8
Interacción con el ambiente nativo..............................................................................................................9
6
6.1
6.2
6.3
6.3.1
6.3.2
6.3.3
6.3.4
Interoperabilidad con ambientes declarativos definidos en otros sistemas de televisión digital Objetos XHTML incorporados en presentaciones NCL...........................................................................10
NCL como lenguaje cola .............................................................................................................................10
Formato de contenido XHTML ...................................................................................................................11
Armonización del formato de contenido XHTML .....................................................................................12
Marcaciones XML ........................................................................................................................................12
Hojas de estilo .............................................................................................................................................17
ECMAScript ..................................................................................................................................................22
API DOM .......................................................................................................................................................26
7
7.1
7.1.1
7.1.2
7.1.3
7.2
7.2.1
7.2.2
7.2.3
7.2.4
7.2.5
7.2.6
7.2.7
7.2.8
7.2.9
7.2.10
7.2.11
7.2.12
7.2.13
7.2.14
7.2.15
7.3
7.3.1
7.3.2
7.3.3
7.3.4
7.3.5
NCL - Lenguaje declarativo XML para especificación de presentaciones multimedia interactivas ...28
Lenguajes modulares y perfiles de lenguajes..........................................................................................28
Módulos NCL................................................................................................................................................28
Identificadores para módulos y perfiles de lenguaje de la NCL 3.0.......................................................30
Informaciones sobre versiones de la NCL................................................................................................32
Módulos NCL................................................................................................................................................32
Observaciones generales ...........................................................................................................................32
Área funcional Structure.............................................................................................................................33
Área funcional Layout .................................................................................................................................33
Área funcional Components.......................................................................................................................35
Área funcional Interfaces............................................................................................................................42
Área funcional Presentation Specification ...............................................................................................45
Área funcional Linking ................................................................................................................................47
Area funcional Connectors.........................................................................................................................48
Área funcional Presentation Control .........................................................................................................55
Área funcional Timing .................................................................................................................................57
Área funcional Reuse ..................................................................................................................................57
Área funcional Navigational Key................................................................................................................60
Área funcional Animation ...........................................................................................................................61
Área funcional SMIL Transition Effects.....................................................................................................61
Área funcional Metainformation.................................................................................................................64
Perfiles del lenguaje NCL para el SBTVD..................................................................................................64
Módulos de perfiles .....................................................................................................................................64
Esquema del perfil NCL 3.0 DTV avanzado...............................................................................................65
Esquema del perfil NCL 3.0 CausalConnector .........................................................................................74
Atributos y elementos del perfil NCL 3.0 DTV básico..............................................................................76
Esquema del perfil NCL 3.0 DTV Básico ...................................................................................................81
8
8.1
8.2
8.2.1
Objetos de media en presentaciones NCL................................................................................................89
Implementación modular de Ginga-NCL ...................................................................................................89
Comportamiento esperado de los exhibidores de media .......................................................................90
Instrucción start para eventos de presentación ......................................................................................90
© ABNT 2007 - Todos los derechos reservados
iii
ABNT NBR 15606-2:2007
8.2.2
8.2.3
8.2.4
8.2.5
8.2.6
8.2.7
8.2.8
8.2.9
8.3
8.5
Instrucción stop...........................................................................................................................................91
Instrucción abort .........................................................................................................................................92
Instrucción pause ........................................................................................................................................92
Instrucción resume......................................................................................................................................92
Instrucción start para eventos de atribución ...........................................................................................93
Instrucción addEvent ..................................................................................................................................93
Instrucción removeEvent............................................................................................................................93
Finalización natural de una presentación .................................................................................................93
Comportamiento esperado de los exhibidores de media después de instrucciones aplicadas a los
objetos de composición..............................................................................................................................94
Eslabones refiriendo nudos de composición...........................................................................................94
Empezando la presentación de un contexto ............................................................................................94
Parando la presentación de un contexto ..................................................................................................94
Abortando la presentación de un contexto ..............................................................................................94
Pausando la presentación de un contexto ...............................................................................................94
Retomando la presentación de un contexto.............................................................................................95
Relación entre las máquinas de estado de eventos de presentación de un nudo y la máquina de
estado del evento de presentación de su nudo de composición padre................................................95
Comportamiento esperado de los exhibidores procedurales en aplicaciones NCL ............................95
9
9.1
9.2
Transmisión de contenido y eventos NCL................................................................................................97
Bases privadas ............................................................................................................................................97
Esquema XML de los parámetros de comando......................................................................................104
10
10.1
10.2
10.3
10.3.1
10.3.2
10.3.3
10.3.4
10.3.5
10.4
10.4.1
10.4.2
10.4.3
10.4.4
10.4.5
10.4.6
10.4.7
Objetos procedurales Lua en presentaciones NCL ...............................................................................114
Lenguaje Lua - Funciones retiradas de la biblioteca de Lua ................................................................114
Modelo de ejecución .................................................................................................................................115
Módulos adicionales .................................................................................................................................115
Módulos obligatorios ................................................................................................................................115
Módulo canvas...........................................................................................................................................115
Módulo event..............................................................................................................................................126
Módulo settings .........................................................................................................................................139
Módulo persistent......................................................................................................................................139
Lua-API para Ginga-J ................................................................................................................................140
Mapeo..........................................................................................................................................................140
Paquetes.....................................................................................................................................................140
Tipos básicos.............................................................................................................................................140
Clases .........................................................................................................................................................141
Objetos........................................................................................................................................................141
Objetos de callback (observadores)........................................................................................................141
Excepciones...............................................................................................................................................141
11
11.1
11.2
11.3
Puente .........................................................................................................................................................141
Revisión ......................................................................................................................................................141
Puente a través de los elementos NCL <link> y <media> .....................................................................142
Puente a través de las funciones Lua y métodos del Ginga-J .............................................................142
12
12.1
12.2
Requisitos de codificación de media y métodos de transmisión referidos en documentos NCL....143
Uso del canal de interactividad................................................................................................................143
Métodos de codificación y transmisión de video – Datos de video referidos en elementos <media>
.....................................................................................................................................................................143
Transmisión de video MPEG-1.................................................................................................................143
Transmisión de video MPEG-2.................................................................................................................143
Transmisión de video MPEG-4 y H.264|MPEG-4 AVC............................................................................144
Métodos de codificación y transmisión de audio – datos de audio referidos en elementos <media>
.....................................................................................................................................................................144
Transmisión de audio MPEG-1.................................................................................................................144
Transmisión de audio MPEG-2.................................................................................................................144
Transmisión de audio MPEG-4.................................................................................................................145
Transmisión de audio AC3 .......................................................................................................................145
Transmisión de audio PCM (AIFF-C) .......................................................................................................145
Formato TS para transmisión de video/audio MPEG – Especificación de la codificación de datos 146
Transmisión de video y audio multiplexados.........................................................................................146
8.3.1
8.3.2
8.3.3
8.3.4
8.3.5
8.3.6
8.4
12.2.1
12.2.2
12.2.3
12.3
12.3.1
12.3.2
12.3.3
12.3.4
12.3.5
12.4
12.4.1
iv
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
12.4.2
12.4.3
12.4.4
12.5
12.7.2
12.7.3
PSI requerido .............................................................................................................................................146
Transmisión en secciones MPEG-2.........................................................................................................146
Restricciones en la reproducción............................................................................................................146
Esquema de codificación y transmisión de imágenes estáticas y gráficos de bitmap referidos por
elementos <media> ...................................................................................................................................146
Transmisión de MPEG-2 I-frame, MPEG-4 I-VOP y H.264|MPEG-4 AVC I-picture ...............................146
Transmisión de imagen estática JPEG ...................................................................................................147
Esquema de codificación y transmisión del bitmap PNG .....................................................................147
Esquema de codificación y transmisión de la animación MNG ...........................................................147
Esquema de codificación y transmisión de datos y animación de gráficos GIF................................147
Codificación y transmisión de caracteres - archivos de texto externos referidos por elementos
<media> ......................................................................................................................................................147
Transmisión de documentos XML ...........................................................................................................148
Transmisión de documentos NCL y otros documentos XML que se utilizan en los comandos de
edición ........................................................................................................................................................148
Transmisión en Secciones MPEG-2 ........................................................................................................148
Transmisión de documentos XML externos ...........................................................................................156
13
Seguridad ...................................................................................................................................................156
12.5.1
12.5.2
12.5.3
12.5.4
12.5.5
12.6
12.7
12.7.1
Anexo A (normativo) Esquemas de los módulos NCL 3.0 que se utilizan en los perfiles TVD Básico y TVD
Avanzado....................................................................................................................................................157
A.1
Módulo Structure: NCL30Structure.xsd..................................................................................................157
A.2
Módulo Layout: NCL30Layout.xsd ..........................................................................................................158
A.3
Módulo Media: NCL30Media.xsd..............................................................................................................159
A.4
Módulo Context: NCL30Context.xsd .......................................................................................................160
A.5
Módulo MediaContentAnchor: NCL30MediaContentAnchor.xsd .........................................................161
A.6
Módulo CompositeNodeInterface: NC30CompositeNodeInterface.xsd...............................................162
A.7
Módulo PropertyAnchor: NCL30PropertyAnchor.xsd ...........................................................................163
A.8
Módulo SwitchInterface: NCL30SwitchInterface.xsd.............................................................................164
A.9
Módulo Descriptor: NCL30Descriptor.xsd ..............................................................................................165
A.10 Módulo Linking: NCL30Linking.xsd ........................................................................................................166
A.11 Módulo ConnectorCommonPart: NCL30ConnectorCommonPart.xsd ................................................167
A.12 Módulo ConnectorAssessmentExpression: ...........................................................................................168
NCL30ConnectorAssessmentExpression.xsd ....................................................................................................168
A.13 Módulo ConnectorCausalExpression: NCL30ConnectorCausalExpression.xsd ...............................170
A.14 Módulo CausalConnector: NCL30CausalConnector.xsd ......................................................................172
A.15 Módulo ConnectorBase: NCL30ConnectorBase.xsd.............................................................................173
A.16 NCL30CausalConnectorFunctionality.xsd..............................................................................................174
A.17 Módulo TestRule: NCL30TestRule.xsd....................................................................................................176
A.18 Módulo TestRuleUse: NCL30TestRuleUse.xsd ......................................................................................177
A.19 Módulo ContentControl: NCL30ContentControl.xsd .............................................................................178
A.20 Módulo DescriptorControl: NCL30DescriptorControl.xsd ....................................................................179
A.21 Módulo Timing: NCL30Timing.xsd ..........................................................................................................180
A.22 Módulo Import: NCL30Import.xsd............................................................................................................181
A.23 Módulo EntityReuse: NCL30EntityReuse.xsd ........................................................................................182
A.24 Módulo ExtendedEntityReuse: NCL30ExtendedEntityReuse.xsd........................................................183
A.25 Módulo KeyNavigation: NCL30KeyNavigation.xsd................................................................................184
A.26 Módulo TransitionBase: NCL30TransitionBase.xsd..............................................................................185
A.27 Módulo Animation: NCL30Animation.xsd...............................................................................................186
A.28 Transition module: NCL30Transition.xsd....................................................................................................186
A.29 Metainformation module: NCL30Metainformation.xsd ..............................................................................190
Anexo B (informativo) Manual de referencia de Lua 5.1 .....................................................................................192
B.1
Introducción ...............................................................................................................................................192
B.2
El Lenguaje.................................................................................................................................................192
B.2.1 Notación utilizada ......................................................................................................................................192
B.2.2 Convenciones léxicas ...............................................................................................................................192
B.2.3 Valores y tipos ...........................................................................................................................................194
B.2.4 Variables.....................................................................................................................................................195
B.2.5 Comandos ..................................................................................................................................................196
© ABNT 2007 - Todos los derechos reservados
v
ABNT NBR 15606-2:2007
B.2.6
B.2.7
B.2.8
B.2.9
B.2.10
B.2.11
B.2.12
B.3
B.3.1
B.3.2
B.3.3
B.3.4
B.3.5
B.3.6
B.3.7
B.3.8
B.3.9
B.4
B.4.1
B.4.2
B.5
B.5.1
B.5.2
B.5.3
B.5.4
B.5.5
B.5.6
B.5.7
B.5.8
B.5.9
B.5.10
B.5.11
B.6
B.7
B.7.1
B.7.2
B.7.3
B.8
Expresiones ...............................................................................................................................................200
Reglas de visibilidad .................................................................................................................................207
Tratamiento de errores..............................................................................................................................207
Metatablas ..................................................................................................................................................207
Ambientes ..................................................................................................................................................213
Recolecta de basura..................................................................................................................................213
Co-rutinas...................................................................................................................................................214
Interfaz de programación de la aplicación (API) ....................................................................................216
Conceptos básicos....................................................................................................................................216
Pila...............................................................................................................................................................216
Tamaño de la pila.......................................................................................................................................216
Pseudo-índices ..........................................................................................................................................217
Cierres C.....................................................................................................................................................217
Registro ......................................................................................................................................................217
Tratamiento de errores en C.....................................................................................................................217
Funciones y tipos ......................................................................................................................................218
Interfaz de depuración ..............................................................................................................................236
Biblioteca auxiliar ......................................................................................................................................240
Conceptos básicos....................................................................................................................................240
Funciones y tipos ......................................................................................................................................240
Bibliotecas estándar..................................................................................................................................250
Visión general ............................................................................................................................................250
Funciones básicas.....................................................................................................................................251
Manipulación de co-rutinas ......................................................................................................................256
Módulos ......................................................................................................................................................256
Manejo de cadenas de caracteres ...........................................................................................................259
Estándares .................................................................................................................................................262
Manejo de tablas........................................................................................................................................264
Funciones matemáticas ............................................................................................................................265
Facilidades de entrada y salida................................................................................................................267
Facilidades del sistema operativo ...........................................................................................................271
Biblioteca de depuración ..........................................................................................................................273
El interpretador Lua autónomo ................................................................................................................275
Incompatibilidades con la versión 5.0.....................................................................................................277
Cambios en el lenguaje.............................................................................................................................277
Cambios en las bibliotecas ......................................................................................................................277
Cambios en la API .....................................................................................................................................278
Sintaxis completa de Lua..........................................................................................................................278
Anexo C (informativo) Base de conectores ..........................................................................................................280
Bibliografía ..............................................................................................................................................................294
vi
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Prefacio
La Associação Brasileira de Normas Técnicas (ABNT) es el Fórum Nacional de Normalización. Las Normas
Brasileñas, cuyo contenido es responsabilidad de los Comités Brasileños (ABNT/CB), de los Organismos de
Normalización Sectorial (ABNT/ONS) y de las Comisiones de Estudios Especiales (ABNT/CEE), son elaboradas
por Comisiones de Estudio (CE), formadas por representantes de sus sectores implicados de los que forman
parte: productores, consumidores y neutrales (universidades, laboratorios y otros).
Los Documentos Técnicos ABNT se elaboran de acuerdo con las reglas de Directivas ABNT, Parte 2.
La Associação Brasileira de Normas Técnicas (ABNT) llama la atención sobre la posibilidad de que algunos de los
elementos de este documento pueden ser objeto de derechos de patente. La ABNT no debe ser considerada
responsable por la identificación de cualesquiera derechos de patente.
La ABNT NBR 15606-2 fue elaborada por la Comisión de Estudio Especial de Televisión Digital
(ABNT/CEE-00:001.85). El Proyecto circuló en Consulta Nacional según Edicto nº 09, de 06.09.2007 a 05.11.2007,
con el número de Proyecto 00:001.85-006/2.
En caso que surja cualquier duda con relación a la interpretación de la versión en español siempre deben
prevalecer las prescripciones de la versión en portugués
Esta Norma está basada en los trabajos del Fórum del Sistema Brasileiro de Televisão Digital Terrestre, según
establece el Decreto Presidencial nº 5.820, de 29/06/2006.
La ABNT NBR 15606, bajo el título general “Televisión digital terrestre – Codificación de datos y especificaciones
de transmisión para radiodifusión digital”, está previsto que contenga las siguientes partes:
 Parte 1: Codificación de datos;
 Parte 2: Ginga-NCL para receptores fijos y móviles – Lenguaje de aplicación XML para codificación de
aplicaciones;
 Parte 3: Especificación de transmisión de datos;
 Parte 4: Ginga-J – Ambiente para la ejecución de aplicaciones procedurales;
 Parte 5: Ginga-NCL para receptores portátiles – Lenguaje de aplicación XML para codificación de aplicaciones
Esta versión en español es equivalente a la versión corregida 3 de la ABNT NBR 15606-2:2007, de 17.04.2009.
Esta versión corregida de la ABNT NBR 15606-2:2007 incorpora la Errata 1 de 19.11.2009.
© ABNT 2007 - Todos los derechos reservados
vii
ABNT NBR 15606-2:2007
Introducción
La Associação Brasileira de Normas Técnicas (ABNT) llama la atención sobre el hecho de que la exigencia de
conformidad con este documento ABNT puede involucrar el uso de una patente relativa a NCL, conforme se
menciona en 5.1.
La ABNT no se posiciona respecto a evidencias, validez y alcance de ese derecho de patente.
El propietario de este derecho de patente aseguró a la ABNT que él está preparado para negociar licencias sobre
términos y condiciones razonables y no discriminatorias con los solicitantes. Sobre esto, hay una declaración del
propietario de esta patente registrada con la ABNT. Informaciones pueden obtenerse con:
Pontifícia Universidade Católica do Rio de Janeiro, Departamento de Transferência de Tecnologia
Rua Marquês de São Vicente, 225 – Gávea, 22451-900 - Rio de Janeiro - RJ - Brasil.
La ABNT quiere resaltar la posibilidad de que algunos de los elementos de este documento ABNT pueden ser
objeto de otros derechos de patente además de los identificados arriba. La ABNT no debe ser considerada
responsable por la identificación de cualesquiera derechos de patente.
Esta Norma estandariza un lenguaje de aplicación XML que permite a los autores escribir presentaciones
multimedia interactivas. Este componente de la ABNT NBR 15606 forma parte de las especificaciones de
codificación de datos para el Sistema Brasileño de Televisión Digital Terrestre (SBTVD) y comprende la
especificación del lenguaje utilizado por la máquina de presentación Ginga-NCL del middleware SBTVD, llamado
Ginga.
A través de este lenguaje, denominado NCL (Nested Context Language – Lenguaje de Contextos Anidados), un
autor puede describir el comportamiento temporal de una presentación multimedia, asociar hyperlinks (interacción
del usuario) a objetos de media, definir alternativas para presentación (adaptación) y describir el formato de la
presentación en múltiples dispositivos.
Esta Norma está primordialmente destinada a las entidades que están especificando terminales y/o estándares
basados en el Ginga. También está destinada a los desarrolladores de aplicaciones que usan las funcionalidades
del Ginga y de sus API. El middleware Ginga tiene como objetivo garantizar la interoperabilidad de las aplicaciones
en diferentes implementaciones de plataformas que lo soportan.
Las aplicaciones Ginga están clasificadas en dos categorías, dependiendo de si la aplicación inicialmente
procesada tiene contenido de naturaleza declarativa o imperativa. Estas categorías de aplicaciones son llamadas
aplicaciones declarativas y aplicaciones procedurales, respectivamente. Los ambientes de aplicación son
igualmente clasificados en dos categorías, dependiendo de si procesan aplicaciones declarativas o procedurales,
siendo entonces llamados Ginga-NCL y Ginga-J, respectivamente.
Es importante observar que a una implementación únicamente Ginga-NCL o únicamente Ginga-J, ya sea en
receptores fijos o móviles, les está prohibida la reivindicación de cualquier tipo de conformidad con el SBTVD.
Esto garantiza que el Ginga ofrezca perfiles siempre compatibles con versiones anteriores.
Esta Norma no especifica la forma cómo los ambientes de aplicación deben implementarse en un receptor en
conformidad. Un fabricante de receptores puede implementar los dos ambientes como un único subsistema;
alternativamente, los ambientes pueden implementarse como subsistemas distintos, con interfaces internos bien
definidos entre los ambientes.
viii
© ABNT 2007 - Todos los derechos reservados
NORMA BRASILEÑA
ABNT NBR 15606-2:2007
Televisión digital terrestre — Codificación de datos y especificaciones de
transmisión para radiodifusión digital
Parte 2: Ginga-NCL para receptores fijos y móviles – Lenguaje de aplicación
XML para codificación de aplicaciones
1
Alcance
Esta parte de la ABNT NBR 15606 especifica un lenguaje de aplicación XML denominada NCL (Nested Context
Language), el lenguaje declarativo del middleware Ginga, la codificación y la transmisión de datos para
radiodifusión digital.
2
Referencias normativas
Los documentos indicados a continuación son indispensables para la aplicación de este documento. Para las
referencias fechadas, se aplican solamente las ediciones citadas. Para las referencias sin fecha, se aplican las
ediciones más recientes del documento citado (incluyendo enmiendas).
ABNT NBR 15601, Televisión digital terrestre – Estándar de transmisión
ABNT NBR 15603-2:2007, Televisión digital terrestre – Multiplexación y servicios de información (SI) – Parte 2:
Estructura de datos y definiciones de la información básica de SI
ABNT NBR 15606-1, Televisión digital terrestre – Codificación de datos y especificaciones de transmisión para
radiodifusión digital – Parte 1: Codificación de datos
ABNT NBR 15606-3, Televisión digital terrestre – Codificación de datos y especificaciones de transmisión para
radiodifusión digital – Parte 3: Especificación de transmisión de datos
ISO 639-1, Codes for the representation of names of languages - Part 1: Alpha-2 code
ISO 8859-1, Information technology – 8-bit single-byte coded graphic character sets – Part 1: Latin alphabet N° 1
ISO/IEC 11172-1, Coding of moving pictures and associated audio for digital storage mediaat up to about
1,5 Mbit/s Part 1 - Systems
ISO/IEC 11172-2, Coding of moving pictures and associated audio for digital storage mediaat up to about
1,5 Mbit/s – Part 2: Video
ISO/IEC 11172-3, Coding of moving pictures and associated audio for digital storage mediaat up to about
1,5 Mbit/s – Part 3: Audio
ISO/IEC 13818-1, Information technology – Generic coding of moving pictures and associated audio information –
Part 1: Systems
ISO/IEC 13818-2, Information technology – Generic coding of moving pictures and associated audio information –
Part 2: Video
ISO/IEC 13818-3, Information technology – Generic coding of moving pictures and associated audio information –
Part 3: Audio
© ABNT 2007 - Todos los derechos reservados
1
ABNT NBR 15606-2:2007
ISO/IEC 13818-6, Information technology – Generic coding of moving pictures and associated audio information –
Part 6: Extensions for DSM-CC
ISO/IEC 13818-7, Information technology – Generic coding of moving pictures and associated audio information –
Part 7: Advanced Audio Coding (AAC)
ISO/IEC 14496-3, Information technology – Coding of audio-visual objects – Part 3: Audio
ECMA 262, ECMAScript language specification
3
Términos y definiciones
Para los efectos de esta parte de la ABNT NBR 15606, se aplican los siguientes términos y definiciones.
3.1
ambiente de aplicación
contexto o ambiente de software en el cual se procesa una aplicación
3.2
ambiente de aplicación declarativa
ambiente que soporta el procesamiento de aplicaciones declarativas
NOTA
Un formateador (user agent) NCL es un ejemplo de ambiente de aplicación declarativa.
3.3
ambiente de aplicación procedural
ambiente que soporta el procesamiento de aplicaciones procedurales
3.4
API DON
API que define la estructura lógica de un documento XML y la forma de acceder, o manejar, un documento XML
NOTA
Esta API es una interfaz independiente de plataformas y lenguajes y sigue el Modelo DOM (Document Object Model).
3.5
aplicación
información que expresa un conjunto específico de comportamientos observables
3.6
aplicación declarativa
aplicación que utiliza principalmente, y como punto de partida, información declarativa para expresar su
comportamiento
NOTA
Una instancia de documento NCL es un ejemplo de aplicación declarativa.
3.7
aplicación híbrida
aplicación híbrida declarativa o aplicación híbrida procedural
3.8
aplicación híbrida declarativa
aplicación declarativa que contiene contenido de objeto activo
NOTA
2
Un documento NCL con un Java Xlet embutido es un ejemplo de aplicación híbrida declarativa.
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
3.9
aplicación híbrida procedural
aplicación procedural con contenido declarativo
NOTA
Un Java Xlet que crea y causa la exhibición de una instancia de documento NCL es un ejemplo de aplicación híbrida
procedural.
3.10
aplicación nativa
función intrínseca implementada por una plataforma receptora
NOTA
Una exhibición en closed caption es un ejemplo de aplicación nativa.
3.11
aplicación procedural
aplicación que utiliza principalmente, y como punto de partida, informaciones procedurales para expresar su
comportamiento
NOTA
Un programa en Java es un ejemplo de una aplicación procedural.
3.12
almacenamiento persistente
memoria disponible que puede ser leída o grabada por una aplicación y puede ser mantenida por más tiempo que
el tiempo de vida de la misma aplicación
NOTA
El almacenamiento persistente puede ser volátil o no volátil.
3.13
atributo
parámetro para representar la naturaleza de una propiedad
3.14
atributo de un elemento
propiedad de un elemento XML
3.15
autor
persona que escribe documentos NCL
3.16
canal de interactividad
canal de retorno
mecanismo de comunicación que suministra conexión entre el receptor y un servidor remoto
3.17
carácter
"letra" específica u otro símbolo identificable
EJEMPLO
“A”
3.18
carrusel de datos
método que envía cualquier conjunto de datos en forma cíclica, para que esos datos se puedan obtener, vía
radiodifusión, en un intervalo de tiempo tan largo como sea necesario
[ISO/IEC 13818-6:2001]
3.19
codificación de caracteres
mapeo entre un valor de entrada entero y el carácter textual, representado por ese mapeo
© ABNT 2007 - Todos los derechos reservados
3
ABNT NBR 15606-2:2007
3.20
contenido de objeto activo
tipo de contenido que toma la forma de un programa ejecutable
NOTA
Un Xlet Java compilado es un ejemplo de contenido de objeto activo.
3.21
contenido NCL
conjunto de informaciones que consiste en un documento NCL y en un grupo de datos, incluyendo objetos
(de media o de ejecución), que acompañan el documento NCL
3.22
digital storage media command and control
DSM-CC
método de control que suministra acceso a un archivo o flujo en servicios digitales interactivos
[ISO/IEC 13818-6:2001]
3.23
document type definition
DTD
declaración que describe un tipo de documento XML
3.24
ECMAScript
lenguaje de programación definido en la ECMA 262
3.25
elemento
unidad de estructuración del documento delimitada por tags
NOTA
Un elemento es usualmente delimitado por una tag inicial y una tag final, excepto un elemento vacío que es
delimitado por una tag de elemento vacío.
3.26
elemento property
elemento NCL que define un nombre de propiedad y su valor asociado
3.27
entidad de la aplicación
unidad de información que expresa alguna parte de una aplicación
3.28
evento
ocurrencia en el tiempo que puede ser instantánea o tener duración mensurable
3.29
exhibidor de media
media player
componente identificable de un ambiente de aplicación que descodifica o ejecuta un tipo específico de contenido
3.30
eXtensible HTML
XHTML
versión extendida del HTML como aplicación XML
NOTA
4
En la especificación XHTML, un documento HTML es reconocido como aplicación XML.
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
3.31
herramienta de autoría
herramienta para ayudar a los autores a crear documentos NCL
3.32
fuente
mecanismo que permite la renderización específica de un carácter
EJEMPLO
NOTA
Tiresias, 12 puntos.
En la práctica, un formato de fuente incorpora aspectos de la codificación de un carácter.
3.33
formateador NCL
componente de software responsable por recibir la especificación de un documento NCL y controlar su
presentación, intentando garantizar que las relaciones entre los objetos de media, especificados por el autor, sean
respetados
NOTA
Renderizador (renderer) de documentos, agente del usuario (user agent ) y exhibidor son otros nombres que se
utilizan con el mismo significado del formateador de documentos.
3.34
flujo de transporte
se refiere a la sintaxis del flujo de transporte MPEG-2 para empaquetado y multiplexación de video, audio y
señales de datos en sistemas de radiodifusión digital
3.35
flujo elemental
elementary stream
ES
flujo básico que contiene datos de video, audio, o datos privados
NOTA
Un único flujo elemental se transporta en una secuencia de paquetes PES con un y sólo un identificador (stream_id).
3.36
gestor de aplicaciones
entidad responsable por la administración del ciclo de vida de las aplicaciones y que administra las aplicaciones,
funcionando tanto en la máquina de presentación como en la máquina de ejecución
3.37
identificador de paquete
PID
valor entero único utilizado para asociar los flujos elementales de un programa, tanto en un flujo de transporte
único como en multiprograma
3.38
información de servicio SI
datos que describen programas y servicios
3.39
informaciones específicas del programa
program specific information
PSI
datos normativos necesarios para demultiplexar los flujos de transporte y regenerar los programas
3.40
interfaz de programación de la aplicación
API
bibliotecas de software que ofrecen acceso uniforme a los servicios del sistema
© ABNT 2007 - Todos los derechos reservados
5
ABNT NBR 15606-2:2007
3.41
lenguaje de marcación
formalismo que describe una clase de documentos que emplean marcación para delinear la estructura, apariencia
u otros aspectos del documento
3.42
lenguaje de script
lenguaje utilizado para describir un contenido de objeto activo incorporado en documentos NCL y en documentos
HTML
3.43
localizador
identificador que suministra una referencia a una aplicación o recurso
3.44
máquina de presentación
subsistema en un receptor que analiza y presenta aplicaciones declarativas, con contenidos como audio, video,
gráficos y texto, con base en reglas definidas en la máquina de presentación
NOTA
Una máquina de presentación es responsable por el control del comportamiento de la presentación y por iniciar
otros procesos en respuesta a entradas del usuario y otros eventos.
EJEMPLO
Navegador HTML y formateador NCL.
3.45
máquina de ejecución
subsistema en un receptor que evalúa y ejecuta aplicaciones procedurales, compuestas por instrucciones en
lenguaje de computadora, contenido de medias asociadas y otros datos
NOTA
Una máquina de ejecución se puede implementar con un sistema operativo, compiladores de lenguaje de
computadora, interpretadores e interfaces de programación de aplicaciones (API), que una aplicación procedural puede utilizar
para presentar contenido audiovisual, interactuar con el usuario o ejecutar otras tareas que no sean evidentes al usuario.
EJEMPLO
Ambiente de software JavaTV, utilizando lenguaje de programación Java e interpretador bytecode, API
JavaTV y máquina virtual Java para ejecución del programa.
3.46
método
función asociada a un objeto autorizado para manejar los datos del objeto
3.47
nudo NCL
elemento <media>, <context>, <body> o <switch> de NCL
3.48
normal play time
NPT
coordenada temporal absoluta que representa la posición en un flujo
3.49
objeto de media
colección de pedazos de datos identificados por nombre que puede representar un contenido de media o un
programa escrito en lenguaje específico
3.50
perfil
especificación de una clase de capacidades, ofreciendo diferentes niveles de funcionalidades en un receptor
6
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
3.51
perfil one-seg
caracteriza el servicio que puede ser recibido por un sintonizador de banda estrecha (430 KHz) y por lo tanto con
ahorro en el consumo de batería
NOTA
El perfil one-seg también es conocido como perfil portátil.
3.52
perfil full-seg
caracteriza el servicio que necesita necesariamente un demodulador de banda ancha (5,7 MHz) para ser recibido
NOTA
Dependiendo de las configuraciones de transmisión y de funcionalidad específicas del receptor, puede ser recibido
en movimiento o apenas por receptores fijos, aunque sin el beneficio del ahorro de energía. La resolución del video transmitido
puede ser o no de alta definición.
3.53
plug-in
conjunto de funcionalidades que se puede agregar a una plataforma genérica para suministrar funcionalidad
adicional
3.54
plataforma receptora
plataforma
hardware, sistema operativo y bibliotecas de software nativas del receptor, elegidos por el fabricante
3.55
recurso
objeto de datos o un servicio de la red que es identificado unívocamente
3.56
sistema de archivos local
sistema de archivos suministrado por la plataforma receptora local
3.57
tiempo de vida de una aplicación
período de tiempo entre el momento en que una aplicación se carga y el momento en que se destruye
3.58
uniform resource identifier
URI
método de encaminamiento que permite el acceso a objetos en una red
3.59
user agent
cualquier programa que interpreta un documento NCL
NOTA
Un user agent puede exhibir un documento, intentando garantizar que las relaciones especificadas por el autor
entre objetos de media sean respetadas, pronunciarlo en audio sintetizado, convertirlo en otro formato etc.
3.60
usuario
persona que interactúa con un formateador para visualizar, oír o utilizar de otra forma un documento NCL
3.61
usuario final
individuo que opera o interactúa con un receptor
© ABNT 2007 - Todos los derechos reservados
7
ABNT NBR 15606-2:2007
4
Abreviaturas
Para los efectos de esta parte de la ABNT NBR 15606, se aplican las siguientes abreviaturas.
API
BML
CLUT
CSS
DOM
DSM-CC
DTD
DTV
DVB
GIF
HTML
HTTP
JPEG
MIME
MNG
MPEG
NCL
NCM
NPT
OS
PAT
PES
PID
PMT
PNG
PSI
SBTVD
SMIL
TS
UCS
URI
URL
XHTM
L XML
W3C
5
Application Programming Interface
Broadcast Markup Language
Color Look-up Table
Cascading Style Sheets
Document Object Model
Digital Storage Media Command and Control
Document Type Definition
Digital Television
Digital Video Broadcasting
Graphics Interchange Format
Hypertext Markup Language
Hypertext Transfer Protocol
Joint Photographic Expert Group
Multipurpose Internet Mail Extensions
Multiple Network Graphics
Moving Picture Expert Group
Nested Context Language
Nested Context Model
Normal Play Time
Operating System
Program Association Table
Packetized Elementary Stream
Packet Identifier
Program Map Table
Portable Network Graphics
Program Specific Information
Sistema Brasileño de Televisión Digital Terrestre
Synchronized Multimedia Integration Language
Transport Stream
Universal (Coded) Character Set
Universal Resource Identifier
Universal Resource Locator
eXtensible HTML
Extensible Markup Language
World-Wide Web Consortium
Arquitectura Ginga
5.1 Ginga main modules
El universo de las aplicaciones Ginga se puede dividir en un conjunto de aplicaciones declarativas y un conjunto
de aplicaciones procedurales. Una aplicación declarativa es aquella donde el tipo del contenido de la entidad
inicial es declarativo. Por otro lado, una aplicación procedural es aquella cuyo tipo de contenido de la entidad
inicial es procedural. Una aplicación declarativa pura es aquella en la cual el contenido de todas las entidades es
del tipo declarativo. Una aplicación procedural pura es aquella en la cual el contenido de todas las entidades es
del tipo procedural. Una aplicación híbrida es aquella cuyo conjunto de entidades posee tanto contenido del tipo
declarativo como procedural. Una aplicación Ginga no necesita ser puramente declarativa o procedural.
8
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
En particular, las aplicaciones declarativas frecuentemente utilizan scripts, cuyo contenido es de modalidad
procedural. Además, una aplicación declarativa puede hacer referencia a un código Java TV Xlet incorporado.
Del mismo modo, una aplicación procedural puede hacer referencia a una aplicación declarativa, conteniendo,
por ejemplo, contenido gráfico, o puede construir e iniciar la presentación de aplicaciones con contenido
declarativo. Por lo tanto, ambos tipos de aplicación Ginga pueden utilizar las facilidades de los ambientes de
aplicación declarativo y procedural.
Ginga-NCL es un subsistema lógico del sistema Ginga responsable por el procesamiento de documentos NCL1).
Un componente clave del Ginga-NCL es la máquina de interpretación del contenido declarativo (formateador NCL).
Otros módulos importantes son el exhibidor (user agent) XHTML, que incluye interpretadores CSS y ECMAScript,
y la máquina de presentación Lua, que es responsable por la interpretación de los scripts Lua (ver Anexo B).
Ginga-J es un subsistema lógico del sistema Ginga responsable por el procesamiento de contenidos activos.
Un componente clave del ambiente de aplicación procedural es la máquina de ejecución del contenido procedural,
compuesta por una máquina virtual Java.
Decodificadores de contenidos comunes sirven tanto para las aplicaciones procedurales con respecto a las
declarativas que necesitan decodificar y presentar tipos comunes de contenido como PNG, JPEG, MPEG y otros
formatos. El núcleo común Ginga (Ginga Common Core) está compuesto por los decodificadores de contenido
comunes y por procedimientos para lograr contenidos transportados en flujos de transporte (transport streams)
MPEG-2 y a través del canal de interactividad. El núcleo común Ginga también debe soportar obligatoriamente el
modelo conceptual de exhibición, tal como se describe en la ABNT NBR 15606-1.
La arquitectura (ver Figura 1) y facilidades Ginga fueron proyectadas para ser aplicadas a sistemas de
radiodifusión y receptores terrestres de radiodifusión. Adicionalmente, la misma arquitectura y facilidades se
pueden aplicar a sistemas que utilizan otros mecanismos de transporte de datos (como sistemas de televisión vía
satélite o por cable).
Figura 1 — Arquitectura Ginga
5.2 Interacción con el ambiente nativo
Por lo general, el Ginga es ajeno a cualesquiera aplicaciones nativas que pueden también optar por utilizar el
plano gráfico. Eso incluye, pero no se limita a aplicaciones como: closed caption, mensajes del sistema de acceso
condicional (CA), menús del receptor y guías de programación nativos.
Las aplicaciones nativas pueden tener prioridad sobre las aplicaciones Ginga. El closed caption y los mensajes de
emergencia deben tener obligatoriamente prioridad sobre el sistema Ginga.
Algunas aplicaciones nativas, como el closed caption, representan un caso especial en el cual la aplicación nativa
puede estar activa por largos períodos en conjunto con las aplicaciones Ginga.
1)
NCL es marca registrada y su especificación es propiedad intelectual de la PUC-Rio (INPI Departamento de Transferencia
Tecnológica - No. 0007162-5; 20/12/2005).
© ABNT 2007 - Todos los derechos reservados
9
ABNT NBR 15606-2:2007
6
Interoperabilidad con ambientes declarativos definidos en otros sistemas de
televisión digital - Objetos XHTML incorporados en presentaciones NCL
6.1 NCL como lenguaje cola
Todas las máquinas de presentación de los tres principales sistemas de televisión digital utilizan un lenguaje
basado en XHTML.
XHTML es un lenguaje declarativo basado en media, lo que significa que su estructura es definida por las
relaciones entre objetos XHTML (documentos XHTML u objetos insertos en documentos XHTML) que están
incorporados en el contenido de la media del documento. XHTML puede, entonces, ser clasificada como lenguaje
de marcación: un formalismo que describe una clase de documentos que emplean marcación para delinear la
estructura, apariencia y otros aspectos de los documentos.
Las relaciones de referencia definidos por los enlaces XHTML son el foco de ese lenguaje declarativo. Otros tipos
de relaciones, como relaciones de sincronización espacio-temporal y relaciones alternativas (adaptación de la
media), son comúnmente definidos a través de un lenguaje imperativo (por ejemplo, ECMAScript).
Diferentemente de XHTML o HTML, NCL define una separación bien delimitada entre el contenido y la estructura
de un documento (o aplicativo), probando un control no intrusivo del enlace entre el contenido y su presentación y
layout.
El foco del lenguaje declarativo NCL es más amplio que el ofrecido por la XHTML. La sincronización espaciotemporal, definida genéricamente por los enlaces NCL; adaptabilidad, definida por los elementos switch y
descriptor switch de la NCL; y soporte a múltiples dispositivos de exhibición, definidos por regiones NCL, es el foco
de ese lenguaje declarativo. La interacción del usuario se trata sólo como un caso particular de sincronización
temporal.
Como la NCL tiene una separación más exacta entre el contenido y la estructura, la misma no define ninguna
media en sí. Al contrario, define la cola que pega la media en presentaciones multimedia.
Un documento NCL sólo define cómo los objetos de media son estructurados y relacionados en el tiempo y
espacio. Como un lenguaje de cola, la misma no restringe o prescribe los tipos de contenido de los objetos de
media. En ese sentido, se pueden tener objetos de imagen (GIF, JPEG etc.), de video (MPEG, MOV etc.), de
audio (MP3, WMA etc.), de texto (TXT, PDF etc.), de ejecución (Xlet, Lua etc.), entre otros, como objetos de
media NCL. Qué objetos de media son soportados depende de los exhibidores de media que están acoplados al
formateador NCL (exhibidor NCL). Uno de esos exhibidores es el decodificador/exhibidor MPEG-4, normalmente
implementado en hardware en el receptor de televisión digital. De esa forma, el video y el audio MPEG-4 principal
se tratan como todos los demás objetos de media que pueden estar relacionados utilizando NCL.
Otro objeto de media NCL que debe ser obligatoriamente soportado es el objeto de media basado en XHTML.
La NCL no reemplaza, sino incorpora documentos (u objetos) basados en XHTML. Como ocurre con otros objetos
de media, qué lenguaje basado en XHTML tiene soporte en un formateador NCL es una elección de
implementación y, por lo tanto, depende de qué navegador XHTML, incorporado en el formateador NCL, actúa
como exhibidor de esa media.
Como consecuencia, es posible tener navegadores BML, DVB-HTML y ACAP-X individualmente incorporados
en un exhibidor de documento NCL. Es posible, además, tenerlos todos. Es igualmente posible recibir el código
de un programa navegador a través de la difusión de datos e instalarlo como plug-in (normalmente un plug-in
Java).
También es posible tener un navegador genérico implementado y, en caso de ser necesario, recibir la parte
complementar (específica) como un plug-in, para convertir el exhibidor XHTML genérico en un exhibidor
específico de uno de los diversos estándares de navegador DTV.
10
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
En último caso, un documento NCL puede ser reducido para contener un sólo objeto de media XHTML. En ese
caso, el exhibidor del documento NCL actúa casi como un navegador XHTML, es decir, como cualquier otro
navegador de los estándares mencionados.
No importa el caso, la implementación del navegador XHTML debe ser una consecuencia de las siguientes
exigencias:
 interoperabilidad;
 robustez;
 conformidad con las normas del W3C;
 rechazo de contenido no conforme;
 compatibilidad con el modelo de seguridad Ginga;
 minimización de la redundancia con la tecnología Ginga-J existente;
 minimización de la redundancia con las facilidades NCL existentes;
 mecanismos necesarios de control del layout del contenido;
 soporte a diferentes razones de aspecto de las unidades de exhibición (pixels).
Para brindar soporte a las facilidades del navegador XHTML definidas por otros estándares DTV, se recomienda
que todas las especificaciones SBTVD relacionadas con la difusión de datos soporten también las facilidades
definidas para tales navegadores, como el transporte de eventos de flujos (stream events), por ejemplo.
Aunque un navegador XHTML deba ser obligatoriamente soportado, se recomienda que la utilización de
elementos XHTML para definir relaciones (incluso links XHTML) sea evitada en la autoría de documentos NCL.
Se recomienda que la autoría con base en la estructura sea priorizada por razones conocidas y ampliamente
divulgadas en la literatura.
Durante la exhibición del contenido de objetos de media se generan varios eventos (ver 7.2.8). Algunos ejemplos
son la presentación de parte del contenido de un objeto de media, la selección de parte del contenido de un
objeto etc. Los eventos pueden generar acciones sobre otros objetos de media, como iniciar o terminar sus
presentaciones. Por lo tanto, los eventos deben ser obligatoriamente relatados por los exhibidores de media al
formateador NCL que, a su vez, puede generar acciones a ser aplicadas a ésos u otros exhibidores. Ginga-NCL
define la API (ver Sección 8) de un adaptador con el alcance de estandarizar la interfaz entre el formateador
Ginga-NCL y cada exhibidor específico.
Para que cualquier exhibidor de media, en particular un navegador XHTML, sea acoplado al formateador GingaNCL, debe soportar obligatoriamente la API de los adaptadores. Así, para algunos exhibidores de media, incluso
navegadores XHTML, un módulo adaptador puede ser necesario para alcanzar la integración.
Para edición en vivo, el Ginga-NCL también define eventos de flujo NCL para ofrecer soporte a los eventos
generados en vivo sobre flujos de media, en particular sobre el flujo de video del programa principal. Esos eventos
son una generalización del mismo concepto encontrado en otras normas, como, por ejemplo, los bevents de BML.
Aunque un navegador XHTML deba ser obligatoriamente soportado, se recomienda evitar la utilización
de elementos XHTML para definir relaciones (incluso eventos de flujo) durante la creación de documentos NCL
por la misma razón, es decir, se recomienda que la autoría con base en la estructura sea priorizada por razones
conocidas y ampliamente divulgadas en la literatura.
6.2 Formato de contenido XHTML
Formatos comunes de contenido deben ser obligatoriamente adoptados para la producción e intercambio de
contenido multimedia, como definido en la ABNT NBR 15606-1. Además, en el ambiente de aplicación declarativa
también se exige la especificación de formatos comunes de contenidos XHTML para las aplicaciones de televisión
interactiva.
© ABNT 2007 - Todos los derechos reservados
11
ABNT NBR 15606-2:2007
NOTA
Esta Norma sigue la ITU Recommendation J.201 para identificar las funcionalidades comunes entre los ambientes
de aplicación declarativa para aplicaciones de televisión interactiva especificadas por DVB-HTML, ACAP-X y BML.
Conviene que se especifiquen los elementos comunes y API en el nivel sintáctico de objetos de media XHTML
incorporados en aplicaciones NCL para ayudar a los autores en la creación de contenido XHTML.
Cualquier implementación de objeto de media XHTML de acuerdo con esta Norma debe obligatoriamente dar
soporte a, por lo menos, todas las marcaciones XML y propiedades de hojas de estilo comunes a los servicios
básicos BML ("perfil terminal fijo"), ACAP-X y DVB-HTML, como definido en 6.3. Se recomienda que facilidades
de objetos nativos ECMAScript y API DOM, comunes a los servicios básicos BML ("perfil terminal fijo"), ACAP-X y
DVB-HTML, también tengan soporte.
6.3 Armonización del formato de contenido XHTML
6.3.1
Marcaciones XML
NOTA
Objetos de media NCL basados en XHTML siguen la recomendación W3C “Modularization of XHTML” y sus
marcaciones XML se definen en la ITU Recommendation J.201.
Los módulos comunes a marcaciones XML pueden ser:
 structure;
 text;
 hypertext;
 list;
 presentation;
 bidirectional text;
 forms;
 image;
 client-side image map;
 object;
 frames;
 target;
 meta information;
 scripting;
 stylesheet;
 style attribute;
 link;
 base.
12
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Las colecciones de atributo XHTML se definen de acuerdo con la Tabla 1. Las marcaciones XML comunes a los
estándares servicios básicos BML (“perfil de terminal fijo”), ACAP-X y DVB-HTML, que deben ser obligatoriamente
soportadas por cualquier implementación, se listan en la Tabla 2, en conjunto con las extensiones
Ginga obligatorias.
Tabla 1 — Colecciones de atributos
Nombre de la
colección
Core
Atributos en la colección
class (NMTOKENS)
Id (ID),
title (CDATA)
I18N
Condición del
atributo
Requerido
Requerido
–
xml:lang (CDATA)
Requerido
onclick (Script)
Requerido
ondblclick (Script)
–
onmousedown (Script)
–
onmouseup (Script)
–
onmouseover (Script)
–
onmousemove (Script)
–
onmouseout (Script)
–
onkeypress (Script)
–
onkeydown (Script)
Requerido
onkeyup (Script)
Requerido
Style
style (CDATA)
Requerido
Common
Core + Events + I18N + Style
Events
© ABNT 2007 - Todos los derechos reservados
13
ABNT NBR 15606-2:2007
Tabla 2 — Elementos de marcación XML en común
Módulo
Elemento
Condición del
elemento
body
Requerido
head
Requerido
html
title
abbr
acronym
address
blockquote
br
cite
code
dfn
div
em
h1
h2
h3
h4
h5
h6
kbd
p
pre
q
samp
span
strong
var
Requerido
Requerido
–
–
–
–
Requerido
–
–
–
Requerido
–
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
–
Requerido
–
–
–
Requerido
–
–
Structure
Text
Core
14
Hypertext
a
Requerido
List
dl
dt
dd
ol
ul
li
–
–
–
–
–
–
Atributo
Condición del
atributo
%Common.attrib
%Core.attrib
%I18n.attrib
%Events.attrib
%I18n.attrib
profile
Requerido
Requerido
–
Requerido
–
%I18n.attrib
Requerido
%Core.attrib
Requerido
%Common.attrib
Requerido
%Common.attrib
%Common.attrib
%Common.attrib
%Common.attrib
%Common.attrib
%Common.attrib
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
%Common.attrib
Requerido
%Common .attrib
Requerido
%Common.attrib
accesskey
charset
href
hreflang
rel
rev
tabindex
type
Requerido
Requerido
Requerido
Requerido
–
–
–
–
–
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 2 (continuación)
Módulo
Elemento
Applet
applet
param
b
big
hr
i
small
sub
sup
tt
del
ins
Condición del
elemento
–
–
–
–
–
–
–
–
–
–
–
–
bdo
–
form
input
label
select
option
textarea
–
–
–
–
–
–
Presentation
Text extension
Edit
Bi-directional
text
Basic forms
form
Requerido
input
Requerido
select
option
textarea
button
fieldset
label
legend
optgroup
–
–
–
–
–
–
–
–
Forms
Forms
© ABNT 2007 - Todos los derechos reservados
Atributo
Condición del
atributo
%Common.attrib
action
method
enctype
accept-charset
accept
name
%Common.attrib
accesskey
checked
disabled
readonly
maxlength
alt
name
size
src
tabindex
accept
type
value
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
–
Requerido
Requerido
Requerido
–
–
Requerido
–
–
–
Requerido
Requerido
15
ABNT NBR 15606-2:2007
Tabla 2 (continuación)
Módulo
Elemento
Basic tables
Table
Tables
Image
Client side map
Server side image map
Object
Frames
Target
IFrame
16
caption
table
td
th
tr
caption
table
td
th
tr
col
colgroup
tbody
thead
tfoot
img
a&
area
img&
input&
map
object&
img&
Input&
Condición del
elemento
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
object
Requerido
param
frameset
frame
noframe
a&
area&
base&
link&
form&
iframe
–
–
–
–
–
–
–
–
–
–
Atributo
Condición del
atributo
%Common.attrib
archive
classid
codebase
codetype
data
declare
height
name
standby
tabindex
type
width
Requerido
–
–
–
–
Requerido
–
Requerido
–
–
–
Requerido
Requerido
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 2 (continuación)
Módulo
Elemento
Intrinsic events
a&
area&
frameset&
form&
body&
label&
input&
select&
textarea&
button&
Metainformation
meta
Condición del
elemento
Requerido
–
–
–
–
–
–
–
–
–
Requerido
Atributo
Condición del
atributo
%I18n.attrib
http-equiv
name
content
scheme
–
–
Requerido
Requerido
–
charset
type
src
defer
%I1 8n.attrib
id
type
media
title
Requerido
Requerido
–
–
Requerido
–
Requerido
Requerido
–
noscript
Scripting
6.3.2
script
Requerido
Stylesheet
style
Requerido
Style attribute
Link
Base
link
base
Requerido
Requerido
–
Hojas de estilo
Las propiedades de hojas de estilo (CSS) se listan en la Tabla 3.
© ABNT 2007 - Todos los derechos reservados
17
ABNT NBR 15606-2:2007
Tabla 3 — Propiedades de hojas de estilo en común
background
clear
outline-color
background-attachment
clip
outline-style
background-color
color
outline-width
background-image
content
overflow
background-position
counter-increment
padding
background-repeat
counter-reset
padding-bottom
border
display
padding-left
border-bottom
float
padding-right
border-bottom-color
font
padding-top
border-bottom-style
font-family
position
border-bottom-width
font-size
right
border-color
font-style
text-align
border-left
font-variant
text-decoration
border-left-color
font-weight
text-indent
border-left-style
height
text-transform
border-left-width
left
top
border-right
letter-spacing
vertical-align
border-right-color
line-height
visibility
border-right-style
list-style
white-space
border-right-width
list-style-image
width
border-style
list-style-position
word-spacing
border-top
list-style-type
z-index
border-top-color
margin
nav-down
border-top-style
margin-bottom
nav-index
border-top-width
margin-left
nav-left
border-width
margin-right
nav-right
bottom
margin-top
nav-up
caption-side
outline
----
Las propiedades de hojas de estilo comunes a los estándares servicios básicos BML, ACAP-X y DVB-HTML, que
deben ser obligatoriamente soportadas por cualquier implementación, se listan en la Tabla 4.
18
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 4 — Propiedades de hojas de estilo CSS 2 en común
Propiedad
Value assignment/Inheritance
@import
!important
Media type
@media
box model
margin-top
margin-right
margin-bottom
margin-left
margin
padding-top
padding-right
padding-bottom
padding-left
padding
border-top-width
border-right-width
border-bottom-width
border-left-width
border-width
border-top-color
border-right-color
border-bottom-color
border-left-color
border-color
border-top-style
border-right-style
border-bottom-style
border-left-style
border-style
border-top
border-right
border-bottom
border-left
border
Visual formatting model
position
left
top
width
height
z-index
line-height
vertical-align
display
bottom
right
float
clear
direction
© ABNT 2007 - Todos los derechos reservados
Condición de la propiedad
–
–
Requerido
–
–
–
–
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
–
–
–
–
Requerido
–
–
–
–
Requerido
–
–
–
–
Requerido
–
–
–
–
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
–
Requerido
–
–
–
–
–
19
ABNT NBR 15606-2:2007
Tabla 4 (continuación)
Propiedad
Condición de la propiedad
unicode-bidi
–
min-width
–
max-width
–
min-height
–
max-height
–
Other visual effects
visibility
Requerido
overflow
Requerido
clip
–
Generated content/Auto numbering/List
content
–
quotes
–
counter-reset
–
counter-increment
–
marker-offset
–
list-style-type
–
list-style-image
–
list-style-position
–
list-style
–
Page media
"@page"
–
size
–
marks
–
page-break-before
–
page-break-after
–
page-break-inside
–
page
–
orphans
–
widows
–
Background
background
–
background-color
–
background-image
Requerido
background-repeat
Requerido
background-position
–
background-attachment
–
Font
color
Requerido
font-family
Requerido
font-style
Requerido
font-size
Requerido
font-variant
Requerido
font-weight
Requerido
font
Requerido
font-stretch
–
font-adjust
–
Text
text-indent
–
text-align
Requerido
text-decoration
–
20
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 4 (continuación)
Propiedad
text-shadow
letter-spacing
word-spacing
text-transform
white-space
Pseudo class/ Pseudo element
:link
:visited
:active
:hover
:focus
:lang
:first-child
:first-line
:first-letter
:before
:after
Table
caption-side
border-collapse
border-spacing
table-layout
empty-cells
speak-header
User interface
outline-color
outline-width
outline-style
outline
cursor
Voice style sheet
volume
speak
pause-before
pause-after
pause
cue-before
cue-after
cue
play-during
azimuth
elevation
speech-rate
voice-family
pitch
pitch-range
stress
richness
speak-punctuation
peak-numeral
© ABNT 2007 - Todos los derechos reservados
Condición de la propiedad
–
Requerido
–
–
Requerido
–
–
Requerido
–
Requerido
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
21
ABNT NBR 15606-2:2007
Tabla 4 (continuación)
Propiedad
Extended property
clut
color-index
background-color-index
border-color-index
border-top-color-index
border-right-color-index
border-bottom-color-index
border-left-color-index
outline-color-index
resolution
display-aspect-ratio
grayscale-color-index
nav-index
nav-up
nav-down
nav-left
nav-right
used-key-list
Condición de la propiedad
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
Las siguientes restricciones se deberán aplicar obligatoriamente a las propiedades de exhibición:
 solamente elementos de bloque se pueden aplicar para <p>, <div>, <body>, <input> y <object>;
 solamente valores definidos en el mismo elemento HTML se pueden aplicar para <br>, <a> y <span>.
Además, las siguientes restricciones se deberán aplicar obligatoriamente a las propiedades de posición:

solamente valores absolutos se pueden aplicar para <p>, <div>, <input> y <object>;

solamente valores estáticos se pueden aplicar para <br>, <span> y <a>.
Los selectores CSS comunes a los estándares servicios básicos BML, ACAP-X y DVB-HTML, que deben ser
obligatoriamente soportados por cualquier implementación, son los siguientes:
 universal;
 type;
 class;
 id;
 dynamic (active and :focus).
6.3.3
ECMAScript
Una vez implementada, es altamente recomendable que la máquina ECMAScript dé soporte a los objetos nativos
en común de los estándares de servicios básicos BML, ACAP-X y DVB-HTML, listados en la Tabla 5. Como
restricción, los tipos numéricos sólo soportan operaciones enteras.
22
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 5 — Objetos nativos en común
Object
(global)
Method, properties
NaN
Infinity
eval(x)
parseInt(string, radix)
parseFloat(string)
escape(string)
unescape(string)
isNaN(number) O
isFinite(number)
Object
prototype
Object([value])
new Object([value])
Object.prototype
constructor
toString()
valueOf()
Operation condition
Requerido
–
–
Requerido
–
–
–
Requerido
–
Todos requeridos
Requerido
Requerido
Requerido
Todos requeridos
Requerido
Requerido
Requerido
Function
prototype
Length
Function(p1, p2, . . . , pn, body)
new Function(p1, p2, . . . , pn, body)
Function.prototype
constructor
toString()
Array
prototype
Length
Array(item0, item 1, . . .)
new Array(item0, item 1, . . .)
new Array([len])
Array.prototype
constructor
toString()
join([separator])
reverse()
sort([comparefn])
constructor
String
prototype
Length
String([value])
new String([value])
String.fromCharCode(char0[, char1, . . .])
© ABNT 2007 - Todos los derechos reservados
Requerido
Requerido
–
–
Todos requeridos
Requerido
Requerido
Todos requeridos
Requerido
Requerido
Requerido
Requerido
Requerido
Todos requeridos
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Todos requeridos
Requerido
Requerido
Requerido
Requerido
Requerido
23
ABNT NBR 15606-2:2007
Tabla 5 (continuación)
Object
Method, properties
String.prototype
constructor
toString()
valueOf()
charAt(pos)
charCodeAt(pos)
indexOf(searchString, position)
lastIndexOf(searchString, position)
split(separator)
substring(start [,end])
toLowerCase()
toUpperCase()
Boolean
prototype
Boolean([value])
new Boolean([value])
Boolean.prototype
constructor
toString()
valueOf()
Number
prototype
MAX_VALUE
MIN_VALUE
NaN
NEGATIVE_INFINITY
POSITIVE_INFINITY
Number([value])
new Number([value])
Number.prototype
constructor
toString([radix])
valueOf()
Math
E
LN10
LN2
LOG2E
LOG10E
PI
SQRT1_2
SQRT2
abs(x)
acos(x)
asin(x)
atan(x)
atan2(y, x)
cos(x)
24
Operation condition
Todos requeridos
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Todos requeridos
Requerido
Requerido
Requerido
Todos requeridos
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
–
–
Requerido
Requerido
Todos requeridos
Requerido
Requerido
Requerido
–
–
–
–
–
–
–
–
–
–
–
–
–
–
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 5 (continuación)
Object
Math
Method, properties
exp(x)
floor(x)
log(x)
max(x, y)
min(x, y)
pow(x, y)
random()
round(x)
sin(x)
sqrt(x)
tan(x)
Operation condition
–
–
–
–
–
–
–
–
–
–
–
Date
prototype
Date([year, month [, date [, hours [,
Requerido
Requerido
new Date([year, month [, date [, hours [,
Requerido
Date(value)
new Date(value)
Date.parse(string)
Date.UTC([year [, month [, date [, hours
–
–
–
–
Date.prototype
constructor
toString()
valueOf()
getTime()
getYear())
getFullYear()
getUTCFullYear()
getMonth()
getUTCMonth()
getDate()
getUTCDate()
getDay()
getUTCDay()
getHours()
getUTCHours()
getMinutes()
getUTCMinutes()
getSeconds()
getUTCSeconds()
getMilliseconds()
getUTCMilliseconds()
getTimezoneOffset()
setTime(time)
setMilliseconds(ms)
setUTCMilliseconds(ms)
© ABNT 2007 - Todos los derechos reservados
Requerido
Requerido
–
–
–
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
–
Requerido
Requerido
25
ABNT NBR 15606-2:2007
Tabla 5 (continuación)
Object
Date.prototype
Method, properties
setSeconds(sec [, ms ] )
setUTCSeconds(sec [, ms ] )
setMinutes(min [, sec [, ms ] ] )
setUTCMinutes(min [, sec [, ms ] ] )
setHours(hour [, min [, sec [, ms ] ] ] )
setUTCHours(hour [, min [, sec [, ms ] ] ] )
setDate(date)
setMonth(mon [, date ] )
setUTCMonth(mon [, date ])
setFullYear(year [, mon [, date ] ] )
setUTCFullYear(year [, mon [, date ] ] )
setYear(year)
toLocaleString()
toUTCString()
toGMTString()
Operation condition
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
–
Requerido
Requerido
–
Dependiendo de la implementación del middleware, es posible tener funciones ECMAScript mapeadas para las
API suministradas por el Ginga-J, logrando acceso a algunos recursos de la plataforma receptora y facilidades
Ginga. En ese caso, se recomienda que la API suministrada en el ECMAScript siga la misma especificación
presentada para el ambiente procedural del Ginga-J.
6.3.4
API DOM
Las API DOM nivel 1 son las siguientes:
 DOM Exception;
 DOMImplementation;
 DocumentFragment;
 Document;
 Node;
 NodeList;
 NamedNodeMap;
 CharacterData;
 Attr;
 Element;
 Text;
 Comment.
Las API DOM nivel 1, cuando son implementadas, es altamente recomendable que sigan las API comunes del
DOM nivel 1 para para servicios básicos BML, ACAP-X y DVB-HTML, listadas en la Tabla 6.
26
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 6 — API DOM nivel 1 en común
Interfaz
DOMImplementation
Atributo/Método
Condición de la operación
hasFeature()
Requerido
doctype
implementation
documentElement
createElement()
createDocumentFragment()
createTextNode()
createComment()
createCDATASection()
createProcessingInstruction()
createAttribute()
createEntityReference()
getElementsByTagName()
–
Requerido
Requerido
–
–
–
–
–
–
–
–
–
nodeName
nodeValue
nodeType
parentNode
childNodes
firstChild
lastChild
previousSibling
nextSibling
Attributes
ownerDocument
insertBefore()
replaceChild()
removeChild()
appendChild()
hasChildNodes()
cloneNode()
–
–
–
Requerido
–
Requerido
Requerido
Requerido
Requerido
–
–
–
–
–
–
–
–
data
length
substringData()
appendData()
insertData()
deleteData()
replaceData()
Requerido
Requerido
–
–
–
–
–
tagName
getAttribute()
setAttribute()
removeAttribute()
getAttributeNode()
setAttributeNode()
removeAttributeNode()
getElementsByTagName()
normalize()
Requerido
–
–
–
–
–
–
–
–
Document
Node
CharacterData
Element
Text
splitText
© ABNT 2007 - Todos los derechos reservados
–
27
ABNT NBR 15606-2:2007
7
NCL - Lenguaje declarativo XML para especificación de presentaciones multimedia
interactivas
7.1 Lenguajes modulares y perfiles de lenguajes
7.1.1
Módulos NCL
El abordaje modular ha sido utilizado en varios lenguajes recomendados por el W3C.
Módulos son colecciones de elementos, atributos y valores de atributos XML semánticamente relacionados que
representan una unidad funcional. Los módulos se definen en conjuntos coherentes. Esa coherencia se expresa
por medio de la asociación de un mismo namespace a los elementos de esos módulos.
NOTA
Namespaces se discuten en Namespaces in XML:1999.
Un perfil de lenguaje es una combinación de módulos. Los módulos son atómicos, es decir, no se pueden
subdividir cuando son incluidos en un perfil de lenguaje. Además, la especificación de un módulo puede incluir un
conjunto de requisitos para integración, con el cual los perfiles de lenguaje, que incluyen el módulo, deben ser
compatibles obligatoriamente.
NCL fue especificada de forma modular, permitiendo la combinación de sus módulos en perfiles de lenguaje.
Cada perfil puede agrupar un subconjunto de módulos NCL, permitiendo la creación de lenguajes orientados
hacia las necesidades específicas de los usuarios. Además, los módulos y perfiles NCL se pueden combinar con
módulos definidos en otros lenguajes, permitiendo la incorporación de características de la NCL en esos
lenguajes y viceversa.
Normalmente, hay un perfil de lenguaje que incorpora casi todos los módulos asociados a un único namespace.
Ése es el caso del perfil Lenguaje NCL.
Otros perfiles de lenguaje se pueden especificar como subconjuntos de un perfil mayor o incorporar una
combinación de módulos asociados a diferentes namespaces. Ejemplos del primer caso son los perfiles TVD
Básico (perfil BDTV) y TVD Avanzado (perfil EDTV) de la NCL.
Subconjuntos de los módulos del perfil Lenguaje NCL utilizados en la definición de los perfiles TVD Básico y TVD
Avanzado se definen para ajustar el lenguaje a las características del ambiente de radiodifusión de televisión, con
sus varios dispositivos de presentación: Aparato de televisión, dispositivos móviles etc.
NOTA
Un abordaje análogo también se encuentra en otros lenguajes (SMIL 2.1 Specification:2005 y XHTML 1.0:2002).
El principal alcance de la conformidad con perfiles de lenguaje es aumentar la interoperabilidad. Los módulos
obligatorios se definen de tal forma que cualquier documento, especificado de conformidad con un perfil de
lenguaje, da como resultado una presentación razonable cuando se presenta en un perfil distinto de aquél para el
cual fue especificado. El formateador de documentos, soportando el conjunto de módulos obligatorios, ignoraría
todos los otros elementos y atributos desconocidos.
NOTA
Renderizador de documentos, agente del usuario y exhibidor son otros nombres atribuidos al formateador de
documentos.
28
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
La versión NCL 3.0 revisa las funcionalidades contenidas en la NCL 2.3 (NCL Main 13 Profile:2005) y se divide en
15 áreas funcionales, que se dividen nuevamente en módulos. A partir de las 15 áreas funcionales, 14 se utilizan
para definir los perfiles TVD Avanzado y TVD Básico. Dos áreas funcionales tienen módulos con la misma
semántica definida por SMIL 2.0. Las 14 áreas funcionales utilizadas y sus módulos correspondientes son:
1)
Structure
Módulo Structure
2)
Layout
Módulo Layout
3)
Components
Módulo Media
Módulo Context
4)
Interfaces
Módulo MediaContentAnchor
Módulo CompositeNodeInterface
Módulo PropertyAnchor
Módulo SwitchInterface
5)
Presentation Specification
Módulo Descriptor
6)
Linking
Módulo Linking
7)
Connectors
Módulo ConnectorCommonPart
Módulo ConnectorAssessmentExpression
Módulo ConnectorCausalExpression
Módulo CausalConnector
Módulo CausalConnectorFunctionality
Módulo ConnectorBase
8)
Presentation Control
Módulo TestRule
Módulo TestRuleUse
Módulo ContentControl
Módulo DescriptorControl
9)
Timing
Módulo Timing
10)
Reuse
Módulo Import
© ABNT 2007 - Todos los derechos reservados
29
ABNT NBR 15606-2:2007
Módulo EntityReuse
Módulo ExtendedEntityReuse
11) Navigational Key
Módulo KeyNavigation
12) Animation
Módulo Animation
13)
Trasition Effects
Módulo TransitionBase
Módulo Trasition
14) Meta-Information
7.1.2
Identificadores para módulos y perfiles de lenguaje de la NCL 3.0
Se recomienda que cada perfil NCL declare explícitamente el URI del namespace que será usado para
identificarlo.
Documentos creados en perfiles de lenguaje que incluyen el módulo Structure de NCL pueden ser asociados con
el tipo MIME “application/x-ncl+xml”. Los documentos que utilizan el tipo MIME “application/x-ncl+xml” deben
obligatoriamente estar de conformidad con el lenguaje hospedero.
Los identificadores de namespace XML para el conjunto completo de módulos, elementos y atributos NCL 3.0
están contenidos en el siguiente namespace: http://www.ncl.org.br/NCL3.0/.
Cada módulo NCL posee un identificador único a él asociado. Los identificadores de los módulos NCL 3.0 deben
estar de acuerdo obligatoriamente con la Tabla 7.
Módulos también pueden ser identificados colectivamente. Las siguientes colecciones de módulos se definen:
 módulos utilizados por el perfil Lenguaje NCL 3.0: http://www.ncl.org.br/NCL3.0/LanguageProfile;
 módulos usados por perfil Conector Causal NCL 3.0: http://www.ncl.org.br/NCL3.0/CausalConnectorProfile;
 módulos utilizados por el perfil DTV Avanzado NCL 3.0: http://www.ncl.org.br/NCL3.0/EDTVProfile;
 módulos utilizados por el perfil DTV Básico NCL 3.0: http://www.ncl.org.br/NCL3.0/BDTVProfile.
30
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 7 — Identificadores de los módulos de NCL 3.0
Módulos
Identificadores
Animation
http://www.ncl.org.br/NCL3.0/Animation
CompositeNodeInterface
http://www.ncl.org.br/NCL3.0/CompositeNodeInterface
CausalConnector
http://www.ncl.org.br/NCL3.0/CausalConnector
CausalConnectorFunctionality
ConnectorCausalExpression
http://www.ncl.org.br/NCL3.0/CausalConnectorFunctionality
http://www.ncl.org.br/NCL3.0/ConnectorCausal Expression
ConnectorAssessmentExpression
http://www.ncl.org.br/NCL3.0/ConnectorAssessmentExpression
ConnectorBase
http://www.ncl.org.br/NCL3.0/ConnectorBase
ConnectorCommonPart
http://www.ncl.org.br/NCL3.0/ConnectorCommonPart
ContentControl
http://www.ncl.org.br/NCL3.0/ContentControl
Context
http://www.ncl.org.br/NCL3.0/Context
Descriptor
http://www.ncl.org.br/NCL3.0/Descriptor
DescriptorControl
http://www.ncl.org.br/NCL3.0/DescriptorControl
EntityReuse
http://www.ncl.org.br/NCL3.0/EntityReuse
ExtendedEntityReuse
http://www.ncl.org.br/NCL3.0/ExtendedEntityReuse
Import
http://www.ncl.org.br/NCL3.0/Import
Layout
http://www.ncl.org.br/NCL3.0/Layout
Linking
http://www.ncl.org.br/NCL3.0/Linking
Media
http://www.ncl.org.br/NCL3.0/Media
MediaContentAnchor
http://www.ncl.org.br/NCL3.0/MediaContentAnchor
KeyNavigation
http://www.ncl.org.br/NCL3.0/KeyNavigation
PropertyAnchor
http://www.ncl.org.br/NCL3.0/PropertyAnchor
Structure
http://www.ncl.org.br/NCL3.0/Structure
SwitchInterface
http://www.ncl.org.br/NCL3.0/SwitchInterface
TestRule
http://www.ncl.org.br/NCL3.0/TestRule
TestRuleUse
http://www.ncl.org.br/NCL3.0/TestRuleUse
Timing
http://www.ncl.org.br/NCL3.0/Timing
TransitionBase
http://www.ncl.org.br/NCL3.0/TransitionBase
Transition
http://www.ncl.org.br/NCL3.0/Transition
Metainformation
http://www.ncl.org.br/NCL3.0/MetaInformation
Tres módulos SMIL [SMIL 2.1 Specification, 2005] se usaron como base para la definición de los módulos NCL
Transition y Metainformation. Los identificadores de estos módulos SMIL 2.0 se presentan en la Tabla 8.
Tabla 8 — Identificadores de los módulos de SMIL 2.0
Módulos
BasicTransitions
TransitionModifiers
Metainformation
© ABNT 2007 - Todos los derechos reservados
Identificadores
http://www.w3.org/2001/SMIL20/BasicTransitions
http://www.w3.org/2001/SMIL20/TransitionModifiers
http://www.w3.org/2001/SM I L20/Metainformation
31
ABNT NBR 15606-2:2007
7.1.3
Informaciones sobre versiones de la NCL
Las siguientes instrucciones de procesamiento se deben incluir obligatoriamente en un documento NCL. Éstas
identifican documentos NCL que contengan sólo los elementos definidos en esta Norma, y la versión NCL con la
cual el documento está de acuerdo.
<?xml version="1.0" encoding="ISO-8859-1 "?>
<ncl id="qualquer string" xmlns="http://www.ncl.org.br/NCL3.0/profileName">
El atributo id del elemento <ncl> puede recibir cualquier cadena de caracteres como valor.
El número de versión de una especificación NCL consiste en un número principal y otro secundario, separados
por un punto. Los números son representados como una cadena de caracteres formada por números decimales,
en la cual los ceros a la izquierda se suprimen. El número de versión inicial del estándar es 3.0.
Nuevas versiones de la NCL deben ser obligatoriamente publicadas de acuerdo con la siguiente política de
versión:
 si los receptores compatibles con versiones más antiguas aún pueden recibir un documento con base en la
especificación revisada, con relación a correcciones de error o por motivos operativos, la nueva versión de la
NCL debe ser obligatoriamente publicada con el número secundario actualizado;
 si los receptores compatibles con versiones más antiguas no pueden recibir un documento basado en las
especificaciones revisadas, el número principal debe ser obligatoriamente actualizado.
Una versión específica está definida bajo el URI http://www.ncl.org.br/NCL3.0/profileName, en que el número de
la versión se escribe inmediatamente después de la sigla “NCL”.
El nombre del perfil (profileName) en el URI debe ser obligatoriamente EDTVProfile (Perfil TVD Avanzado) o
BDTVProfile (Perfil TVD Básico).
7.2 Módulos NCL
7.2.1
Observaciones generales
Las principales definiciones de cada uno de los módulos NCL 3.0 presentes en los perfiles NCL TVD Básico y
TVD Avanzado se proveen en 7.2.2 a 7.2.15.
La definición completa de los módulos NCL 3.0, utilizando XML Schema, se presenta en el Anexo A. Cualquier
ambigüedad encontrada en este texto puede ser aclarada por medio de la consulta a los esquemas XML.
Después de discutir cada módulo, una tabla se presenta para indicar los elementos del módulo y sus atributos.
Para un perfil determinado, los atributos y contenidos (elementos hijos) de los elementos se pueden definir en el
mismo módulo o en el perfil del lenguaje que agrupa los módulos.
Las tablas descritas en 7.2.2 a 7.2.15 muestran los atributos y contenidos que vienen del perfil NCL DTV
Avanzado, además de los definidos en los mismos módulos. Las tablas descritas en 7.3.3 muestran los atributos y
contenidos que vienen del perfil NCL TVD Básico, además de los definidos en los mismos módulos. Los atributos
de elementos que son obligatorios están subrayados. En las tablas, se emplean los siguientes símbolos: (?)
opcional (cero o una ocurrencia), (|) o, (*) cero o más ocurrencias, (+) una o más ocurrencias. El orden de los
elementos hijos no se especifica en las tablas.
32
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
7.2.2
Área funcional Structure
El área funcional Structure tiene un sólo módulo, llamado Structure, que define la estructura básica de un
documento NCL. Este área define el elemento raíz, denominado <ncl>, el elemento <head> y el elemento <body>,
siguiendo la terminología adoptada por otros estándares W3C. El elemento <body> de un documento NCL es
tratado como un nudo de contexto NCM (NCMCore:2005).
En el NCM, el modelo conceptual de datos de la NCL, un nudo puede ser un contexto, un switch o un objeto de
media. Todos los nudos NCM están representados por elementos NCL correspondientes. Los nudos de contexto,
conforme definido en 7.2.4, contienen otros nudos y eslabones NCM.
Los elementos <ncl> y <body> pueden definir un atributo iD. El atributo iD identifica en forma unívoca un
elemento dentro de un documento. Su valor es un identificador XML.
El atributo title de <ncl> ofrece información adicional sobre el elemento. Los valores del atributo title pueden ser
utilizados por agentes de usuarios de varias formas.
El atributo xmlns declara un namespace XML, es decir, declara la colección primaria de construcciones XML
utilizada por el documento. El valor del atributo es el URL (Uniform Resource Locator), que identifica donde el
namespace está oficialmente definido. Tres valores se permiten para el atributo xmlns:
http://www.ncl.org.br/NCL3.0/EDTVProfile y http://www.ncl.org.br/NCL3.0/BDTVProfile, para los perfiles TVD
Avanzado y Básico, respectivamente, y http://www.ncl.org.br/NCL3.0/CausalConnectorProfile, para el perfil
Conector Causal. Un formateador NCL debe obligatoriamente saber que la localización de los esquemas para
tales namespaces es, por default, respectivamente:
http://www.ncl.org.br/NCL3.0/profiles/NCL30EDTV.xsd,
http://www.ncl.org.br/NCL3.0/profiles/NCL30BDTV.xsd, y
http://www.ncl.org.br/NCL3.0/profiles/NCL30CausalConnector.xsd
Los elementos hijos de <head> y <body> se definen en otros módulos NCL. Es altamente recomendable que los
elementos hijos de <head> se declaren en el orden siguiente: importedDocumentBase?, ruleBase?,
transitionBase?, regionBase*, descriptorBase?, connectorBase?, meta*, metadata*.
Los elementos de este módulo, sus elementos hijos y sus atributos deben estar de acuerdo obligatoriamente con
la Tabla 9.
Tabla 9 — Módulo Structure extendido
Elementos
ncl
Atributos
id, title, xmlns
7.2.3
(head?, body?)
(importedDocumentBase?, ruleBase?, transitionBase?,
regionBase*, descriptorBase?, connectorBase?, meta*,
metadata*)
head
body
Contenido
id
(port| property| media| context| switch| link| meta| metadata)*
Área funcional Layout
El área funcional Layout tiene un único módulo, denominado Layout, el cual especifica elementos y atributos que
definen cómo los objetos serán inicialmente presentados dentro de regiones de dispositivos de salida. De hecho,
este módulo define valores iniciales para propiedades NCL homónimas definidas en los elementos <media>,
<body> y <context> (ver 7.2.4).
Un elemento <regionBase>, que se debe declarar obligatoriamente en el elemento <head> del documento NCL,
define un conjunto de elementos <region>, cada cual pudiendo contener otro conjunto de elementos <region>
anidados, y así sucesivamente, en forma reiterativa.
© ABNT 2007 - Todos los derechos reservados
33
ABNT NBR 15606-2:2007
El elemento <regionBase> puede tener un atributo id. Elementos <region> deben tener obligatoriamente un
atributo id. Como esperado, el atributo id identifica en forma unívoca un elemento dentro de un documento.
Cada elemento <regionBase> está asociado a una clase de dispositivos donde ocurrirá la presentación. Para
identificar la asociación, el elemento <regionBase> define el atributo device, que puede tener los valores:
“systemScreen (i)” o “systemAudio(i)”. La clase elegida define las variables globales del ambiente:
SystemScreenSize(i), systemScreenGraphicSize(i) y systemAudioType(i), como definido en la Tabla 12 (ver 7.2.4).
Cuando no se especifica el atributo, la presentación debe hacerse obligatoriamente en el mismo dispositivo que
ejecuta el formateador NCL.
NOTA 1 Existen dos tipos diferentes de clases de dispositivos: activa y pasiva. En una clase activa, un dispositivo es capaz
de ejecutar las funciones de exhibidores de media. De un dispositivo de exhibición que se registra en una clase del tipo
“pasiva” no se exige la capacidad de ejecutar las funciones de exhibidores de media. Éste sólo debe ser capaz de presentar el
mapa de memoria de video que le es pasado y exhibir las muestras de audio pasada por otro dispositivo. En el SBTVD,
systemScreen (1) y systemAudio (1) se reservan para clases del tipo pasiva; systemScreen (2) y systemAudio (2) se reservan
para las clases del tipo activa.
NOTA 2 El elemento <regionBase> que define una clase pasiva también puede tener un atributo region. Este atributo usado
para identificar un elemento <region> en otra <regionBase> asociada a una clase activa donde está registrado el dispositivo
que genera el mapa de memoria de video enviado para los dispositivos de la clase pasiva; en la región especificada, el mapa
de memoria también debe ser exhibido.
Se recomienda que la interpretación del anidado de las regiones dentro de un <regionBase> sea realizada por el
software responsable por la orquestación de la presentación del documento (es decir, el formateador N CL). Para
los efectos de esta Norma, un primer nivel de anidado debe ser interpretado obligatoriamente como si fuese el
área del dispositivo donde ocurrirá la presentación; el segundo nivel como ventanas (por ejemplo, áreas de
presentación en la pantalla) del área-padre; y los otros niveles como regiones dentro de esas ventanas.
Una <region> también puede definir los siguientes atributos: title, left, right, top, bottom, height, width e zIndex.
Todos esos atributos poseen el significado usual W3C.
La posición de una región, conforme es especificada por sus atributos top, bottom, left y right, es siempre relativa
a la geometría-padre, que es definida por el elemento <region> padre o por el área total del dispositivo, en el caso
de las regiones en el primer nivel de anidado. Los valores de los atributos pueden ser valores porcentuales
no negativos, o unidades de pixels. Para valores en pixels, el autor puede omitir el calificador de unidad “px”
(por ejemplo, “100”). Para valores porcentuales, por otro lado, el símbolo “%” debe ser indicado obligatoriamente
(por ejemplo, “50%”). El porcentaje es siempre relativo al ancho del padre, en el caso de las definiciones de
los atributos right, left and width, y a la altura del padre, para las definiciones de los atributos bottom, top y height.
Los atributos top y left son los atributos primarios de posicionamiento de la región. Posicionan el canto superior
izquierdo de la región en la distancia especificada del margen superior izquierdo de la región-padre (o margen
superior izquierdo del dispositivo, en el caso de la región en el primer nivel de anidado). Algunas veces, puede ser
útil ajustar explícitamente los atributos bottom y right. Sus valores establecen la distancia entre el ángulo inferior
derecho de la región y el ángulo inferior derecho de la región-padre (o el margen inferior derecho del dispositivo,
en el caso de la región en el primer nivel de anidado) (ver Figura 2).
left
width
right
top
height
bottom
region
parent region
Figura 2 — Atributos de posicionamiento de la región
34
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Con relación a los tamaños de la región, cuando se especifican declarando los atributos width y height usando la
anotación "%", el tamaño de la región es relativo al tamaño de la geometría de su padre, como mencionado
anteriormente. Los tamaños declarados como valores absolutos en pixels mantienen tales valores absolutos. El
tamaño intrínseco de una región es igual al tamaño de la geometría lógica del padre. Eso significa que, si una
región anidada no especifica cualquier posicionamiento o valores de tamaño, debe ser obligatoriamente asumido
que tiene la misma posición y valores de tamaño que su región-padre. En particular, cuando una región de primer
nivel no especifica cualquier posicionamiento o valores de tamaño, debe ser obligatoriamente asumida como
teniendo toda el área de presentación del dispositivo.
Cuando el usuario especifica informaciones sobre top, bottom y height para una misma <region>, pueden ocurrir
inconsistencias espaciales. En este caso, los valores de top y height deben obligatoriamente preceder el valor de
bottom. De forma análoga, cuando el usuario especifica valores inconsistentes para los atributos left, right y width
de la <region>, los valores de left y width se deben utilizar obligatoriamente para calcular un nuevo valor de right.
Cuando cualquiera de esos atributos no se especifica y no puede tener su valor calculado desde otros atributos,
ese valor debe ser obligatoriamente heredado del valor correspondiente definido en el padre de esa <region>.
Otra restricción es que las regiones-hijas no pueden quedar fuera del área establecida por sus regiones-padres.
El atributo zIndex especifica la precedencia de superposición de la región. Regiones con mayores valores de
zIndex deben ser obligatoriamente apiladas en la parte superior de regiones con valores de zIndex menores.
Si dos presentaciones generadas por los elementos A y B tienen el mismo nivel de apilado, en el caso que la
exhibición de un elemento B empiece después de la exhibición de un elemento A, la presentación de B debe ser
obligatoriamente apilada en la parte superior de la presentación de A (orden temporal); por otro lado, si la
exhibición de los elementos empieza al mismo tiempo, el orden apilado es elegido arbitrariamente por el
formateador. Cuando omitido, el valor default del zIndex es igual a 0 (cero).
El módulo Layout también define el atributo region, que es utilizado por un elemento <descriptor> (ver 7.2.6) para
referirse a un elemento <region> de Layout.
Los elementos de este módulo, sus elementos-hijos y sus atributos deben estar de acuerdo obligatoriamente con
la Tabla 10.
Tabla 10 — Módulo Layout extendido
Elementos
7.2.4
Atributos
Contenido
regionBase
id, device, region
(importBase|region)+
region
id, title, left, right, top, bottom, height, width, zIndex
(region)*
Área funcional Components
El área funcional Components se divide en dos módulos, denominados Media y Context.
El módulo Medía define los tipos básicos de objetos de media. Para definir objetos de media, este módulo define
el elemento <media>. Cada objeto de media tiene dos atributos principales, además del atributo id: src, que define
un URI del contenido del objeto, y type, que define el tipo de objeto.
Los URI (Uniform Resource Identifier) deben estar de acuerdo obligatoriamente con la Tabla 11.
© ABNT 2007 - Todos los derechos reservados
35
ABNT NBR 15606-2:2007
Tabla 11 — URI permitidos
Esquema
Parte específica del esquema
Uso
file:
///file_path/#fragment_identifier
Para archivos locales
http:
//server_identifier/file_path/#fragment_identifier
Para archivos remotos buscados por
el canal de interactividad usando el
protocolo http
https:
//server_identifier/file_path/#fragment_identifier
Para archivos remotos buscados por
el canal de interactividad usando el
protocolo https
rstp:
//server_identifier/file_path/#fragment_identifier
Para flujos (streams) logrados por el
canal de interactividad usando el
protocolo rstp
rtp:
//server_identifier/file_path/#fragment_identifier
Para flujos (streams) logrados por el
canal de interactividad usando el
protocolo rtp
Ncl-mirror: //media_element_identifier
Para un flujo de contenido idéntico a
uno que esté en presentación por
otro elemento de media
sbtvd-ts:
Para flujos elementales recibidos
por el flujo de transporte (TS)
//program_number.component_tag
Un URI absoluto contiene todas las informaciones necesarias para localizar su recurso. Los URI relativos también
son permitidos. URI relativos son direcciones incompletas que se aplican a una URI base para completar la
localización. Las partes omitidas son el esquema URI, el servidor y, también, en algunos casos, parte del camino
del URI.
El beneficio principal de utilizar URI relativas es la posibilidad de mover o copiar hacia otros locales los
documentos y directorios contenidos en el URI, sin exigir el cambio de los valores de los atributos URI dentro de
los documentos. Eso es especialmente interesante cuando se transportan documentos del servidor (normalmente
radiodifusores) hacia los receptores. Los caminos relativos del URI son típicamente utilizados como un medio
rápido de localización de archivos de media almacenados en el mismo directorio del documento NCL actual, o en
un directorio próximo a él. Frecuentemente consisten sólo en el nombre del archivo (opcionalmente con un
identificador de fragmento dentro del archivo). También pueden tener un camino relativo de directorio antes del
nombre del archivo.
Conviene matizar que las referencias para los recursos de flujos de video o audio, obligatoriamente, no deben
causar la ocurrencia de sintonización (tuning). Lar referencias que implican sintonización para acceder a un
recurso deben obligatoriamente portarse como si el recurso estuviese indisponible.
Los valores permitidos para el atributo type dependen del perfil NCL y deben seguir obligatoriamente el formato
MIME Media Types (o, simplemente, mimetypes). Un mimetype es una cadena de caracteres que define la clase
de media (audio, video, imagen, texto, aplicación) y un tipo de codificación de media (como jpeg, mpeg etc.). Los
mimetypes pueden ser registrados o informales. Los mimetypes registrados son controlados por la IANA (Internet
Assigned Numbers Authority). Los mimetypes informales no son registrados por la IANA, pero se definen
pactadamente; normalmente tienen una “x-“ antes del nombre del tipo de media.
Se definen cinco tipos especiales: application/x-ginga-NCL; application/x-ginga-NCLua, application/x-ginga-NCLet,
application/x-ginga-settings y application/x-ginga-time.
El tipo application/x-ginga-NC debe ser obligatoriamente aplicado a elementos <media> con código NCL (así, una
aplicación NCL puede ser embutida en otra aplicación NCL). El tipo application/x-ginga-NCLua debe ser
obligatoriamente aplicado a elementos <media> con código procedural Lua como contenido (ver Sección 10).
El tipo application/x-ginga-NCLet debe ser obligatoriamente aplicado a elementos <media> con código procedural
Xlet como contenido (ver Sección 11).
36
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
El tipo application/x-ginga-settings debe ser obligatoriamente aplicado a un elemento <media> especial (puede
existir solamente uno en un documento NCL) cuyas propiedades son variables globales definidas por el autor del
documento o variables de ambiente reservadas, que pueden ser manejadas por el procesamiento del documento
NCL. La Tabla 12 establece las variables ya definidas y su semántica.
Tabla 12 — Variables de ambiente
Grupo
system


grupo de variables
mantenidas por el sistema
receptor;
se pueden leer, pero no
pueden tener sus valores
alterados por una
aplicación NCL, un
procedimiento Lua o un
procedimiento Xlet;

programas nativos en el
receptor pueden alterar los
valores de las variables;

persisten durante todo el
tiempo de vida de un
receptor
Variable
Semántica
Valores posibles
system.language
Lenguaje de audio
system.caption
Lenguaje de caption
ISO 639-1 code
ISO 639-1
system.subtitle
Lenguaje de leyenda
ISO 639-1
system.returnBitRate(i)
Tasa de bits del canal de interactividad
real
(i) en Kbps
system.screenSize
Tamaño de la pantalla del dispositivo
de exhibición, en (líneas, pixels/línea),
cuando una clase no es definida
(entero, entero)
system.screenGraphicSize
Resolución configurada para el plano
gráfico de la pantalla del dispositivo de
exhibición, en (líneas, pixels/línea),
cuando una clase no es definida
(entero, entero)
system.audioType
Tipo
de
audio
del
dispositivo
exhibición, cuando una clase no es “mono” | “stereo” | “5.1”
definida
system.screenSize (i)
Tamaño de la pantalla de la clase (i)
de dispositivos de exhibición, en (entero, entero)
(líneas, pixels/línea)
system.screenGraphicSize (i)
Resolución configurada para el plano
gráfico de la pantalla de la clase (i) de
(entero, entero)
dispositivos de exhibición, en (líneas,
pixels/línea)
system.audioType(i)
Tipo de audio de la clase (i) de
“mono” | “stereo” | “5,1”
dispositivos de exhibición
system.devNumber(i)
Número de dispositivos de exhibición
entero
registrados en la clase (i)
system.classType(i)
Tipo de la clase (i)
system.info(i)
Lista de exhibidores de media de la
string
clase (i) de dispositivos de exhibición
system.classNumber
Número de clases de dispositivos de
entero
exhibición definidas
system.CPU
Desempeño de la CPU en MIPS
real
system.memory
Espacio de la memoria en Mbytes
entero
system.operatingSystem
Tipo de sistema operativo
string a ser definida
system.javaConfiguration
Tipo y versión de la configuración
soportada por la JVM del receptor
system.javaProfile
Tipo y versión del perfil soportado por
la JVM del receptor
system.luaVersion
Versión de la máquina Lua del
receptor
system.xxx
Cualquier variable prefijada por
“system” debe ser obligatoriamente
reservada para uso futuro
(“passive” | “ative”)
string
© ABNT 2007 - Todos los derechos reservados
(tipo seguido de la versión,
sin espacio, por ejemplo:
“CLDC1.1”)
string
(tipo seguido de la versión,
“
sin espacio – ej.: MIDP2.0”
string
37
ABNT NBR 15606-2:2007
Tabla 12 (continuación)
Grupo
user

grupo de variables mantenidas por
el sistema receptor;

se pueden leer, pero no pueden
tener sus valores alterados por una
aplicación NCL, un procedimiento
Lua o un procedimiento Xlet;

programas nativos en el receptor
pueden alterar los valores de las
variables;

persisten durante todo el tiempo de
vida de un receptor
Variable
Edad del usuario
entero
user.location
Localización del usuario (CEP)
string
user.genre
Género del usuario
“m”| “f”
user.xxx
Cualquier variable prefijada por
“user” debe ser obligatoriamente
reservada para uso futuro
default.focusBorderColor
Color default aplicado al margen
de un elemento en foco
“white” | “black” | “silver” |
“gray” | “red” | “maroon” |
“fuchsia” | “purple” | “lime”
| “green” | “yellow” | “olive”
|“blue” |“navy” |“aqua”
|“teal”
default.selBorderColor
Color default aplicado al margen
de un elemento en foco cuando es
activado
“White” | “black” | “silver” |
“gray” | “red” | “maroon” |
“fuchsia” | “purple” | “lime”
| “green” | “yellow” | “olive”
| “blue” | “navy” | “aqua”
|“teal”
Ancho default (en pixels) aplicado
al margen de un elemento en foco
entero
Transparencia default aplicada al
borde de un elemento en foco
valor real entre 0 y 1, o
valor real en la banda
[0,100] terminando con el
carácter “%” (por ejemplo,
30 %), con “1”, ó “100 %”
significando máxima
transparencia y “0”, ó
“0 %” significando
ninguna transparencia

grupo de variables mantenidas por
el sistema receptor;

se pueden leer y tener sus valores
alterados por una aplicación NCL o
por un procedimiento Lua o Xlet;
default.focusBorderWidth

programas nativos en el receptor
pueden alterar los valores de las
variables;
persisten durante todo el tiempo de
default.focusBorderTrans
vida de un receptor, sin embargo,
vuelven a su valor inicial al cambiar parency
de canal
default.xxx
Cualquier variable prefijada por
“default” debe obligatoriamente ser
reservada para uso futuro
service.currentFocus
Valor del atributo focusIndex del
elemento <media> en foco
service


grupo de variables mantenidas por
el formateador NCL;
se pueden leer y, en general, tener
sus valores alterados por una
aplicación NCL del mismo servicio;

se pueden leer, pero no pueden
tener sus valores alterados por un
programa Lua o Xlet del mismo
servicio; la escritura debe hacerse a
través de comandos NCL;

persisten, como mínimo, durante
todo el tiempo de duración de un
servicio
38
Valores posibles
user.age
default

Semántica
Identificador (id) del elemento
<media> que detenta el control de
las claves de navegación; si el
service.currentKeyMaster
elemento no está siendo
presentado o no está pausado, el
control es del formateador
service.xxx
entero
string
Cualquier variable prefijada por
“service” debe obligatoriamente
seguir las reglas especificadas
para el grupo
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 12 (continuación)
Grupo
Variable
Semántica
Valores posibles
Número de servicios disponibles, en el
país, para el canal sintonizado.
si.numberOfServices
NOTA Es recomendable que el valor de
esta variable se obtenga a partir del
número de tablas PMT encontradas en
la tabla PAT del flujo de transporte
recibido por el canal sintonizado
(conforme norma ISO/IEC 138-181:2007). En el cálculo del valor de esta entero
variable, es recomendable que sólo se
consideren las tablas cuyo campo
country_code, disponible en el
descriptor
country_avaliability_descriptor (Sección
8.3.6 de la norma ABNT NBR 156032:2007) relativo a la tabla, corresponda
al contenido de la variable de ambiente
user.location
Número de servicios disponibles, en el
país, para el canal sintonizado.
si

grupo de variables mantenidas
por el middleware;

se pueden leer pero no pueden
tener sus valores alterados por
una aplicación NCL, un
procedimiento Lua o un
procedimiento Xlet;

si.numberOfPartialServices
persisten, como mínimo,
durante todo el tiempo de
sintonía de un canal
NOTA Es recomendable que el valor de
esta variable se obtenga a partir del
número de tablas PMT encontradas en
la tabla PAT del flujo de transporte
recibido por el canal sintonizado
(conforme norma ISO/IEC 138-181:2007). En el cálculo del valor de esta
variable, es recomendable que sólo se
consideren las tablas PMT cuyo campo entero
country_code, disponible en el
descriptor
country_availability_descriptor (Sección
8.3.6 de la ABNT NBR 15603-2:2007)
corresponda al contenido de la variable
de ambiente user.location y también
cuyos campos program_number de las
tablas correspondan a los campos
service_id de los
partial_reception_descriptor relativos a
las tablas NIT
Número del canal sintonizado.
si.channeNumber
si.xxx
© ABNT 2007 - Todos los derechos reservados
NOTA El valor de esta variable debe
obtenerse obligatoriamente a través del
campo remote_control_key-id del
descriptor ts_information_descriptor
entero
(Sección 8.3.42 de la norma ABNT NBR
15603-2:2007) de la tabla NIT (Sección
7.2.4 de la norma ABNT NBR156032:2007) que describe el servicio
corriente
Cualquier variable prefijada por “si”
debe obligatoriamente seguir las reglas
especificadas para el grupo
39
ABNT NBR 15606-2:2007
Tabla 12 (continuación)
Grupo
channel

grupo de variables mantenidas
por el formateador NCL;

se pueden leer y tener sus
valores alterados por una
aplicación NCL del mismo
canal;


pueden ser leídas pero no
pueden tener sus valores
alterados por una aplicación
NCL del mismo canal;
Variable
Semántica
channel.keyCapture
Requisición de teclas numéricas por
aplicaciones NCL
cannel.virtualKeyboard
Requisición del teclado virtual por
aplicaciones NCL
cannel.keyboardBounds
Región de exhibición del teclado virtual
(left, top, width, height
channel.xxx
Cualquier variable prefijada por
“channel” debe obligatoriamente seguir
las reglas especificadas para el grupo
persisten, por lo menos,
durante todo el tiempo de
sintonía de un canal
Valores posibles
(true | false)
(entero, entero,
entero, entero)
shared
 grupo de variables mantenidas
por el formateador NCL;
 se pueden leer y tener sus
valores alterados por un
programa NCL;
 pueden ser leídas pero no
pueden tener sus valores
alterados por un programa Lua o
Xlet; se debe escribir a través
de comandos NCL;
shared.xxx
Cualquier variable prefijada por
“shared” debe obligatoriamente seguir
las reglas especificadas para el grupo
El tipo application/x-ginga-time debe ser obligatoriamente aplicado a un elemento <media> especial (puede existir
solamente uno en un documento NCL) cuyo contenido es el Universal Time Coordinated (UTC). Cualquier
elemento <media> continuo sin fuente se puede utilizar para definir un reloj, relativo al tiempo de inicio de ese
elemento <media>.
NOTA
El contenido de un elemento <media> del tipo application/x-ginga-time se especifica con la siguiente sintaxis:
Año”:”Mes”:”Día”:”Hora”:”Minutos”:”Segundos”.”Fracción, donde Año es un entero; Mes es un entero en el intervalo [1, 12]; Día
es un entero en el intervalo [1, 31]; Hora es un entero en el intervalo [1, 23]; Minutos es un entero en el intervalo [0, 59];
Segundos es un entero en el intervalo [0, 59]; y Fracción es un entero positivo.
La Tabla 13 muestra algunos valores posibles del atributo type para los perfiles TVD Avanzado y Básico y las
extensiones de archivos asociadas. Los tipos obligatorios se definen en la ABNT NBR 15601. El atributo type es
opcional (excepto para los elementos <media> sin atributo src definido) y se recomienda su uso para guiar la
elección del exhibidor de media (herramienta de presentación) por el formateador. Cuando el atributo type no se
especifica, se recomienda que el formateador use la extensión del contenido especificado en el atributo src para
hacer la elección del exhibidor.
Cuando hay más de un exhibidor para el tipo soportado por el formateador, el elemento <descriptor> puede
especificar cuál será utilizado para la presentación. En caso contrario, el formateador debe utilizar
obligatoriamente un exhibidor default para ese tipo de media.
40
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 13 — Tipos de media MIME para formateadores Ginga-NCL
Tipo de media
Extensión de archivo
text/html
htm, html
text/plain
txt
text/css
css
text/xml
xml
image/bmp
bmp
image/png
png
image/gif
gif
image/jpeg
jpg, jpeg
audio/basic
wav
audio/mp3
mp3
audio/mp2
mp2
audio/mpeg
mpeg, mpg
audio/mpeg4
mp4, mpg4
video/mpeg
mpeg, mpg
application/x-ginga-NCL
ncl
application/x-ginga-NCLua
application/x-ginga-NCLet
lua
class, jar
application/x-ginga-settings
no src (source)
application/x-ginga-time
no src (source)
El módulo Context es responsable por la definición de nudos de contexto a través de elementos <context>. Un
nudo de contexto NCM es un tipo particular de nudo de composición NCM y se define conteniendo un conjunto de
nudos y un conjunto de eslabones. Como normalmente ocurre, el atributo id identifica en forma unívoca cada
elemento <context> y <media> dentro de un documento.
Los atributos Instance, refer y descriptor son extensiones definidas en otros módulos y son discutidos en la
definición de tales módulos.
NOTA
Los elementos <media> del tipo application/x-ginga-NCL no pueden tener los atributos instance y refer. Es
recomendable que tampoco tengan elementos hijo.
Los elementos de los dos módulos de la funcionalidad Components, sus elementos-hijos y sus atributos deben
estar de acuerdo obligatoriamente con las Tablas 14 y 15.
Tabla 14 — Módulo Media extendido
Elements
media
Attributes
id, src, refer,
instance, type,
descriptor
Content
(area|property)*
Tabla 15 — Módulo Context extendido
Elements
context
Attributes
id, refer
© ABNT 2007 - Todos los derechos reservados
Content
(port|property|media|context|link|switch|meta|metadata)*
41
ABNT NBR 15606-2:2007
7.2.5
Área funcional Interfaces
El área funcional Interfaces permite la definición de interfaces de nudos (objetos de media o nudos de
composición) que serán utilizadas en relaciones con otras interfaces de nudos. Este área funcional se divide en
cuatro módulos:
 MediaContentAnchor, que permite definiciones de anclas de contenido (o área) para nudos de media
(elementos <media>);
 CompositeNodeInterface, que permite definiciones de puertos para nudos de composición (elementos
<context> y <switch>);
 PropertyAnchor, que permite la definición de propiedades de nudos como interfaces de nudos; y
 SwitchInterface, que permite la definición de interfaces especiales para elementos <switch>.
El módulo MediaContentAnchor define el elemento <area>, que extiende la sintaxis y semántica del elemento
homónimo definido por SMIL y XHTML. Así, permite la definición de anclas de contenido que representan
porciones espaciales, a través de atributo coords (como en XHTML); la definición de anclas de contenido que
representan porciones temporales, a través de los atributos begin y end; y la definición de anclas de contenido
que representan porciones espacio-temporales a través de los atributos coords, begin y end (como en SMIL).
Además de ello, el elemento <area> permite la definición de anclas textuales, a través de los atributos text y
position, que definen una cadena de caracteres y la ocurrencia de esa cadena en el texto, respectivamente.
Adicionalmente, el elemento <area> también puede definir un ancla de contenido con base en el número de
muestras de audio o frames de video, a través de los atributos first y last, que deben obligatoriamente indicar
la muestra/frame inicial y final. Finalmente, el elemento <area> también puede definir un ancla de contenido con
base en el atributo label, que especifica una cadena de caracteres que debe ser utilizada por el exhibidor
de media para identificar una región de contenido.
NOTA
Los atributos first y last se especifican de acuerdo con una de las siguientes sintaxis:
a)
muestras”s”, donde Muestras es un entero positivo;
b)
cuadros”f”, donde Cuadros es un entero positivo;
c)
NPT”npt”, donde NPT es el valor tiempo normal de exhibición (Normal Play Time value).
Si se define el atributo begin, pero no se especifica el atributo end, el final de toda presentación del contenido de
media debe ser obligatoriamente considerado como cierre del ancla. Por otro lado, si el atributo end se define sin
una definición explícita de begin, el inicio de toda la presentación del contenido de media debe ser
obligatoriamente considerado como el inicio del ancla. Un comportamiento semejante se espera con relación a los
atributos first y last. En el caso de un elemento <media> del tipo application/x-ginga-time, los atributos begin y end
deben obligatoriamente ser siempre especificados y corresponden a un tiempo absoluto del Universal Tim
Coordinated (UTC).
NOTA 1 Con excepción del elemento <media> del tipo application/x-ginga-time, los atributos begin y end deben especificarse
obligatoriamente con una de las siguientes sintaxis:
a)
Horas”:”Minutos”:”Segundos”.”Fracción, donde Horas es un entero en el intervalo[0,23]; Minutos es un entero en el
itervalo [0,59]; Segundos es un entero en el intervalo [0,59] y fracción es un entero posivo
b)
Segundos”s”, donde Segundos es un entero positivo.
NOTA 2 Para el elemento <media> del tipo application/x-ginga-time, los atributos begin y end deben especificarse
obligatoriamente con la siguiente sintaxis: Año”:”Mes”:”Día”:”Hora”:”Minutos”:”Segundos”.”Fracción, de acuerdo con la zona del
tiempo del país. El Formateador NCL es responsable de traducir ese valor para un valor correspondiente de UTC.
42
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Como normalmente ocurre, los elementos <area> deben tener obligatoriamente un atributo id, que identifica en
forma unívoca el elemento dentro de un documento.
El elemento <area> y sus atributos deben estar de acuerdo obligatoriamente con la Tabla 16.
Tabla 16 — Módulo MediaContentAnchor extendido
Elementos
Atributos
id, coords, begin, end, text, position, first, last,
label
area
Contenido
vacío
El módulo CompositeNodeInterface define el elemento <port>, que especifica un puerto de un nudo de
composición con su respectivo mapeo para una interfaz (atributo interfaz) de uno de sus componentes
(especificado por el atributo component).
En el NCM, todo nudo (media o contexto) debe poseer obligatoriamente un ancla con una región que representa
el contenido total del nudo. Ese ancla es denominada ancla de contenido total y se declara por omisión (default)
en NCL. Cada vez que un componente NCL es referido sin especificar una de sus anclas, se debe asumir
obligatoriamente el ancla de contenido total.
El elemento <port> y sus atributos deben estar de acuerdo obligatoriamente con la Tabla 17.
Tabla 17 — Módulo CompositeNodeInterface extendido
Elementos
port
Atributos
id, component, interface
Contenido
vacío
El módulo PropertyAnchor define un elemento denominado <property>, que se puede utilizar para definir una
propiedad o grupo de propiedades de un nudo, como una de sus interfaces (ancla). El elemento <property> define
el atributo name, que indica el nombre de la propiedad o grupo de propiedades, y el atributo value, atributo
opcional que define un valor inicial para la propiedad name. El elemento padre no puede tener elementos
<property> con los mismos valores para el atributo name.
Es posible tener exhibidores de documentos NCL (formateadores) que definen algunas propiedades de nudos e
interfaces de nudos, implícitamente. Sin embargo, por lo general, es de buena práctica definir explícitamente las
interfaces. Así, todas las interfaces deben ser obligatoriamente explícitamente definidas.
Los elementos <body>, <context> y <media> pueden tener varias propiedades embutidas. Ejemplos de esas
propiedades pueden encontrarse entre las que definen el local en que se situará el objeto de media durante una
presentación, la duración de la presentación y otras que definen características adicionales de la presentación:
top, left, bottom, right, width, height,plan, explicitDur, background, transparency, visible, fit, scroll, style,
soundLevel, balanceLevel, trebleLevel, bassLevel, fontColor, fontFamily, font Style, fontSize, fontVariant, font
Weight, reusePlayer, playerLife etc. Tales propiedades asumen como sus valores iniciales los definidos en
atributos homónimos del descriptor y región asociada al nudo (ver 7.2.3 y 7.2.6). Algunas propiedades tienen su
valor definido por el propio sistema, como la propiedad contentId asociada a un objeto de media continua cuyo
contenido se refiere a un flujo elemental, que inicialmente tiene el valor nulo, pero en cuanto el objeto es iniciado
asume el valor del identificador (contenido en el campo también llamado contentId) transportado en el descriptor
de referencia NPT. Otro ejemplo es la propiedad standby que debe obligatoriamente asumir el valor “true”
mientras un objeto de media continua ya iniciado, cuyo contenido se refiere a un flujo elemental, esté con su flujo
temporalmente interrumpido por otro contenido entrelazado en el mismo flujo elemental. Sin embargo, en
cualquier caso, cuando una propiedad incorporada se utiliza en una relación, debe ser obligatoriamente declarada
explícitamente como elemento <property> (interfaz).
© ABNT 2007 - Todos los derechos reservados
43
ABNT NBR 15606-2:2007
NOTA 1
A la propiedad de standby se le puede atribuir el valor “true” cuando el valor del identificador transportado en el
NPT reference descriptor (en el campo contentId) señalizado como “no pausado” sea diferente del valor de la propiedad
contentId del mismo objeto.
NOTA 2
La propiedad visible también puede ser asociada a un elemento <context> y <body>. En esos casos, cuando la
propiedad tiene su valor igual a “true”, vale la especificación de visible de cada nudo hijo. Cuando tiene su valor igual a “false”,
todos los elementos de la composición son exhibidos de forma invisible. Particularmente, cuando un documento tiene su
elemento <body> con la propiedad visible = “false” y su evento de presentación en estado= “paused”, se dice que la aplicación
está en “espera” (stand-by). Cuando una aplicación entra en stand-by, el video principal del servicio vuelve a ocupar el 100%
de la dimensión de la pantalla en la que es exhibido y el audio principal al 100% de su volumen.
Un grupo de propiedades del nudo también puede ser explícitamente declarado como un elemento único
<property> (interfaz), permitiendo que los autores especifiquen el valor de varias propiedades con una propiedad
única. Los siguientes grupos deben ser reconocidos obligatoriamente por un formateador NCL: location, grouping
(left, top), en ese orden; size, grouping (width, height), en ese orden; y bounds, grouping (left, top, width, height),
en ese orden.
Cuando un formateador trata una alteración en un grupo de propiedad, debe obligatoriamente probar sólo la
consistencia del proceso al final. Las palabras top, left, bottom, right, width, height, explicitDur, background,
transparency, visible, fit, scroll, style, soundLevel, balanceLevel, trebleLevel, bassLevel, fontColor, fontFamily,
fontStyle, fontSize, fontVariant, font Weight, reusePlayer, playerLife, location, size y bounds son palabras
reservadas para valores del mismo atributo name del elemento <property>.
El elemento <property> y sus atributos deben estar de acuerdo obligatoriamente con la Tabla 18.
Tabla 18 — Módulo PropertyAnchor extendido
Elementos
property
Atributos
name, value
Contenido
vacío
El módulo SwitchInterface permite la creación de interfaces de elemento <switch> (ver 7.2.4), que se pueden
mapear a un conjunto de interfaces alternativas de nudos internos, permitiendo a un eslabón anclar en el
componente elegido cuando el <switch> es procesado (NCM Core:2005). Ese módulo introduce el elemento
<switchPort>, que contiene un conjunto de elementos de mapeo. Un elemento de mapeo define un camino desde
el <switchPort> para una interfaz (atributo interfaz) de uno de los componentes del <switch> (especificados por su
atributo component).
Es importante mencionar que cada elemento que representa una interfaz de objeto (<area>, <port>, <property> y
<switchPort>) debe tener obligatoriamente un identificador (atributo id).
O elemento <switchPort>, sus elementos-hijos y sus atributos deben estar de acuerdo obligatoriamente con la
Tabla 19.
44
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 19 — Módulo SwitchInterface extendido
Elementos
7.2.6
Atributos
Contenido
switchPort
id
mapping+
mapping
component, interface
vacío
Área funcional Presentation Specification
El área funcional Presentation Specification tiene un único módulo denominado Descriptor. El alcance de ese
módulo es especificar informaciones espacio-temporales necesarias para la presentación de cada componente
del documento. Esas informaciones son modeladas por los objetos descriptores.
El módulo Descriptor permite la definición de elementos <descriptor>, que contienen un conjunto de atributos
opcionales, agrupando todas las definiciones espacio-temporales que se deben usar de acuerdo con el tipo de
objeto a ser presentado. La definición de elementos <descriptor> se debe incluir obligatoriamente en el
encabezamiento del documento, dentro del elemento <descriptorBase>, que especifica el conjunto de
descriptores de un documento. El elemento <descriptor> debe tener obligatoriamente el atributo id; y el elemento
<descriptorBase> puede tener el atributo id, que, como normalmente ocurre, identifica en forma unívoca los
elementos dentro de un documento.
Un elemento <descriptor> puede tener atributos temporales: ExplicitDur y freeze, definidos por el módulo Timing
(ver 7.2.10); un atributo denominado player, que identifica la herramienta de presentación a ser utilizada; un
atributo denominado region, que se refiere a la región definida por los elementos del módulo Layout (ver 7.2.3);
atributos para navegación: moveLeft, moveRight, move Up ; moveDown, focusIndex, focusBorderColor; focusBorderWidth;
focusBorderTransparency, focusSrc, selBorderColor, y focusSelSrc, definidos por el módulo KeyNavigation (ver 7.2.12);
y atributos de transición: transIn y transOut (ver 7.2.14).
NOTA
Un elemento <descriptor> de un elemento <media> del tipo application/x-ginga-NCL no puede contener el atributo
player. En ese caso, un exhibidor NCL específico para cada dispositivo de exhibición es definido por el middleware.
Un elemento <descriptor> también puede tener elementos <descriptorParam> como elementos hijo, que se
utilizan para parametrizar el control de la presentación del objeto asociado con el elemento descriptor. Estos
parámetros pueden, por ejemplo, redefinir algunos valores de atributos definidos por los atributos de la región. Los
mismos también pueden definir nuevos atributos, tales como plan, en qué plano de una pantalla estructurada se
colocará un objeto; rgbChromakey, definido por un color RGB que se exhibirá como transparente; background,
especificando el color de fondo utilizado para rellenar el área de una región de exhibición de la media, cuando
toda la región no es rellenada por la media en sí; visible, permitiendo que la presentación del objeto sea
visualizada u ocultada; fit, indicando como un objeto será presentado; scroll, que permite la especificación de
como un autor le gustaría configurar el desplazamiento vertical en una región; transparency, indicando el grado de
transparencia de la presentación de un objeto; style, que se refiere a una hoja de estilo [Cascading Style Sheets,
1998] con informaciones, por ejemplo, para presentación del texto; además de especificar atributos para objetos
de audio, tales como soundLevel, balanceLevel, trebleLevel y bassLevel. Además, los elementos-hijos
<descriptorParam> pueden determinar si un nuevo exhibidor debe ser obligatoriamente solicitado, o si un
exhibidor ya solicitado se debe utilizar obligatoriamente (reusePlayer), y especificar qué pasará a instancias del
exhibidor al final de la presentación (playerLife). Las palabras Top, left, bottom, right, width, height, explicitDur,
location, size, bounds, background, visible, fit, scroll, style, soundLevel, balanceLevel, trebleLevel, bassLevel,
reusePlayer y playerLife son palabras reservadas para valores del atributo name del elemento <descriptorParam>.
Los valores posibles para los nombres reservados de parámetros/atributos deben estar de acuerdo
obligatoriamente con la Tabla 20.
© ABNT 2007 - Todos los derechos reservados
45
ABNT NBR 15606-2:2007
Tabla 20 — Parámetros/atributos reservados y valores posibles
Nombre del
parámetro/atributo
Valor
top, left, bottom,
right, width, height
Número real en la banda [0,100] terminando con el carácter “%” (por ejemplo, 30 %), o un valor entero especificando el atributo en
pixels (en el caso de weight y height, un entero no negativo)
location
Dos números separados por coma, cada uno siguiendo las reglas de valor especificadas para parámetros left y top,
respectivamente
size
Dos valores separados por coma. Cada valor debe seguir obligatoriamente las mismas reglas especificadas para parámetros de
width y height, respectivamente
bounds
Cuatro valores separados por coma. Cada valor debe seguir obligatoriamente las mismas reglas especificadas para parámetros
left, top, width y height, respectivamente
background
Nombres de colores reservados: “white”, “black”, “silver”, “gray”, red”, “maroon”, fuchsia”, “purple”, “lime”, “green”, “yellow”, “olive”,
“blue”, “navy”, “aqua”, o “teal”. Otra opción para especificar el valor del color se especifica en la ABNT NBR 15606-1. El valor del
color de fondo también puede tener valor reservado “transparent”. Eso puede ser útil para presentar imágenes transparentes,
como GIF transparentes, superpuestos sobre otras imágenes o videos.
visible
“true” o “false”. Cuando no se especifica, el atributo asume el valor “true”.
transparency
Un número real en la banda [0,1], o un número real en la banda [0,100] terminando con el carácter “%” (por ejemplo, 30%),
especificando el grado de transparencia de una presentación de objeto (“1” ó “100 %” significa transparencia total y ”0“ ó “0 %”
significa opaco)
fit
“fill”, “hidden”, “meet”, “meetBest”, “slice”.
“fill”: redimensiona el contenido del objeto de media para que toque todos los bordes de la caja definida por los atributos de ancho
y altura del objeto
“hidden”: si la altura/longitud intrínseca del contenido de media es menor que el atributo de altura/longitud, el objeto debe ser
obligatoriamente creado empezando del margen superior/izquierdo y tener la altura/longitud restante rellenada con el color de
fondo; si la altura/longitud intrínseca del contenido de media es mayor que el atributo altura/longitud, el objeto debe ser
obligatoriamente creado empezando por el margen superior/izquierdo hasta que la altura/longitud definida en el atributo sea
alcanzada, y tener la parte del contenido de media abajo/a la derecha de la altura/longitud cortada
“meet”: redimensiona el objeto de media visual mientras preserva su relación de aspecto hasta que su altura o anchura es igual al
valor especificado por los atributos height o width. El ángulo superior izquierdo del contenido de media se sitúa en las
coordenadas superiores izquierdas de la caja, el espacio vacío a la derecha o en la base debe ser obligatoriamente rellenado con
el color del telón
“meetBest”: La semántica es idéntica a la del “meet”, excepto que la imagen no es redimensionada en más de 100 % en cualquier
dimensión
“slice”: redimensiona el contenido de la media visual preservando su relación de aspecto, hasta que su altura o anchura sea igual
al valor especificado en los atributos de altura y anchura, y que la caja de presentación definida esté completamente rellenada.
Algunas partes del contenido pueden ser cortadas. El exceso de anchura es cortado desde la derecha del objeto de media. El
exceso de altura es cortado desde la base del objeto de media
scroll
“
style
Localizador de un archivo de hoja de estilo
soundLevel,
balanceLevel,
trebleLevel,
bassLevel
Un número real en la banda [0, 1], o un número real en la banda [0,100] terminando con el carácter “%” (por ejemplo, 30 %)
zIndex
Un número entero en la banda [0, 255], siendo que regiones con mayor valor de zIndex se sitúan sobre regiones con menor valor
de zIndex
fontFamily
Una lista priorizada de nombres de familia de fuentes y/o nombres genéricos de familias
fontStyle
Estilo de la fuente (“normal”, o “italic”)
fontSize
Tamaño de la fuente
fontVariant
Forma de exhibición del texto: fuente en “small-caps” o “normal”
fontWeight
Peso de la fuente (“normal”, o “bold”)
fontColor
Color de la fuente (“white”, “black”, “silver”, “gray”, red”, “maroon”, fuchsia”, “purple”, “lime”, “green”, “yellow”, “olive”, “blue”, “navy”,
“aqua”, o “teal”)
reusePlayer
Valor booleano: “false”, “true”. Valor default = “false”
playerLife
“
46
none”, “horizontal”, “vertical”, “both”, o “automatic”
keep”, “close”. Valor default = “close”
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Además de todos los atributos mencionados, el elemento <descriptor> también puede tener atributos definidos en
el área funcional transition effects (ver 7.2.14).
NOTA
Si se especifican varios valores para un mismo atributo, el valor definido en el elemento <property> tiene
precedencia sobre el valor definido en un elemento <descriptorParam>, que, a su vez, tiene preferencia sobre el valor definido
en un atributo del elemento <descriptor> (incluyendo el atributo region).
Además del elemento <descriptor>, el módulo Descriptor define un atributo homónimo, que se refiere a un
elemento del conjunto de descriptores del documento. Cuando un perfil de lenguaje utiliza el módulo Descriptor,
debe obligatoriamente determinar cómo los descriptores estarán asociados con los componentes del documento.
Siguiendo las directrices NCM, esta Norma establece que el atributo descriptor está asociado con cualquier nudo
de media a través de elementos <media> y a través de las extremidades de los eslabones (elementos <bind>)
(ver 8.2.1).
El conjunto de descriptores de un documento puede contener elementos <descriptor> o elementos
<descriptorSwitch>, que permiten especificar descriptores alternativos (ver 7.2.9).
Los elementos del módulo Descriptor, sus elementos-hijos y sus atributos deben estar de acuerdo
obligatoriamente con la Tabla 21.
Tabla 21 — Módulo Descriptor extendido
Elementos
descriptor
Atributos
id, player, explicitDur, region, freeze, moveLeft,
moveRight, move Up, moveDown, focusIndex,
focusBorderColor, focusBorderWidth,
focusBorderTransparency, focusSrc,focusSelSrc,
selBorderColor, transIn, transOut
Contenido
(descriptorParam)*
descriptorParam
name, value
vacío
descriptorBase
id
(importBase|descriptor|descriptorSwitch)+
7.2.7
Área funcional Linking
El área funcional Linking define el módulo Linking, responsable por la definición de los eslabones, que utilizan
conectores. Un elemento <enlace> puede tener un atributo id, que identifica en forma unívoca el elemento dentro
de un documento y debe tener obligatoriamente un atributo xconnector, que se refiere al URI de un conector
hipermedia.
La
referencia
debe
tener
obligatoriamente
el
formato
alias#connector_id,
o
documentURI_value#connector_id, para conectores definidos en un documento externo (ver 7.2.11), o
simplemente connector_id, para conectores definidos en el propio documento.
El elemento <link> contiene elementos-hijos denominados <bind>, que permiten asociar nudos a papeles (roles)
del conector (ver 7.2.8). Para hacer esta asociación, un elemento <bind> tiene cuatro atributos básicos. El primero
se denomina role, que se utiliza para hacer referencia a un papel del conector. El segundo se denomina
component, que se utiliza para identificar el nudo. El tercero es un atributo opcional denominado interfaz,
usado para hacer referencia a una interfaz del nudo. El cuarto es un atributo opcional denominado descriptor,
usado para hacer referencia a un descriptor a ser asociado con el nudo, conforme definido por el módulo
Descriptor (ver 7.2.6).
NOTA
El atributo interfaz puede referirse a cualquier interfaz del nudo, es decir, un ancla, una propiedad o un puerto, si es
un nudo de composición. El atributo interfaz es opcional. Cuando no se especifica, la asociación se realiza con todo el
contenido del nudo (ver 7.2.5).
Si el elemento conector define parámetros (ver 7.2.8), conviene a los elementos <bind> o <link> definir valores
para esos parámetros, a través de sus elementos-hijos denominados <bindParam> y <enlaceParam>,
respectivamente, ambos con atributos name y value. En ese caso, el atributo name debe obligatoriamente hacer
referencia al nombre de un parámetro del conector, mientras que el atributo value debe definir obligatoriamente un
valor a ser atribuido al respectivo parámetro.
© ABNT 2007 - Todos los derechos reservados
47
ABNT NBR 15606-2:2007
Los elementos del módulo Linking, sus atributos y sus elementos-hijos deben estar de acuerdo obligatoriamente
con la Tabla 22.
Tabla 22 — Módulo Linking extendido
Elementos
bind
7.2.8
Atributos
Contenido
bindParam
role, component, interface,
descriptor
name, value
linkParam
name, value
vacío
link
id, xconnector
(linkParam*, bind+)
(bindParam)*
vacío
Area funcional Connectors
El área funcional Connectors de la NCL 3.0 se divide en siete módulos básicos: ConnectorCommonPart,
ConnectorAssessmentExpression,
ConnectorCausalExpression,
CausalConnector,
ConstraintConnector
(no considerado en esta Norma), ConnectorBase y CompositeConnector (tampoco considerado en esta Norma).
Los módulos del área funcional Connectors son totalmente independientes de los demás módulos NCL. Estos
módulos forman el núcleo de un lenguaje nuevo de aplicación XML (de hecho, otros perfiles NCL 3.0) para la
definición de conectores, que se pueden utilizar para especificar relaciones de sincronización espacio-temporales,
tratando relaciones de referencia (de interacción con el usuario) como un caso particular de relaciones de
sincronización temporal.
Además de los módulos básicos, el área funcional Connectors también define módulos que agrupan conjuntos de
módulos básicos, para facilitar la definición del perfil de lenguaje. Ése es el caso del módulo
CausalConnectorFunctionality, utilizado en la definición de los perfiles EDTV, BDTV y CausalConnector.
El módulo CausalConnectorFunctionality agrupa los siguientes módulos: ConnectorCommonPart,
ConnectorAssessmentExpression, ConnectorCausalExpression y CausalConnector.
Un elemento <causalConnector> representa una relación causal que puede ser utilizada por elementos <link> en
documentos. En una relación causal, una condición debe ser obligatoriamente satisfecha para disparar una
acción.
Un <causalConnector> especifica una relación independientemente de las relaciones, es decir, no especifica
cuáles nudos (representados por elementos <media>, <context>, <body> y <switch>) interactúan a través de la
relación. Un elemento <link>, a su vez, representa una relación, del tipo definido por su conector, interconectando
a diferentes nudos. Los eslabones representan el mismo tipo de relación, pero interconectando a diferentes nudos,
pueden reutilizar el mismo conector, reutilizando todas las especificaciones. Un <causalConnector> especifica, a
través de sus elementos-hijos, un conjunto de puntos de la interfaz, denominados papeles. Un elemento <link> se
refiere a un <causalConnector> y define un conjunto de mapeos (elementos <bind> hijos del elemento <link>),
que asocian cada extremidad del eslabón (interfaz de nudo) a un papel del conector utilizado.
Las relaciones en NCL se basan en eventos. Un evento es una ocurrencia en el tiempo que puede ser
instantánea o tener duración mensurable. La NCL 3.0 define los siguientes tipos de eventos:
 evento de presentación, que es definido por la presentación de un subconjunto de las unidades de
información de un objeto de media, especificado en la NCL por el elemento <area>, o por el nudo de media en
sí (presentación de todo el contenido). Los eventos de presentación también se pueden definir sobre nudos de
composición (representados por un elemento <body>, <context> o <switch>, y representan la presentación de
las unidades de información de cualquier nudo dentro del nudo de composición);
 evento de selección, que es definido por la selección de un subconjunto de las unidades de información de un
objeto de media, especificado en la NCL por el elemento <area>, o por el propio nudo de media (presentación
del contenido total);
48
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
 evento de atribución, que es definido por la atribución de un valor a una propiedad de un nudo (representado
por un elemento <media>, <body>, <context> o <switch>), que se debe declarar obligatoriamente en un
elemento <property>, hijo del nudo; y
 evento de composición, que es definido por la presentación de la estructura de un nudo de composición
(representado por un elemento <body>, <context> o <switch>). Los eventos de composición se utilizan para
presentar el mapa de la composición (organización de la composición).
Cada evento define una máquina de estados que se recomienda ser controlada por el formateador NCL, como
demostrado en la Figura 3. Además, todo evento tiene un atributo asociado, denominado occurrences, que cuenta
cuántas veces el evento va del estado ocurriendo (occurring) al estado preparado (sleeping), durante la
presentación de un documento. Eventos como presentación y atribución también tienen un atributo denominado
repetitions, que cuenta cuántas veces el evento debe ser obligatoriamente reiniciado (pasó del estado ocurriendo
para el estado preparado) por el formateador. Ese atributo puede contener el valor “indefinite”, llevando a una
repetición infinita (loop) de las ocurrencias del evento hasta que ocurra alguna interrupción externa.
Los nombres de transición para la máquina de estado de evento deben estar de acuerdo obligatoriamente con la
Tabla 23.
Figura 3 — Máquina de estado de evento
Tabla 23 — Nombres de las transiciones para una máquina de estado de evento
Transición (causada por acción)
sleeping  occurring (start)
occurring  sleeping (stop or natural end)
occurring  sleeping (abort)
occurring  paused (pause)
paused  occurring (resume)
paused  sleeping (stop)
paused  sleeping (abort)
Nombre de la transición
starts
stops
aborts
pauses
resumes
stops
aborts
Un evento de presentación asociado con un nudo de media, representado por un elemento <media>, empieza en
el estado preparado. En el inicio de la exhibición de sus unidades de información, el evento va para el estado
ocurriendo. Si la exhibición se suspende temporalmente, el evento permanece en el estado pausado (paused),
mientras dura esa situación.
Un evento de presentación puede cambiar de ocurriendo para preparado como consecuencia de la finalización
natural de la duración de la presentación, o debido a una acción que termina el evento. En ambos casos, el
atributo occurrences se incrementa, y el atributo repetitions se disminuye en uno. Si, después de disminuido, el
© ABNT 2007 - Todos los derechos reservados
49
ABNT NBR 15606-2:2007
valor del atributo repetitions es mayor que cero, el evento es automáticamente reiniciado (vuelve nuevamente al
estado ocurriendo).
Cuando la presentación de un evento se interrumpe bruscamente, a través de un comando para abortar la
presentación, el evento también va al estado preparado, pero sin incrementar el atributo occurrences y
actualizando el valor del atributo repetitions para cero. La duración de un evento es el tiempo en que permanece
en el estado ocurriendo. Tal duración puede ser intrínseca al objeto de media, explícitamente especificada por un
autor (atributo explicitDur de un elemento <descriptor>), o derivado de una relación.
Un evento de presentación asociado con un nudo de composición representado por un elemento <body> o
<context> permanece en el estado ocurriendo mientras por lo menos un evento de presentación asociado con
cualquiera de los nudos hijos de esa composición está en el estado ocurriendo, o mientras por lo menos un
eslabón-hijo del nudo de composición esté siendo evaluado.
Un evento de presentación asociado con un nudo de composición representado por un elemento <body> o
<context> está en el estado pausado si por lo menos un evento de presentación asociado con cualquiera de los
nudos hijos de la composición está en el estado pausado y todos los otros eventos de presentación asociados
con los nudos hijos de composición están en el estado preparado o pausado. En caso contrario, el evento de
presentación está en el estado preparado.
NOTA
Otros detalles sobre el comportamiento de las máquinas de estado de evento de presentación para nudos de
media y de composición se suministran en la Sección 8.
Un evento de presentación asociado con un nudo switch, representado por un elemento <switch>, permanece en
el estado ocurriendo mientras el elemento-hijo del switch, elegido (nudo seleccionado) a través de las reglas de
enlace (bind rules), esté en el estado ocurriendo. Está en el estado pausado si el nudo seleccionado está en el
estado pausado. En caso contrario, el evento de presentación está en el estado preparado.
Un evento de selección es iniciado en el estado preparado. Permanece en el estado ocurriendo mientras el ancla
correspondiente (subconjunto de las unidades de información del objeto de media) esté siendo seleccionada.
Los eventos de atribución permanecen en el estado ocurriendo mientras los valores de propiedad
correspondientes estén siendo modificados. Obviamente, eventos instantáneos, como eventos para simple
atribución de valor, permanecen en el estado ocurriendo sólo durante un período infinitesimal de tiempo.
Un evento de composición (asociado a un nudo de composición representado por un elemento <body>, <context>
o <switch>) permanece en el estado ocurriendo mientras el mapa de la composición está siendo presentado.
Las relaciones se definen con base en los estados de los eventos, en las alteraciones sobre las máquinas de
estado de evento, sobre los valores de atributos de los eventos, y sobre los valores de propiedad de los nudos
(elemento <media>, <body>, <context> o <switch>). El módulo CausalConnectorFunctionality permite sólo la
definición de relaciones causales, definidas por el elemento <causalConnector> del módulo CausalConnector.
Un elemento <causalConnector> tiene una expresión de cola (glue expression), que define una expresión de
condición y una de acción. Cuando la expresión de condición es satisfecha, la expresión de acción debe ser
obligatoriamente ejecutada. El elemento <causalConnector> debe tener obligatoriamente un atributo id, que
identifica únicamente el elemento dentro de un documento.
Una expresión de condición puede ser simple (elemento <simpleCondition>) o compuesta (elemento
<compoundCondition>), ambos elementos definidos por el módulo ConnectorCausalExpression.
El elemento <simpleCondition> tiene un atributo role, cuyo valor debe ser obligatoriamente único en el conjunto
de roles del conector. Un role (papel) es un punto de interfaz del conector, que puede ser asociado a interfaces de
nudos por un eslabón que hace referencia al conector. Un elemento <simpleCondition> también define un tipo de
evento (atributo eventType) y a qué transición se refiere la condición (atributo transition). Los atributos eventType
y transition son opcionales. Pueden ser inferidos por el valor del atributo role si se utilizan valores reservados.
En caso contrario, atributos event Type y transition son obligatorios.
50
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Los valores reservados utilizados para definir los roles en <simpleCondition> se establecen en la Tabla 24.
Si un valor de eventType es “selection”, el role también puede definir sobre a qué dispositivo se refiere la
selección (por ejemplo, teclas de un teclado o control remoto), a través de su atributo key. Por lo menos los
siguientes valores (que son sensibles al tipo mayúscula o minúscula) deben ser obligatoriamente aceptados por el
atributo key: “0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “J”, “K”, “L”, “M”, “N”,
“O”, “P”, “Q”, “R”, “S”, “T”, “U”, “V”, “W”, “X”, “Y”, “Z”, “*”, “#”, “MENU”, “INFO”, “GUIDE”, “CURSOR_DOWN”,
“CURSOR_LEFT”,
“CURSOR_RIGHT”,
“CURSOR_UP”,
“CHANNEL_DOWN”,
“CHANNEL_UP”,
“VOLUME_DOWN”, “VOLUME_UP”, “”, “ENTER”, “RED”, “GREEN”, “YELLOW”, “BLUE”, “BACK”, “EXIT”,
“POWER”, “REWIND”, “STOP”, “EJECT”, “PLAY”, “RECORD”, “PAUSE”.
Tabla 24 — Valores reservados para especificación de la condición del role asociados a las
máquinas de estado de evento
Valor de role
Valor de la transición
Tipo de evento
onBegin
starts
presentation
onEnd
stops
presentation
onAbort
aborts
presentation
onPause
pauses
presentation
onResume
resumes
presentation
onSelection
starts
selection
onBeginAttribution
starts
attribution
onEndAttribution
stops
attribution
La cardinalidad del role especifica el número mínimo (atributo min) y máximo (atributo Max) de los participantes
que pueden ejercer el papel (número de binds) cuando el <causalConnector> se utiliza para crear un <link>.
El valor mínimo de la cardinalidad debe ser obligatoriamente siempre un valor finito positivo, mayor que cero y
menor o igual al valor máximo de la cardinalidad. Si la cardinalidad mínima y la máxima no se informan, “1” debe
ser obligatoriamente asumido como valor (default) para ambos parámetros. Cuando el valor máximo de
cardinalidad es mayor que uno, varios participantes pueden ejecutar el mismo papel (role), es decir, puede haber
varios enlaces (binds) conectando diversos nudos al mismo papel. El valor “unbounded” puede ser dado al
atributo max, si el role tuviera binds ilimitados asociados a él. En los dos últimos casos, conviene que un atributo
qualifier sea especificado para informar la relación lógica entre los binds de condición simple. Como descrito en la
Tabla 25, los valores posibles para el atributo qualifier son: “Or” (o) o “and” (y). Si el calificador (atributo qualifier)
establece un operador lógico “or”, el eslabón será accionado durante la ocurrencia de cualquier condición.
Si el calificador establece un operador lógico “and”, el eslabón será accionado después de la ocurrencia de todas
las condiciones simples. En caso de no ser especificado, se debe asumir obligatoriamente el valor (default) “or”.
Tabla 25 — Valores del calificador para condiciones simples
Elemento role
Calificador
Semántica
<simpleCondition>
“or”
Verdadero siempre que ocurre cualquier condición
simple asociada
simpleCondition>
“and”
Verdadero inmediatamente después de la
ocurrencia de todas las condiciones simples
asociadas
Un atributo de retardo (delay) también puede ser definido para una <simpleCondition>, especificando que la
condición es verdadera después de un período de retardo desde el momento en que ocurre la transición.
© ABNT 2007 - Todos los derechos reservados
51
ABNT NBR 15606-2:2007
El elemento <compoundCondition> tiene un atributo operator con el valor Booleano (“and” u “or”) relacionando sus
elementos-hijos: <simpleCondition>, <compoundCondition>,<assessmentStatement> y <compoundStatement>.
Un atributo delay también puede ser definido, especificando que la condición compuesta es verdadera después
que un tiempo de retardo del momento en que la expresión, relacionada a sus elementos-hijos, sea verdadera.
Los elementos <assessmentStatement> y <compoundStatement> son definidos por el módulo
ConnectorAssessmentExpression.
NOTA
Cuando una condición “and” compuesta se relaciona a más de una condición de disparo (es decir, una condición
solamente satisfecha en un instante de tiempo infinitesimal – como, por ejemplo, el final de la presentación de un objeto), la
condición compuesta debe ser obligatoriamente considerada verdadera en el instante inmediatamente después de la
satisfacción de todas las condiciones de disparo.
Una expresión de acción capta acciones que pueden ser ejecutadas en relaciones causales, pudiendo ser
compuestas por un elemento <simpleAction> o <compoundAction>, también definido por el módulo
ConnectorCausalExpression.
El elemento <simpleAction> tiene un atributo role, que debe ser obligatoriamente único en el conjunto de papeles
(roles) del conector. Como siempre, un papel es un punto de interfaz del conector, que está asociado a las
interfaces de nudos por un <link> que se refiere al conector. Un elemento <simpleAction> también define un tipo
de evento (atributo event Type) y qué transición de estado de evento él dispara (action Type).
Los atributos eventType y actionType son opcionales. Pueden ser inferidos por el valor de role, si se utilizan
valores reservados. En caso contrario, son obligatorios atributos eventType y actionType. Los valores reservados
utilizados para definir los roles de un elemento <simpleAction> se establecen en la Tabla 26.
Tabla 26 — Valores de role de acción reservados asociados a las máquinas de estado de evento
Role value
Action type
Event type
start
start
presentation
stop
stop
presentation
abort
abort
presentation
pause
pause
presentation
resume
resume
presentation
set
start
attribution
Si un valor eventType es “attribution”, el elemento <simpleAction> también debe definir obligatoriamente el valor
que será atribuido, a través de su atributo value. Si ese valor se especifica como “&anyName”, (donde el $
es símbolo reservado a anyName es cadena de caracteres, excepto uno de los nombres reservados para apeles),
el valor a ser atribuido se debe obtener de la propiedad vinculada a role=”anyName”, definida en un elemento
<bind> del elemento <link> que utiliza el conector. Si ese valor no se puede obtener, no se debe realizar ninguna
atribución.
NOTA 1 Declarar el atributo role=“anyName” en un elemento <bind> de un <link>, implica tener un papel implícitamente
declarado como: <attributeAssessment role=“anyName” eventType=“attribution” attributeType=“nodeProperty”/>. Ese es el
único caso posible de un elemento <bind> referirse a un papel no definido explícitamente en un conector.
NOTA 2 En el caso de value=“$anyName”, el valor que se atribuirá debe ser obligatoriamente el valor de una propiedad
(elemento <property>) de un componente de la misma composición en la que el eslabón (elemento <link>) que referencia el
evento es referido, o una propiedad de composición en la que el eslabón es definido, o una propiedad de un elemento
accesible a través de un puerto de composición en el que el eslabón es definido o, aún, una propiedad de un elemento
accesible a través de un puerto de una composición (elementos <port> o <switchPort> anidada en la misma composición en
que el eslabón es definido.
52
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Como en el caso de los elementos <simpleCondition>, la cardinalidad del role especifica el número mínimo
(atributo min) y máximo (atributo Max) de los participantes de un role (número de binds), cuando el
<causalConnector> se utiliza para crear un eslabón. Cuando el valor máximo de la cardinalidad es mayor que uno,
varios participantes pueden participar de un mismo role. Cuando tiene valor “unbounded”, el número de binds es
ilimitado. En los dos últimos casos, un calificador debe, obligatoriamente, ser especificado. La Tabla 27 presenta
los posibles valores de calificador.
Tabla 27 — Valores del calificador de acción
Elemento role
Calificador
Semántica
<simpleAction>
“par”
Todas las acciones se deben ejecutar obligatoriamente en
paralelo
<simpleAction>
“seq”
Todas las acciones se deben ejecutar obligatoriamente en
la secuencia de las declaraciones dada por el bind
Un atributo delay también puede ser definido por un <simpleAction>, especificando, cuando sea definido, que la
acción debe ser obligatoriamente disparada sólo después de esperar por el tiempo especificado. Además de ello,
el <simpleAction> también puede definir un atributo repeat para ser aplicado al atributo repetitions del evento, y
un atributo repeatDelay, para ser aguardado antes de la repetición de la acción.
Además de todos los atributos mencionados, el elemento <simpleAction> también puede tener atributos definidos
en el área funcional Animation (atributos duration y by), si su valor de event Type es “attribution” (ver 7.2.13).
El elemento <compoundAction> tiene un atributo operator (“par” o “seq”) relacionando sus elementos-hijos:
<SimpleAction> y <compoundAction>. Acciones compuestas paralelas ("par") y secuenciales ("seq") especifican
que la ejecución de las acciones se deberá realizar obligatoriamente en cualquier orden o en un orden específico,
respectivamente. Un atributo de delay también puede ser definido, especificando que la acción compuesta se
debe aplicar obligatoriamente después del retardo especificado.
Cuando el operador secuencial se utiliza, las acciones deben ser iniciadas obligatoriamente en el orden
especificado. Sin embargo, una acción no necesita esperar hasta que la anterior sea completada para entonces
ser iniciada.
El
módulo
ConnectorAssessmentExpression
define
cuatro
<attributeAssessment>, <valueAssessment> y <compoundStatement>.
elementos:
<assessmentStatement>,
El <attributeAssessment> tiene un atributo role, que debe ser obligatoriamente único en el conjunto de roles del
conector. Como normalmente ocurre, un role es un punto de interfaz del conector, que es asociado a las
interfaces de los nudos por un <link> que hace referencia al conector. Un <attributeAssessment> también define
un tipo de evento (atributo event Type).
Si el valor de eventType es “selection” (selección), conviene al <attributeAssessment> también definir sobre a qué
equipo se refiere la selección (por ejemplo, teclas de un teclado o control remoto), a través de su atributo key.
Si el valor eventType es “presentation”, el atributo attributeType especifica el atributo de evento (“occurrences” o
“repetitions”) o el estado del evento (“state”); si el valor eventType es “selection”, el atributo attribute Type es
opcional y, en caso de estar presente, puede tener el valor “occurrences” (default) o “state”; si el eventType es
“attribution” el attributeType es opcional y puede tener el valor “nodeProperty” (default), “occurrences”, “repetition”
o “state”. En el primer caso, el evento representa una propiedad del nudo a ser evaluada, en los otros, el evento
representa la evaluación de la propiedad de evento de atribución correspondiente o el estado del evento de
atribución. Un valor de compensación (offset) se puede agregar a un <attributeAssessment> antes de la
comparación (por ejemplo, una compensación se puede agregar a una evaluación de atributo para especificar: “la
posición vertical de la pantalla más 50 pixels”.
El elemento <valueAssessment> tiene un atributo value que debe asumir obligatoriamente un valor de estado de
evento, o cualquier valor a ser comparado con una propiedad del nudo o atributo de evento.
© ABNT 2007 - Todos los derechos reservados
53
ABNT NBR 15606-2:2007
El elemento <assessmentStatement> tiene un atributo comparator que compara los valores inferidos desde sus
elementos-hijos (elementos <attributeAssessment> y <valueAssessment>):
d)
en el caso de <attributeAssessment>: un valor de propiedad del nudo [eventType = “attribution” y el attribute
Type = “nodeProperty”]; o un valor de atributo de evento [eventType = (“presentation”, “attribution” o
“selection”) y el attributeType = (“occurrences” o “repetition”)]; o un estado de evento [event Type =
(“presentation”, “attribution” o “selection”) y el attribute Type = “state”];
e)
en el caso del <valueAssessment>: un valor de su atributo value.
El elemento <compoundStatement> tiene un atributo operator con un valor Booleano (“and” u “or”) relacionando
sus elementos-hijos: <AssessmentStatement> o <compoundStatement>. Un atributo isNegated también se puede
definir para especificar si el elemento-hijo del <compoundStatement> debe ser obligatoriamente negado antes
que la operación Booleana sea evaluada.
El elemento <causalConnector> puede tener elementos-hijos (elementos <connectorParam>), que se utilizan para
parametrizar valores de los atributos de los conectores. El módulo ConnectorCommonPart define el tipo de
elemento <connectorParam>, que tiene atributos name y type.
Para especificar cuáles atributos reciben valores de parámetro definidos por el conector, sus valores se
especifican como el nombre del parámetro, precedido por el símbolo $.
EJEMPLO
Para parametrizar el atributo delay, un parámetro denominado actionDelay se define (<connectorParam
name="actionDelay" type=”unsignedLong”/>) y el valor “$actionDelay” se utiliza en el atributo (delay=”$actionDelay”).
Los elementos del módulo CausalConnectorFunctionality, sus elementos-hijos y sus atributos deben estar de
acuerdo obligatoriamente con la Tabla 28.
Tabla 28 — Módulo CausalConnectorFunctionality extendido
Elementos
causalConnector
id
connectorParam
name, type
simpleCondition
role, delay, eventType, key,
transition, min, max, qualifier
Contenido
(connectorParam*, (simpleCondition |
compoundCondition), (simpleAction |
compoundAction))
vacío
vacío
compoundCondition
operator, delay
((simpleCondition |
compoundCondition)+,
(assessmentStatement |
compoundStatement)*)
simpleAction
role, delay, event Type, action
Type, value, min, max,
qualifier, repeat, repeatDelay,
duration, by
vacío
compoundAction
operator, delay
(simpleAction | compoundAction)+
assessmentStatement
comparator
(attributeAssessment,
(attributeAssessment |
valueAssessment)
valueAssessment
role, eventType, key,
attributeType, offset
value
compoundStatement
operator, isNegated
attributeAssessment
54
Atributos
vacío
vacío
(assessmentStatement |
compoundStatement)+
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
El módulo ConnectorBase define un elemento denominado <connectorBase>, que permite la agrupación de
conectores. Como normalmente ocurre, se recomienda que el elemento <connectorBase> tenga un atributo id,
que identifica únicamente el elemento dentro de un documento.
El contenido exacto de una base de conectores es especificado por un perfil de lenguaje que utiliza las facilidades
ofrecidas por los conectores. Sin embargo, como la definición de conectores no es fácilmente realizada por
usuarios inexpertos, la idea es tener usuarios experimentados definiendo los conectores, almacenándolos en
bibliotecas (bases de conectores) que puedan ser importadas, tornándolas disponibles a otros usuarios para la
creación de eslabones. El Anexo C suministra un ejemplo de definiciones de conectores que pueden ser
importadas.
Los elementos del módulo ConnectorBase, sus elementos-hijos, y sus atributos deben estar de acuerdo
obligatoriamente con la Tabla 29.
Tabla 29 — Módulo ConnectorBase extendido
Elementos
Atributos
connectorBase
7.2.9
Contenido
(importBase|causalConnector)*
id
Área funcional Presentation Control
El alcance del área funcional Presentation Control es especificar alternativas de contenido y presentación para un
documento. Ese área funcional se divide en cuatro módulos, denominados TestRule, TestRuleUse,
ContentControl y DescriptorControl.
El módulo TestRule permite la definición de reglas que, cuando satisfechas, seleccionan alternativas para la
presentación del documento. La especificación de reglas en NCL 3.0 se realiza en un módulo separado, porque
son útiles para definir tanto componentes cuanto descriptores alternativos.
El elemento <ruleBase> especifica un conjunto de reglas y se debe definir obligatoriamente como elemento-hijo
del elemento <head>. Esas reglas pueden ser simples, definidas por el elemento <rule>, o compuestas, definidas
por el elemento <compositeRule>. Las reglas simples definen un identificador (atributo id), una variable (atributo
var), un valor (atributo value) y un comparador (atributo comparator) relacionando la variable a un valor.
La variable debe ser obligatoriamente una propiedad del nudo settings (elemento <media> del tipo application/xginga-settings), es decir, el atributo var debe poseer obligatoriamente el mismo valor del atributo name de un
elemento <property>, definido como hijo del elemento <media> del tipo application/x-ginga-settings. Las reglas
compuestas tienen un identificador (atributo id) y un operador Booleano (“and” u “or” – atributo operator)
relacionando sus reglas-hijas. Como normalmente ocurre, el atributo id identifica únicamente los elementos <rule>
y <compositeRule> dentro de un documento.
Los elementos del módulo TestRule, sus elementos-hijos y sus atributos deben estar de acuerdo obligatoriamente
con la Tabla 30.
Tabla 30 — Módulo TestRule extendido
Elementos
Atributos
Contenido
ruleBase
id
(importBase|rule|compositeRule)+
Rule
id, var,
comparator, value
vacío
compositeRule
id, operator
(rule | compositeRule)+
El TestRuleUse define el elemento <bindRule>, que se utiliza para asociar reglas con componentes de un
elemento <switch> o <descriptorSwitch>, a través de sus atributos rule y constituent, respectivamente.
© ABNT 2007 - Todos los derechos reservados
55
ABNT NBR 15606-2:2007
El elemento del módulo TestRuleUse y sus atributos deben estar de acuerdo obligatoriamente con la Tabla 31.
Tabla 31 — Módulo TestRuleUse extendido
Elementos
Atributos
bindRule
constituent, rule
Contenido
vacío
El módulo ContentControl especifica el elemento <switch>, permitiendo la definición de nudos alternativos a ser
elegidos en tiempo de presentación del documento. Las reglas de prueba utilizadas para escoger el componente
del switch a ser presentado se definen por el módulo TestRule, o son reglas de prueba específicamente definidas
e incorporadas en una implementación del formateador NCL. El módulo ContentControl también define el
elemento <defaultComponent>, cuyo atributo component (del tipo IDREF) identifica el elemento (default) que
debe ser obligatoriamente seleccionado si ninguna de las reglas bindRule es evaluada como verdadera.
Para permitir la definición de eslabones que se conectan a anclas del componente elegido después de la
evaluación de las reglas de un switch, se recomienda que un perfil del lenguaje también incluya el módulo
SwitchInterface, que permite la definición de interfaces especiales, denominadas <switchPort>.
Los elementos <switch> deben tener obligatoriamente un atributo id, que identifica únicamente el elemento dentro
de un documento. El atributo refer es una extensión definida en el módulo Reuse (ver 7.2.11).
Cuando un <context> se define como elemento-hijo de un <switch>, los elementos <link> en forma recursiva
contenidos en el elemento <context> deben ser obligatoriamente considerados por un exhibidor NCL apenas si
<context> es seleccionado después de la evaluación del switch. En caso contrario, se recomienda que los
elementos <link> sean considerados desactivados y obligatoriamente no deben interferir en la presentación del
documento.
Los elementos del módulo ContentControl, sus elementos-hijos y sus atributos deben estar de acuerdo
obligatoriamente con la Tabla 32.
Tabla 32 — Módulo ContentControl extendido
Elementos
Atributos
switch
id, refer
defaultComponent
component
Contenido
defaultComponent?, (switchPort | bindRule | media |
context | switch)*)
vacío
El módulo DescriptorControl especifica el elemento <descriptorSwitch>, que contiene un conjunto de descriptores
alternativos a ser asociado a un objeto. Los elementos <descriptorSwitch> deben tener obligatoriamente un
atributo id, que identifica únicamente el elemento dentro de un documento. Análogamente al elemento <switch>,
la elección <descriptorSwitch> se realiza en tiempo de presentación, utilizando reglas de prueba definidas por el
módulo TestRule, o reglas de prueba específicamente definidas e incorporadas en una implementación del
formateador NCL. El módulo DescriptorControl también define el elemento <defaultDescriptor>, cuyo atributo
descriptor (del tipo IDREF) identifica el elemento (default) que debe ser obligatoriamente seleccionado si ninguna
de las reglas bindRule es evaluada como verdadera.
Los elementos del módulo DescriptorControl, sus elementos-hijos y sus atributos deben estar de acuerdo
obligatoriamente con la Tabla 33.
56
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 33 — Módulo DescriptorControl extendido
Elementos
Atributos
Contenido
descriptorSwitch
id
(defaultDescriptor?, (bindRule | descriptor)*)
defaultDescriptor
descriptor
vacío
Durante la presentación de un documento, desde el momento en el que un <switch> es evaluado, se considera
resuelto hasta el final de su presentación, es decir, mientras su evento de presentación correspondiente está en el
estado ocurriendo o pausado. Durante la presentación de un documento, desde el momento en el que un
<descriptorSwitch> es evaluado, se considera resuelto hasta el final de la presentación del elemento <media> que
le fue asociado, es decir, mientras cualquier evento de presentación asociado con el elemento <media> esté en el
estado ocurriendo o pausado.
NOTA
Se recomienda que los formateadores NCL aplacen la evaluación del switch hasta el momento que un eslabón
anclado al switch necesite ser evaluado. Conviene que la evaluación del descriptor Switch sea atrasada hasta el momento en
el que el objeto refiriéndose a él necesite estar listo para ser presentado.
7.2.10 Área funcional Timing
El área funcional Timing define el módulo Timing. El módulo Timing permite la definición de atributos temporales
para componentes de un documento. Básicamente, ese módulo define atributos para especificar qué pasa con un
objeto al final de su presentación (freeze) y la duración ideal de un objeto (explicitDur). Esos atributos pueden ser
incorporados por los elementos <descriptor>.
7.2.11 Área funcional Reuse
NCL permite una gran reutilización de sus elementos. El área funcional Reuse de NCL se divide en tres módulos:
Import, EntityReuse y ExtendedEntityReuse.
Para permitir que una base de entidades sea incorporada a otra base ya existente, el módulo Import define el
elemento <importBase>, que tiene dos atributos: DocumentURI y alias. El atributo documentURI se refiere a un
URI correspondiente al documento NCL conteniendo la base a ser importada. El atributo alias especifica un
nombre a ser utilizado como código cuando sea necesario referirse a elementos de esa base importada.
El nombre del atributo alias debe ser obligatoriamente único en un documento y su alcance está supeditado al
documento que lo definió. La referencia tendría el formato: alias#element_id. La operación de importación es
transitiva, es decir, si la baseA importa la baseB que importa la baseC, entonces la baseA importa la baseC. Sin
embargo, el alias definido para la baseC dentro de la baseB obligatoriamente no debe ser tenido en cuenta por la
baseA.
Cuando un perfil de lenguaje utiliza el módulo Import, se permiten las siguientes especificaciones:
 el elemento <descriptorBase> puede tener un elemento-hijo <importBase> refiriéndose a un URI
correspondiente a otro documento NCL conteniendo la base de descriptores a ser importada (en realidad sus
elementos-hijos) y anidada. Cuando una base de descriptores es importada, la base de regiones y la base de
reglas, si existen en el documento importado, son también automáticamente importadas para las bases de
regiones y de reglas del documento correspondiente que realiza la importación;
 el elemento <connectorBase> puede tener un elemento-hijo <importBase> refiriéndose a un URI
correspondiente a otra base de conectores a ser importada (en realidad sus elementos-hijos) y anidada;
 el elemento <transitionBase> puede tener un elemento-hijo <importBase> refiriéndose a un URI
correspondiente a otra base de transiciones a ser importada (en realidad sus elementos-hijos) y anidada;
 el elemento <regionBase> puede tener un elemento-hijo <importBase> refiriéndose a un URI correspondiente
a otro documento NCL conteniendo la base de la regiones a ser importada (en realidad sus elementos-hijos) y
anidada. Aunque NCL defina su modelo de layout, nada impide que un documento NCL utilice otros modelos
© ABNT 2007 - Todos los derechos reservados
57
ABNT NBR 15606-2:2007
de layout, desde que definan regiones donde los objetos pueden ser presentados, como, por ejemplo,
modelos de layout SMIL 2.1. Al importar una <regionBase>, un atributo opcional denominado región se puede
especificar, dentro de un elemento <importBase>. Cuando está presente, el atributo debe identificar
obligatoriamente el id de un elemento <región> declarado en el elemento <región Base> del documento
hospedero (documento que hizo la operación de importación). Como consecuencia, todos los elementos
<región>, hijos del <regionBase> importados, deben ser obligatoriamente considerados elementos <región>
hijos de la región referida por el atributo región del <importBase>. Si no es especificado, los elementos
<región>, hijos del <regionBase> importado, deben ser obligatoriamente considerados hijos directos del
elemento <regionBase> del documento hospedero.
El elemento <importedDocumentBase> especifica un conjunto de documentos NCL importados y se debe definir
obligatoriamente como elemento-hijo del elemento <head>. El elemento <importedDocumentBase> debe tener
obligatoriamente un atributo id, que identifica únicamente el elemento dentro de un documento.
Un documento NCL puede ser importado a través de un elemento <importNCL>. Todas las bases definidas dentro
de un documento NCL, así como el elemento <body> del documento, se importan todos a la vez, a través del
elemento <importNCL>. Las bases son tratadas como si cada una hubiese sido importada por un elemento
<importBase>. El elemento <body> importado será tratado como un elemento <context>. El elemento
<importNCL> no “incluye” el documento NCL referido, sino que sólo hace visible el documento referido para que
sus componentes puedan ser reutilizados por el documento que definió el elemento <importNCL>. Así, el <Body>
importado, así como cualesquiera de sus nudos, puede ser reutilizado dentro del elemento <body> del documento
NCL que realizó la importación.
El elemento <importNCL> tiene dos atributos: DocumentURI y alias. El documentURI se refiere a un URI
correspondiente al documento a ser importado. El atributo alias especifica un nombre que se usa cuando se
realiza una referencia a elementos de ese documento importado. Como en el elemento <importBase>, el nombre
debe ser obligatoriamente único (type=ID) y su alcance se supedita al documento que definió el atributo alias. La
referencia tendría el formato: alias#element_id. Es importante notar que el mismo alias conviene que se utilice
cuando es necesario referirse a elementos definidos en las bases del documento importado (<regionBase>,
<connectorBase>, <descriptorBase> etc.).
La operación del elemento <importNCL> también tiene propiedad transitiva, es decir, si el documentoA importa
documentoB que importa documentoC, entonces el documentoA importa el documentoC. Sin embargo, el alias
definido para el documentoC dentro del documentoB obligatoriamente no se debe tener en cuenta por el
documentoA.
Los elementos del módulo Import, sus elementos-hijos y sus atributos deben estar de acuerdo obligatoriamente
con la Tabla 34.
Tabla 34 — Módulo Import extendido
Elementos
Atributos
Contenido
importBase
alias, documentURI, región
vacío
imported DocumentBase
id
(importNCL)+
importNCL
alias, documentURI
vacío
El módulo EntityReuse permite que un elemento NCL sea reutilizado. Ese módulo define el atributo refer, que
hace referencia a un elemento id que será reutilizado. Sólo <media>, <context>, <body> o <switch> se pueden
reutilizar. Un elemento que hace referencia a otro elemento no puede ser reutilizado; es decir, su id no puede ser
el valor de un atributo refer.
Si el nudo referido se define dentro de un documento D importado, el valor del atributo refer debe tener
obligatoriamente el formato “alias#iD”, donde “alias” es el valor del atributo alias asociado al documento D
importado.
58
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Cuando un perfil del lenguaje utiliza el módulo EntityReuse, puede agregar el atributo refer a:
 un elemento <media> o <switch>. En ese caso, el elemento referido debe ser obligatoriamente,
respectivamente, un elemento <media> o <switch>, que representa el mismo nudo previamente definido en el
propio <body> del documento o en un <body> externo importado. El elemento referido debe contener,
obligatoriamente, directamente la definición de todos sus atributos y elementos-hijos;
 un elemento <context>. En ese caso, el elemento referido debe ser obligatoriamente un elemento <context> o
<body>, que representa el mismo contexto previamente definido en el <body> del propio documento o en un
<body> externo importado. El elemento referido debe contener, obligatoriamente, directamente la definición
de todos sus atributos y elementos-hijos.
Cuando un elemento declara un atributo refer, todos los atributos y elementos-hijos definidos por el elemento
referido son heredados. Todos los otros atributos y elementos-hijos, si son definidos por el elemento que realiza la
referencia, deben ser obligatoriamente ignorados por el formateador, excepto el atributo id que se debe definir
obligatoriamente. La única otra excepción es para elementos <media>, para los cuales nuevos elementos-hijos
<area> y <property> pueden ser agregados, y se puede definir un nuevo atributo, instance.
Si el nuevo elemento <property> agregado tiene el mismo atributo name de un elemento <property> ya existente
(definido en el elemento <media> reutilizado), el nuevo elemento <property> agregado debe ser obligatoriamente
ignorado. Igualmente, si el nuevo elemento <area> agregado tiene el mismo atributo id de un elemento <area> ya
existente (definido en el elemento <media> reutilizado), el nuevo elemento <area> agregado debe ser
obligatoriamente ignorado. El atributo instance se define en el módulo ExtendedEntityReuse y tiene “new” como
su valor default de string.
El elemento referido y el elemento que le hace referencia deben ser obligatoriamente considerados el mismo, con
relación a sus estructuras de datos. En otras palabras, eso significa que un nudo NCM puede ser representado
por más que un elemento NCL. Como nudos contenidos en un nudo de composición NCM definen un conjunto, un
nudo NCM puede ser representado por no más que un elemento NCL dentro de una composición. Eso significa
que el atributo id de un elemento NCL representando un nudo NCM no es sólo un identificador único para el
elemento, sino el único identificador correspondiente al nudo NCM en la composición.
NOTA
Se puede consultar la NCMCore:2005 para otras informaciones.
EJEMPLO
Suponiendo que el elemento NCL (node1) representa un nudo NCM, los elementos NCL que lo mencionan
(node1ReuseA, node1ReuseB) representan el mismo nudo NCM. En otras palabras, el nudo NCM único es representado por
más de un elemento NCL (node1, node1ReuseA, y node1ReuseB). Más aún, como los nudos contenidos en un nudo de
composición NCM definen un conjunto, cada uno de los elementos NCL, node1, node1ReuseA y node1ReuseB, debe ser
declarado dentro de una composición diferente.
El elemento referido y el elemento que le hace referencia también deben ser obligatoriamente considerados el
mismo nudo con relación a su estructura de presentación, si el atributo instance recibe un valor “instSame” o
“gradSame”. Por lo tanto, la siguiente semántica debe ser obligatoriamente respetada. Considere el conjunto de
elementos <media> compuesto por el elemento <media> referido y todos los elementos <media> que lo
mencionan. Si cualquier elemento del subconjunto formado por el elemento <media> referido y todos los otros
elementos <media> que tienen el atributo instance igual a “instSame” o “gradSame” estuvieran programados para
ser presentados, se presume que todos los otros elementos en ese subconjunto, que no son descendentes de un
elemento <switch>, están también programados para presentación y, más que eso, cuando éstos se presentan,
deben ser obligatoriamente representados por la misma instancia de presentación. Los elementos descendentes
de un elemento <switch> también deben tener obligatoriamente el mismo comportamiento, si todas las reglas
necesarias para presentarlos se cumplen; en caso contrario, no deben ser programados para presentación. Si el
atributo instance fuera igual a “instSame”, todos los nudos programados del subconjunto deben ser presentados
obligatoriamente en una única instancia, inmediatamente (la instrucción star aplicada en todos los elementos del
subconjunto simultáneamente). Si el atributo instance fuera igual a “gradSame”, todos los nudos programados son
presentados en una única instancia, pero gradualmente, a medida que van sufriendo la instrucción star,
procedente de eslabones etc.. La instancia común en presentación debe obligatoriamente notificar todos los
eventos asociados con los elementos <area> y <property> definidos en todos los elementos <media> del
subconjunto que fueron programados para presentación. Por otro lado, los elementos <media> en el conjunto que
tiene valores de atributo instance iguales a “new” obligatoriamente no deben ser programados para presentación.
© ABNT 2007 - Todos los derechos reservados
59
ABNT NBR 15606-2:2007
Cuando son individualmente programados para presentación, ningún otro elemento del conjunto tiene su
comportamiento afectado, y más aún, nuevas instancias independientes de presentación deben ser
obligatoriamente creadas a cada inicio individual de presentación.
7.2.12 Área funcional Navigational Key
El área funcional Navigational Key define el módulo KeyNavigation que ofrece las extensiones necesarias para
describir las operaciones de movimiento del foco, definido por un dispositivo, como un control remoto.
Básicamente, el módulo define atributos que pueden ser incorporados por elementos <descriptor>.
El atributo focusIndex especifica un índice para el elemento <media> sobre el cual el foco puede ser aplicado,
cuando ese elemento esté en exhibición, utilizando el elemento <descriptor> que definió el atributo. Cuando un
elemento <descriptor> no define ese atributo, se considera como si no pudiese recibir el foco. En un determinado
momento de la presentación, si el foco no ha sido aún definido, o si está perdido, un foco será inicialmente
aplicado al elemento que esté siendo presentado cuyo descriptor tenga el menor valor de índice.
Los valores del atributo focusIndex deben ser obligatoriamente únicos en un documento NCL. En caso contrario,
los atributos repetidos deben ser obligatoriamente ignorados, si en un momento dado hubiera más de un
elemento <media> recibiendo el foco. Además, cuando un elemento <media> hace referencia a otro elemento
<media> (utilizando el atributo refer especificado en 7.2.11), debe obligatoriamente ignorar el focusIndex
especificado por el elemento <descriptor> asociado al elemento <media> referido.
El atributo moveUp especifica un valor igual al valor del focusIndex asociado al elemento sobre el cual será
aplicado el foco cuando sea presionada la tecla “flecha hacia arriba” (“up arrow key”). El atributo moveDown
especifica un valor igual al valor del focusIndex asociado al elemento sobre el cual el foco será aplicado cuando
sea presionada la tecla “flecha hacia abajo” (“down arrow key”).
El atributo moveRight especifica un valor igual al valor del focusIndex asociado al elemento sobre el cual el foco
será aplicado cuando la tecla “flecha para la derecha “(“right arrow key”) sea presionada. El atributo moveLeft
especifica un valor igual al valor del focusIndex asociado al elemento sobre el cual el foco será aplicado cuando la
tecla “flecha para la izquierda” (“left arrow key”) sea presionada.
Cuando el foco se aplica a un elemento con la propiedad de visibilidad con el valor “false”, o a un elemento que
no está siendo presentado, el foco actual no debe moverse.
El atributo focusSrc puede especificar un contenido alternativo a ser presentado, en vez del contenido de la
presentación actual, si un elemento recibe el foco. Ese atributo sigue las mismas reglas del atributo src del
elemento <media>.
Cuando un elemento recibe un foco, el marco (box) definido por los atributos de posicionamiento del elemento
debe ser obligatoriamente destacado. El atributo focusBorderColor define el color de destaque y puede recibir los
nombres reservados de color: “white”, “black”, “silver”, “gray”, “red”, “maroon”, “fuchsia”, “purple”, “lime”, “green”,
“yellow”, “olive”, “blue”, “navy”, “aqua”, o “teal”. El atributo focusBorder Width define el ancho en pixels del borde
en destaque (0 significa que no aparece ningún borde, valores positivos significan que el borde está fuera del
contenido del objeto y valores negativos significan que el borde se dibuja sobre el contenido del objeto); el atributo
focusBorderTransparency define la transparencia del color de destaque. El focusBorderTransparency debe ser
obligatoriamente un valor real entre 0 1, o un valor real en la banda [0,100] terminando con el carácter “%” (por
ejemplo, 30 %), con “1” ó “100 %” significando transparencia total y “0” ó “0 %” significando ninguna transparencia.
Cuando el focusBorderColor, el focusBorderWidth o el focusBorderTransparency no están definidos, valores
default deben ser obligatoriamente asumidos. Esos valores se especifican en las propiedades del elemento
<media> del tipo application/x-Ginga-settings: DefaultFocusBorderColor, defaultFocusBorderWidth y defaultFocus
Transparency, respectivamente.
Cuando un elemento en foco es seleccionado presionando la tecla de activación, el atributo focusSelSrc puede
especificar un contenido de media alternativo a ser presentado, en vez de la presentación actual. Este atributo
sigue las mismas reglas del atributo src del elemento <media>. Cuando esté seleccionada, la caja definida por los
atributos de posicionamiento de elemento debe ser obligatoriamente destacada con el color definido por el
atributo selBorderColor (valor-default especificado por el defaultSelBorderColor del elemento <media> del tipo
60
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
application/xginga-settings), el ancho del borde en destaque es definido por el atributo focusBorder Width y la
transparencia del color del borde es definida por el atributo focusBorderTransparency.
Cuando un elemento en foco es seleccionado presionando la tecla de activación, el control del foco debe ser
obligatoriamente pasado al exhibidor del elemento <media> (player). El exhibidor puede entonces seguir sus
propias reglas para navegación. El control de foco debe ser obligatoriamente devuelto al formateador NCL cuando
la tecla “back” es presionada. En ese caso, el foco va para el elemento identificado por el atributo
service.currentFocus del nudo settings (elemento <media> del tipo application/x-ginga-settings.
NOTA
El control del foco puede también ser pasado alterando el valor del atributo service.currentKeyMaster del nudo
settings (elemento <media> del tipo applicaton/x-ginga-settins). Esto se puede hacer vía acción de un eslabón (<link> element),
vía un comando ejecutado por un código imperativo de un nudo (objeto NCLua o NCLet), o por el exhibidor del nudo que
detenta el control corriente.
7.2.13 Área funcional Animation
Animación es en realidad una combinación de dos factores: soporte al dibujo del objeto y soporte al movimiento
del objeto o, más propiamente, soporte para la alteración del objeto en función del tiempo.
NCL no es un formato de contenido y, como tal, no tiene soporte para la creación de objetos de media y no tiene
un método generalizado para alterar el contenido del objeto de media. Al contrario, NCL es un formato de
escalonamiento y orquestación. Eso significa que NCL no se puede utilizar para hacer dibujos animados, pero se
puede utilizar para exhibir objetos de dibujo animado en el contexto de una presentación general y para alterar las
propiedades de sincronización y exhibición de un objeto de un dibujo animado (o cualquier otro) globalmente,
mientras el objeto esté siendo exhibido.
Las primitivas de animación NCL permiten que los valores de propiedades de los nudos sean alterados durante
una duración determinada. Como la animación NCL puede ser computacionalmente intensa, solamente es
soportada por el perfil EDTV y sólo las propiedades que definen valores numéricos y colores pueden ser
animadas.
El área funcional Animation define el módulo Animation que suministra las extensiones necesarias para describir
qué pasa cuando el valor de una propiedad de un nudo es alterado. Básicamente, el módulo define atributos que
pueden ser incorporados por los elementos <simpleAction> de un conector, si su valor eventType es “attribution”.
Dos nuevos atributos son definidos: duration e by.
Al atribuir un nuevo valor para una propiedad, la alteración es instantánea por default (duration=”0”), pero la
alteración también se puede realizar durante un período explícitamente declarado, especificado por el atributo
duration.
Además de ello, al atribuir un nuevo valor a una propiedad, la alteración del valor antiguo para el nuevo puede ser
lineal por default (by=”indefinite”), o hecha paso a paso, con el paso especificado por el atributo by.
La combinación de las definiciones de los atributos duration y by ofrece la definición de cómo (de forma discreta o
lineal) la alteración se debe realizar obligatoriamente y su intervalo de transformación.
7.2.14 Área funcional SMIL Transition Effects
El área funcional Transition Effects se divide en dos módulos: TransitionBase y Transition.
NOTA
Se puede consultar el SMIL 2.1 Specification:2005 para otras informaciones.
El módulo TransitionBase es definido por la NCL 3.0 y consiste en un elemento <transitionBase> que especifica
un conjunto de efectos de transición y se debe definir obligatoriamente como elemento-hijo del elemento <head>.
El elemento <transitionBase>, sus elementos-hijos y sus atributos deben estar de acuerdo obligatoriamente con la
Tabla 35.
© ABNT 2007 - Todos los derechos reservados
61
ABNT NBR 15606-2:2007
Tabla 35 — Módulo TransitionBase extendido
Elementos
transitionBase
Atributos
id
Contenido
(importBase, transition)+
El módulo Transition está basado en las especificaciones SMIL 2.1. El módulo solamente tiene un elemento
llamado <transition>.
NOTA
Se puede consultar el SMIL 2.1 Specification, 2005 para otras informaciones.
En el perfil NCL 3.0 DTV Avanzado, el elemento <transition> se especifica en el elemento <transitionBase> y
permite que sea definido un estándar (template) de transición. Cada elemento <transition> define un estándar
único de transición y debe tener obligatoriamente un atributo id para que pueda ser referido dentro de un
elemento <descriptor>.
Siete atributos del elemento <transition> son derivados de la especificación del módulo BasicTransitions de SMIL:
type; subtype; dur; startProgress; endProgress; direction; y fadeColor.
Las transiciones se clasifican de acuerdo con una taxonomía de dos niveles: tipos y subtipos. Cada tipo de
transición describe un grupo de transiciones que están íntimamente relacionadas. Dentro de ese tipo, cada una
de las transiciones individuales se asocia a un subtipo que enfatiza las características distintas de la transición.
El atributo type es obligatorio y utilizado para especificar la transición general. Si el tipo nominado no es soportado
por el formateador NCL, la transición debe ser obligatoriamente ignorada. Eso no es una condición de error, pues
las implementaciones son libres para ignorar transiciones.
El atributo subtype suministra el control específico para la transición. Ese atributo es opcional y, si es especificado,
debe ser obligatoriamente uno de los subtipos de transición apropiados para el tipo correspondiente. Si ese
atributo no se especifica, la transición debe ser obligatoriamente revertida para el subtipo default del tipo
especificado. Sólo los subtipos para los cinco tipos de transición obligatorios, listados en la Tabla 36, deben ser
obligatoriamente soportados; los otros tipos y subtipos definidos en la especificación SMIL son opcionales.
Tabla 36 — Tipos y subtipos de transición exigidos
Tipo de transition
Subtipo default
barWipe
leftToRight
irisWipe
rectangle
clockWipe
clockwiseTwelve
snakeWipe
topLeftHorizontal
fade
crossfade
El atributo dur especifica la duración de la transición. La duración default es de 1 s.
El atributo startProgress especifica la cantidad de efecto de transición del inicio de la ejecución. Los valores
permitidos son números reales en la banda [0.0,1.0]. Por ejemplo, puede quererse iniciar un crossfade con
imagen destino ya transparente en 30 % inicialmente. Para ese caso, el startProgress sería 0.3. El valor default es
0.0.
El atributo endProgress especifica la cantidad de efecto de transición al término de la ejecución. Los valores
permitidos son números reales en la banda [0.0,1.0] y el valor de ese atributo debe ser obligatoriamente mayor o
igual al valor del atributo startProgress. Si endProgress es igual a startProgress, entonces la transmisión
permanece en un valor fijo por la duración de la transmisión. El valor default es 1,0.
El atributo direction especifica la dirección en que ocurrirá la transición. Los valores permitidos son “forward”
“reverse”. El valor default es “forward”. No todas las transiciones tendrán interpretaciones reversas significantes.
62
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Por ejemplo, un crossfade no es una transición geométrica y, por lo tanto, no tiene interpretación de dirección
reversa. Las transiciones que no tienen interpretación reversa deben tener el atributo direction ignorado y el valor
default "forward" asumido.
Si el valor del atributo type es “fade” y el valor del atributo subtype es “fadeToColor” o “fadeFromColor” (valores de
subtipo que no son obligatorios en una implementación Ginga), entonces el atributo fadeColor especifica el color
final o inicial del fade. Si el valor del atributo type no es “fade”, o si el valor del atributo subtype no es
“fadeToColor” o “fadeFromColor”, entonces el atributo fadeColor debe ser obligatoriamente ignorado. El valor
default es “black”.
El módulo Transition también define los atributos a ser utilizados en los elementos <descriptor>, para los
estándares de transición definidos por los elementos <transition>: atributos transIn y transOut. Las transiciones
especificadas con un atributo transIn empezarán en el comienzo de la duración activa de los elementos de media
(cuando la presentación del objeto empieza). Las transiciones especificadas con un atributo transOut terminarán
al final de la duración activa de los elementos de media (cuando la presentación del objeto pasa del estado
ocurriendo a preparado).
Los atributos transIn y transOut son agregados a los elementos <descriptor>. El valor default de ambos atributos
es una string vacía, que indica que, obligatoriamente, ninguna transición se debe realizar.
El valor de los atributos transIn y transOut es una lista separada por punto y coma de los identificadores de
transición. Cada uno de los identificadores debe corresponder obligatoriamente al valor del identificador XML de
uno de los elementos de transición anteriormente definidos en el elemento <transitionBase>. El alcance de la lista
separada por punto y coma es permitir que los autores especifiquen un conjunto de transiciones alternativas
(fallback) si la transición preferida no está disponible.
La primera transición en la lista se debe realizar si el agente del usuario implementa esta transición. Si esa
transición no está disponible, entonces la segunda transición en la lista se debe realizar, y así sucesivamente.
Si el valor del atributo transIn o transOut no corresponde al valor del identificador XML de ninguno de los
elementos de transición previamente definidos, entonces hay un error. En caso de ocurrir ese error, el valor del
atributo que se debe considerar como siendo una string vacía y, entonces, obligatoriamente, ninguna transición se
debe realizar.
Todas las transiciones definidas en el módulo Transition aceptan cuatro atributos adicionales (procedentes de la
especificación del módulo TranstionModifiers de SMIL) que se pueden utilizar para controlar la apariencia de las
transiciones. El atributo horRepeat especifica cuántas veces se realizará el estándar de transiciones a lo largo del
eje horizontal. El valor default es 1 (el estándar ocurre una vez horizontalmente). El atributo vertRepeat especifica
cuántas veces se realizará el estándar de transición a lo largo del eje vertical. El valor default es 1 (el estándar
ocurre una vez verticalmente). El atributo borderWidth especifica el ancho de un borde generado a lo largo de un
área apagada. Los valores permitidos son enteros mayores o iguales a 0. Si el valor de borderWidth es igual a 0,
entonces conviene que ningún borde se genere a lo largo del área apagada. El valor default es 0. Si el valor del
atributo type no es "fade", entonces el atributo borderColor especifica el contenido de un borde generado a lo
largo de un área apagada. Si el valor de ese atributo es un color, entonces el borde generado se rellena con el
color definido. Si el valor de este atributo es “blend”, entonces el borde generado es una mezcla aditiva (o blur) de
las fuentes de media. El valor default para ese atributo es “black”.
El elemento del módulo Transition extendido, sus elementos-hijos y sus atributos deben estar de acuerdo
obligatoriamente con la Tabla 37.
Tabla 37 — Módulo Transition extendido
Elementos
transition
© ABNT 2007 - Todos los derechos reservados
Atributos
id, type, subtype, dur,
startProgress, endProgress,
direction, fadeColor, horRepeat,
vertRepeat, borderWidth,
borderColor
Contenido
vacío
63
ABNT NBR 15606-2:2007
7.2.15 Área funcional Metainformation
Una metainformación no contiene informaciones de contenido utilizadas o exhibidas durante la presentación de un
documento. En vez de eso, contiene informaciones sobre el contenido utilizado o exhibido. El área funcional
Metainformation está compuesta por el módulo metainformation, derivado del módulo Metainformation SMIL.
El elemento <meta> especifica un único par de propiedad/valor en los atributos name y content, respectivamente.
El elemento <metadata> contiene informaciones que también se relacionan con la metainformación del documento.
Actúa como el elemento raíz del árbol RDF. El elemento <metadata> puede tener como elementos-hijos:
Elementos RDF y sus subelementos
NOTA
Se puede consultar la RDF:1999 para otras informaciones.
Los elementos del módulo Metainformation, sus elementos-hijos y sus atributos deben estar de acuerdo
obligatoriamente con la Tabla 38.
Tabla 38 — Módulo Meta-Information extendido
Elementos
Atributos
Contenido
meta
name, content
vacío
metadata
empty
RDF tree
7.3 Perfiles del lenguaje NCL para el SBTVD
7.3.1
Módulos de perfiles
Cada perfil NCL puede agrupar un subconjunto de módulos NCL, permitiendo la creación de lenguajes de
acuerdo con las necesidades de los usuarios.
Cualquier documento de conformidad con los perfiles NCL debe tener obligatoriamente el elemento <ncl> como
su elemento-raíz.
El perfil NCL 3.0 completo, también denominado perfil Lenguaje NCL 3.0, es el “perfil completo” del lenguaje NCL
3.0. Comprende todos los módulos NCL (incluso los discutidos en 7.2) y suministra todas las facilidades para la
autoría declarativa de documentos NCL.
Los perfiles definidos para el SBTVD son:
a)
perfil NCL 3.0 DTV Avanzado: el perfil NCL 3.0 DTV Avanzado incluye los módulos: Structure, Layout, Media,
Context, MediaContentAnchor, CompositeNodeInterface, PropertyAnchor, SwitchInterface, Descriptor, Linking,
CausalConnectorFunctionality, ConnectorBase, TestRule, TestRuleUse, ContentControl, DescriptorControl,
Timing, Import, EntityReuse, ExtendedEntityReuse KeyNavigation, Animation, TransitionBase, Transition y
Meta-information de la NCL 3.0. Las tablas presentadas en 7.2 muestran cada elemento de cada módulo, ya
extendidos por los atributos y elementos hijos heredados de otros módulos por ese perfil (ver los esquemas
XML en 7.3.2);
b)
perfil NCL 3.0 CausalConnector: el perfil CausalConnector permite la creación de conectores simples
hipermedia. El perfil incluye los módulos Structure, CausalConnectorFunctionality y ConnectorBase. En el
perfil, el elemento <body> del módulo Structure no se utiliza (ver los esquemas XML en 7.3.3);
c)
perfil NCL 3.0 DTV Básico: el perfil NCL 3.0 DTV Básico incluye los módulos Structure, Layout, Media,
Context, MediaContentAnchor, CompositeNodeInterface, PropertyAnchor, SwitchInterface, Descriptor, Linking,
CausalConnectorFunctionality, ConnectorBase, TestRule, TestRuleUse, ContentControl, DescriptorControl,
Timing, Import, EntityReuse, ExtendedEntityReuse y KeyNavigation. Las tablas presentadas en 7.3.4
muestran cada elemento de cada módulo de ese perfil, ya extendidos por los atributos y elementos-hijos
heredados de otros módulos (ver los esquemas XML en 7.3.5).
64
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
7.3.2
Esquema del perfil NCL 3.0 DTV avanzado
NCL30EDTV.xsd
<!-XML Schema for the NCL Language
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/profiles/NCL30EDTV.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:animation="http://www.ncl.org.br/NCL3.0/Animation"
xmlns:compositeInterface="http://www.ncl.org.br/NCL3.0/CompositeNodeInterface"
xmlns:causalConnectorFunctionality="http://www.ncl.org.br/NCL3.0/CausalConnectorFunctionality"
xmlns:connectorBase="http://www.ncl.org.br/NCL3.0/ConnectorBase"
xmlns:connectorCausalExpression="http://www.ncl.org.br/NCL3.0/ConnectorCausalExpression"
xmlns:contentControl="http://www.ncl.org.br/NCL3.0/ContentControl"
xmlns:context="http://www.ncl.org.br/NCL3.0/Context"
xmlns:descriptor="http://www.ncl.org.br/NCL3.0/Descriptor"
xmlns:entityReuse="http://www.ncl.org.br/NCL3.0/EntityReuse"
xmlns:extendedEntityReuse="http://www.ncl.org.br/NCL3.0/ExtendedEntityReuse"
xmlns:descriptorControl="http://www.ncl.org.br/NCL3.0/DescriptorControl"
xmlns:import="http://www.ncl.org.br/NCL3.0/Import"
xmlns:keyNavigation="http://www.ncl.org.br/NCL3.0/KeyNavigation"
xmlns:layout="http://www.ncl.org.br/NCL3.0/Layout"
xmlns:linking="http://www.ncl.org.br/NCL3.0/Linking"
xmlns:media="http://www.ncl.org.br/NCL3.0/Media"
xmlns:mediaAnchor="http://www.ncl.org.br/NCL3.0/MediaContentAnchor"
xmlns:propertyAnchor="http://www.ncl.org.br/NCL3.0/PropertyAnchor"
xmlns:structure="http://www.ncl.org.br/NCL3.0/Structure"
xmlns:switchInterface="http://www.ncl.org.br/NCL3.0/SwitchInterface"
xmlns:testRule="http://www.ncl.org.br/NCL3.0/TestRule"
xmlns:testRuleUse="http://www.ncl.org.br/NCL3.0/TestRuleUse"
xmlns:timing="http://www.ncl.org.br/NCL3.0/Timing"
xmlns:transitionBase="http://www.ncl.org.br/NCL3.0/TransitionBase"
xmlns:metainformation="http://www.ncl.org.br/NCL3.0/Metainformation"
xmlns:transition="http://www.ncl.org.br/NCL3.0/Transition"
xmlns:metainformation="http://www.w3.org/2001/SMIL20/Metainformation"
xmlns:basicTransition="http://www.w3.org/2001/SMIL20/BasicTransitions"
xmlns:profile="http://www.ncl.org.br/NCL3.0/EDTVProfile"
targetNamespace="http://www.ncl.org.br/NCL3.0/EDTVProfile"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<!-- import the definitions in the modules namespaces -->
<import namespace="http://www.ncl.org.br/NCL3.0/Animation"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Animation.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/CompositeNodeInterface"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30CompositeNodeInterface.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/CausalConnectorFunctionality"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30CausalConnectorFunctionality.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/ConnectorBase"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30ConnectorBase.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/ConnectorCausalExpression"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30ConnectorCausalExpression.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/ContentControl"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30ContentControl.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Context"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Context.xsd"/>
© ABNT 2007 - Todos los derechos reservados
65
ABNT NBR 15606-2:2007
<import namespace="http://www.ncl.org.br/NCL3.0/Descriptor"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Descriptor.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/DescriptorControl"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30DescriptorControl.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/EntityReuse"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30EntityReuse.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/ExtendedEntityReuse"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30ExtendedEntityReuse.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Import"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Import.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/KeyNavigation"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30KeyNavigation.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Layout"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Layout.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Linking"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Linking.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Media"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Media.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/MediaContentAnchor"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30MediaContentAnchor.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/PropertyAnchor"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30PropertyAnchor.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Structure"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Structure.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/SwitchInterface"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30SwitchInterface.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/TestRule"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30TestRule.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/TestRuleUse"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30TestRuleUse.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Timing"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Timing.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/TransitionBase"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30TransitionBase.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Metainformation"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Metainformation.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Transition"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Transition.xsd"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Structure
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends ncl element -->
<element name="ncl" substitutionGroup="structure:ncl"/>
<!-- extends head element -->
<complexType name="headType">
<complexContent>
<extension base="structure:headPrototype">
<sequence>
<element ref="profile:importedDocumentBase" minOccurs="0" maxOccurs="1"/>
<element ref="profile:ruleBase" minOccurs="0" maxOccurs="1"/>
<element ref="profile:transitionBase" minOccurs="0" maxOccurs="1"/>
<element ref="profile:regionBase" minOccurs="0" maxOccurs="unbounded"/>
<element ref="profile:descriptorBase" minOccurs="0" maxOccurs="1"/>
<element ref="profile:connectorBase" minOccurs="0" maxOccurs="1"/>
<element ref="profile:meta" minOccurs="0" maxOccurs="unbounded"/>
<element ref="profile:metadata" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
66
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<element name="head" type="profile:headType" substitutionGroup="structure:head"/>
<!-- extends body element -->
<complexType name="bodyType">
<complexContent>
<extension base="structure:bodyPrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="profile:contextInterfaceElementGroup"/>
<element ref="profile:media"/>
<element ref="profile:context"/>
<element ref="profile:switch"/>
<element ref="profile:link"/>
<element ref="profile:meta"/>
<element ref="profile:metadata"/>
</choice>
</extension>
</complexContent>
</complexType>
<element name="body" type="profile:bodyType" substitutionGroup="structure:body"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Layout
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends regionBase element -->
<complexType name="regionBaseType">
<complexContent>
<extension base="layout:regionBasePrototype">
<choice minOccurs="1" maxOccurs="unbounded">
<element ref="profile:importBase"/>
<element ref="profile:region"/>
</choice>
</extension>
</complexContent>
</complexType>
<complexType name="regionType">
<complexContent>
<extension base="layout:regionPrototype">
</extension>
</complexContent>
</complexType>
<element name="regionBase" type="profile:regionBaseType" substitutionGroup="layout:regionBase"/>
<element name="region" type="profile:regionType" substitutionGroup="layout:region"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Media
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends Media elements -->
<!-- media interface element groups -->
<group name="mediaInterfaceElementGroup">
<choice>
<element ref="profile:area"/>
<element ref="profile:property"/>
</choice>
</group>
<complexType name="mediaType">
<complexContent>
<extension base="media:mediaPrototype">
© ABNT 2007 - Todos los derechos reservados
67
ABNT NBR 15606-2:2007
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="profile:mediaInterfaceElementGroup"/>
</choice>
<attributeGroup ref="descriptor:descriptorAttrs"/>
<attributeGroup ref="entityReuse:entityReuseAttrs"/>
<attributeGroup ref="extendedEntityReuse:extendedEntityReuseAttrs"/>
</extension>
</complexContent>
</complexType>
<element name="media" type="profile:mediaType" substitutionGroup="media:media"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Context
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends context element -->
<!-- composite node interface element groups -->
<group name="contextInterfaceElementGroup">
<choice>
<element ref="profile:port"/>
<element ref="profile:property"/>
</choice>
</group>
<complexType name="contextType">
<complexContent>
<extension base="context:contextPrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="profile:contextInterfaceElementGroup"/>
<element ref="profile:media"/>
<element ref="profile:context"/>
<element ref="profile:link"/>
<element ref="profile:switch"/>
<element ref="profile:meta"/>
<element ref="profile:metadata"/>
</choice>
<attributeGroup ref="entityReuse:entityReuseAttrs"/>
</extension>
</complexContent>
</complexType>
<element name="context" type="profile:contextType" substitutionGroup="context:context"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- MediaContentAnchor
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends area element -->
<complexType name="componentAnchorType">
<complexContent>
<extension base="mediaAnchor:componentAnchorPrototype">
</extension>
</complexContent>
</complexType>
<element name="area" type="profile:componentAnchorType" substitutionGroup="mediaAnchor:area"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- CompositeNodeInterface
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends port element -->
<complexType name="compositeNodePortType">
<complexContent>
68
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<extension base="compositeInterface:compositeNodePortPrototype">
</extension>
</complexContent>
</complexType>
<element name="port" type="profile:compositeNodePortType" substitutionGroup="compositeInterface:port"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- PropertyAnchor
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends property element -->
<complexType name="propertyAnchorType">
<complexContent>
<extension base="propertyAnchor:propertyAnchorPrototype">
</extension>
</complexContent>
</complexType>
<element name="property" type="profile:propertyAnchorType" substitutionGroup="propertyAnchor:property"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- SwitchInterface
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends switchPort element -->
<complexType name="switchPortType">
<complexContent>
<extension base="switchInterface:switchPortPrototype">
</extension>
</complexContent>
</complexType>
<element name="mapping" substitutionGroup="switchInterface:mapping"/>
<element name="switchPort" type="profile:switchPortType" substitutionGroup="switchInterface:switchPort"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Descriptor
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- substitutes descriptorParam element -->
<element name="descriptorParam" substitutionGroup="descriptor:descriptorParam"/>
<!-- extends descriptor element -->
<complexType name="descriptorType">
<complexContent>
<extension base="descriptor:descriptorPrototype">
<attributeGroup ref="layout:regionAttrs"/>
<attributeGroup ref="timing:explicitDurAttrs"/>
<attributeGroup ref="timing:freezeAttrs"/>
<attributeGroup ref="keyNavigation:keyNavigationAttrs"/>
<attributeGroup ref="transition:transAttrs"/>
</extension>
</complexContent>
</complexType>
<element name="descriptor" type="profile:descriptorType" substitutionGroup="descriptor:descriptor"/>
<!-- extends descriptorBase element -->
<complexType name="descriptorBaseType">
<complexContent>
<extension base="descriptor:descriptorBasePrototype">
<choice minOccurs="1" maxOccurs="unbounded">
© ABNT 2007 - Todos los derechos reservados
69
ABNT NBR 15606-2:2007
<element ref="profile:importBase"/>
<element ref="profile:descriptor"/>
<element ref="profile:descriptorSwitch"/>
</choice>
</extension>
</complexContent>
</complexType>
<element name="descriptorBase" type="profile:descriptorBaseType" substitutionGroup="descriptor:descriptorBase"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Linking
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- substitutes linkParam and bindParam elements -->
<element name="linkParam" substitutionGroup="linking:linkParam"/>
<element name="bindParam" substitutionGroup="linking:bindParam"/>
<!-- extends bind element and link element, as a consequence-->
<complexType name="bindType">
<complexContent>
<extension base="linking:bindPrototype">
<attributeGroup ref="descriptor:descriptorAttrs"/>
</extension>
</complexContent>
</complexType>
<element name="bind" type="profile:bindType" substitutionGroup="linking:bind"/>
<!-- extends link element -->
<complexType name="linkType">
<complexContent>
<extension base="linking:linkPrototype">
</extension>
</complexContent>
</complexType>
<element name="link" type="profile:linkType" substitutionGroup="linking:link"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Connector
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends connectorBase element -->
<complexType name="connectorBaseType">
<complexContent>
<extension base="connectorBase:connectorBasePrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="profile:importBase"/>
<element ref="profile:causalConnector" />
</choice>
</extension>
</complexContent>
</complexType>
<complexType name="simpleActionType">
<complexContent>
<extension base="connectorCausalExpression:simpleActionPrototype">
<attributeGroup ref="animation:animationAttrs"/>
</extension>
</complexContent>
</complexType>
<element name="connectorBase" type="profile:connectorBaseType" substitutionGroup="connectorBase:connectorBase"/>
70
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<element name="causalConnector" substitutionGroup="causalConnectorFunctionality:causalConnector"/>
<element name="connectorParam" substitutionGroup="causalConnectorFunctionality:connectorParam"/>
<element name="simpleCondition" substitutionGroup="causalConnectorFunctionality:simpleCondition"/>
<element name="compoundCondition" substitutionGroup="causalConnectorFunctionality:compoundCondition"/>
<element name="simpleAction" type="profile:simpleActionType"
substitutionGroup="causalConnectorFunctionality:simpleAction"/>
<element name="compoundAction" substitutionGroup="causalConnectorFunctionality:compoundAction"/>
<element name="assessmentStatement" substitutionGroup="causalConnectorFunctionality:assessmentStatement"/>
<element name="attributeAssessment" substitutionGroup="causalConnectorFunctionality:attributeAssessment"/>
<element name="valueAssessment" substitutionGroup="causalConnectorFunctionality:valueAssessment"/>
<element name="compoundStatement" substitutionGroup="causalConnectorFunctionality:compoundStatement"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- TestRule
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends rule element -->
<complexType name="ruleType">
<complexContent>
<extension base="testRule:rulePrototype">
</extension>
</complexContent>
</complexType>
<element name="rule" type="profile:ruleType" substitutionGroup="testRule:rule"/>
<!-- extends compositeRule element -->
<complexType name="compositeRuleType">
<complexContent>
<extension base="testRule:compositeRulePrototype">
</extension>
</complexContent>
</complexType>
<element name="compositeRule" type="profile:compositeRuleType" substitutionGroup="testRule:compositeRule"/>
<!-- extends ruleBase element -->
<complexType name="ruleBaseType">
<complexContent>
<extension base="testRule:ruleBasePrototype">
<choice minOccurs="1" maxOccurs="unbounded">
<element ref="profile:importBase"/>
<element ref="profile:rule"/>
<element ref="profile:compositeRule"/>
</choice>
</extension>
</complexContent>
</complexType>
<element name="ruleBase" type="profile:ruleBaseType" substitutionGroup="testRule:ruleBase"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- TestRuleUse
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends bindRule element -->
<complexType name="bindRuleType">
© ABNT 2007 - Todos los derechos reservados
71
ABNT NBR 15606-2:2007
<complexContent>
<extension base="testRuleUse:bindRulePrototype">
</extension>
</complexContent>
</complexType>
<element name="bindRule" type="profile:bindRuleType" substitutionGroup="testRuleUse:bindRule"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- ContentControl
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends switch element -->
<!-- switch interface element groups -->
<group name="switchInterfaceElementGroup">
<choice>
<element ref="profile:switchPort"/>
</choice>
</group>
<!-- extends defaultComponent element -->
<complexType name="defaultComponentType">
<complexContent>
<extension base="contentControl:defaultComponentPrototype">
</extension>
</complexContent>
</complexType>
<element name="defaultComponent" type="profile:defaultComponentType"
substitutionGroup="contentControl:defaultComponent"/>
<complexType name="switchType">
<complexContent>
<extension base="contentControl:switchPrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="profile:switchInterfaceElementGroup"/>
<element ref="profile:bindRule"/>
<element ref="profile:switch"/>
<element ref="profile:media"/>
<element ref="profile:context"/>
</choice>
<attributeGroup ref="entityReuse:entityReuseAttrs"/>
</extension>
</complexContent>
</complexType>
<element name="switch" type="profile:switchType" substitutionGroup="contentControl:switch"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- DescriptorControl
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends defaultDescriptor element -->
<complexType name="defaultDescriptorType">
<complexContent>
<extension base="descriptorControl:defaultDescriptorPrototype">
</extension>
</complexContent>
</complexType>
<element name="defaultDescriptor" type="profile:defaultDescriptorType"
substitutionGroup="descriptorControl:defaultDescriptor"/>
<!-- extends descriptorSwitch element -->
<complexType name="descriptorSwitchType">
72
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<complexContent>
<extension base="descriptorControl:descriptorSwitchPrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="profile:descriptor"/>
<element ref="profile:bindRule"/>
</choice>
</extension>
</complexContent>
</complexType>
<element name="descriptorSwitch" type="profile:descriptorSwitchType"
substitutionGroup="descriptorControl:descriptorSwitch"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Timing
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Import
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<complexType name="importBaseType">
<complexContent>
<extension base="import:importBasePrototype">
</extension>
</complexContent>
</complexType>
<complexType name="importNCLType">
<complexContent>
<extension base="import:importNCLPrototype">
</extension>
</complexContent>
</complexType>
<complexType name="importedDocumentBaseType">
<complexContent>
<extension base="import:importedDocumentBasePrototype">
</extension>
</complexContent>
</complexType>
<element name="importBase" type="profile:importBaseType" substitutionGroup="import:importBase"/>
<element name="importNCL" type="profile:importNCLType" substitutionGroup="import:importNCL"/>
<element name="importedDocumentBase" type="profile:importedDocumentBaseType"
substitutionGroup="import:importedDocumentBase"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- EntityReuse
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- ExtendedEntityReuse
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- KeyNavigation
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- TransitionBase
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends transitionBase element -->
© ABNT 2007 - Todos los derechos reservados
73
ABNT NBR 15606-2:2007
<complexType name="transitionBaseType">
<complexContent>
<extension base="transitionBase:transitionBasePrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="profile:transition"/>
<element ref="profile:importBase"/>
</choice>
</extension>
</complexContent>
</complexType>
<element name="transitionBase" type="profile:transitionBaseType" substitutionGroup="transitionBase:transitionBase"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Transition
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<element name="transition" substitutionGroup="transition:transition"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Metainformation
--> <!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
= = = = = = = = = = = = = = = = = = = = = = = -->
<element name="meta" substitutionGroup="metainformation:meta"/>
<element name="metadata" substitutionGroup="metainformation:metadata"/>
</schema>
7.3.3
Esquema del perfil NCL 3.0 CausalConnector
CausalConnector.xsd
<!-XML Schema for the NCL Language
This is NCL
Copyright: 2000-2005 LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/profiles/CausalConnector.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:causalConnectorFunctionality="http://www.ncl.org.br/NCL3.0/CausalConnectorFunctionality"
xmlns:connectorBase="http://www.ncl.org.br/NCL3.0/ConnectorBase"
xmlns:structure="http://www.ncl.org.br/NCL3.0/Structure"
xmlns:import="http://www.ncl.org.br/NCL3.0/Import"
xmlns:profile="http://www.ncl.org.br/NCL3.0/CausalConnectorProfile"
targetNamespace="http://www.ncl.org.br/NCL3.0/CausalConnectorProfile"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- import the definitions in the modules namespaces -->
<import namespace="http://www.ncl.org.br/NCL3.0/CausalConnectorFunctionality"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30CausalConnectorFunctionality.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/ConnectorBase"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30ConnectorBase.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Structure"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Structure.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Import"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Import.xsd"/>
74
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Structure
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends ncl element -->
<complexType name="nclType">
<complexContent>
<restriction base="structure:nclPrototype">
<sequence>
<element ref="structure:head" minOccurs="0" maxOccurs="1"/>
<element ref="structure:body" minOccurs="0" maxOccurs="0"/>
</sequence>
</restriction>
</complexContent>
</complexType>
<element name="ncl" type="profile:nclType" substitutionGroup="structure:ncl"/>
<!-- extends head element -->
<complexType name="headType">
<complexContent>
<extension base="structure:headPrototype">
<all>
<element ref="profile:connectorBase" />
</all>
</extension>
</complexContent>
</complexType>
<element name="head" type="profile:headType" substitutionGroup="structure:head"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- XConnector
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends connectorBase element -->
<complexType name="connectorBaseType">
<complexContent>
<extension base="connectorBase:connectorBasePrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="profile:importBase"/>
<element ref="profile:causalConnector" />
</choice>
</extension>
</complexContent>
</complexType>
<element name="connectorBase" type="profile:connectorBaseType" substitutionGroup="connectorBase:connectorBase"/>
<element name="causalConnector" substitutionGroup="causalConnectorFunctionality:causalConnector"/>
<element name="connectorParam" substitutionGroup="causalConnectorFunctionality:connectorParam"/>
<element name="simpleCondition" substitutionGroup="causalConnectorFunctionality:simpleCondition"/>
<element name="compoundCondition" substitutionGroup="causalConnectorFunctionality:compoundCondition"/>
<element name="simpleAction" substitutionGroup="causalConnectorFunctionality:simpleAction"/>
<element name="compoundAction" substitutionGroup="causalConnectorFunctionality:compoundAction"/>
© ABNT 2007 - Todos los derechos reservados
75
ABNT NBR 15606-2:2007
<element name="assessmentStatement" substitutionGroup="causalConnectorFunctionality:assessmentStatement"/>
<element name="attributeAssessment" substitutionGroup="causalConnectorFunctionality:attributeAssessment"/>
<element name="valueAssessment" substitutionGroup="causalConnectorFunctionality:valueAssessment"/>
<element name="compoundStatement" substitutionGroup="causalConnectorFunctionality:compoundStatement"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- ImportBase
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<element name="importBase" substitutionGroup="import:importBase"/>
</schema>
7.3.4
Atributos y elementos del perfil NCL 3.0 DTV básico
Los elementos y sus atributos, utilizados en el perfil NCL 3.0 DTV Básico, se presentan en las Tablas 39 a 55. Se
quiere resaltar que los atributos y contenidos (elementos-hijos) de elementos se pueden definir en el módulo en sí
o en el perfil NCL DTV Básico que agrupa los módulos. Los atributos obligatorios están subrayados. En las Tablas
39 a 55, se emplean los siguientes símbolos: (?) opcional (cero o una ocurrencia), (|) o (*) cero o más ocurrencias,
(+) una o más ocurrencias.
Tabla 39 — Elementos y atributos del módulo Structure extendido utilizados en el perfil DTV Básico
Elementos
ncl
Atributos
id, title, xmlns
(head?, body?)
(importedDocumentBase? ruleBase?,
regionBase*, descriptorBase?,
connectorBase?),
head
body
Contenido
(port| property| media|context|switch|link)*
id
Tabla 40 — Elementos y atributos del módulo Layout extendido utilizados en el perfil DTV Básico
Elementos
Atributos
Contenido
regionBase
id, device, region
(importBase|region)+
Region
id, title, left, right, top, bottom, height,
width, zIndex
(region)*
Tabla 41 — Elementos y atributos del Módulo Media extendido utilizados en el perfil DTV Básico
Elementos
media
76
Atributos
id, src, refer, instance, type, descriptor
Contenido
(area|property)*
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 42 — Elementos y atributos del módulo Context extendido utilizados en el perfil DTV Básico
Elementos
context
Atributos
Contenido
(port|property|media|context|link|switch)*
id, refer
Tabla 43 — Elementos y atributos del módulo MediaContentAnchor extendido utilizados
en el perfil DTV Básico
Elementos
area
Atributos
ID, coords, begin, end, text, position, first,
last, label
© ABNT 2007 - Todos los derechos reservados
Contenido
vacío
77
ABNT NBR 15606-2:2007
Tabla 44 — Elementos y atributos del módulo CompositeNodeInterface extendido utilizados
en el perfil DTV Básico
Elementos
port
Atributos
id, component, interface
Contenido
vacío
Tabla 45 — Elementos y atributos del módulo PropertyAnchor extendido utilizados en el perfil DTV Básico
Elementos
Atributos
property
Contenido
vacío
name, value
Tabla 46 — Elementos y atributos del módulo SwitchInterface extendido utilizados en el perfil DTV Básico
Elementos
Atributos
Contenido
switchPort
id
mapping+
mapping
component, interfaz
vacío
Tabla 47 — Elementos y atributos del módulo Descriptor extendido utilizados en el perfil DTV Básico
Elementos
Atributos
Contenido
descriptor
id, player, explicitDur, region, freeze,
moveLeft, moveRight, moveUp;
moveDown, focusIndex,
focusBorderColor; focusBorderWidth;
focusBorderTransparency,
focusSrc,focusSelSrc, selBorderColor
(descriptorParam)*
descriptorParam
name, value
vacío
descriptorBase
id
(importBase | descriptor | descriptorSwitch)+
Tabla 48 — Elementos y atributos del módulo Linking extendido utilizados en el perfil DTV Básico
Elementos
78
Atributos
Contenido
bind
role, component, interface, descriptor
(bindParam)*
bindParam
name, value
vacío
linkParam
name, value
vacío
link
id, xconnector
(linkParam*, bind+)
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 49 — Elementos y atributos del módulo CausalConnectorFunctionality extendido utilizados
en el perfil DTV Básico
Elementos
Atributos
Contenido
causalConnector
id
(connectorParam*, (simpleCondition |
compoundCondition), (simpleAction |
compoundAction))
connectorParam
name, type
vacío
simpleCondition
role, delay, event Type, key,
transition, min, max, qualifier
vacío
compoundCondition
operator, delay
((simpleCondition |
compoundCondition)+,
(assessmentStatement |
compoundStatement)*)
simpleAction
role, delay, eventType, actionType,
value, min, max, qualifier, repeat,
repeatDelay
vacío
compoundAction
operator, delay
(simpleAction | compoundAction)+
assessmentStatement
comparator
(attributeAssessment,
(attributeAssessment |
valueAssessment))
attributeAssessment
role, eventType, key, attributeType,
offset
vacío
valueAssessment
value
vacío
compoundStatement
operator, isNegated
(assessmentStatement |
compoundStatement)+
Tabla 50 — Elementos y atributos del módulo ConnectorBase extendido utilizados en el perfil DTV Básico
Elementos
Atributos
connectorBase id
Contenido
(importBase|causalConnector)*
Tabla 51 — Elementos y atributos del módulo TestRule extendido utilizados en el perfil DTV Básico
Elementos
Atributos
Contenido
ruleBase
id
(importBase|rule|compositeRule)+
rule
id, var, comparator, value
vacío
compositeRule
id, operator
(rule | compositeRule)+
© ABNT 2007 - Todos los derechos reservados
79
ABNT NBR 15606-2:2007
Tabla 52 — Elementos y atributos del módulo TestRuleUse extendido utilizados
en el perfil DTV Básico
Elementos
bindRule
Atributos
Contenido
vacío
constituent, rule
Tabla 53 — Elementos y atributos del módulo ContentControl extendido utilizados
en el perfil DTV Básico
Elementos
Atributos
Contenido
switch
id, refer
(defaultComponent?, (switch Port|
bindRule|media| context | switch)*)
defaultComponent
component
vacío
Tabla 54 — Elementos y atributos del módulo DescriptorControl extendido utilizados
en el perfil DTV Básico
Elementos
Atributos
descriptorSwitch
id
defaultDescriptor
descriptor
Contenido
(defaultDescriptor?,
descriptor)*)
(bindRule
|
vacío
Tabla 55 — Elementos y atributos del módulo Import extendido utilizados en el perfil DTV Básico
Elementos
importBase
80
Atributos
alias, documentURI, región
Contenido
vacío
imported DocumentBase id
(importNCL)+
importNCL
vacío
alias, documentURI,
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
7.3.5
Esquema del perfil NCL 3.0 DTV Básico
NCL30BDTV.xsd
<!-XML Schema for the NCL Language
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/profiles/NCL30BDTV.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:compositeInterface="http://www.ncl.org.br/NCL3.0/CompositeNodeInterface"
xmlns:causalConnectorFunctionality="http://www.ncl.org.br/NCL3.0/CausalConnectorFunctionality"
xmlns:connectorBase="http://www.ncl.org.br/NCL3.0/ConnectorBase"
xmlns:contentControl="http://www.ncl.org.br/NCL3.0/ContentControl"
xmlns:context="http://www.ncl.org.br/NCL3.0/Context"
xmlns:descriptor="http://www.ncl.org.br/NCL3.0/Descriptor"
xmlns:entityReuse="http://www.ncl.org.br/NCL3.0/EntityReuse"
xmlns:extendedEntityReuse="http://www.ncl.org.br/NCL3.0/ExtendedEntityReuse"
xmlns:descriptorControl="http://www.ncl.org.br/NCL3.0/DescriptorControl"
xmlns:import="http://www.ncl.org.br/NCL3.0/Import"
xmlns:keyNavigation="http://www.ncl.org.br/NCL3.0/KeyNavigation"
xmlns:layout="http://www.ncl.org.br/NCL3.0/Layout"
xmlns:linking="http://www.ncl.org.br/NCL3.0/Linking"
xmlns:media="http://www.ncl.org.br/NCL3.0/Media"
xmlns:mediaAnchor="http://www.ncl.org.br/NCL3.0/MediaContentAnchor"
xmlns:propertyAnchor="http://www.ncl.org.br/NCL3.0/PropertyAnchor"
xmlns:structure="http://www.ncl.org.br/NCL3.0/Structure"
xmlns:switchInterface="http://www.ncl.org.br/NCL3.0/SwitchInterface"
xmlns:testRule="http://www.ncl.org.br/NCL3.0/TestRule"
xmlns:testRuleUse="http://www.ncl.org.br/NCL3.0/TestRuleUse"
xmlns:timing="http://www.ncl.org.br/NCL3.0/Timing"
xmlns:profile="http://www.ncl.org.br/NCL3.0/BDTVProfile"
targetNamespace="http://www.ncl.org.br/NCL3.0/BDTVProfile"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<!-- import the definitions in the modules namespaces -->
<import namespace="http://www.ncl.org.br/NCL3.0/CompositeNodeInterface"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30CompositeNodeInterface.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/CausalConnectorFunctionality"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30CausalConnectorFunctionality.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/ConnectorBase"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30ConnectorBase.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/ContentControl"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30ContentControl.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Context"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Context.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Descriptor"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Descriptor.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/DescriptorControl"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30DescriptorControl.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/EntityReuse"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30EntityReuse.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/ExtendedEntityReuse"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30ExtendedEntityReuse.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Import"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Import.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/KeyNavigation"
© ABNT 2007 - Todos los derechos reservados
81
ABNT NBR 15606-2:2007
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30KeyNavigation.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Layout"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Layout.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Linking"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Linking.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Media"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Media.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/MediaContentAnchor"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30MediaContentAnchor.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/PropertyAnchor"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30PropertyAnchor.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Structure"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Structure.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/SwitchInterface"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30SwitchInterface.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/TestRule"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30TestRule.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/TestRuleUse"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30TestRuleUse.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Timing"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Timing.xsd"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Structure
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends ncl element -->
<element name="ncl" substitutionGroup="structure:ncl"/>
<!-- extends head element -->
<complexType name="headType">
<complexContent>
<extension base="structure:headPrototype">
<sequence>
<element ref="profile:importedDocumentBase" minOccurs="0" maxOccurs="1"/>
<element ref="profile:ruleBase" minOccurs="0" maxOccurs="1"/>
<element ref="profile:regionBase" minOccurs="0" maxOccurs="unbounded"/>
<element ref="profile:descriptorBase" minOccurs="0" maxOccurs="1"/>
<element ref="profile:connectorBase" minOccurs="0" maxOccurs="1"/>
</sequence>
</extension>
</complexContent>
</complexType>
<element name="head" type="profile:headType" substitutionGroup="structure:head"/>
<!-- extends body element -->
<complexType name="bodyType">
<complexContent>
<extension base="structure:bodyPrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="profile:contextInterfaceElementGroup"/>
<element ref="profile:media"/>
<element ref="profile:context"/>
<element ref="profile:switch"/>
<element ref="profile:link"/>
</choice>
</extension>
</complexContent>
</complexType>
<element name="body" type="profile:bodyType" substitutionGroup="structure:body"/>
82
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Layout
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends regionBase element -->
<complexType name="regionBaseType">
<complexContent>
<extension base="layout:regionBasePrototype">
<choice minOccurs="1" maxOccurs="unbounded">
<element ref="profile:region"/>
<element ref="profile:importBase"/>
</choice>
</extension>
</complexContent>
</complexType>
<complexType name="regionType">
<complexContent>
<extension base="layout:regionPrototype">
</extension>
</complexContent>
</complexType>
<element name="regionBase" type="profile:regionBaseType" substitutionGroup="layout:regionBase"/>
<element name="region" type="profile:regionType" substitutionGroup="layout:region"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Media
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends Media elements -->
<!-- media interface element groups -->
<group name="mediaInterfaceElementGroup">
<choice>
<element ref="profile:area"/>
<element ref="profile:property"/>
</choice>
</group>
<complexType name="mediaType">
<complexContent>
<extension base="media:mediaPrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="profile:mediaInterfaceElementGroup"/>
</choice>
<attributeGroup ref="descriptor:descriptorAttrs"/>
<attributeGroup ref="entityReuse:entityReuseAttrs"/>
<attributeGroup ref="extendedEntityReuse:extendedEntityReuseAttrs"/>
</extension>
</complexContent>
</complexType>
<element name="media" type="profile:mediaType" substitutionGroup="media:media"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Context
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends context element -->
<!-- composite node interface element groups -->
<group name="contextInterfaceElementGroup">
<choice>
<element ref="profile:port"/>
<element ref="profile:property"/>
</choice>
© ABNT 2007 - Todos los derechos reservados
83
ABNT NBR 15606-2:2007
</group>
<complexType name="contextType">
<complexContent>
<extension base="context:contextPrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="profile:contextInterfaceElementGroup"/>
<element ref="profile:media"/>
<element ref="profile:context"/>
<element ref="profile:link"/>
<element ref="profile:switch"/>
</choice>
<attributeGroup ref="entityReuse:entityReuseAttrs"/>
</extension>
</complexContent>
</complexType>
<element name="context" type="profile:contextType" substitutionGroup="context:context"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- MediaContentAnchor
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends area element -->
<complexType name="componentAnchorType">
<complexContent>
<extension base="mediaAnchor:componentAnchorPrototype">
</extension>
</complexContent>
</complexType>
<element name="area" type="profile:componentAnchorType" substitutionGroup="mediaAnchor:area"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- CompositeNodeInterface
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends port element -->
<complexType name="compositeNodePortType">
<complexContent>
<extension base="compositeInterface:compositeNodePortPrototype">
</extension>
</complexContent>
</complexType>
<element name="port" type="profile:compositeNodePortType" substitutionGroup="compositeInterface:port"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- PropertyAnchor
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends property element -->
<complexType name="propertyAnchorType">
<complexContent>
<extension base="propertyAnchor:propertyAnchorPrototype">
</extension>
</complexContent>
</complexType>
<element name="property" type="profile:propertyAnchorType" substitutionGroup="propertyAnchor:property"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- SwitchInterface
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends switchPort element -->
84
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<complexType name="switchPortType">
<complexContent>
<extension base="switchInterface:switchPortPrototype">
</extension>
</complexContent>
</complexType>
<element name="mapping" substitutionGroup="switchInterface:mapping"/>
<element name="switchPort" type="profile:switchPortType" substitutionGroup="switchInterface:switchPort"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Descriptor
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- substitutes descriptorParam element -->
<element name="descriptorParam" substitutionGroup="descriptor:descriptorParam"/>
<!-- extends descriptor element -->
<complexType name="descriptorType">
<complexContent>
<extension base="descriptor:descriptorPrototype">
<attributeGroup ref="layout:regionAttrs"/>
<attributeGroup ref="timing:explicitDurAttrs"/>
<attributeGroup ref="timing:freezeAttrs"/>
<attributeGroup ref="keyNavigation:keyNavigationAttrs"/>
</extension>
</complexContent>
</complexType>
<element name="descriptor" type="profile:descriptorType" substitutionGroup="descriptor:descriptor"/>
<!-- extends descriptorBase element -->
<complexType name="descriptorBaseType">
<complexContent>
<extension base="descriptor:descriptorBasePrototype">
<choice minOccurs="1" maxOccurs="unbounded">
<element ref="profile:importBase"/>
<element ref="profile:descriptor"/>
<element ref="profile:descriptorSwitch"/>
</choice>
</extension>
</complexContent>
</complexType>
<element name="descriptorBase" type="profile:descriptorBaseType" substitutionGroup="descriptor:descriptorBase"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Linking
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- substitutes linkParam and bindParam elements -->
<element name="linkParam" substitutionGroup="linking:linkParam"/>
<element name="bindParam" substitutionGroup="linking:bindParam"/>
<!-- extends bind element and link element, as a consequence-->
<complexType name="bindType">
<complexContent>
<extension base="linking:bindPrototype">
<attributeGroup ref="descriptor:descriptorAttrs"/>
</extension>
</complexContent>
© ABNT 2007 - Todos los derechos reservados
85
ABNT NBR 15606-2:2007
</complexType>
<element name="bind" type="profile:bindType" substitutionGroup="linking:bind"/>
<!-- extends link element -->
<complexType name="linkType">
<complexContent>
<extension base="linking:linkPrototype">
</extension>
</complexContent>
</complexType>
<element name="link" type="profile:linkType" substitutionGroup="linking:link"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Connector
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends connectorBase element -->
<complexType name="connectorBaseType">
<complexContent>
<extension base="connectorBase:connectorBasePrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="profile:importBase"/>
<element ref="profile:causalConnector" />
</choice>
</extension>
</complexContent>
</complexType>
<element name="connectorBase" type="profile:connectorBaseType" substitutionGroup="connectorBase:connectorBase"/>
<element name="causalConnector" substitutionGroup="causalConnectorFunctionality:causalConnector"/>
<element name="connectorParam" substitutionGroup="causalConnectorFunctionality:connectorParam"/>
<element name="simpleCondition" substitutionGroup="causalConnectorFunctionality:simpleCondition"/>
<element name="compoundCondition" substitutionGroup="causalConnectorFunctionality:compoundCondition"/>
<element name="simpleAction" substitutionGroup="causalConnectorFunctionality:simpleAction"/>
<element name="compoundAction" substitutionGroup="causalConnectorFunctionality:compoundAction"/>
<element name="assessmentStatement" substitutionGroup="causalConnectorFunctionality:assessmentStatement"/>
<element name="attributeAssessment" substitutionGroup="causalConnectorFunctionality:attributeAssessment"/>
<element name="valueAssessment" substitutionGroup="causalConnectorFunctionality:valueAssessment"/>
<element name="compoundStatement" substitutionGroup="causalConnectorFunctionality:compoundStatement"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- TestRule
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends rule element -->
<complexType name="ruleType">
<complexContent>
<extension base="testRule:rulePrototype">
</extension>
</complexContent>
</complexType>
<element name="rule" type="profile:ruleType" substitutionGroup="testRule:rule"/>
86
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<!-- extends compositeRule element -->
<complexType name="compositeRuleType">
<complexContent>
<extension base="testRule:compositeRulePrototype">
</extension>
</complexContent>
</complexType>
<element name="compositeRule" type="profile:compositeRuleType" substitutionGroup="testRule:compositeRule"/>
<!-- extends ruleBase element -->
<complexType name="ruleBaseType">
<complexContent>
<extension base="testRule:ruleBasePrototype">
<choice minOccurs="1" maxOccurs="unbounded">
<element ref="profile:importBase"/>
<element ref="profile:rule"/>
<element ref="profile:compositeRule"/>
</choice>
</extension>
</complexContent>
</complexType>
<element name="ruleBase" type="profile:ruleBaseType" substitutionGroup="testRule:ruleBase"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- TestRuleUse
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends bindRule element -->
<complexType name="bindRuleType">
<complexContent>
<extension base="testRuleUse:bindRulePrototype">
</extension>
</complexContent>
</complexType>
<element name="bindRule" type="profile:bindRuleType" substitutionGroup="testRuleUse:bindRule"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- ContentControl
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends switch element -->
<!-- switch interface element groups -->
<group name="switchInterfaceElementGroup">
<choice>
<element ref="profile:switchPort"/>
</choice>
</group>
<!-- extends defaultComponent element -->
<complexType name="defaultComponentType">
<complexContent>
<extension base="contentControl:defaultComponentPrototype">
</extension>
</complexContent>
</complexType>
<element name="defaultComponent" type="profile:defaultComponentType"
substitutionGroup="contentControl:defaultComponent"/>
<complexType name="switchType">
<complexContent>
<extension base="contentControl:switchPrototype">
<choice minOccurs="0" maxOccurs="unbounded">
© ABNT 2007 - Todos los derechos reservados
87
ABNT NBR 15606-2:2007
<group ref="profile:switchInterfaceElementGroup"/>
<element ref="profile:bindRule"/>
<element ref="profile:switch"/>
<element ref="profile:media"/>
<element ref="profile:context"/>
</choice>
<attributeGroup ref="entityReuse:entityReuseAttrs"/>
</extension>
</complexContent>
</complexType>
<element name="switch" type="profile:switchType" substitutionGroup="contentControl:switch"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- DescriptorControl
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends defaultDescriptor element -->
<complexType name="defaultDescriptorType">
<complexContent>
<extension base="descriptorControl:defaultDescriptorPrototype">
</extension>
</complexContent>
</complexType>
<element name="defaultDescriptor" type="profile:defaultDescriptorType"
substitutionGroup="descriptorControl:defaultDescriptor"/>
<!-- extends descriptorSwitch element -->
<complexType name="descriptorSwitchType">
<complexContent>
<extension base="descriptorControl:descriptorSwitchPrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="profile:descriptor"/>
<element ref="profile:bindRule"/>
</choice>
</extension>
</complexContent>
</complexType>
<element name="descriptorSwitch" type="profile:descriptorSwitchType"
substitutionGroup="descriptorControl:descriptorSwitch"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Timing
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Import
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<complexType name="importBaseType">
<complexContent>
<extension base="import:importBasePrototype">
</extension>
</complexContent>
</complexType>
<complexType name="importNCLType">
<complexContent>
<extension base="import:importNCLPrototype">
</extension>
</complexContent>
</complexType>
88
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<complexType name="importedDocumentBaseType">
<complexContent>
<extension base="import:importedDocumentBasePrototype">
</extension>
</complexContent>
</complexType>
<element name="importBase" type="profile:importBaseType" substitutionGroup="import:importBase"/>
<element name="importNCL" type="profile:importNCLType" substitutionGroup="import:importNCL"/>
<element name="importedDocumentBase" type="profile:importedDocumentBaseType"
substitutionGroup="import:importedDocumentBase"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- EntityReuse
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- ExtendedEntityReuse
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- KeyNavigation
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
</schema>
8
Objetos de media en presentaciones NCL
8.1 Implementación modular de Ginga-NCL
La presentación de un documento NCL requiere el control de la sincronización de varios objetos de media
(especificados a través del elemento <media>). Para cada objeto de media, un player (exhibidor de media) puede
ser cargado para el control del objeto y de sus eventos NCL. Un exhibidor de media (o su adaptador) debe ser
capaz obligatoriamente de recibir los comandos de presentación, controlar las máquinas de estado de los eventos
del objeto de media controlado y responder a las exigencias del formateador.
Para favorecer la incorporación de players de terceros dentro de la implementación de la arquitectura Ginga, se
recomienda un proyecto modular del Ginga-NCL para separar los players de la máquina de presentación
(formateador NCL).
La Figura 4 sugiere una organización modular para la implementación Ginga-NCL. Los exhibidores son módulos
plug-in de la máquina de presentación. Por ser interesante utilizar los players ya existentes, que puedan tener
interfaces propietarias que no sean compatibles con las exigidas por la máquina de presentación, será necesario
desarrollar módulos para hacer las adaptaciones necesarias. En ese caso, el exhibidor será constituido por un
adaptador además del exhibidor no-conforme en sí.
© ABNT 2007 - Todos los derechos reservados
89
ABNT NBR 15606-2:2007
Figura 4 — API para integrar los players a la implementación de la máquina de presentación NCL
NOTA
Como la arquitectura e implementación Ginga-NCL es una elección de cada receptor, esta subsección no tiene la
intención de estandarizar la sintaxis de la API de la máquina de presentación. El objetivo de esta sección es sólo definir el
comportamiento esperado del exhibidor de media cuando se está controlando objetos que forman parte de un documento NCL.
Lo descrito en 8.2 a 8.4 se refiere a los exhibidores de media para elemento <media> cuyo contenido no es código procedural,
es decir, elementos <media> cuyos tipos son diferentes de application/x-ginga-NCLua” y “application/x-ginga-NCLet”. Un
elemento <media> del tipo “application/x-ginga-NCL” se comporta como si fuera un nudo de composición constituido por su
elemento <body>, como presenta la Sección 8.4. Lo descrito en 8.5 se refiere a los exhibidores de media (máquinas Lua y
Java) para los elementos <media> cuyo contenido son códigos procedurales (Lua y Java).
8.2 Comportamiento esperado de los exhibidores de media
8.2.1
Instrucción start para eventos de presentación
Antes de enviar la instrucción start, se recomienda que el formateador encuentre el exhibidor de media más
apropiado, con base en el tipo de contenido a ser exhibido. Para tanto, el formateador lleva en consideración el
atributo player del elemento <descriptor> asociado con el objeto de media a ser exhibido. Si ese atributo no se
especifica, el formateador debe obligatoriamente tener en cuenta el atributo type del elemento <media>. Si ese
atributo tampoco se especifica, el formateador debe considerar obligatoriamente la extensión del archivo
especificado en el atributo src del elemento <media>.
La instrucción start emitida por un formateador debe informar obligatoriamente al exhibidor de media los
siguientes parámetros: El objeto de media a ser controlado, su descriptor asociado, una lista de eventos
(presentación, selección o atribución) que necesitan ser monitoreados por el exhibidor de media, el evento de
presentación a ser iniciado (denominado evento principal), un tiempo de compensación (offset-time) opcional y un
tiempo de retardo, opcional.
Un objeto de media debe ser obligatoriamente derivado de un elemento <media>, cuyo atributo src se debe usar
obligatoriamente, por el exhibidor de media, para localizar el contenido e iniciar la presentación. Si el contenido no
se puede localizar, o si el exhibidor de media no sabe cómo manejar el tipo de contenido, el exhibidor de media
debe obligatoriamente encerrar la operación de iniciación sin realizar ninguna acción.
El descriptor a ser utilizado debe ser obligatoriamente elegido por el formateador siguiendo las directrices
especificadas en el documento NCL. Si la instrucción start resulta de una acción de un eslabón que tenga un
descriptor explícitamente declarado en su elemento <bind> (atributo descriptor del elemento <bind>), el descriptor
resultante informado por el formateador debe obligatoriamente mezclar los atributos del descriptor especificado
por el <bind> con los atributos del descriptor especificado en el elemento <media> correspondiente, si ese
atributo ha sido especificado. Para atributos en común, la información del descriptor del <bind> debe
obligatoriamente superponer los datos del descriptor de la <media>. Si el elemento <bind> no contiene un
descriptor explícito, el descriptor informado por el formateador debe ser obligatoriamente el descriptor
especificado por el elemento <media>, si el atributo ha sido especificado. En caso contrario, debe ser
obligatoriamente elegido, por el formateador, un descriptor default para el tipo de <media> específico.
90
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Conviene que la lista de eventos a ser monitoreados por un exhibidor de media también sea computada por el
formateador, teniendo en cuenta la especificación del documento NCL. Debe obligatoriamente chequear todos los
eslabones de los cuales participa el objeto de media y el descriptor resultante. Al computar los eventos a ser
monitoreados, el formateador debe considerar obligatoriamente la perspectiva del objeto de media, es decir, el
camino de los varios elementos <body> y <context> para alcanzar en profundidad el elemento <media>
correspondiente. Conviene que apenas eslabones contenidos en esos elementos <body> y <context> sean
considerados en la computación de los eventos monitoreados.
El parámetro offset-time es opcional y tiene “cero” como su valor default. El parámetro es significativo solamente
para media continua o estática con duración explícita. En ese caso, el parámetro define un tiempo de
compensación, desde el inicio (beginning-time) del evento principal, desde el cual la presentación de ese evento
debe ser inmediatamente iniciada (es decir, comanda el exhibidor para saltar para el beginning-time + offset-time).
Obviamente, el valor del offset-time debe ser obligatoriamente menor que la duración del evento principal.
Si el offset-time es mayor que cero, el exhibidor de media debe obligatoriamente colocar el evento principal en el
estado ocurriendo (occurring), pero la transición de inicio (starts) del evento obligatoriamente no debe ser
notificada. Si el offset-time es cero, el exhibidor de media debe obligatoriamente colocar el evento principal en el
estado ocurriendo y notificar la ocurrencia de la transición de inicio. Los eventos que tendrían sus tiempos de
finalización anteriores al tiempo de inicio del evento principal y eventos que tendrían sus tiempos de inicio
después del tiempo de finalización del evento principal no necesitan ser monitoreados por el exhibidor de media
(conviene que el formateador haga esa verificación cuando construya la lista de eventos monitoreados).
Los eventos monitoreados que tienen tiempos de inicio antes del tiempo de inicio del evento principal y tiempos
de finalización después del tiempo de inicio del evento principal deben ser obligatoriamente colocados en el
estado de ocurriendo, pero sus transiciones de inicio obligatoriamente no deben ser notificadas (eslabones que
dependen de esa transición obligatoriamente no deben ser disparados). Los eventos monitoreados que tendrían
sus tiempos de finalización después del tiempo de inicio del evento principal, pero antes del tiempo de inicio
(beginning-time + offset-time), deben tener obligatoriamente su atributo occurrences incrementado, pero las
transiciones de inicio y término (stops) no deben ser notificadas. Los eventos monitoreados que tienen su tiempo
de inicio antes del momento de inicio (beginning time + offset-time) y tiempo de finalización después del tiempo de
inicio deben ser obligatoriamente colocados en el estado de ocurriendo, pero la transición de inicio
correspondiente obligatoriamente no debe ser notificada.
El tiempo de retardo también es un parámetro opcional y su valor default también es “cero”. Si es mayor que cero,
ese parámetro contiene un tiempo a ser esperado por el exhibidor de media antes de iniciar su presentación.
Ese parámetro se debe tener en cuenta apenas si el parámetro de offset-time es igual a “cero”.
Si un exhibidor de media recibe una instrucción de start para un objeto ya siendo presentado (pausado o no),
debe obligatoriamente ignorar la instrucción y mantener el control de la presentación en marcha. En este caso, el
elemento <simpleAction> que causó la instrucción start no debe causar cualquier transición en la máquina de
estados del evento a él asociado.
8.2.2
Instrucción stop
La instrucción stop necesita sólo identificar un objeto de media que ya está siendo controlado. Identificar el objeto
de media significa identificar el elemento <media>, el descriptor correspondiente y la perspectiva del objeto de
media. Así, si un elemento <simpleAction> con el action Type igual a “stop” se conecta por un eslabón a una
interfaz de nudo, la interfaz debe ser ignorada cuando la acción es ejecutada.
Si el objeto no está siendo presentado (es decir, si ninguno de los eventos en la lista de eventos del objeto está
en el estado occurring o paused) y el exhibidor de media no está aguardando debido a una instrucción atrasada
de start, la instrucción stop debe ser obligatoriamente ignorada. Si el objeto está siendo presentado, el evento
principal (evento pasado como parámetro cuando el objeto de media fue iniciado) y todos los eventos
monitoreados en el estado occurring o paused, con tiempo de finalización igual o anterior al tiempo de término del
evento principal deben obligatoriamente transitar para el estado sleeping y sus transiciones stops deben ser
obligatoriamente notificadas.
© ABNT 2007 - Todos los derechos reservados
91
ABNT NBR 15606-2:2007
Los eventos monitoreados en el estado occurring o paused con tiempo de finalización posterior al tiempo de
finalización del evento principal deben ser obligatoriamente colocados en el estado sleeping, pero sus transiciones
stops no deben ser notificadas y su atributo occurrences no se debe incrementar. La presentación del contenido
del objeto debe ser obligatoriamente parada. Si el atributo repetitions del evento es mayor que cero, debe ser
obligatoriamente disminuido en uno y la presentación del evento principal debe obligatoriamente reiniciar después
del tiempo entre repeticiones (el tiempo de retardo entre repeticiones debe obligatoriamente haber sido
transmitido al exhibidor de media como parámetro de retardo de inicio). Si el objeto de media está esperando para
ser presentado después de una instrucción start atrasada y si es emitida una instrucción stop, la instrucción de
start anterior debe ser obligatoriamente retirada.
“NOTA
Cuando todos los objetos de media que se refieren al flujo elemental que transporta el video principal de un
programa estén en estado sleeping, la exhibición del video principal ocupa toda la pantalla. Solamente por medio de un objeto
de media en ejecución se puede redimensionar el video principal. Lo mismo acontece con el audio principal de un programa,
cuando todos los objetos de media que se refieren al flujo elemental que transporta el audio principal de un programa están en
estado sleeping, la exhibición del audio principal adquiere el 100% de su volumen.
8.2.3
Instrucción abort
La instrucción abort necesita sólo identificar un objeto de media que ya está siendo controlado. Si un elemento
<simpleAction> con el action Type igual a “abort” se conecta por un eslabón a una interfaz de nudo, la interfaz
debe ser ignorada cuando la acción es ejecutada.
Si el objeto no está siendo presentado y no está esperando ser presentado después de una instrucción de start
atrasada, la instrucción abort debe ser obligatoriamente ignorada. Si el objeto está siendo presentado, evento
principal y todos los eventos monitoreados en el estado occurring o paused deben obligatoriamente transitar para el
estado sleeping, y sus transiciones aborts deben ser obligatoriamente notificadas. Cualquier presentación de
contenido debe obligatoriamente parar.
Si el atributo repetitions del evento es mayor que cero, debe ser colocado obligatoriamente en cero y la
presentación del objeto de media no debe ser reiniciada. Si el objeto de media está esperando para ser
presentado después de una instrucción start atrasada y es emitida una instrucción abort, la instrucción start debe
ser obligatoriamente retirada.
8.2.4
Instrucción pause
La instrucción pause sólo necesita identificar un objeto de media que ya está siendo controlado. Si un elemento
<simpleAction> con el action Type igual a “pause” se conecta por un eslabón a una interfaz de nudo, la interfaz
debe ser ignorada cuando la acción es ejecutada.
Si el objeto no está siendo presentado (si el evento principal, pasado como parámetro cuando el objeto de media
fue iniciado, no está en el estado occurring) y el exhibidor de media no está esperando por el retardo de inicio, la
instrucción debe ser obligatoriamente ignorada. Si el objeto está siendo presentado, el evento principal y todos los
eventos monitoreados en el estado occurring deben obligatoriamente pasar para el estado paused y sus
transiciones pauses deben ser obligatoriamente notificadas. La presentación del objeto debe ser obligatoriamente
pausada y el tiempo de pausa transcurrido obligatoriamente no se debe tener en cuenta como parte de la
duración del objeto. Como ejemplo, si un objeto tiene duración explícita de 30 s, y después de 25 s se pausa,
incluso si el objeto permanece pausado durante 5 min, después del reinicio, el evento principal del objeto debe
obligatoriamente permanecer ocurriendo por 5 S. Si el evento principal aún no está ocurriendo porque el exhibidor
de media está esperando el retardo de inicio, el objeto de media debe obligatoriamente esperar por una
instrucción resume para continuar aguardando el retardo de inicio.
8.2.5
Instrucción resume
La instrucción resume necesita apenas identificar un objeto de media que ya está siendo controlado. Si un
elemento <simpleAction> con el actionType igual a “resume” se conecta por un eslabón a una interfaz de nudo, la
interfaz debe ser ignorada cuando la acción es ejecutada.
92
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Si el objeto no está pausado (si el evento principal, pasado como parámetro cuando el objeto de media fue
iniciado, no está en el estado paused) y el exhibidor de media no está pausado (esperando por el retardo de
inicio), la instrucción debe ser obligatoriamente ignorada.
Si el exhibidor de media está pausado aguardando el retardo de inicio, debe obligatoriamente retomar la
exhibición desde el instante en que fue pausado. Si el evento principal está en el estado paused, el evento
principal y todos los eventos monitoreados en el estado paused deben ser obligatoriamente colocados en el
estado occurring y sus transiciones resumes deben ser obligatoriamente notificadas.
8.2.6
Instrucción start para eventos de atribución
La instrucción start puede ser aplicada a un atributo de un objeto independientemente del hecho de estar siendo
presentado o no (en este último caso, aunque el objeto no esté siendo presentado, su exhibidor de media ya debe
obligatoriamente haber sido referido). En el primer caso, la instrucción start necesita identificar el objeto de media
siendo controlado, un evento de atribución monitoreado y un valor a ser atribuido al atributo que definió el evento.
En el segundo caso, la instrucción también debe identificar obligatoriamente el elemento <descriptor> que será
usado durante la presentación del objeto (como se hace para la instrucción start para presentación).
Al aplicar un valor al atributo, el exhibidor de media debe obligatoriamente pasar la máquina del estado de evento
de atribución al estado occurring y, después de terminada la atribución, nuevamente para el estado sleeping,
generando la transición starts y a continuación la transición stops.
Para cada evento de atribución monitoreado, si el exhibidor de media altera, por su propia cuenta, el valor
correspondiente de un atributo, debe obligatoriamente proceder como si hubiese recibido una instrucción de
ajuste externa.
8.2.7
Instrucción addEvent
La instrucción addEvent es emitida en el caso de edición de un comando de edición NCL addInterface (ver
Sección 11). La instrucción necesita apenas identificar un objeto de media que ya esté siendo controlado y un
nuevo evento que deba ser obligatoriamente incluido para ser monitoreado.
Todas las reglas aplicadas a la intersección de eventos monitoreados con el evento principal se deberán aplicar
obligatoriamente al nuevo evento. Si el tiempo de inicio del nuevo evento es anterior al tiempo actual del objeto y
el tiempo de finalización del nuevo evento es posterior al tiempo actual del objeto, el nuevo evento debe ser
colocado obligatoriamente en el mismo estado del evento principal (occurring o paused), sin notificar la transición
correspondiente.
8.2.8
Instrucción removeEvent
La instrucción removeEvent es emitida en el caso de recepción de un comando de NCL removeInterface.
La instrucción necesita identificar un objeto de media que ya esté siendo controlado y un nuevo evento que ya no
tiene que ser controlado. El estado del evento debe ser colocado obligatoriamente en el estado sleeping sin
generar ninguna transición.
8.2.9
Finalización natural de una presentación
Los eventos de un objeto, con duración explícita o intrínseca, normalmente terminan sus presentaciones
naturalmente, sin necesitar instrucciones externas. En ese caso, el exhibidor de media debe obligatoriamente
pasar el evento para el estado sleeping y notificar la transición stops. Lo mismo debe ser obligatoriamente hecho
para eventos monitoreados en el estado occurring con el mismo tiempo de finalización del evento principal o con
tiempo de finalización desconocido, cuando el evento principal termina. Los eventos en el estado occurring con
tiempo de finalización posterior al tiempo de finalización del evento principal deben ser obligatoriamente
colocados en el estado sleeping sin generar la transición stops y sin incrementar el atributo occurences.
Es importante resaltar que, si el evento principal corresponde a un ancla temporal interna al objeto, cuando la
presentación de ese ancla termine, toda la presentación del objeto de media debe obligatoriamente terminar.
© ABNT 2007 - Todos los derechos reservados
93
ABNT NBR 15606-2:2007
8.3 Comportamiento esperado de los exhibidores de media después de instrucciones aplicadas
a los objetos de composición
NOTA
Los conceptos establecidos en esta subsección también se aplican a los elementos <media> del tipo “application/xginga-NCL”, que se comportarán como si fueran nudos de composición constituidos por sus elementos <body>.
8.3.1
Eslabones refiriendo nudos de composición
Un <simpleCondition> o <simpleAction> con valor del atributo eventType igual a “presentation” puede ser
asociado por un eslabón a un nudo de composición (representado por un elemento <context> o <body>) como un
todo (es decir, sin que una de sus interfaces sea informada). Como normalmente ocurre, la máquina de estado del
evento de presentación definido por el nudo de composición debe ser obligatoriamente controlada como
especificado en 7.2.8.
De forma análoga, un <attributeAssessment>, con valor de atributo eventType igual a “presentation” y
attributeType igual a “state”, “occurrences” o “repetitions” puede ser asociado por un eslabón a un nudo de
composición (representado por un elemento <context> o <body>) como un todo. Se recomienda que el valor del
atributo derive de la máquina de estado del evento de presentación definido por el nudo de composición.
Sin embargo, si una <simpleAction> con valor de atributo eventType igual a “presentation” es asociada por un
eslabón a un nudo de composición (representado por un elemento <context> o <body>) como un todo (es decir,
sin que una de sus interfaces sea informada), la instrucción debe ser obligatoriamente reflejada en las máquinas
de estado de evento de los nudos hijos de la composición.
8.3.2
Empezando la presentación de un contexto
Si un elemento <context> o <body> participa en un papel (role) action cuyo tipo de acción es "start", cuando esa
acción es accionada, la instrucción start también se debe aplicar obligatoriamente a todos los eventos de
presentación mapeados por los puertos de los elementos <context> o <body>.
Si el autor quisiera iniciar la presentación usando un puerto específico, también debe indicar obligatoriamente el id
de <port> como valor de interfaz <bind>.
8.3.3
Parando la presentación de un contexto
Si un elemento <context> o <body> participa en un papel (role) action cuyo tipo de acción es "stop", cuando esa
acción es accionada, la instrucción stop también se debe aplicar obligatoriamente a todos los eventos de
presentación de los nudos hijos de la composición.
Si la composición contiene eslabones siendo evaluados (o con su evaluación pausada), las evaluaciones deben
ser obligatoriamente suspendidas y obligatoriamente ninguna acción debe ser accionada.
8.3.4
Abortando la presentación de un contexto
Si un elemento <context> o <body> participa en un papel (role) action cuyo tipo de acción es "abort", cuando esa
acción es accionada, la instrucción abort también se debe aplicar obligatoriamente a todos los eventos de
presentación de los nudos hijos de la composición.
Si la composición contiene eslabones siendo evaluados (o con su evaluación pausada), las evaluaciones deben
ser obligatoriamente suspendidas y obligatoriamente ninguna acción debe ser accionada.
8.3.5
Pausando la presentación de un contexto
Si un elemento <context> o <body> participa en un papel (role) action cuyo tipo de acción es "pause", cuando esa
acción es accionada, la instrucción pause también se debe aplicar obligatoriamente a todos los eventos de
presentación de los nudos hijos de la composición que estén en el estado occurring.
Si la composición contiene eslabones siendo evaluados, todas las evaluaciones deben ser obligatoriamente
suspendidas hasta que una acción resume, stop o abort sea emitida.
94
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Si la composición contiene nudos-hijos con eventos de presentación en el estado paused cuando la acción
paused en la composición es emitida, ésos nudos deben ser obligatoriamente identificados, porque, si la
composición recibe una instrucción resume, esos eventos obligatoriamente no deben ser retomados.
8.3.6
Retomando la presentación de un contexto
Si un elemento <context> o <body> participa en un papel (role) action cuyo tipo de acción es "resume", cuando
esa acción sea accionada, la instrucción resume también se debe aplicar obligatoriamente a todos los eventos de
presentación de los nudos hijos de la composición que estén en el estado paused, excepto los que ya estaban
pausados antes de la composición ser pausada.
Si la composición contiene eslabones con evaluaciones pausadas, deben ser obligatoriamente reiniciadas.
8.4 Relación entre las máquinas de estado de eventos de presentación de un nudo y la máquina
de estado del evento de presentación de su nudo de composición padre
NOTA
Los conceptos establecidos en esta sub-sección también se aplican a elementos <media> del tipo “application/xginga-NCL”, que se comportarán como si fueran nudos de composición constituidos por sus elementos <body>.
Siempre que el evento de presentación de un nudo (media o composición) va al estado occurring, el evento de
presentación del nudo de composición que contiene el nudo también debe obligatoriamente entrar en el estado
occurring.
Cuando todos los nudos-hijos de un nudo de composición tengan sus eventos de presentación en el estado
sleeping, el evento de presentación del nudo de composición también debe obligatoriamente estar en el estado
sleeping.
Los nudos de composición no necesitan inferir transiciones aborts a partir de sus nudos-hijos. Esas transiciones
en los eventos de presentación de nudos de composición deben ocurrir obligatoriamente sólo cuando se aplican
instrucciones directamente a su evento de presentación (ver 8.3).
Cuando todos los nudos hijos de un nudo de composición tienen sus eventos de presentación en un estado
diferente de occurring y al menos uno de los nudos tiene su evento principal en el estado paused, el evento de
presentación del nudo de composición también debe estar en el estado paused.
Si un elemento <switch> es iniciado, pero no define un componente default y ninguna de las reglas <bindRule>
referenciadas es evaluada como verdadera, la presentación switch obligatoriamente no debe entrar en el estado
occurring.
8.5 Comportamiento esperado de los exhibidores procedurales en aplicaciones NCL
Objetos procedurales pueden ser insertados en documentos NCL, trayendo capacidades computacionales
adicionales a los documentos declarativos. La forma de agregar objetos procedurales en documentos NCL es
definir un elemento <media> cuyo contenido (localizado por el atributo src) es el código procedural a ser
ejecutado. Los perfiles EDTV y BDTV de NCL 3.0 permiten que dos tipos de media sean asociados con el
elemento <media>: Application/x-ginga-NCLua, para códigos procedurales Lua (extensión de archivo .lua); y
application/x-ginga-NCLet, para códigos procedurales Java (Xlet) (extensión de archivo .class o .jar).
Autores pueden definir eslabones NCL para iniciar, parar, pausar, retomar o abortar la ejecución de un código
procedural. Un exhibidor procedural (máquina de ejecución del lenguaje) debe proveer obligatoriamente la interfaz
del ambiente de ejecución procedural con el formateador NCL.
Análogamente a lo realizado por los exhibidores de contenidos de media convencional, los exhibidores
procedurales deben obligatoriamente controlar las máquinas de estado de los eventos asociados con el nudo
procedural NCL (NCLua o NCLet). Como ejemplo, si un código termina su ejecución, el exhibidor debe
obligatoriamente generar la transición stops en la máquina de estado de presentación del evento correspondiente
a la ejecución procedural.
NCL permite que la ejecución del código procedural sea sincronizada con otros objetos NCL (procedural o no). Un
elemento <media> conteniendo un código procedural también puede definir anclas (a través de elementos
<area>) y propiedades (a través de elementos <property>).
© ABNT 2007 - Todos los derechos reservados
95
ABNT NBR 15606-2:2007
Un código procedural puede ser asociado a elementos <area> (a través del atributo label). Si eslabones externos
empiezan, paran, pausan, retoman o abortan la presentación del ancla, callbacks en el código procedural deben
ser obligatoriamente disparados. La forma de cómo esos callbacks se definen es responsabilidad de cada código
procedural asociado con el objeto procedural NCL.
Por otro lado, un código procedural puede también comandar el inicio, parada, pausa, reconquista o aborto de
esas anclas, a través de una API ofrecida por el lenguaje procedural. Esas transiciones se pueden utilizar como
condiciones de eslabones NCL para disparar acciones en otros objetos NCL del mismo documento. Así, una
sincronización de dos vías puede ser establecida entre el código procedural y el resto del documento NCL.
La otra forma que un código procedural puede ser sincronizado con otros objetos NCL es a través de elementos
<property>. Un elemento <property> definido como hijo de un elemento <media>, representando un código
procedural, puede ser mapeado para un trecho de código (función, método etc.) o para un atributo del código.
Cuando es mapeado para un trecho de código, una acción de eslabón “set” aplicada a la propiedad debe
obligatoriamente causar la ejecución del código con los valores atribuidos interpretados como parámetros de
entrada. El atributo name del elemento <property> se debe utilizar obligatoriamente para identificar el trecho de
código procedural.
Un elemento <property> definido como hijo de un elemento <media> representa un código procedural, también
puede estar asociado a un assessment role de un eslabón NCL. En ese caso, el formateador NCL debe
obligatoriamente cuestionar el valor de la propiedad para evaluar la expresión del eslabón. Si el elemento
<property> es mapeado para un atributo de código, su valor debe ser retornado obligatoriamente por el exhibidor
procedural al formateador NCL. Si el elemento <property> es mapeado para un atributo de código, su valor debe
obligatoriamente ser retornado por el exhibidor procedural al formateador NCL. Si el elemento <property> es
mapeado para un trecho de código, debe obligatoriamente ser llamado y el valor del resultado de su ejecución
debe obligatoriamente ser retomado por el exhibidor procedural al formateador NCL.
La instrucción start emitida por un formateador debe informar obligatoriamente al exhibidor procedural los
siguientes parámetros: El objeto procedural a ser controlado, su descriptor asociado, una lista de eventos
(definidos por los elementos <area> y <property>, hijos del elemento <media> que define el objeto procedural)
que necesitan ser monitoreados por el exhibidor procedural, el identificador (id) del elemento <area> asociado al
código procedural a ser ejecutado, y un tiempo de retardo, opcional. Desde el atributo src, el exhibidor procedural
debe intentar localizar el código procedural e iniciar su ejecución. Si el contenido no se puede localizar, el
exhibidor procedural debe obligatoriamente finalizar la operación de inicialización sin realizar ninguna acción.
La lista de eventos a ser monitoreados por un exhibidor procedural se aconseja también que sea computada por
el formateador, teniendo en cuenta la especificación del documento NCL. Debe obligatoriamente chequear todos
los eslabones de los cuales participa el objeto de media procedural y el descriptor resultante. Al computar los
eventos a ser monitoreados, el formateador debe considerar obligatoriamente la perspectiva del objeto de media
procedural, es decir, el camino de los varios elementos <body> y <context> para alcanzar en profundidad el
elemento <media> correspondiente. Apenas eslabones contenidos en esos elementos <body> y <context> deben
ser considerados en la computación de los eventos monitoreados.
Como con todos los tipos de elemento <media>, el tiempo de retardo es un parámetro opcional, y su valor default
es “cero”. Si es mayor que cero, ese parámetro contiene un tiempo a ser esperado por el exhibidor procedural
antes de iniciar la ejecución.
A diferencia de los procedimientos realizados para otros tipos de elementos <media>, si un exhibidor procedural
recibe una instrucción start para un evento asociado a un elemento <area> y ese evento esté en el estado
sleeping, debe dar inicio a la ejecución del código procedural asociado al elemento, incluso si otra parte del
código procedural del objeto de media está en ejecución (pausado o no). Sin embargo, si el evento asociado al
elemento <area> destino está en el estado occurring o paused, la instrucción start debe ser ignorada por el
exhibidor procedural que continuará controlando la ejecución anteriormente iniciada. Como consecuencia,
a diferencia de lo que ocurre para los otros elementos <media>, una acción <simpleAction> con el atributo
actionType igual a “stop”, “pause”, “resume” o “abort” debe conectarse, a través de un eslabón, a una interfaz del
nudo procedural, que no debe ser ignorada cuando la acción se aplica.
La instrucción start emitida por un formateador para un evento asociado a un elemento <property> puede ser
aplicada a un objeto procedural independientemente de si está siendo ejecutado o no (en ese último caso,
aunque el objeto no esté siendo ejecutado, su exhibidor procedural debe obligatoriamente ya haber sido referido).
96
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
En el primer caso, la instrucción start necesita identificar el objeto procedural, un evento de atribución
monitoreado y un valor a ser pasado al código procedural asociado al evento. En el segundo caso, debe
obligatoriamente también identificar el elemento <descriptor> que será usado durante la ejecución del objeto
(análogo a lo que se hace para la instrucción start para eventos de pressentación).
Para cada evento de atribución monitoreado, si el exhibidor procedural cambia por sí mismo el valor del atributo,
debe proceder obligatoriamente como si hubiese recibido una instrucción externa de start.
Se recomienda que lenguajes procedurales ofrezcan una API que permita que los códigos procedurales
cuestionen cualquier valor de propiedades predefinidas o dinámicas del nudo settings NCL (elemento <media> del
tipo “application/x-ginga-settings”). Sin embargo, se debe observar que no se permite atribuir valores a esas
propiedades directamente. Las propiedades de los nudos del tipo application/x-ginga-settings sólo pueden ser
modificadas a través del uso de eslabones NCL.
9
Transmisión de contenido y eventos NCL
9.1 Bases privadas
El núcleo de la máquina de presentación Ginga-NCL está compuesto por el formateador NCL y su módulo Gestor
de Base Privada.
El formateador NCL es responsable por recibir un documento NCL y controlar su presentación, intentando
garantizar que las relaciones especificadas entre los objetos de media sean respetadas. El formateador trata con
documentos NCL que son recolectados dentro de una estructura de datos conocida como base privada. Ginga
asocia una base privada a un canal de televisión. Los documentos NCL en una base privada pueden ser iniciados,
pausados, retomados, parados y pueden referirse unos a los otros.
El Gestor de Base Privada es responsable por recibir comandos de edición de documentos NCL y por la edición
de los documentos NCL activos (documentos siendo presentados).
Esta subsección trata solamente de comandos de edición enviados por el canal de difusión terrestre.
NOTA
Los mismos comandos de edición también pueden ser recibidos por el canal de interactividad o por eventos
generados por los objetos imperativos NCLua y NCLet.
Ginga adopta secciones MPEG-2 específicas (identificadas por el campo tableID de la Sección MPEG-2) para
transportar los comandos de edición en flujos elementales MPEG-2 TS, cuando los comandos son enviados por el
canal de difusión terrestre.
Los Comandos de Edición son empaquetados en una estructura llamada descriptor de evento. Cada dsriptor de
evento tiene una esteructura compuesta, básicamente, por un id (identificación), una referencia de tiempo y un
campo de datos privados. La identificación define de forma unívoca cada evento.
La referencia de tiempo indica el exacto momento de disparar el evento. Un tiempo de referencia igual a cero
informa que el evento debe, obligatoriamente, ser inmediatamente disparado después de ser recibido (eventos
transportando este tipo de referencia de tiempo son comúnmente conocidos como eventos “do it now”). El campo
de datos privados ofrece soporte para parámetros del evento, como presenta la Figura 5.
Sintaxis
EventDescriptor ( ) {
eventId
eventNPT
privateDataLenght
commandTag
sequenceNumber
finalFlag
privateDataPayload
FCS
Número de bits
16
33
8
8
7
1
8 a 2008
8
}
Figura 5 – Descriptor de evento para comandos de edición
© ABNT 2007 - Todos los derechos reservados
97
ABNT NBR 15606-2:2007
El campo commandTag identifica en forma unívoca los comandos de edición, como especificado en la Tabla 56.
Para permitir enviar un comando completo con más de 255 bytes en más de un descriptor de evento, todos los
descriptores de un mismo comando deben obligatoriamente ser numerados y enviados en secuencia (o sea, no
puede ser multiplexado con otros comandos de edición con el mismo commandTag), con el finalFlag igual a 1,
excepto para el último receptor, que debe obligatoriamente tener el campo finalFlag igual a 0.
El privateDataPayload contiene los parámetros de comando de edición. Y por último, el campo FCS contiene un
checksum de todo el campo privateData, incluso el privateDataLength.
EJEMPLO
Eventos de flujo se pueden usar para transportar descriptores de eventos. El protocolo de carrusel de objetos
DSM-cc permite la transmisión cíclica de objetos de eventos y sistemas de archivo. Los objetos de eventos se utilizan para
mapear nombres de eventos de flujo en ids de eventos de flujo, definidos por los descriptores de evento. Los objetos de
eventos son utilizados para informar al Ginga sobre eventos de flujo DSN-CC que pueden recibirse. Los nombres de los
eventos permiten especificar tipos de eventos, ofreciendo mayor nivel de abstracción a las aplicaciones del middleware.
En ese caso, es conveniente que el Gestor de la Base Privada, así como los objetos de ejecución procedural NCL(ejemplo,
NCLua, NCLet), se registren como observadores de los eventos de flujo con los que trabajan, utilizando nombres de evento.
Los archivos de documento NCL y los contenidos de objeto de media NCL se organizan en estructuras de
sistemas de archivos. Los parámetros de comando de edición, basados en XML, pueden ser directamente
transportados en el playload de un descriptor de evento o, alternativamente, organizados en estructuras de
sistema de archivos a ser transportadas en el canal de difusión de datos o, incluso, ser recibidas por el canal de
interactividad.
EJEMPLO Un generador de carrusel DSM-CC podía usarse para unir los sistemas de archivos y los objetos de eventos de
flujo en un flujo elemental de datos. Cuando un comando de edición de documentos NCL precisara ser enviado, podría criarse
un objeto de eventos DSM-CC, mapeando la string “nclEditingCommand” en una id de evento de flujo, y entonces colocado en
un carrusel de objetos DSM-CC. Uno o más descriptores de evento de flujo DSM-CC con la id previamente seleccionada
podrían entonces ser creados y enviados en otro flujo elemental MPEG-2 TS. Estos eventos de flujo podrían tener su
referencia de tiempo fijada en cero, pero también podrían ser aplazados para ser ejecutados en un tiempo específico. El
Gestor de la Base Privada debería registrarse como un oyente “nclEditingCommand” y sería notificado cuando estos eventos
de flujo llegasen.
El commandTag recibido es utilizado por el Gestor de la Base Privada para interpretar la semántica de la
command string. Si el command parameter basado en XML es lo suficientemente corto, puede ser transportado
directamente en el payload de los descriptores de evento. Si no, el privateDatePayload transporta un conjunto de
pares de referencia. En el caso de archivos recibidos por el canal de difusión (documentos en nudos NCL
enviados sin solicitación), cada par relaciona un conjunto de caminos de archivos y su respectiva localización en
el sistema de transporte. En el caso de archivos recibidos sobre pedido por el canal de interactividad o localizados
en el propio receptor, ningún par de referencias necesita ser enviado, excepto el par {uri, “null”} asociado al
documento NCL o a la especificación XML del nudo NCL que deberá ser adicionado según el comando de adición
correspondiente.
La Tabla 56 muestra las strings de comando y, rodeados por paréntesis, los parámetros transportados como
contenido payload del descriptor de evento de nclEditingCommand. Los comandos se dividen en tres grupos:
El primero para operación de la base privada (para abrir, ativar, desactivar, cerrar y grabar bases privadas); el
segundo para manipulación de documento (para adicionar, borrar y grabar un documento en una base privada y
para iniciar, pausar, retomar y parar presentaciones de documentos); y el último para manejar entidades NCL.
Para cada entidad NCL, fueron definidos los comandos add y remove. Si una entidad ya existe, el comando add
tiene la semántica de actualización (alteración).”
NOTA
El primer grupo de comandos de operación normalmente no viene a través del canal de difusión de datos. Como ya
fue mencionado, comandos de edición también pueden ser recibidos por el canal de interactividad o venir de eventos
generados por objetos imperativos NCLua y NCLet. Los comandos de edición también pueden ser generados internamente
por el middleware.
98
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 56 — Comandos de edición para el Gestor de la Base Privada Ginga
Tag de
comando
Descripción
openBase (baseId, location)
0x00
Abre una base privada existente localizada por el parámetro location. Si la base privada
no existe o si el parámetro location no es informado, una nueva base es creada con el
identificador baseId. El parámetro location debe obligatoriamente especificar el
dispositivo y el camino donde está la base a ser abierta
activateBase (baseId)
0x01
Activa una base privada abierta
deactivateBase (baseId)
0x02
Desactiva una base privada abierta
saveBase (baseId, location)
0x03
Graba todo el contenido de la base privada en un dispositivo de almacenamiento
persistente (si disponible). El parámetro location debe especificar obligatoriamente el
dispositivo y camino para grabar la base
closeBase (baseId)
0x04
Cierra la base privada y descarta todo el contenido de la base privada
String de comando
Agrega un documento NCL a una base privada. Los documentos NCL pueden ser:
a) enviados sin solicitación por la red de difusión de datos; en este caso, el par {uri, id}
se usa para relacionar un conjunto de caminos de archivos en el documento NCL con
sus respectivas localizaciones en el sistema de transporte (vea ejemplos en la Sección
12);
addDocument (baseId, {uri, ior}+)
0x05
NOTA Los conjuntos de pares de referencia obligatoriamente deben ser suficientes
para que el middleware pueda mapear cualquier referencia a archivos presentes en la
especificación del documento NCL en su localización concreta en la memoria del
dispositivo receptor.
b) recibidos por el canal de interactividad sobre pedido, o ya ser residentes en el
receptor; para estos archivos, ningún par {uri, id} necesita ser enviado, excepto el par
{uri, “null”} asociado al documento NCL, que deberá añadirse en la base baseId, si el
documento NCL no fuese recibido sin solicitación (pushed file)
removeDocument (baseId,
documentId)
saveDocument (baseId,
documented, location)
0x06
Remueve un documento NCL de una base privada
0x2E
Grava un documento NCL en un dispositivo de almacenamiento persistente (si
disponible). El parámetro location debe especificar el dispositivo y el camino en el
dispositivo en el que el documento será gravado. Si el documento NCL está siendo
exhibido, primero debe pararse (todos los eventos en el estado occurring se deben
parar)
Inicia la reproducción de un documento NCL en una base privada, empezando la
presentación desde una interfaz específica del documento. La referencia del tiempo
transportada en el campo eventNPT establece el punto de inicio del documento, con
respecto a la base de tiempo NPT del contenido refNodeId del documento
refDocumentId siendo recibido. Pueden darse tres casos:
startDocument (baseId, documentId,
interfaceId, offset, refDocumentId,
refNoteId)
0x07
a) Si eventNPT es mayor o igual al valor de NPT de la base temporal del contenido
refNodeId siendo recibido, se espera hasta que NPT alcance el valor dado en eventNPT
y empiece la exhibición del documento desde su punto inicial en el tiempo+offset
b) Si eventNPT es menor que el valor de NPT de la base temporal del contenido
refNodeId siendo recibido, el inicio de la exhibición del documento es inmediato y
desplazado en el tiempo de su punto inicial del valor “offset+(NPT – eventNPT)
segundos”
stopDocument (baseId,
documentId)
0x08
pauseDocument (baseId,
documentId)
0x09
© ABNT 2007 - Todos los derechos reservados
NOTA Solamente en este caso, el parámetro offset puede recibir un valor negativo,
pero offset+(NPT – eventNPT)segundos debe obligatoriamente ser un valor positivo
Para la presentación de un documento NCL en una base privada. Todos los eventos del
documento que están en marcha deben ser obligatoriamente parados
Pausa la presentación de un documento NCL en una base privada. Todos los eventos
del documento que están en marcha deben ser obligatoriamente pausados
99
ABNT NBR 15606-2:2007
Tabla 56 (continuación)
String de comando
resumeDocument (baseId, documentId)
Tag de comando
Descripción
0x0A
Retoma la presentación de un documento NCL en una base privada. Todos
los eventos del documento que fueron previamente pausados por el
comando de edición pauseDocument deben ser obligatoriamente retomados
Agrega un elemento <region> como hijo de otro <region> en el
addRegion (baseId, documentId,
regionBaseId, regionId, xmlRegion)
0x0B
<RegionBase>, o como hijo del <regionBase> (regionId=”null”)
de un documento NCL en una base privada
removeRegion (baseId, documentId,
regionId)
0x0C
addRegionBase (baseId, documentId,
xmlRegionBase)
0x0D
removeRegionBase (baseId, documentId,
regionBaseId)
0x0E
addRule (baseId, documentId, xmlRule)
0x0F
removeRule (baseId, documentId, ruleId)
0x10
addRuleBase (baseId, documentId,
xmlRuleBase)
100
0x11
Remueve un elemento <region> de un <regionBase> de un documento NCL
en una base privada
Agrega un elemento <regionBase> al elemento <head> de un documento
NCL en una base privada. Si la especificación XML del regionBase es
enviada en un sistema de transporte como un sistema de archivo, el
parámetro xmlRegionBase es sólo una referencia para ese contenido
Remueve un elemento <regionBase> del elemento <head> de un
documento NCL en una base privada
Agrega un elemento <rule> al <ruleBase> de un documento NCL en una
base privada
Remueve un elemento <rule> del <ruleBase> de un documento NCL en una
base privada
Agrega un elemento <ruleBase> al elemento <head> de un
documento NCL en una base privada. Si la especificación XML del
ruleBase es enviada en un sistema de transporte como un sistema
de archivo, el parámetro xmlRuleBase es apenas una referencia
para ese contenido
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 56 (continuación)
Tag de
comando
Descripción
removeRuleBase (baseId, documentId,
ruleBaseId)
0x12
Remueve un elemento <ruleBase> del elemento
<head> de un documento NCL en una base
privada
addConnector (baseId, documentId,
xmlConnector)
0x13
Agrega un elemento <connector> al
<connectorBase> de un documento NCL en una
base privada
removeConnector (baseId, documentId,
connectorId)
0x14
Remueve un elemento <connector> del
<connectorBase> de un documento NCL en una
base privada
addConnectorBase (baseId, documentId,
xmlConnectorBase)
0x15
Agrega un elemento <connectorBase> al
elemento <head> de un documento NCL en una
base privada. Si la especificación XML del
connectorBase es enviada en un sistema de
transporte como un sistema de archivo, el
parámetro xmlConnectorBase es apenas una
referencia para ese contenido
removeConnectorBase (baseId, documentId,
connectorBaseId)
0x16
Remueve un elemento <connectorBase> del
elemento <head> de un documento NCL en una
base privada
addDescriptor (baseId, documentId,
xmlDescriptor)
0x17
Agrega un elemento <descriptor> al
<descriptorBase> de un documento NCL en una
base privada
removeDescriptor (baseId, documentId,
descriptorId)
0x18
Remueve un elemento <descriptor> del
<descriptorBase> de un documento NCL en una
base privada
addDescriptorSwitch (baseId, documentId,
xmlDescriptorSwitch)
0x19
Agrega un elemento <descriptorSwitch> al
<descriptorBase> de un documento NCL en una
base privada. Si la especificación XML del
descriptorSwitch es enviada en un sistema de
transporte como un sistema de archivo, el
parámetro xmlDescriptorSwitch es apenas una
referencia para ese contenido
removeDescriptorSwitch (baseId, documentId,
descriptorSwitchId)
0x1A
Remueve un elemento <descriptorSwitch> del
<descriptorBase> de un documento NCL en una
base privada
addDescriptorBase (baseId, documentId,
xmlDescriptorBase)
0x1B
Agrega un elemento <descriptorBase> al
elemento <head> de un documento NCL en una
base privada. Si la especificación XML del
descriptorBase es enviada en un sistema de
transporte como un sistema de archivo, el
parámetro xmlDescriptorBase es apenas una
referencia para ese contenido
removeDescriptorBase (baseId, documentId,
descriptorBaseId)
0x1C
Remueve un elemento <descriptorBase> del
elemento <head> de un documento NCL en una
base privada
addTransition (baseId, documentId,
xmlTransition)
0x1D
Agrega un elemento <transition> al
<transitionBase> de un documento NCL en una
base privada
removeTransition (baseId, documentId,
transitionId)
0x1E
Remueve un elemento <transition> del
<transitionBase> de un documento NCL en una
base privada
String de comando
© ABNT 2007 - Todos los derechos reservados
101
ABNT NBR 15606-2:2007
Tabla 56 (continuación)
String de comando
Tag de
comando
addTransitionBase (baseId, documentId,
xmlTransitionBase)
0x1F
removeTransitionBase (baseId, documentId,
transitionBaseId)
0x20
addImportBase (baseId, documentId, docBaseId,
xmlImportBase)
0x21
removeImportBase (baseId, documentId,
docBaseId, documentURI)
0x22
addImportedDocumentBase
(baseId, documentId, xmlImportedDocumentBase)
removeImportedDocumentBase (baseId,
documentId, importedDocumentBaseId)
addImportNCL (baseId, documentId,
xmlImportNCL)
0x23
0x24
0x25
removeImportNCL (baseId, documentId,
documentURI)
0x26
addNode (baseId, documentId, compositeId, {uri,
ior}+)
0x27
removeNode(baseId, documentId, compositeId,
nodeId)
0x28
addInterface (baseId, documentId, nodeId,
xmlInterface)
0x29
removeInterface (baseId, documentId, nodeId,
interfaceId)
0x2A
addLink (baseId, documentId, compositeId,
xmlLink)
0x2B
102
Descripción
Agrega un elemento <transitionBase> al elemento <head> de un
documento NCL en una base privada. Si la especificación XML del
transitionBase es enviada en un sistema de transporte como un sistema
de archivo, el parámetro xmlTransitionBase es apenas una referencia
para ese contenido
Remueve un elemento <transitionBase> del elemento <head> de un
documento NCL en una base privada
Agrega un elemento <importBase> a la base (elemento <regionBase>,
<descriptorBase>, <ruleBase>, <transitionBase>, o <connectorBase>) de
un documento NCL en una base privada
Remueve un elemento <importBase>, cuyo atributo documentURI es
identificado por el parámetro documentURI, desde la base (elemento
<regionBase>, <descriptorBase>, <ruleBase>, <transitionBase>, o
<connectorBase>) de un documento NCL en una base privada
Agrega un elemento <importedDocumentBase> al elemento <head> de
un documento NCL en una base privada
Remueve un elemento <importedDocumentBase> del elemento
<head> de un documento NCL en una base privada
Agrega un elemento <importNCL> al elemento
<importedDocumentBase> de un documento NCL en una base privada
Remueve un elemento <importNCL>, cuyo atributo documentURI es
identificado por el parámetro documentURI, desde el
<importedDocumentBase> de un documento NCL en una base privada
Agrega un nudo (elemento <media>, <context> o <switch>) a un nudo
de composición (elemento <body>, <context> o <switch>) de un
documento NCL en una base privada. La especificación XML del nudo
y su contenido de media pueden:
a) ser enviados sin solicitación por la red de difusión de datos; en ese
caso, el par {uri, id} es usado para relacionar un conjunto de caminos
de archivos, definidos en el documento XML de la especificación del
nudo, con sus respectivas localizaciones en el sistema de transporte
(ver ejemplos en la Sección 12);
NOTA Los conjuntos de pares de referencia deben obligatoriamente
ser suficientes para que el middleware pueda mapear cualquier
referencia a archivos, presentes en la especificación del nudo, en su
localización concreta en la memoria del dispositivo receptor.
b) ser recibidos por el canal de interactividad sobre pedido o ya ser
residentes en el receptor; para estos archivos, ningún par {uri, id}
necesita ser enviado, excepto el par {uri, “null”} asociado a la
especialización XML del nudo NCL que deberá ser adicionado en
compositeId, en el caso de que el documento XML no se reciba sin
solicitación (pushed file)
Remueve un nudo (elemento <media>, <context> o <switch>) de un
nudo de composición (elemento <body>, <context> o <switch>) de un
documento NCL en una base privada
Agrega una interfaz (<port>, <area>, <property> o <switchPort>) a un
nudo (elemento <media>, <body>, <context> o <switch>) de un
documento NCL en una base privada
Remueve una interfaz (<port>, <area>, <property>, o <switchPort>) de
un nudo (elemento <media>, <body>, <context> o <switch>) de un
documento NCL en una base privada. La interfaceID debe identificar
obligatoriamente un atributo name de un elemento <property> o un
atributo id de un elemento <port>, <area> o <switchPort>
Agrega un elemento <link> a un nudo de composición (elemento
<body>, <context> o <switch>) de un documento NCL en una base
privada
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 56 (continuación)
String de comando
removeLink (baseId, documentId, compositeId,
linkId)
setPropertyValue(baseId, documentId, nodeId,
propertyId, value)
Tag de
comando
Descripción
0x2C
Remueve un elemento <link> de un nudo de composición (elemento
<body>, <context> o <switch>) de un documento NCL en una base
privada
0x2D
Atribuye el valor a una propiedad. La propertyId debe identificar
obligatoriamente un atributo name de un elemento <property> o un
atributo id de elemento <switchPort>. El <property> o <switchPort> debe
obligatoriamente pertenecer a un nudo (elemento <body>, <context>,
<switch> o <media>) de un documento NCL en una base privada
identificada por los parámetros
Los receptores que solamente implementan el perfil NCL DTV Básico pueden no manejar los siguientes
comandos: pauseDocument, resumeDocument, addTransition, remove Transition, add TransitionBase y remove
TransitionBase.
Ginga asocia una base privada a un canal de televisión. Cuando un canal es sintonizado, su base privada
correspondiente es abierta y activada por el Gestor de la Base Privada; otras bases privadas deben ser
desactivadas. Por razones de seguridad, sólo una única base privada puede estar activa por vez. El modo más
simple y restrictivo de gestionar bases privadas es tener una única base privada abierta por vez. Así, si el usuario
cambia el canal seleccionado, es recomendable cerrar la base privada actual. En este caso, el comando
openBase es siempre seguido por el comando activeBase y el comando deactiveBase nunca se utiliza.
Sin embargo, el número de bases privadas que pueden mantenerse abiertas es una decisión de implementación
del middleware.
Los comandos add tienen entidades NCL como sus argumentos (parámetros de comando basados en XML). Si la
entidad especificada ya existe o no, la consistencia del documento debe ser obligatoriamente mantenida por el
formateador NCL, en el sentido de que todos los atributos de identidad clasificados como obligatorios se deben
definir obligatoriamente. Las entidades se definen utilizando una notación sintáctica idéntica a aquella usada por
los esquemas NCL, con excepción del comando addInterface: el atributo begin de un elemento <area> puede
recibir el valor “now”, especificando el NPT actual del nodeId, que debe ser obligatoriamente el video principal
MPEG siendo reproducido por el decodificador de hardware.
Los identificadores utilizados en los comandos deben estar de acuerdo obligatoriamente con la Tabla 57.
Tabla 57 — Identificadores que se utilizan en los comandos de edición
Identificadores
Definición
baseId
Identificadores de canal de radiodifusión especificados por el SBTVD
DocumentId
Atributo id de un elemento <ncl> de un documento NCL
refDocumentId
Atributo id de un elemento <ncl> de un documento NCL
refNodeId
Atributo id de un elemento <media> de un documento NCL
regionId
Atributo id de un elemento <region> de un documento NCL
ruleId
Atributo id de un elemento <rule> de un documento NCL
connectorId
Atributo id de un elemento <connector> de un documento NCL
descriptorId
Atributo id de un elemento <descriptor> de un documento NCL
descriptorSwitchId
Atributo id de un elemento <descriptorSwitch> de un documento NCL
transitionId
Atributo id de un elemento <transition> de un documento NCL
regionBaseId
Atributo id de un elemento <regionBase> de un documento NCL
ruleBaseId
Atributo id de un elemento <ruleBase> de un documento NCL
© ABNT 2007 - Todos los derechos reservados
103
ABNT NBR 15606-2:2007
Tabla 57 (continuación)
Identificadores
Definición
connectorBaseId
Atributo id de un elemento <connectorBase> de un documento NCL
descriptorBaseId
transitionBaseId
Atributo id de un elemento <descriptorBase> de un documento NCL
Atributo id de un elemento <transitionBase> de un documento NCL
docBaseId
Atributo id de un elemento <regionBase>, <ruleBase>, <connectorBase>,
<descriptorBase>, o <transitionBase> de un documento NCL
documentU RI
Atributo documentURI de un elemento <importBase> o un elemento
<importNCL> de un documento NCL
importedDocumentBaseId
Atributo id de un elemento <importedDocumentBase> de un documento
NCL
compositeID
Atributo id de un elemento <body>, <context> o <switch> de un document
NCL
nodeId
Atributo id de un elemento <body>, <context>, <switch> o <media> de un
documento NCL
interfaceId
Atributo id de un elemento <port>, <area>, <property> o <switchPort> de
un documento NCL
linkId
Atributo id de un elemento <link> de un documento NCL
propertyId
Atributo id de un elemento <property>, o <switchPort> de un documento
NCL
9.2 Esquema XML de los parámetros de comando
Las entidades NCL utilizadas en los comandos de edición deben ser obligatoriamente un documento de
conformidad con el perfil de Comando NCL 3.0 definido por el esquema XML a continuación. Conviene que los
receptores que apenas implementan el perfil Básico NCL DTV ignoren los elementos y atributos XML
relacionados a las funcionalidades de Meta-information y Transition Efects.
Observar que, diferentemente de los documentos NCL, diversos elementos NCL pueden tener el elemento raíz en
los parámetros de comando XML.
NCL30EdCommand.xsd
<!-XML Schema for the NCL Language
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/profiles/NCL30EdCommand.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:animation="http://www.ncl.org.br/NCL3.0/Animation"
xmlns:compositeInterface="http://www.ncl.org.br/NCL3.0/CompositeNodeInterface"
xmlns:causalConnectorFunctionality="http://www.ncl.org.br/NCL3.0/CausalConnectorFunctionality"
xmlns:connectorBase="http://www.ncl.org.br/NCL3.0/ConnectorBase"
xmlns:connectorCausalExpression="http://www.ncl.org.br/NCL3.0/ConnectorCausalExpression"
104
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
xmlns:contentControl="http://www.ncl.org.br/NCL3.0/ContentControl"
xmlns:context="http://www.ncl.org.br/NCL3.0/Context"
xmlns:descriptor="http://www.ncl.org.br/NCL3.0/Descriptor"
xmlns:entityReuse="http://www.ncl.org.br/NCL3.0/EntityReuse"
xmlns:extendedEntityReuse="http://www.ncl.org.br/NCL3.0/ExtendedEntityReuse"
xmlns:descriptorControl="http://www.ncl.org.br/NCL3.0/DescriptorControl"
xmlns:import="http://www.ncl.org.br/NCL3.0/Import"
xmlns:keyNavigation="http://www.ncl.org.br/NCL3.0/KeyNavigation"
xmlns:layout="http://www.ncl.org.br/NCL3.0/Layout"
xmlns:linking="http://www.ncl.org.br/NCL3.0/Linking"
xmlns:media="http://www.ncl.org.br/NCL3.0/Media"
xmlns:mediaAnchor="http://www.ncl.org.br/NCL3.0/MediaContentAnchor"
xmlns:propertyAnchor="http://www.ncl.org.br/NCL3.0/PropertyAnchor"
xmlns:structure="http://www.ncl.org.br/NCL3.0/Structure"
xmlns:switchInterface="http://www.ncl.org.br/NCL3.0/SwitchInterface"
xmlns:testRule="http://www.ncl.org.br/NCL3.0/TestRule"
xmlns:testRuleUse="http://www.ncl.org.br/NCL3.0/TestRuleUse"
xmlns:timing="http://www.ncl.org.br/NCL3.0/Timing"
xmlns:transitionBase="http://www.ncl.org.br/NCL3.0/TransitionBase"
xmlns:metainformation="http://www.ncl.org.br/NCL3.0/Metainformation"
xmlns:transition="http://www.ncl.org.br/NCL3.0/Transition"
xmlns:profile="http://www.ncl.org.br/NCL3.0/EdCommandProfile"
targetNamespace="http://www.ncl.org.br/NCL3.0/EdCommandProfile"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<!-- import the definitions in the modules namespaces -->
<import namespace="http://www.ncl.org.br/NCL3.0/Animation"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Animation.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/CompositeNodeInterface"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30CompositeNodeInterface.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/CausalConnectorFunctionality"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30CausalConnectorFunctionality.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/ConnectorBase"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30ConnectorBase.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/ConnectorCausalExpression"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30ConnectorCausalExpression.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/ContentControl"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30ContentControl.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Context"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Context.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Descriptor"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Descriptor.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/DescriptorControl"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30DescriptorControl.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/EntityReuse"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30EntityReuse.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/ExtendedEntityReuse"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30ExtendedEntityReuse.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Import"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Import.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/KeyNavigation"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30KeyNavigation.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Layout"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Layout.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Linking"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Linking.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Media"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Media.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/MediaContentAnchor"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30MediaContentAnchor.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/PropertyAnchor"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30PropertyAnchor.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Structure"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Structure.xsd"/>
© ABNT 2007 - Todos los derechos reservados
105
ABNT NBR 15606-2:2007
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30SwitchInterface.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/TestRule"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30TestRule.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/TestRuleUse"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30TestRuleUse.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/Timing"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Timing.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/TransitionBase"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30TransitionBase.xsd"/>
import namespace="http://www.ncl.org.br/NCL3.0/Metainformation"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Metainformation.xsd"/>
..<import namespace="http://www.ncl.org.br/NCL3.0/Transition"
….schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30Transition.xsd"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!--EditingCommand
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!--defines the command element -->
<!--This is a pseudo-element, only defined to show the elements that may be used in the root of the command parameters
XML document-->
<!-<complexType name="commandType">
<choice minOccurs="1" maxOccurs="1">
<element ref="profile:ncl"/>
<element ref="profile:region"/>
<element ref="profile:rule"/>
<element ref="profile:connector"/>
<element ref="profile:descriptor"/>
<element ref="profile:descriptorSwitch"/>
<element ref="profile:transition"/>
<element ref="profile:regionBase"/>
<element ref="profile:ruleBase"/>
<element ref="profile:connectorBase"/>
<element ref="profile:descriptorBase"/>
<element ref="profile:transitionBase"/>
<element ref="profile:importBase"/>
<element ref="profile:importedDocumentBase"/>
<element ref="profile:importNCL"/>
<element ref="profile:media"/>
<element ref="profile:context"/>
<element ref="profile:switch"/>
<element ref="profile:port"/>
<element ref="profile:area"/>
<element ref="profile:property"/>
<element ref="profile:switchPort"/>
<element ref="profile:link"/>
<element ref=”profile:meta”/>
<element ref=”profile:metadata”/>
</choice>
</complexType>
<element name="command" type="profile:commandType"/>
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Structure
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends ncl element -->
<element name="ncl" substitutionGroup="structure:ncl"/>
<!-- extends head element -->
<complexType name="headType">
106
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<complexContent>
<extension base="structure:headPrototype">
<sequence>
<element ref="profile:importedDocumentBase" minOccurs="0" maxOccurs="1"/>
<element ref="profile:ruleBase" minOccurs="0" maxOccurs="1"/>
<element ref="profile:transitionBase" minOccurs="0" maxOccurs="1"/>
<element ref="profile:regionBase" minOccurs="0" maxOccurs="unbounded"/>
<element ref="profile:descriptorBase" minOccurs="0" maxOccurs="1"/>
<element ref="profile:connectorBase" minOccurs="0" maxOccurs="1"/>
<element ref="profile:meta" minOccurs="0" maxOccurs="unbounded"/>
<element ref="profile:metadata" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</extension>
</complexContent>
</complexType>
<element name="head" type="profile:headType" substitutionGroup="structure:head"/>
<!-- extends body element -->
<complexType name="bodyType">
<complexContent>
<extension base="structure:bodyPrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="profile:contextInterfaceElementGroup"/>
<element ref="profile:media"/>
<element ref="profile:context"/>
<element ref="profile:switch"/>
<element ref="profile:link"/>
</choice>
</extension>
</complexContent>
</complexType>
<element name="body" type="profile:bodyType" substitutionGroup="structure:body"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Layout
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends regionBase element -->
<complexType name="regionBaseType">
<complexContent>
<extension base="layout:regionBasePrototype">
<choice minOccurs="1" maxOccurs="unbounded">
<element ref="profile:region"/>
<element ref="profile:importBase"/>
</choice>
</extension>
</complexContent>
</complexType>
<complexType name="regionType">
<complexContent>
<extension base="layout:regionPrototype">
</extension>
</complexContent>
</complexType>
<element name="regionBase" type="profile:regionBaseType" substitutionGroup="layout:regionBase"/>
<element name="region" type="profile:regionType" substitutionGroup="layout:region"/>
© ABNT 2007 - Todos los derechos reservados
107
ABNT NBR 15606-2:2007
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Media
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends Media elements -->
<!-- media interface element groups -->
<group name="mediaInterfaceElementGroup">
<choice>
<element ref="profile:area"/>
<element ref="profile:property"/>
</choice>
</group>
<complexType name="mediaType">
<complexContent>
<extension base="media:mediaPrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="profile:mediaInterfaceElementGroup"/>
</choice>
<attributeGroup ref="descriptor:descriptorAttrs"/>
<attributeGroup ref="entityReuse:entityReuseAttrs"/>
<attributeGroup ref="extendedEntityReuse:extendedEntityReuseAttrs"/>
</extension>
</complexContent>
</complexType>
<element name="media" type="profile:mediaType" substitutionGroup="media:media"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Context
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends context element -->
<!-- composite node interface element groups -->
<group name="contextInterfaceElementGroup">
<choice>
<element ref="profile:port"/>
<element ref="profile:property"/>
</choice>
</group>
<complexType name="contextType">
<complexContent>
<extension base="context:contextPrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="profile:contextInterfaceElementGroup"/>
<element ref="profile:media"/>
<element ref="profile:context"/>
<element ref="profile:link"/>
<element ref="profile:switch"/>
<element ref=”profile:meta”/>
<element ref=”profile:metadata”/>
</choice>
<attributeGroup ref="entityReuse:entityReuseAttrs"/>
</extension>
</complexContent>
</complexType>
<element name="context" type="profile:contextType" substitutionGroup="context:context"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- MediaContentAnchor
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends area element -->
<complexType name="componentAnchorType">
108
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<complexContent>
<extension base="mediaAnchor:componentAnchorPrototype">
<attribute name="now" type="string" use="optional"/>
</extension>
</complexContent>
</complexType>
<element name="area" type="profile:componentAnchorType" substitutionGroup="mediaAnchor:area"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- CompositeNodeInterface
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends port element -->
<complexType name="compositeNodePortType">
<complexContent>
<extension base="compositeInterface:compositeNodePortPrototype">
</extension>
</complexContent>
</complexType>
<element name="port" type="profile:compositeNodePortType" substitutionGroup="compositeInterface:port"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- PropertyAnchor
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends property element -->
<complexType name="propertyAnchorType">
<complexContent>
<extension base="propertyAnchor:propertyAnchorPrototype">
</extension>
</complexContent>
</complexType>
<element name="property" type="profile:propertyAnchorType" substitutionGroup="propertyAnchor:property"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- SwitchInterface
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends switchPort element -->
<complexType name="switchPortType">
<complexContent>
<extension base="switchInterface:switchPortPrototype">
</extension>
</complexContent>
</complexType>
<element name="mapping" substitutionGroup="switchInterface:mapping"/>
<element name="switchPort" type="profile:switchPortType" substitutionGroup="switchInterface:switchPort"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Descriptor
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- substitutes descriptorParam element -->
<element name="descriptorParam" substitutionGroup="descriptor:descriptorParam"/>
© ABNT 2007 - Todos los derechos reservados
109
ABNT NBR 15606-2:2007
<complexType name="descriptorType">
<complexContent>
<extension base="descriptor:descriptorPrototype">
<attributeGroup ref="layout:regionAttrs"/>
<attributeGroup ref="timing:explicitDurAttrs"/>
<attributeGroup ref="timing:freezeAttrs"/>
<attributeGroup ref="keyNavigation:keyNavigationAttrs"/>
<attributeGroup ref="transition:transAttrs"/>
</extension>
</complexContent>
</complexType>
<element name="descriptor" type="profile:descriptorType" substitutionGroup="descriptor:descriptor"/>
<!-- extends descriptorBase element -->
<complexType name="descriptorBaseType">
<complexContent>
<extension base="descriptor:descriptorBasePrototype">
<choice minOccurs="1" maxOccurs="unbounded">
<element ref="profile:importBase"/>
<element ref="profile:descriptor"/>
<element ref="profile:descriptorSwitch"/>
</choice>
</extension>
</complexContent>
</complexType>
<element name="descriptorBase" type="profile:descriptorBaseType" substitutionGroup="descriptor:descriptorBase"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Linking
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- substitutes linkParam and bindParam elements -->
<element name="linkParam" substitutionGroup="linking:linkParam"/>
<element name="bindParam" substitutionGroup="linking:bindParam"/>
<!-- extends bind element and link element, as a consequence-->
<complexType name="bindType">
<complexContent>
<extension base="linking:bindPrototype">
<attributeGroup ref="descriptor:descriptorAttrs"/>
</extension>
</complexContent>
</complexType>
<element name="bind" type="profile:bindType" substitutionGroup="linking:bind"/>
<!-- extends link element -->
<complexType name="linkType">
<complexContent>
<extension base="linking:linkPrototype">
</extension>
</complexContent>
</complexType>
<element name="link" type="profile:linkType" substitutionGroup="linking:link"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Connector
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends connectorBase element -->
<complexType name="connectorBaseType">
110
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<complexContent>
<extension base="connectorBase:connectorBasePrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="profile:importBase"/>
<element ref="profile:causalConnector" />
</choice>
</extension>
</complexContent>
</complexType>
<complexType name="simpleActionType">
<complexContent>
<extension base="connectorCausalExpression:simpleActionPrototype">
<attributeGroup ref="animation:animationAttrs"/>
</extension>
</complexContent>
</complexType>
<element name="connectorBase" type="profile:connectorBaseType" substitutionGroup="connectorBase:connectorBase"/>
<element name="causalConnector" substitutionGroup="causalConnectorFunctionality:causalConnector"/>
<element name="connectorParam" substitutionGroup="causalConnectorFunctionality:connectorParam"/>
<element name="simpleCondition" substitutionGroup="causalConnectorFunctionality:simpleCondition"/>
<element name="compoundCondition" substitutionGroup="causalConnectorFunctionality:compoundCondition"/>
<element name="simpleAction" type="profile:simpleActionType"
substitutionGroup="causalConnectorFunctionality:simpleAction"/>
<element name="compoundAction" substitutionGroup="causalConnectorFunctionality:compoundAction"/>
<element name="assessmentStatement" substitutionGroup="causalConnectorFunctionality:assessmentStatement"/>
<element name="attributeAssessment" substitutionGroup="causalConnectorFunctionality:attributeAssessment"/>
<element name="valueAssessment" substitutionGroup="causalConnectorFunctionality:valueAssessment"/>
<element name="compoundStatement" substitutionGroup="causalConnectorFunctionality:compoundStatement"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- TestRule
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends rule element -->
<complexType name="ruleType">
<complexContent>
<extension base="testRule:rulePrototype">
</extension>
</complexContent>
</complexType>
<element name="rule" type="profile:ruleType" substitutionGroup="testRule:rule"/>
<!-- extends compositeRule element -->
<complexType name="compositeRuleType">
<complexContent>
<extension base="testRule:compositeRulePrototype">
</extension>
</complexContent>
</complexType>
<element name="compositeRule" type="profile:compositeRuleType" substitutionGroup="testRule:compositeRule"/>
<!-- extends ruleBase element -->
© ABNT 2007 - Todos los derechos reservados
111
ABNT NBR 15606-2:2007
<complexType name="ruleBaseType">
<complexContent>
<extension base="testRule:ruleBasePrototype">
<choice minOccurs="1" maxOccurs="unbounded">
<element ref="profile:importBase"/>
<element ref="profile:rule"/>
<element ref="profile:compositeRule"/>
</choice>
</extension>
</complexContent>
</complexType>
<element name="ruleBase" type="profile:ruleBaseType" substitutionGroup="testRule:ruleBase"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- TestRuleUse
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends bindRule element -->
<complexType name="bindRuleType">
<complexContent>
<extension base="testRuleUse:bindRulePrototype">
</extension>
</complexContent>
</complexType>
<element name="bindRule" type="profile:bindRuleType" substitutionGroup="testRuleUse:bindRule"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- ContentControl
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends switch element -->
<!-- switch interface element groups -->
<group name="switchInterfaceElementGroup">
<choice>
<element ref="profile:switchPort"/>
</choice>
</group>
<!-- extends defaultComponent element -->
<complexType name="defaultComponentType">
<complexContent>
<extension base="contentControl:defaultComponentPrototype">
</extension>
</complexContent>
</complexType>
<element name="defaultComponent" type="profile:defaultComponentType"
substitutionGroup="contentControl:defaultComponent"/>
<complexType name="switchType">
<complexContent>
<extension base="contentControl:switchPrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="profile:switchInterfaceElementGroup"/>
<element ref="profile:bindRule"/>
<element ref="profile:switch"/>
<element ref="profile:media"/>
<element ref="profile:context"/>
</choice>
<attributeGroup ref="entityReuse:entityReuseAttrs"/>
</extension>
</complexContent>
</complexType>
112
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<element name="switch" type="profile:switchType" substitutionGroup="contentControl:switch"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- DescriptorControl
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends defaultDescriptor element -->
<complexType name="defaultDescriptorType">
<complexContent>
<extension base="descriptorControl:defaultDescriptorPrototype">
</extension>
</complexContent>
</complexType>
<element name="defaultDescriptor" type="profile:defaultDescriptorType"
substitutionGroup="descriptorControl:defaultDescriptor"/>
<!-- extends descriptorSwitch element -->
<complexType name="descriptorSwitchType">
<complexContent>
<extension base="descriptorControl:descriptorSwitchPrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="profile:descriptor"/>
<element ref="profile:bindRule"/>
</choice>
</extension>
</complexContent>
</complexType>
<element name="descriptorSwitch" type="profile:descriptorSwitchType"
substitutionGroup="descriptorControl:descriptorSwitch"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Timing
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Import
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<complexType name="importBaseType">
<complexContent>
<extension base="import:importBasePrototype">
</extension>
</complexContent>
</complexType>
<complexType name="importNCLType">
<complexContent>
<extension base="import:importNCLPrototype">
</extension>
</complexContent>
</complexType>
<complexType name="importedDocumentBaseType">
<complexContent>
<extension base="import:importedDocumentBasePrototype">
</extension>
</complexContent>
</complexType>
<element name="importBase" type="profile:importBaseType" substitutionGroup="import:importBase"/>
<element name="importNCL" type="profile:importNCLType" substitutionGroup="import:importNCL"/>
© ABNT 2007 - Todos los derechos reservados
113
ABNT NBR 15606-2:2007
<element name="importedDocumentBase" type="profile:importedDocumentBaseType"
substitutionGroup="import:importedDocumentBase"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- EntityReuse
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- ExtendedEntityReuse
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- KeyNavigation
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- TransitionBase
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- extends transitionBase element -->
<complexType name="transitionBaseType">
<complexContent>
<extension base="transitionBase:transitionBasePrototype">
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="profile:transition"/>
<element ref="profile:importBase"/>
</choice>
</extension>
</complexContent>
</complexType>
<element name="transitionBase" type="profile:transitionBaseType" substitutionGroup="transitionBase:transitionBase"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Transition -->
<!-- =========================================================== -->
<element name="transition" substitutionGroup="transition:transition"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- Metainformation
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<element name="meta" substitutionGroup="metainformation:meta"/>
<element name="metadata" substitutionGroup="metainformation:metadata"/>
</schema>
10 Objetos procedurales Lua en presentaciones NCL
10.1 Lenguaje Lua - Funciones retiradas de la biblioteca de Lua
El lenguaje de script adoptado por el Ginga-NCL es Lua (elementos <media> del tipo application/x-ginga-NCLua).
La definición completa de Lua se presenta en el Anexo B.
Las funciones a continuación son dependientes de plataforma y fueron retiradas:
a)
en el módulo package: loadlib;
b)
en el módulo io: todas las funciones;
c)
en el módulo os: clock, execute, exit, getenv, remove, rename, tmpname y setlocale;
114
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
d)
en el módulo debug: todas las funciones.
10.2 Modelo de ejecución
El ciclo de vida de un objeto NCLua es controlado por el formateador NCL. El formateador es responsable por
iniciar la ejecución de un objeto NCLua y por mediar la comunicación entre ese objeto y otros objetos en un
documento NCL, como definido en 8.5.
Como con todos los exhibidores de objetos de media, un exhibidor Lua, una vez referido, debe ejecutar los
procedimientos de iniciación del objeto NCL que controlará. Sin embargo, diferentemente de los demás
exhibidores de media, el código de iniciación debe también ser especificado por el autor del objeto NCLua. Los
procedimientos de iniciación se ejecutan una sola vez, para cada instancia, y crean funciones y objetos que se
pueden usar durante la ejecución del objeto NCLua y, en particular, registra uno o más tratadores de eventos para
la comunicación con el formateador NCL.
Después de la iniciación, la ejecución del objeto NCLua se torna orientada a evento, en ambas direcciones. Es
decir, cualquier acción comandada por el formateador NCL es dirigida a los tratadores de evento registrados, y
cualquier notificación de cambio de estado de eventos NCL es enviada como un evento al formateador NCL
(como por ejemplo, el fin de la ejecución del código de procedimiento). El exhibidor Lua estará entonces listo para
ejecutar cualquier intrusión de start o set (ver 8.5).
10.3 Módulos adicionales
10.3.1 Módulos obligatorios
Además de la biblioteca estándar de Lua, los siguientes módulos deben ser obligatoriamente ofrecidos y
automáticamente cargados:
a)
módulo canvas: ofrece una API para dibujar primitivas gráficas y manejar imágenes;
b)
módulo event: permite que aplicaciones NCLua se comuniquen con el middleware a través de eventos
(eventos NCL y de teclas);
c)
módulo settings: exporta una tabla con variables definidas por el autor del documento NCL y variables de
ambiente reservadas en un nudo "application/x-ginga-settings";
d)
módulo persistent: exporta una tabla con variables persistentes, que están disponibles para manipulación
apenas por objetos de procedimiento.
La definición de cada función en los módulos mencionados respeta la siguiente nomenclatura:
funcname (parnameI: partypeI [; optnameI: opttypeI]) -> retname: rettype
10.3.2 Módulo canvas
10.3.2.1
Objeto canvas
Cuando un objeto de media NCLua es iniciado, la región del elemento <media> correspondiente (del tipo
application/x-ginga-NCLua) queda disponible como la variable global canvas para el script Lua. Si el elemento de
<media> no tiene ninguna región especificada (propiedades left, right, Top and bottom), entonces el valor para
canvas debe ser establecido como “nil”.
Ejemplo: para una región definida en un documento NCL como:
<Region iD="luaRegion" width="300" height="100" Top="200" left="20"/>
© ABNT 2007 - Todos los derechos reservados
115
ABNT NBR 15606-2:2007
La variable 'canvas ' en un objeto de media asociado a la región “luaRegion” es conectada a un objeto canvas de
tamaño 300x100, asociada con la región (20,200).
Un canvas ofrece una API gráfica para ser usada por aplicaciones NCLua. A través de ella es posible dibujar
líneas, rectángulos, fuentes, imágenes etc.
Un canvas guarda en su estado atributos bajo los cuales operan las primitivas de dibujo, por ejemplo, si su
atributo de color es azul, una llamada a canvas:drawLine() dibuja una línea azul en el canvas.
Las coordenadas pasadas son siempre relativas al punto más a la izquierda y a la parte superior del canvas (0,0).
10.3.2.2
Constructores
A través de cualquier canvas es posible crear nuevos canvas y combinarlos a través de operaciones de
composición.
canvas:new (image_path: String) -> canvas: object
Argumentos
image_path
Camino de la imagen
Valor de retorno
canvas
Canvas representando la imagen
Descripción
Retorna un nuevo canvas cuyo contenido es la imagen recibida como parámetro.
El nuevo canvas debe obligatoriamente mantener los aspectos de transparencia de la imagen original.
canvas:new (width, height: Number) -> canvas: object
Argumentos
width
Ancho del canvas
height
Altura del canvas
Valores de retorno
canvas
Nuevo canvas
Descripción
Retorna un nuevo canvas con el tamaño recibido.
Inicialmente todos los pixels deben ser transparentes, obligatoriamente.
10.3.2.3
Atributos
Todos los métodos de atributos tienen el código attr y sirven tanto para leer como para alterar un atributo (con
algunas excepciones).
Cuando el método es llamado sin parámetros de entrada el valor corriente del atributo es retornado, en
contrapartida, cuando es llamado con parámetros, ésos deben ser los nuevos valores del atributo.
canvas:attrSize () -> width, height: number
Argumentos
116
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Valores de retorno
width
Ancho del canvas
height
Altura del canvas
Descripción
Retorna las dimensiones del canvas.
Es importante observar que no se permite alterar las dimensiones de un canvas.
canvas:attrColor (R, G, B, A: Number)
Argumentos
R
Componente rojo del color
G
Componente verde del color
B
Componente azul del color
A
Componente Alpha del color
Descripción
Altera el color del canvas.
Los colores se pasan en RGBA, donde A varia de 0 (totalmente transparente) a 255 (totalmente opaco). Las
primitivas (ver 10.3.3.4) son dibujadas con el color de ese atributo del canvas.
El valor inicial es ‘0,0,0,255’ (negro).
canvas:attrColor (clr_name: string)
Argumentos
clr_name
Nombre del color
Altera el color del canvas.
Los colores pasan a través de una string correspondiendo a uno de los 16 colores NCL predefinidas: 'white',
'aqua', 'lime', 'yellow', 'red', 'fuchsia', 'purple', 'maroon',
'blue', 'navy', 'teal', 'green', 'olive', 'silver', 'gray', 'black'
Para valores en string, el Alpha es opaco (correspondiendo a “A = 255”).
Las primitivas (ver 10.3.3.4) son dibujadas con el color de ese atributo del canvas.
El valor inicial es 'black'.
© ABNT 2007 - Todos los derechos reservados
117
ABNT NBR 15606-2:2007
canvas:attrColor () -> R, G, B, A: number
Valores de retorno
R
Componente rojo del color
G
Componente verde del color
B
Componente azul del color
A
Componente alpha del color
Descripción
Retorna el color del canvas.
canvas:attrFont (face: string; size: number; style: string)
Argumentos
face
size
style
Nombre de la fuente
Tamaño de la fuente
Estilo de la fuente
Descripción
Altera la fuente del canvas.
Las siguientes fuentes deben estar disponibles obligatoriamente: 'Tiresias', 'Verdana'.
El tamaño es en pixels y representa la altura máxima de una línea escrita con la fuente elegida.
Los estilos posibles son: 'bold', 'italic' o 'bold-italic'. El valor nil presupone que ninguno de los estilos será usado.
Cualquier valor pasado no soportado debe obligatoriamente generar un error.
El valor inicial de la fuente es indeterminado.
canvas:attrFont () -> face: string; size: number; style: string
Valores de retorno
face
size
style
Descripción
Nombre de la fuente
Tamaño de la fuente
Estilo de la fuente
Retorna la fuente del canvas.
canvas:attrClip (x, y, width, height: Number)
Argumentos
x
118
Coordenada del área de clipping
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
y
Coordenada del área de clipping
width
Ancho del área de clipping
height
Descripción
Altura del área de clipping
Altera el área de clipping del canvas.
Las primitivas de dibujo (ver 10.3.3.4) y el método canvas:compose() solo operan dentro de esta región de
clipping.
El valor inicial es el canvas entero.
canvas:attrClip () -> x, y, width, height: number
Valores de retorno
x
Coordenada del área de clipping
y
Coordenada del área de clipping
width
Ancho del área de clipping
height
Altura del área de clipping
Descripción
Retorna el área de clipping del canvas.
canvas:attrCrop (x, y, w, h: number)
Argumentos
x
y
Coordenada de la región de crop
Coordenada de la región de crop
w
h
Descripción
Anchura de la región de crop
Altura de la región de crop
Altera la región de crop del canvas.
Solamente la región configurada pasa a ser usada en operaciones de composición.
El valor inicial es el canvas entero.
El canvas principal no puede tener su valor alterado pues es controlado por el formateador NCL.
canvas:attrCrop () -> x, y, w, h: number
Valores de retorno
x
y
w
h
Descripción
© ABNT 2007 - Todos los derechos reservados
Coordenada de la región de crop
Coordenada de la región de crop
Anchura de la región de crop
Altura de la región de crop
119
ABNT NBR 15606-2:2007
Retorna la región de crop del canvas.
canvas:attrFlip (horiz, vert: boolean)
Argumentos
horiz
Si el espejado es horizontal
vert
Si el espejado es vertical
Descripción
Configura el espejado del canvas usado en funciones de composición
El canvas principal no puede tener su valor alterado pues es controlado por el formateador NCL.
canvas:attrFlip () -> horiz, vert: boolean
Argumentos
horiz
Si el espejado es horizontal
vert
Si el espejado es vertical
Descripción
Retorna la configuración de espejado del canvas.
canvas:attrOpacity (opacity: number)
Argumento
opacity
Nuevo valor de opacidad del canvas
Descripción
Altera la opacidad del canvas.
El valor de la opacidad varía entre 0 (transparente) y 255 (opaco).
El canvas principal no puede tener su valor alterado pues es controlado por el formateador NCL.
canvas:attrOpacity () -> opacity: number
Valor de retorno
opacity
Opacidad del canvas
Descripción
Retorna el valor de la opacidad del canvas.
120
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
canvas:attrRotation (degrees: number)
Argumento
degrees
Rotación del canvas en grados
Descripción
Configura el atributo de rotación del canvas, que debe ser múltiplo de 90 grados.
El canvas principal no puede tener su valor alterado pues es controlado por el formateador NCL.
canvas:attrRotation () -> degrees: number
Valor de retorno
degrees
Rotación del canvas en grados
Descripción
Retorna el atributo de rotación del canvas.
canvas:attrScale (w, h: number)
Argumentos
w
Anchura de escalonamiento del canvas
h
Altura de escalonamiento del canvas
Descripción
Escalona el canvas con nueva anchura y altura.
Uno de los valores puede ser true, indicando que la proporción del canvas debe mantenerse.
El atributo de escalonamiento es independiente del atributo de tamaño, o sea, el tamaño del canvas se mantiene.
El canvas principal no puede tener su valor alterado pues es controlado por el formateador NCL.
canvas:attrScale () -> w, h: number
Valor de retorno
w
Anchura de escalonamiento del canvas
h
Altura de escalonamiento del canvas
Descripción
Retorna los valores de escalonamiento del canvas.
10.3.2.4
Primitivas
Todos los métodos siguientes tienen en cuenta los atributos del canvas.
canvas:drawLine (x1, y1, x2, y2: number)
Argumentos
x1
Extremidad 1 de la línea
© ABNT 2007 - Todos los derechos reservados
121
ABNT NBR 15606-2:2007
y1
Extremidad 1 de la línea
x2
y2
Descripción
Extremidad 2 de la línea
Extremidad 2 de la línea
Dibuja una línea con sus extremidades en (x1,y1) y (x2,y2).
canvas:drawRect (mode: string; x, y, width, height: Number)
Argumentos
mode
x
Modo de dibujo
Coordenada del rectángulo
y
Coordenada del rectángulo
width
Ancho del rectángulo
height
Altura del rectángulo
Descripción
Función para dibujo y rellenado de rectángulos.
El parámetro mode puede recibir 'frame' para dibujar apenas el marco del rectángulo o 'fill' para rellenarlo.
canvas:drawRoundRect (mode: string; x, y, width, height, arcWidth, arcHeight: number)
Argumentos
mode
x
Modo de dibujo
Coordenada del rectángulo
y
Coordenada del rectángulo
width
Anchura del rectángulo
height
Altura del rectángulo
arcWidth
Anchura del arco de la esquina redondeada
arcHeight
Altura del arco de la esquina redondeada
Descripción
Función para dibujo y rellenado de rectángulos redondeados.
El parámetro mode puede recibir 'frame' para dibujar apenas el contorno o 'fill' para rellenarlo.
canvas:drawPolygon (mode: string) -> drawer: function
Argumentos
mode
Valores de retorno
f
Descripción
122
Modo de dibujo
Función de dibujo
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Método para dibujo y rellenado de polígonos.
El parámetro mode recibe el valor 'open', para dibujar el polígono sin conectar el último punto al primero; 'close',
para dibujar el polígono conectando el último punto al primero; o 'fill', para dibujar el polígono enlazando el último
punto al primero y colorear la región interior.
La función canvas:drawPolygon retorna una función anónima "drawer" con la firma:
function (x, y) end
La función retornada recibe las coordenadas del próximo vértice del polígono y retorna a sí mismo con resultado.
Ese procedimiento recurrente facilita la composición:
canvas:drawPolygon('fill')(1,1)(10,1)(10,10)(1,10)()
Al recibir nil la función "drawer" efectúa la operación encadenada. Cualquier llamada subsiguiente debe
obligatoriamente generar un error.
canvas:drawEllipse (mode: string; xc, yc, width, height, ang_start, ang_end: number)
Argumentos
mode
xc
Modo de dibujo
Centro de la elipsis
yc
Centro de la elipsis
width
Ancho de la elipsis
height
Altura de la elipsis
ang_start
Ángulo de inicio
ang_end
Ángulo de fin
Descripción
Dibuja elipsis y otras primitivas análogas tales como círculos, arcos y sectores.
El parámetro mode puede recibir 'arc' para dibujar apenas la circunferencia o 'fill' para rellenado interno.
canvas:drawText (x, y: number; text: string)
Argumentos
x
Coordenada del texto
y
Coordenada del texto
text
Texto a ser dibujado
Descripción
Dibuja el texto pasado en la posición (x,y) del canvas utilizando la fuente configurada en canvas:attrFont().
© ABNT 2007 - Todos los derechos reservados
123
ABNT NBR 15606-2:2007
10.3.2.5
Miscelánea
canvas:clear (x, y, w, h: number)
Argumentos
x
Coordenada del área de clear
y
Coordenada del área de clear
w
Anchura del área de clear
h
Altura del área de clear
Descripción
Limpia el canvas con el color configurado en attrColor.
Caso no sean pasados los parámetros del parea, se asume que se limpiará el canvas entero.
canvas:flush ()
Descripción
Actualiza el canvas después de operaciones de dibujo y composición.
Es suficiente llamarlo una sola vez después de una secuencia de operaciones.
canvas:compose (x, y: number; src: canvas; [ src_x, src_y, src_width, src_height: number ])
Argumentos
x
Posición de la composición
y
Posición de la composición
src
Canvas a ser compuesto
src_x
Posición de la composición en el canvas src
src_y
Posición de la composición en el canvas src
src_width
Ancho de la composición en el canvas src
src_height
Altura de la composición en el canvas src
Descripción
Hace sobre el canvas (canvas de destino), en su posición (x,y), la composición pixel a pixel con src (canvas de
origen).
Los otros parámetros son opcionales e indican qué parte del canvas src componer. Cuando ausentes, es
compuesto el canvas entero.
Esa operación llama la src:flush() automáticamente antes de la composición.
La composición satisface la ecuación:
Cd = Cs*As + Cd*(255 - As)/255
Ad = As*As + Ad*(255 - As)/255
124
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
donde:
Cd = color del canvas de destino (canvas)
Ad = alfa del canvas de destino (canvas)
Cs = color del canvas de origen (src)
As = alfa del canvas de origen (src)
Después de la operación el canvas de destino tiene el resultado de la composición y src no sufre ninguna
alteración.
canvas:pixel (x, y, R, G, B, A: number)
Argumentos
x
y
Posición del pixel
Posición del pixel
R
Componente rojo del color
G
Componente verde del color
B
Componente azul del color
A
Descripción
Componente alpha del color
Altera el color de un pixel del canvas.
canvas:pixel (x, y: number) -> R, G, B, A: number
Argumentos
x
y
Posición del pixel
Posición del pixel
Valores de retorno
R
Componente rojo del color
G
Componente verde del color
B
Componente azul del color
A
Descripción
Componente alpha del color
Retorna el color de un pixel del canvas.
canvas:measureText (text: string) -> dx, dy: number
Argumentos
text
Texto a ser medido
Valores de retorno
© ABNT 2007 - Todos los derechos reservados
125
ABNT NBR 15606-2:2007
dx
Anchura del texto
dy
Descripción
Altura del texto
Retorna las coordenadas limítrofes para el texto pasado, en el caso que el mismo fuese dibujado en la posición
(x,y) del canvas con la fuente configurada en canvas:attrFont().
10.3.3 Módulo event
10.3.3.1
Visión general
Este módulo ofrece una API para tratamiento de eventos. A través del mismo el formateador NCL y una aplicación
NCLua pueden comunicarse de manera asíncrona.
Una aplicación también puede disfrutar de ese mecanismo internamente, a través de eventos de la clase "user".
Probablemente el uso más común de aplicaciones NCLua será tratando eventos: ya sean éstos eventos NCL
(ver 7.2.8) o de interacción con el usuario (por el control remoto, por ejemplo).
Durante su iniciación, antes de volverse orientado a eventos, un script Lua debe obligatoriamente registrar una
función de tratamiento de eventos. Después de la iniciación, cualquier acción tomada por la aplicación es
solamente en respuesta a un evento enviado por el formateador NCL a la función "handler".
=== example.lua ===
...
-- código de iniciación
function handler (evt)
...
-- código tratador
end
event.register(handler) -- registro del tratador en el middleware
=== fin ===
Entre los tipos de eventos que pueden llegar al handler están todos los eventos generados por el formateador
NCL. Un script Lua también es capaz de generar eventos, llamados "espontáneos", con una llamada a la
función event.post(evt).
126
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
10.3.3.2
Funciones
event.post ([dst: string]; evt: event) -> sent: boolean; err_msg: string
Argumentos
dst
Destinatario del evento
evt
Evento a ser posteado
Valores de retorno
sent
Si el evento es enviado con éxito
err_msg
Descripción
Envía el evento pasado.
Mensaje de error en caso de fallo
El parámetro "dst" es el destinatario del evento y puede asumir los valores "in" (envío para la propia
aplicación) y "out" (envío para el formateador NCL). El valor default es ‘out’.
event.timer (time: number, f: function) -> cancel: function
Argumentos
time
Tiempo en milisegundos
f
Función de callback
Valor de retorno
unreg
Función para cancelar el timer
Descripción
Crea un timer que expira después de time (en milisegundos) y entonces llama la función F.
La firma de f es simple, sin recibimiento de parámetros:
function f () end
El valor de 0 milisegundos es válido. En ese caso, event.timer() debe, obligatoriamente, retornar
inmediatamente y f debe ser llamada de inmediato.
event.register ([pos: number]; f: function; [class: string]; […: any])
Argumentos
pos
Posición del registro (opcional)
f
Función de callback
class
Filtro de clase (opcional)
…
Filtro dependiente de la clase (opcional)
Descripción
Registra la función pasada como un listener de eventos, es decir, siempre que ocurra un evento, f será
llamada. La función f es, así, la función de tratamiento de eventos (function “handler”).
El parámetro pos es opcional e indica la posición en que f es registrada. Caso no sea pasada, la función es
registrada en último lugar.
El parámetro class también es opcional y cuando se pasa indica qué clase de eventos debe recibir la función. Si
© ABNT 2007 - Todos los derechos reservados
127
ABNT NBR 15606-2:2007
el pámetro se especifica, pueden definirse otros filtros dependientes de la clase. El valor nil en cualquier
posición indica que el parámetro no se debe filtrar.
La firma de f es:
function f (evt) end -> handled: boolean
Donde evt es el evento que, al ocurrir, activa la función.
La función puede retornar “true”, para señalizar que el evento fue tratado y, por lo tanto, no debe ser enviado a
otros tratadores.
Se recomienda que la función, definida por la aplicación, regrese rápidamente, ya que, mientras esté siendo
ejecutada, ningún otro evento será procesado.
El formateador NCL debe garantizar obligatoriamente que las funciones reciban los eventos en el orden en que
fueron registradas, y si ninguna de las mismas retorna el valor “true”, el formateador NCL debe notificar los otros
tratadores registrados.
event.unregister (f: function)
Argumentos
f
Función de callback
Descripción
Saca del registro la función pasada como un listener, es decir, nuevos eventos dejarán de ser pasados a f.
event.uptime () -> ms: number
Valores de retorno
ms
Tiempo en milisegundos
Descripción
Retorna el número de milisegundos transcurridos desde el inicio de la aplicación.
10.3.3.3
Clases de eventos
La función event.post() y el “handler” registrado en event.register() reciben eventos como parámetros.
Un evento se describe por una tabla Lua normal, donde el campo class es obligatorio e identifica la clase del
evento.
Son definidas las siguientes clases de eventos:
Classe key:
evt = { class='key', type: string, key: string}
* type puede ser 'press' o 'release'.
* key es el valor de la tecla en cuestión
EJEMPLO
NOTA
128
evt = { class='key', type='press', key=”0”}
En la clase key, el filtro dependiente de la clase puede ser type y key, en ese orden.
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Classe ncl:
Las relaciones entre los nudos de media NCL se basan en eventos. Lua tiene acceso a esos eventos a través de
Classe ncl.
Los eventos pueden actuar en las dos direcciones, es decir, el formateador puede enviar eventos de acción para
alterar el estado del exhibidor Lua, y éste, a su vez, puede disparar eventos de transición para indicar cambios
de estado.
En los eventos, el campo type debe asumir obligatoriamente uno de los tres valores:
'presentation', 'selection' o 'attribution'
Los eventos pueden ser dirigidos a anclas específicas o al nudo como un todo, esto es identificado en el campo
area, que presupone el nudo entero, cuando ausente.
En el caso de un evento generado por el formateador, el campo action debe tener obligatoriamente uno de los
valores:
'start', 'stop', 'abort', 'pause', o 'resume'
Tipo ‘presentation’:
evt = { class='ncl', type='presentation', label='?', action='?' }
Tipo ‘attribution’:
evt = { class='ncl', type='attribution', name='?', action='?', value=’?’ }
Para eventos generados por el exhibidor Lua, el campo "action" debe obligatoriamente asumir uno de los
valores:
'start', 'stop', 'abort', 'pause', o 'resume'
Tipo ‘presentation’:
evt = { class='ncl', type='presentation', label='?', action='start'/'stop'/'abort'/'pause'/'resume' }
Tipo ‘selection’:
evt = { class='ncl', type='selection', label='?', action='stop' }
Tipo ‘attribution’:
evt = { class='ncl', type='attribution', name='?', action=’start’/'stop'/’abort’/’pause’/’resume’, value=’?’ }
NOTA
En la clase ncl, el filtro dependiente de la clase puede ser type, area y action, en ese orden.
Classe edit:
Esta clase espeja los comandos de edición para el Gerenciador de Bases Privadas (ver Sección 9). Sin embargo,
hay una diferencia entre los comandos de edición procedentes de los eventos de flujo DSM-CC y los comandos de
edición realizados por los scripts Lua (objetos NCLua). Los primeros alteran, no sólo la presentación de un
documento NCL, sino también la especificación de un documento NCL. O sea, al final del proceso es generado un
nuevo documento NCL, incorporando todos los resultados de la edición. Por otro lado, los comandos de edición
procedentes de los objetos de media NCLua alteran solamente la presentación del documento NCL. El documento
original es preservado durante todo el proceso de edición.
© ABNT 2007 - Todos los derechos reservados
129
ABNT NBR 15606-2:2007
Así como en las otras clases de evento, un comando de edición es representado por una tabla Lua. Todo evento
debe obligatoriamente cargar el campo command: un string con el nombre del comando de edición. Los otros
campos dependen del tipo de comando, conforme Tabla 56. La única diferencia es con relación al campo que define
los pares de referencia {uri, id} denominado data en la clase edit. El valor del campo acepta, no sólo los pares de
referencia {uri,id} mencionados en la Tabla 56, sino también strings XML con el contenido a ser adicionado.
EJEMPLO
evt = {
command = ‘addNode’,
composited = ‘someId’,
data = ‘<media>…’,
}
Los campos baseId y documentId (cuando son aplicables) son opcionales y asumen por default el identificador de la
base y del documento en el que NCLua está ejecutando.
El evento describiendo el comando de edición también puede recibir una referencia de tiempo como parámetro
opcional time. Este parámetro opcional se puede usar para especificar el momento exacto en que el comando de
edición debe ser ejecutado. Si este parámetro no se suministra en la llamada de función, el comando de edición
debe ser ejecutado inmediatamente. Cuando se suministra, el parámetro puede tener dos tipos de valores distintos,
con diferentes significados. Si es un valor numérico, define la cantidad de tiempo, en segundos, que la ejecución del
comando debe ser postergada. Sin embargo, ese parámetro también puede especificar el momento exacto para la
ejecución del comando, en valores absolutos. Para ello, el parámetro debe obligatoriamente ser una tabla con los
siguientes campos: year (cuatro dígitos), month (1 a 12), day (1 a 31), hour (0 a 23), minute (0 a 59), second (0 a 61)
e isdst (señalizador del horario de verano, un booleano)
Classe tcp:
El uso del canal de interactividad se realiza por medio de esta clase de eventos.
Para el envío o recibimiento de datos tcp, se debe establecer obligatoriamente una conexión inicialmente,
postando un evento en laforma:
Evt = {class=’tcp’, type=’connect’, host=addr, port=number, [timeout=number]}
El resultado de la conexión es retornado en un tratador d eventos pre-registrado para la clase. El evento retornado
tiene la siguiente forma:
Evt = { class=’tcp’, type=’connect’, host=addr, port=number, connection=identifier, error=<err_msg>}
Los campos error y connection son mutuamente exclusivos. Cuando hay un error de comunicación, debe ser
retornado un mensaje en el campo error. Cuando la comunicación es satisfactoria, el identificador de la conexión
es retornado en el campo connection.
Una aplicación NCLua envía datos por un canal de interactividad, enviando eventos en la forma:
evt = { class=’tcp’, type=’data’, connection=identifier, value=string, [timeout=number] }
De forma análoga, una aplicación NCLua recibe datos transportados por un canal de interactividad haciendo uso
de eventos en la forma:
evt = { class=’tcp’, type=’data’, connection=identifier, value=string, error=msg }
Los campos error y value son mutuamente exclusivos. Cuando hay un error de comunicación, es enviado un
mensaje por el campo error. Cuando la comunicación tiene éxito, el mensaje transportado es pasado por el campo
value.
Para cerrar una conexión, se debe postar obligatoriamente el siguiente evento:
130
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
evt = { class=’tcp’, type=’disconnect’, connection=identifier }
NOTA 1 Se recomienda que cuestiones tales como autenticación, sean tratadas en una implementación específica del
middleware.
NOTA 2 En la clase tcp, el filtro dependiente de la clase sólo puede ser connection.
Classe sms:
El compartimento de envío y recibimiento por medio de SMS es muy semejante al definido en la clase tcp.
También como esa clase, la clase sms es opcional en el caso de la implementación Ginga para receptores fullseg.
Una aplicación NCLua envía datos por SMS, enviando eventos en la forma:
evt = { class=’sms’, to=’phone number’, value=string }
De forma análoga, una aplicación NCLua recibe datos transportados por SMS utilizando eventos en la forma:
evt = { class=’sms’, from=’phone number’, value=string }
Se recomienda que cuestiones como autenticación etc., se traten en una implementación específica del
NOTA 1
middleware.
NOTA 2
En la clase sms, el filtro dependiente de la clase sólo puede ser from.
Clase si:
La clase de eventos ‘si’ permite el acceso a un conjunto de informaciones multiplexadas en un flujo de transporte y
transmitidas periódicamente por difusión.
El proceso de adquisición de las informaciones debe ser obligatoriamente realizado en dos pasos:
1) una requisición realizada por una llamada al event.post(), que no bloquea la ejecución del script;
2) un evento, posteriormente repasado a los tratadores de eventos registrados del script NCLua, cuyo campo
data contiene un conjunto de subcampos que depende del tipo de información exigida, y que es
representado por una tabla lua.
NOTA
En la clase si, el filtro dependiente de la clase sólo puede ser type.
Son definidos cuatro tipos de eventos por los siguientes tipos de tablas:
type = ‘services’
La tabla del tipo ‘services’ consiste en un conjunto de vectores. Cada vector posee informaciones relativas a un
servicio multiplexado del flujo de transporte sintonizado.
Cada requisición para una tabla del tipo de evento ‘services’ debe ser obligatoriamente realizada a través de la
siguiente llamada:
event.post('out', { class='si', type='services'[, index=N][, fields={field_1, field_2,…, field_j}]}),
donde:
a) el campo index, si es especificado, indica el índice delo servicio; en caso de que no sea especificado, todos los
servicios deben ser obligatoriamente retornados;
b) el campo fields puede tener como valor cualquier subconjunto de los subcampos definidos para la tabla
retornada en el campo data del evento de respuesta (así, field_i representa uno de los subcampos de la tabla
data). En caso de que el campo fields no sea especificado, todos los subcampos de la tabla retornada en el campo
© ABNT 2007 - Todos los derechos reservados
131
ABNT NBR 15606-2:2007
data deben ser obligatoriamente rellenados.
El evento de respuesta es generado después de que todas las informaciones exigidas hayan sido procesadas por
el middleware (informaciones no transmitidas por difusión dentro de un intervalo máximo de tiempo especificado en
la ABNT NBR 15603-2:2007, Tabla 6, del estándar son retornadas como nulas). La tabla del campo data es
retornada en el evento, como sigue:
evt = {
class = 'si',
type = 'services',
data = {
[i] = { -- cada servicio está en una posición
id
= <number>,
isAvailable
= <boolean>,
isPartialReception
= <boolean>,
parentalControlRating
= <number>,
runningStatus
= <number>,
serviceType
= <number>,
providerName
= <string>,
serviceName
= <string>,
stream = {
[j] = {
pid = <number>,
componentTag = <number>,
type = <number>,
regionSpecType = <number>,
regionSpec
= <string>,
}
}
}
}
Para la obtención de las respuestas a envíos de eventos del tipo ‘services’, se recomienda que los subcampos de
la tabla data se calculen con base en tablas SI y descriptores asociados al servicio [i].
Se recomienda que los valores de los subcampos id y runningStatus de la tabla data se computen conforme los
valores de los campos service_id y running_status, respectivamente, de la tabla SDT (ver ABNT NBR 156032:2007, Tabla 13, que describe el servicio [i].
Se recomienda que sea establecida la misma relación entre los subcampos providerName y serviceName de la
tabla data y los campos service_name y service_provider_name, respectivamente, del descriptor
service_descriptor (conforme la ABNT NBR 15603-2:2007).
Se recomienda que el subcampo parentalControlRating de la tabla data se calcule con el valor del campo rating del
descriptor parentalControlRating, en el cual el campo country_code presente el mismo país referente al valor de la
variable de ambiente (nudo Settings) user.location.
Se recomienda que el subcampo isAvailable de la tabla data se calcule basado en el valor del campo country_code
(con el grupo de países disponibles) del descriptor country_availability_descriptor (ver ABNT NBR 15603-2:2007,
Subsección 8.3.6) relativo al servicio [i]. El valor “true” es atribuido solamente si el campo country_code contiene el
132
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
mismo país referente al valor de la variable de ambiente (nudo Settings) user.location.
Se recomienda que el subcampo isPartualReception de la tabla data se calcule con base en el valor del campo
service_id del descriptor partial_reception_descriptor (ver ABNT NBR 15603-2:2007, Subsección 8.3.32).
Se recomienda que la semántica del subcampo serviceType de la tabla data sea definida por la ABNT NBR 156032:2007, Tabla H.2.
Se recomienda que la semántica del subcampo runningStatus sea definida de acuerdo con la ABNT NBR 156032:2007, Tabla 14.
Se recomienda que el subcampo pid de la tabla stream tenga el valor del campo pid del encabezado del paquete
del flujo elemental [i] (conforme ISO/IEC 13818-1).
Se recomienda que el valor del subcampo componentTag de la tabla stream se obtenga a través del campo
component_tag del descriptor stream_identifier_descriptor (ver ABNT NBR 15603-2:2007, Subsección 8.3.16)
relacionado al flujo elemental [i].
Se recomienda que el subcampo type de la tabla stream tenga la semántica definida en la Tabla 2-34 de la
ISO/IEC 13818-1: 2008, relacionada al flujo elemental [i].
Se recomienda que el subcampo regionSpecType de la tabla stream defina el método de codificación del campo
regionSpec de la misma tabla, conforme la semántica definida en la ABNT NBR 15603-2:2007, Tabla 53.
Se recomienda que el campo regionSpec de la tabla stream defina la región para la cual es designado el flujo
elemental [i].
Se recomienda también que los campos regionSpec y regionSpecType se obtengan a través del descriptor
target_region_descriptor especificado en la ABNT NBR 15603-2:2007.
type = ‘mosaic’
La tabla del tipo ‘mosaic’ consiste en un subconjunto de informaciones para el mosaico que se suministra como
una matriz. La tabla es, sin embargo, opcional.
Cuando se suministra la tabla del tipo ‘mosaic’, la requisición de la tabla debe ser obligatoriamente realizada a
través de la siguiente llamada:
event.post('out', { class='si', type='mosaic'[, fields={field_1, field_2,…, field_j}]}),
donde el campo fields del evento de requisición puede tener como valor cualquier subconjunto de los subcampos
definidos para la tabla retornada en el campo data del evento de respuesta (así, field_i representa uno de los
subcampos de la tabla data, como se especifica a continuación). En el caso de que el campo fields no se
especifique, todos los subcampos de la tabla retornada en el campo data deben ser obligatoriamente rellenados.
El evento de respuesta es generado después de que todas las informaciones exigidas sean procesadas por el
middleware (informaciones no transmitidas por difusión dentro de un intervalo máximo de tiempo especificado en la
ABNT NBR 15603-2:2007, Tabla 6 del estándar, son retornadas como nulas). La tabla del campo data es
retornada en el evento, como sigue:
evt = {
class = 'si',
type = 'mosaic',
data = {
[i] = {
[j] = {
logicalId
= <number>,
© ABNT 2007 - Todos los derechos reservados
133
ABNT NBR 15606-2:2007
presentationInfo = <number>,
id
= <number>,
linkageInfo
= <number>,
bouquetId
= <number>,
networkId
= <number>,
tsId
= <number>,
serviceId
= <number>,
eventId
= <number>,
}
}
}
}
NOTA
Para la obtención de respuestas a envíos de eventos del tipo ‘mosaic’, se recomienda que los subcampos de la tabla
data sean calculados con base en tablas SI y descriptores asociados al mosaico. Se recomienda que los valores máximos de [i]
y [j], así como los valores de los subcampos logicalId, presentationInfo, id, linkageInfo, bouquetId, networkId, tsId, serviceId y
eventId de la tabla data se obtengan a través de los campos number_of_horizontal_elementary_cells,
number_of_vertical_elementary_cells, logical_cell_id, logical_cell_presentation_info, id, cell_linkage_info, bouquet_id,
original_network_id, transport_stream_id, service_id y event_id del descriptor mosaic_descriptor (especificado en la ABNT NBR
15603-2:2007, Subsección 8.3.9), respectivamente.
type = ‘epg’
La tabla del tipo ‘epg’ consiste en un conjunto de vectores. Cada vector posee informaciones relativas a un evento
del contenido transmitido.
Una requisición de la tabla del tipo ‘epg’ debe ser obligatoriamente realizada a través de una de las posibles
llamadas a seguir:
1) event.post('out', { class='si', type='epg', stage=’current’[, fields={field_1, field_2,…, field_j}]})
donde el campo fields del evento de requisición puede tener como valor cualquier subconjunto de los
subcampos definidos para la tabla retornada en el campo data del evento de respuesta (así, field_i representa
uno de los subcampos de la tabla data, como se especifica a continuación). En caso que el campo fields no se
especifique, todos los subcampos de la tabla retornada en el campo data deben ser obligatoriamente
rellenados.
Descripción: obtiene las informaciones del evento corriente de la programación.
2) event.post('out', {class='si', type='epg', stage='next'[, eventId=<number>][, fields={field_1,
field_2,…, field_j}]})
Donde:
a) el campo eventId, cuando es especificado, identifica el evento inmediatamente anterior al evento del que se
quieren las informaciones. Cuando no se especifica indica que las informaciones deseadas son las del evento
siguiente al evento corriente de la programación;
b) el campo fields del evento de requisición puede tener como valor cualquier subconjunto de los subcampos
definidos para la tabla retornada en el campo data del evento de respuesta (así, field_i representa uno de los
subcampos de la tabla data, como se especifica a continuación). En caso que el campo fields no se
especifique, todos los subcampos de la tabla retornada en el campo data deben ser obligatoriamente
rellenados.
Descripción: obtiene las informaciones del evento siguiente al evento identificado en eventId o, en el caso de
que eventId no se especifique, del evento siguiente al evento corriente de la programación.
3) event.post('out', {class='si', type='epg', stage=’schedule’, startTime=<date>, endTime=<date>[,
134
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
fields={field_1, field_2,…, field_j}]})
donde el campo fields del evento de requisición puede tener como valor cualquier subconjunto de los
subcampos definidos para la tabla retornada en el campo data del evento de respuesta (así, field_i representa
uno de los subcampos de la tabla data, como se especifica a continuación). En caso que el campo fields no se
especifique, todos los subcampos de la tabla retornada en el campo data deben ser obligatoriamente
rellenados.
Descripción: obtiene las informaciones de los eventos comprendidos en la banda de tiempo pasada en los
campos startTime y endTime que tienen como valor tablas en formato de <date>.
El evento de respuesta es generado después que todas las informaciones exigidas sean procesadas por el
middleware (informaciones no transmitidas por difusión dentro de un intervalo máximo de tiempo especificado en la
ABNT NBR 15603-2:2007, Tabla 6, del estándar son retornadas como nulas). La tabla del campo data es
retornada en el evento, como sigue:
evt = {
class = 'si',
type = 'epg',
data = {
[i] – {
startTime
= <date>,
endTime
= <date>,
runningStatus
= <number>,
name
= <string>,
originalNetworkId
= <number>,
shortDescription
= <string>,
extendedDescription
= <string>,
copyrightId
= <number>,
copyrightInfo
= <string>,
parentalRating
= <number>,
parentalRatingDescription = <string>,
audioLanguageCode
= <string>,
audioLanguageCode2
= <string>,
dataContentLanguageCode = <string>,
dataContentText
= <string>,
hasInteractivity
= <boolean>,
logoURI
= <string>,
contentDescription
={
[1] = <content_nibble_1>,
[2] = <content_nibble_2>,
[3] = <user_nibble_1>,
[4] = <user_nibble_2> }
},
linkage = {
tsId
= <number>,
networkId = <number>,
serviceId = <number>,
type
= <number>, (table 30, norma 3 vol 2)
data
= <string>,
© ABNT 2007 - Todos los derechos reservados
135
ABNT NBR 15606-2:2007
},
hyperlink = {
type
= <number>,
destinationType = <number>,
tsId
= <number>,
networkId
= <number>,
eventId
= <number>,
componentTag = <number>,
moduleId
= <number>,
serviceId
= <number>,
contentId
= <number>,
url
= <string>,
},
series = {
id
= <number>,
repeatLabel
= <number>,
programPattern = <number>,
episodeNumber = <number>,
lastEpisodeNumber = <number>,
name = <string>,
},
eventGroup = {
type = <number>,
[j] = {
id
= <number>,
tsId
= <number>,
networkId = <number>,
serviceId = <number>,
}
},
componentGroup = {
type = <number>,
[j] = {
id
= <number>,
totalBitRate = <number>,
description = <string>,
caUnit = {
id
= <number>, -- (table 80, norma 3 vol 2)
component = {
[k] = tag (<number>)
}
},
}
}
}
}
136
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
}
Para la obtención de las respuestas a envíos de eventos del tipo ‘epg’, se recomienda que los campos de la tabla
data sean calculados con base en tablas SI y descriptores asociados al evento [i].
Se recomienda que los valores de los campos startTime, endTime, runningStatus y originalNetworkId de la tabla
data se obtengan a través de los campos start_time, (duration + start_time), running_status y original_network_id
de la tabla SI event_information_section (conforme especificado en la ABNT NBR 15603-2:2007, Tabla 15),
respectivamente.
Se recomienda que los valores de los campos name y shortDescription se obtengan a través de los campos
event_name_char y text_char del descriptor short_event_descriptor (conforme especificado en
la ABNT NBR 15603-2:2007, Subsección 8.3.15), respectivamente.
Se recomienda que el valor del campo extendedDescription sea obtenido a través del campo text_char del
descriptor extended_event_descriptor (conforme especificado en la ABNT NBR 15603-2:2007, Subsección 8.3.7).
Se recomienda que los valores de los campos copyrightId y copyrightInfo se obtengan a través de los campos
copyright_identifier y additional_copyright_info del descriptor copyright_descriptor (conforme la la ISO/IEC 138181:2008, Tabla 2-63), respectivamente.
El campo parentalRating de la tabla data tiene la semántica definida en la ABNT NBR 15603-2:2007, Tabla 32, y
se recomienda que su valor sea calculado con base en el campo country_code del descriptor
parental_rating_descriptor y en la variable de ambiente (Settings node) user.location.
El campo parentalRatingDescription de la tabla data tiene la semántica definida en la ABNT NBR 15603-2:2007,
Tabla 33, y se recomienda que su valor se calcule con base en el campo country_code del descriptor
parental_rating_descriptor y en la variable de ambiente (Settings node) user.location.
Se recomienda que los valores de los campos audioLanguageCode y audioLanguageCode2 se obtengan a través
de los campos ISO_639_language_code e ISO_639_language_code2 del descriptor audio_component_descriptor
(conforme ABNT NBR 15603-2:2007, Tabla 48), respectivamente.
Se recomienda que los valores de los campos dataContentLanguageCode y dataContextText se obtengan a través
de los campos ISO_639_language_code y text_char del descriptor data_content_descriptor (conforme ABNT NBR
15603-2:2007, Tabla 54), respectivamente.
El campo hasInteractivity de la tabla data debe tener obligatoriamente el valor true cuando el evento [i] tenga una
aplicación interactiva disponible.
Se recomienda que el valor del campo logoURI de la tabla data posea la localización del logotipo, transmitido por
una tabla CDT (conforme ABNT NBR 15603-2:2007, Subsección 8.3.44).
Se recomienda que los valores de los campos de la tabla contentDescription sean obtenidos a través de los
campos de igual nombre del descriptor content_descriptor (conforme ABNT NBR 15603-2:2007, Subsección 8.3.5).
Se recomienda que los valores de los campos tsId, networkId, serviceId, type y data de la tabla linkage se
obtengan a través de los campos transport_stream_id, original_network_id, original_service_id, description_type y
user_defined del descriptor linkage_descriptor (conforme ABNT NBR 15603-2:2007, Subsección 8.3.40),
respectivamente.
Se recomienda que los valores de los campos type, destinationType, tsId, networkId, eventId, componentTag,
moduleId, contentId y url de la tabla hyperlink se obtengan a través de los campos hyper_linkage_type,
link_destination_type, transport_stream_id, original_network_id, event_id, component_tag, moduleId, content_id y
url_char del descriptor hyperlink_descriptor (conforme ABNT NBR 15603-2:2007, Subsección 8.3.29),
respectivamente.
© ABNT 2007 - Todos los derechos reservados
137
ABNT NBR 15606-2:2007
Se recomienda que los valores de los campos id, repeatLabel, programPattern, episodeNumber,
lastEpisodeNumber y name de la tabla series se obtengan a través de los campos series_id, repeat_label,
program_pattern, episode_number, last_episode_number y series_name_char del descriptor series_descriptor
(conforme ABNT NBR 15603-2:2007, Subsección 8.3.33), respectivamente.
Se recomienda que los valores de los campos type, id, tsId, networkId y serviceId de la tabla eventGroup se
obtengan a través de los campos group_type, event_id, transport_stream_id, original_network_id y service_id del
descriptor event_group_descriptor (conforme ABNT NBR 15603-2:2007, Subsección 8.3.34), respectivamente.
Se recomienda que los valores de los campos type, id, totalBitRate, description, caUnit.id, caUnit.component[k].tag,
tsId, networkId y serviceId de la tabla componentGroup se obtengan a través de los campos
component_group_type, component_group_id, total_bit_rate, text_char, CA_unit_id y component_tag del descriptor
component_group_descriptor (conforme ABNT NBR 15603-2:2007, Subsección 8.3.37), respectivamente.
type=’time’
La tabla del tipo ‘time’ consiste en informaciones sobre la fecha y hora corriente basadas en la UTC, pero en el
horario oficial del país en que se encuentra el receptor.
La requisición de la tabla debe realizarse obligatoriamente a través de la siguiente llamada:
event.post('out', { class='si', type=’time’}),
El evento de respuesta es generado después que la información sobre fecha y hora corriente exigida sea
procesada por el middleware (las informaciones no transmitidas por difusión dentro de un intervalo máximo de
tiempo especificado en la ABNT NBR 15603-2:2007, Tabla 6 del estándar, son retornadas como nulas). La tabla
del campo data es retornada en el evento, como sigue:
evt = {
class = 'si',
type = 'time',
data = {
year
= <number>,
month
= <number>,
day
= <number>,
hours
= <number>,
minutes
= <number>,
seconds
= <number>
}
NOTA
Para la obtención de las respuestas a envíos de eventos del tipo ‘time’, se recomienda que los campos de la tabla
data se calculen con base en la tabla TOT y en el descriptor local_time_offset_descriptor (conforme ABNT NBR 15603-2:2007,
Subsección 7.2.9).
138
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Classe user:
Utilizando Clase user, las aplicaciones pueden extender sus funcionalidades, creando sus propios eventos. En esa
clase, ningún campo está definido (aparte, del campo class).
NOTA
En la clase user, el filtro dependiente de la clase puede ser type, si se establece el filtro.
10.3.4 Módulo settings
Exporta la tabla settings con variables definidas por el autor del documento NCL y variables de ambiente
reservadas, contenidas en el nudo application/x-ginga-settings.
No se permite atribuir valores a los campos representando variables en los nudos settings. Un error debe ser
generado en el caso que ocurra un intento de atribución. Las propiedades de un nudo settings solo pueden ser
modificadas por medio de eslabones NCL.
La tabla settings particiona sus grupos en varias subtablas, correspondiendo a cada grupo del nudo application/xginga-settings. Por ejemplo, en un objeto NCLua, la variable del nudo settings “system.CPU” es referida como
settings.system.CPU.
Ejemplos de uso:
lang = settings.system.language
age = settings.user.age
val = settings.default.selBorderColor
settings.service.myVar = 10
settings.user.age = 18 --> ERRO!
10.3.5 Módulo persistent
Aplicaciones NCLua pueden grabar datos en un área restringida del middleware y recuperarlos entre ejecuciones.
El exhibidor Lua permite a una aplicación NCLua persistir un valor para ser posteriormente usado por la misma o
por otro objeto de procedimiento. Para ello, el exhibidor define un área reservada, inaccesible a objetos NCL que
no sean de procedimiento. Este área se divide entre los grupos “service”, “channel” y “shared”, con la misma
semántica de los grupos homónimos del nudo NCL settings. No existe ninguna variable predefinida o reservada
en esos grupos, y objetos de procedimiento pueden atribuir valores a esas variables directamente. Se recomienda
que otros lenguajes de procedimiento, Java en particular para los objetos NCLets (<media> elements of type
application/x-ginga-NCLet), ofrezcan una API dando acceso al mismo área.
En éste modulo persistent, Lua ofrece una API para exportar la tabla persistent con las variables definidas en el
área reservada.
El uso de la tabla persistent es semejante al uso de la tabla settings excepto por el hecho de que, en este caso, el
código de procedimiento puede alterar los valores de los campos.
Ejemplos de uso:
persistent.service.total = 10
color = persistent.shared.color
© ABNT 2007 - Todos los derechos reservados
139
ABNT NBR 15606-2:2007
10.4 Lua-API para Ginga-J
10.4.1 Mapeo
Dependiendo de la configuración del middleware, es posible tener acceso en Lua a la misma API suministrada por
el Ginga-J, a fin de tener acceso a algunos recursos del decodificador y facilidades del Ginga. La API para GingaJ suministrada en Lua es opcional, pero cuando es ofrecida debe seguir obligatoriamente la misma especificación
definida para el Ginga-J.
10.4.2 Paquetes
Las jerarquías de los paquetes Java que componen la API del Ginga-J se mapean para jerarquías equivalentes
de los paquetes Lua que tienen un paquete raíz en común, llamado ginga. Más específicamente, un paquete "x"
en la API del Ginga-J se mapea para un paquete Lua ginga.x equivalente. En ese contexto, un paquete Lua
equivalente significa un paquete que contenga clases y subpaquetes equivalentes a los definidos en el paquete
Java.
El conjunto de paquetes Ginga-J que estarán disponibles en el ambiente de ejecución de un script Lua puede ser
restringido por políticas de seguridad. Si un paquete “x” de la API del Ginga-J está disponible en el ambiente Lua,
ginga.x mantendrá una referencia para una tabla Lua con todas las definiciones relacionadas a "x" (clases y
subpaquetes). En caso contrario, ginga.x es una referencia nil. Algunos ejemplos de mapeos de nombre de los
paquetes del Ginga-J para paquetes Lua se presentan en la Tabla 58.
Tabla 58 – Ejemplos de mapeos de nombre entre
los paquetes Ginga-J y paquetes Lua
Paquete Ginga-J
org.sbtvd.net.tuning
org.sbtvd.media
javax.media
org.dvb
org.havi
org.davic
Paquete Lua
ginga.org.sbtvd.net.tuning
ginga.org.sbtvd.media
ginga.javax.media
ginga.org.dvb
ginga.org.havi
ginga.org.davic
10.4.3 Tipos básicos
Los tipos de datos básicos del Java, que se utilizan en la API Ginga-J, se mapean para los tipos de datos básicos
de Lua. Esos mapeos se presentan en la Tabla 59. Además de los tipos primitivos de Java, la tabla también
especifica el mapeo de strings y matrices.
Tabla 59 — Mapeo de tipos de datos básicos
Tipo Java
140
Tipo Lua
Short
number
Int
number
Long
number
Float
number
Double
number
Byte
number
Char
string (with only one character)
Boolean
boolean
Array objects
table
String objects
string
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
10.4.4 Clases
Toda clase Java da API Ginga-J es representada en Lua como una tabla, definida en su respectivo paquete. Por
ejemplo, la clase
org.sbtvd.net.tuning. ChannelManager
se representa en Lua como una entrada ChannelManager en el paquete ginga.org.sbtvd.net.tuning, es decir, esa
clase es accedida a través de
ginga.org.sbtvd.net.tuning.ChannelManager.
Todos los miembros estáticos de una clase Java se mapean para campos de la tabla Lua equivalente. Cada clase
representada en Lua también tiene una operación newInstance, que desempeña el papel de un constructor.
10.4.5 Objetos
Siempre que el método newInstance suministrado por una clase representada en Lua se llama, retorna una nueva
instancia (objeto) de esa clase. El objeto retornado es una tabla Lua que tiene todos los miembros de instancia
especificados por su clase (campos y métodos públicos).
10.4.6 Objetos de callback (observadores)
Muchos métodos definidos en la API Ginga-J esperan recibir un objeto observador (listener) como parámetro.
Esos objetos observadores pueden ser implementados en Lua como tablas que tienen todos los métodos
especificados en la interfaz del observador.
10.4.7 Excepciones
Las excepciones del Java también se mapean para tablas Lua, siguiendo las mismas reglas para mapear objetos
del Java para Lua. Para generar una excepción, se recomienda que un objeto observador implementado en Lua
use la función error suministrada por Lua (ver Anexo B). Para capturar una excepción generada por un método de
la API, se recomienda que el script Lua use la función pcall (ver Anexo B).
11 Puente
11.1 Revisión
El puente de doble mano entre el Ginga-NCL y el Ginga-J se realiza:
 en un sentido, a través de las relaciones del NCL, definidos en los elementos <link> que se refieren a los
elementos <media> que representan los códigos Xlet (tipo application/x-ginga-NCLet) soportados por el
Ginga-J; y a través de los scripts Lua (elementos <media> del tipo application/x-ginga-NCLua) que hacen
referencia a los métodos del Ginga-J;
 en el camino inverso, a través de las funciones del Ginga-J que pueden monitorear cualquier evento NCL y
también pueden comandar alteraciones en elementos y propiedades NCL, a través de relaciones definidas en
elementos <link> o a través de comandos de edición del NCL.
© ABNT 2007 - Todos los derechos reservados
141
ABNT NBR 15606-2:2007
11.2 Puente a través de los elementos NCL <link> y <media>
El Ginga-NCL puede actuar sobre el Ginga-J a través de elementos <link> y a través de elementos <media> del
tipo application/x-ginga-NCLet.
De modo análogo al contenido de media convencional, el NCL permite que el código Xlet sea sincronizado con
otros objetos NCL (de procedimiento o no). Los autores del NCL pueden definir eslabones NCL para iniciar, parar,
pausar, retomar o abortar la ejecución de un código de procedimiento Xlet (representado por un elemento
<media> del tipo application/x-ginga-NCLet) como hacen para contenidos de presentación usual (ver 8.5). Un
player (exhibidor) NCLet (basado en la máquina Java) debe obligatoriamente hacer la interfaz del ambiente de
ejecución de procedimiento con el formateador NCL (ver 8.5).
Un elemento <media> conteniendo un código Java puede definir anclas (a través de elementos <area> y atributos
(a través de elementos <property>). El player debe obligatoriamente controlar la máquina de estado de los
eventos asociados con esos elementos de interfaz.
El código Xlet puede ser asociado a elementos <area>. Si los eslabones externos inician, paran, pausan o
retoman la presentación del ancla, las callBacks en el código Xlet deben ser obligatoriamente disparadas. Por otro
lado, el código Xlet puede comandar el inicio, parada, pausa, reinicio o aborto de esas anclas a través de una API
ofrecida por el lenguaje de procedimiento. Las transiciones causadas por esos comandos se pueden usar como
condiciones de los eslabones NCL para disparar acciones en otros objetos NCL del mismo documento. Así, una
sincronización de dos vías puede ser establecida entre el código Xlet y el resto del documento NCL.
Un elemento <property> definido como hijo del elemento <media> del tipo application/x-ginga-NCLet puede ser
mapeado para un método del código Xlet o para un atributo del código Xlet. Cuando es mapeado para un método
del código, una acción “set” del eslabón aplicada al atributo debe obligatoriamente causar la ejecución del método,
con los valores definidos por la acción del eslabón siendo interpretados como parámetros de entrada del método.
El atributo name del elemento <property> se debe usar obligatoriamente para identificar el método del código
procedural. Cuando el elemento <property> es mapeado para un atributo del código Xlet, la acción “set” debe
obligatoriamente atribuir un valor al atributo.
El elemento <property> puede también ser asociado a un assessment role de un eslabón NCL. En ese caso, el
formateador NCL debe obligatoriamente consultar el valor del atributo, a fin de evaluar la expresión del eslabón.
Si el elemento <property> es mapeado para un atributo del código, el valor del atributo debe ser retornado
obligatoriamente por el player Xlet para el formateador NCL. Si el elemento <property> es mapeado para un
método del código, el método debe ser obligatoriamente llamado y su valor debe ser retornado obligatoriamente
por el player Xlet para el formateador NCL.
11.3 Puente a través de las funciones Lua y métodos del Ginga-J
Dependiendo de la configuración del middleware, es posible tener acceso en Lua a la misma API suministrada
por el Ginga-J, a fin de tener acceso a algunos recursos del decodificador y facilidades del Ginga. La API
suministrada en Lua debe seguir obligatoriamente la misma especificación presentada para el Ginga-J.
El Ginga-J también ofrece una API que permite que el código Xlet consulte cualquier valor de propiedad
predefinido o dinámico del nudo de configuraciones del NCL (elemento <media> del tipo "application/x-gingasettings”).
Además, el Ginga-J ofrece API que suministran un conjunto de métodos para dar soporte a los comandos de
edición del NCL y comandos del Gestor de la Base Privada.
142
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
12 Requisitos de codificación de media y métodos de transmisión referidos en
documentos NCL
12.1 Uso del canal de interactividad
Un formateador NCL debe obligatoriamente ignorar con éxito cualquier método de codificación o transmisión que
no sea soportado por el navegador. Con el objeto de adquirir contenido de datos que sea referido por los
elementos <media> a través de un protocolo de canal interactivo específico, los mecanismos especificados para
el canal de interactividad del SBTVD se deben utilizar obligatoriamente.
12.2 Métodos de codificación y transmisión de video – Datos de video referidos en elementos
<media>
12.2.1 Transmisión de video MPEG-1
12.2.1.1
Transmisión como flujo elemental de video
Para transmitir contenido de video MPEG-1 como un flujo elemental de video, los datos del video se deben
transmitir obligatoriamente como MPEG-2 packetized elementary stream (video PES), con el tipo de flujo
especificado de conformidad con la atribución de tipos de flujos ISO/IEC 13818-1 (valor 0x01 para video ISO/IEC
11172-2).
12.2.1.2
Transmisión en secciones MPEG-2
Para transmitir datos de video MPEG-1 por medio de secciones MPEG-2 específicas (ver atribución de tipos de
flujos para secciones MPEG-2 en ISO/IEC 13818-1), uno de los siguientes métodos de transmisión se debe usar
obligatoriamente:
a)
como un archivo de flujo multiplexado en sistemas MPEG-1 (de acuerdo con la ISO/IEC 11172-1);
b)
como un archivo de flujo elemental de video MPEG-1;
c)
como un archivo de flujo multiplexado en el formato TS especificado en 12.4.
12.2.2 Transmisión de video MPEG-2
12.2.2.1
Transmisión como flujo elemental de video
Para transmitir contenido de video MPEG-2 como un flujo elemental de video, los datos del video se deben
transmitir obligatoriamente como MPEG-2 packetized elementary stream (video PES), con el tipo de flujo
especificado de acuerdo con la atribución de tipos de flujos de acuerdo con ISO/IEC 13818-1 (valor 0x02 para
video de acuerdo con ISO/IEC 13818-2).
12.2.2.2
Transmisión en secciones MPEG-2
Para transmitir datos de video MPEG-2 por medio de secciones MPEG-2 específicas (ver atribución de tipos de
flujospara secciones MPEG-2 en ISO/IEC 13818-1), uno de los métodos de transmisión siguientes se debe usar
obligatoriamente:
a)
Como un archivo de flujo elemental de video MPEG-2;
b)
Como un archivo de flujo multiplexado en el formato TS especificado en 12.4.
© ABNT 2007 - Todos los derechos reservados
143
ABNT NBR 15606-2:2007
12.2.3 Transmisión de video MPEG-4 y H.264|MPEG-4 AVC
12.2.3.1
Transmisión como flujo elemental de video
Para transmitir contenido de video MPEG-4 como un flujo elemental de video, los datos del video se deben
transmitir obligatoriamente como MPEG-2 packetized elementary stream (video PES), con el tipo de flujo
especificado de acuerdo con la atribución de tipos de flujos ISO/IEC 13818-1 (valor 0x10 para video de acuerdo
con H.264|MPEG-4 AVC).
12.2.3.2
Transmisión en secciones MPEG-2
Para transmitir datos de video MPEG-4 ó H.264|MPEG-4 AVC por medio de secciones MPEG-2 específicas
(ver atribución de tipos de flujos para secciones MPEG-2 en ISO/IEC 13818-1), uno de los métodos de
transmisión siguientes se debe usar obligatoriamente:
a)
Como un archivo de flujo elemental de video MPEG-4 (o H.264|MPEG-4 AVC);
b)
Como un archivo de flujo multiplexado en el formato TS especificado en 12.4.
12.3 Métodos de codificación y transmisión de audio – datos de audio referidos en elementos
<media>
12.3.1 Transmisión de audio MPEG-1
12.3.1.1
Transmisión como flujo elemental de audio
Para transmitir contenido de audio MPEG-1 como un flujo elemental de audio, los datos del audio se deben
transmitir obligatoriamente como MPEG-2 packetized elementary stream (audio PES), con el tipo de flujo
especificado de acuerdo con la atribución de tipos de flujos ISO/IEC 13818-1 (valor 0x03 para audio ISO/I EC
11172-3).
12.3.1.2
Transmisión en secciones MPEG-2
Para transmitir datos de audio MPEG-1 por medio de secciones MPEG-2 específicas (ver atribución de tipos de
flujos para secciones MPEG-2 en ISO/IEC 13818-1), uno de los siguientes métodos de transmisión se debe usar
obligatoriamente:
a)
como un archivo de flujo multiplexado en sistemas MPEG-1 (de acuerdo con la ISO/IEC 11172-1);
b)
como un archivo de flujo elemental de audio MPEG-1;
c)
como un archivo de flujo multiplexado en el formato TS especificado en 12.4.
12.3.2 Transmisión de audio MPEG-2
12.3.2.1
Transmisión como flujo elemental de audio
Para transmitir contenido de audio MPEG-2 AAC como un flujo elemental de audio, los datos del audio se deben
transmitir obligatoriamente como MPEG-2 packetized elementary stream (audio PES), con el tipo de flujo
especificado de acuerdo con la atribución de tipos de flujos ISO/IEC 13818-1 (valor 0x0F para audio
ISO/IEC 13818-7).
Para transmitir contenido de audio MPEG-2 BC como un flujo elemental de audio, los datos del audio se deben
transmitir obligatoriamente como MPEG-2 packetized elementary stream (PES), con el tipo de flujo especificado
de acuerdo con la atribución de tipos de flujos ISO/IEC 13818-1 (valor 0x04 para audio ISO/IEC 13818-3).
144
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
12.3.2.2
Transmisión en secciones MPEG-2
Para transmitir datos de audio MPEG-2 por medio de secciones MPEG-2 específicas (ver atribución de tipos de
flujos para secciones MPEG-2 en ISO/IEC 13818-1), uno de los siguientes métodos de transmisión se debe usar
obligatoriamente:
a)
como un archivo de flujo elemental de audio MPEG-2;
b)
como un archivo de flujo multiplexado en el formato TS especificado en 12.4.
12.3.3 Transmisión de audio MPEG-4
12.3.3.1
Transmisión como flujo elemental de audio
Para transmitir contenido de audio MPEG-4 como un flujo elemental de audio, los datos del audio se deben
transmitir obligatoriamente como MPEG-2 packetized elementary stream (audio PES), con el tipo de flujo
especificado en conformidad con la atribución de tipos de flujos ISO/IEC 13818-1 (valor 0x11 para audio
ISO/IEC 14496-3).
12.3.3.2
Transmisión en secciones MPEG-2
Para transmitir datos de audio MPEG-4 por medio de secciones MPEG-2 específicas (ver atribución de tipos de
flujos para secciones MPEG-2 en ISO/IEC 13818-1), uno de los métodos siguientes de transmisión se debe usar
obligatoriamente:
a)
como un archivo de flujo elemental de audio MPEG-4;
b)
como un archivo de flujo multiplexado en el formato TS especificado en 12.4.
12.3.4 Transmisión de audio AC3
12.3.4.1
Transmisión como flujo elemental de audio
Para transmitir contenido de audio AC3 como un flujo elemental de audio, los datos de audio se deben transmitir
obligatoriamente como MPEG-2 packetized elementary stream (audio PES) con el tipo de audio especificado
como 0x81.
12.3.4.2
Transmisión en secciones MPEG-2
Para transmitir datos de audio AC3 por medio de secciones MPEG-2 específicas (ver atribución de tipos de flujos
para secciones MPEG-2 en ISO/IEC 13818-1), uno de los métodos siguientes de transmisión se debe usar
obligatoriamente:
a)
como un archivo de flujo elemental de audio AC3;
b)
como un archivo de flujo multiplexado en el formato TS especificado en 12.4.
12.3.5 Transmisión de audio PCM (AIFF-C)
Se recomienda que el audio AIFF-C PCM se transmita como un archivo a través de secciones MPEG-2
específicas (ver atribución de tipos de flujos para secciones MPEG-2 en ISO/IEC 13818-1).
© ABNT 2007 - Todos los derechos reservados
145
ABNT NBR 15606-2:2007
12.4 Formato TS para transmisión de video/audio MPEG – Especificación de la codificación de
datos
12.4.1 Transmisión de video y audio multiplexados
Para transmitir datos de video MPEG-1/2/4 ó H.264|MPEG-4 AVC junto con datos de audio MPEG-1/2/4 ó AC3 en
archivos multiplexados en secciones MPEG-2 específicas, cada archivo de video/audio multiplexado se codifica
en un formato TS, conforme definido en la ISO/IEC 13818-1.
12.4.2 PSI requerido
Una tabla PAT se debe describir obligatoriamente. Cualquier PAT se debe describir obligatoriamente con el
program_number cuyo valor es diferente de 0 y este valor debe representar obligatoriamente un PID de la PMT.
Los valores disponibles de program_number serán definidos en un reglamento de estándar operativo.
Una tabla PMT se debe describir obligatoriamente. Cualquier descriptor de identificación de flujo que indique un
segundo loop debe contener obligatoriamente un descriptor PMT. En caso contrario, se puede insertar un
descriptor conforme sea necesario.
Se recomienda que los valores disponibles para component_tag y sus reglas de ocurrencia en descriptores ES y
PMT defaults en un segundo loop sean equivalentes a un reglamento operativo estándar dedicado al flujo
principal del tipo de media responsable por la transmisión del flujo en cuestión.
En una implementación en la cual un flujo de transporte se decodifica desde un archivo que fue transmitido con
base en la especificación de la codificación de datos definida en esta sección y se entrega en una interfaz digital
de alta velocidad, una tabla SIT se debe describir obligatoriamente (ver la ABNT NBR 15606-1). En otros casos,
las SIT no son necesarias, salvo especificación explícita en contrario.
Cualquier tabla diferente de PAT, PMT y SIT (por ejemplo: CAT, NIT, SDT, BAT, EIT, RST, TDT, TOT, PCAT,
SDTT y St – ver la ABNT NBR 15601) obligatoriamente no debe ser descrita.
Una tabla PAT debe ocurrir obligatoriamente en un flujo a una frecuencia no menor que una vez a cada 100 ms.
Una tabla PMT debe ocurrir obligatoriamente en un flujo a una frecuencia no menor que una vez cada 100 ms.
Por toda la duración de un archivo de formato TS, las tablas PAT y PMT obligatoriamente no deben ser
modificadas o actualizadas.
12.4.3 Transmisión en secciones MPEG-2
Para transmitir un archivo codificado con la especificación de codificación de datos de acuerdo con 12.6 en
secciones MPEG-2 específicas, la transmisión debe estar de acuerdo obligatoriamente con ABNT NBR 15606-3.
12.4.4 Restricciones en la reproducción
Para, al mismo tiempo, recibir un servicio por difusión y reproducir un archivo TS recibido a través de secciones
MPEG-2 específicas, son necesarios dos sistemas de procesamiento de flujo de transporte separados.
Las restricciones en la integración y coordinación de un contenido/evento recibido por un servicio de difusión con
un archivo TS no son descritas en esta Norma.
12.5 Esquema de codificación y transmisión de imágenes estáticas y gráficos de bitmap
referidos por elementos <media>
12.5.1 Transmisión de MPEG-2 I-frame, MPEG-4 I-VOP y H.264|MPEG-4 AVC I-picture
12.5.1.1
Transmisión en video PES para reproducción lineal
Para transmitir una imagen estática en cuadros MPEG-2 I por medio de un componente video PES, el esquema
de codificación debe obligatoriamente cumplir las convenciones definidas en la ABNT NBR 15606-1.
El componente PES se debe transmitir obligatoriamente como un flujo cuyo valor de tipo es igual a 0x02.
146
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Para transmitir una imagen estática en MPEG-4 I-VOP por medio de un componente video PES, el esquema de
codificación debe obligatoriamente cumplir las convenciones definidas en la ABNT NBR 15606-1. El componente
PES se debe transmitir obligatoriamente como un flujo cuyo valor de tipo es igual a 0x10.
Para transmitir una imagen estática en H.264|MPEG-4 AVC I-picture por medio de un componente video PES, el
esquema de codificación debe obligatoriamente cumplir las convenciones definidas en la ABNT NBR 15606-1.
El componente PES se debe transmitir obligatoriamente como un flujo cuyo valor de tipo es igual a 0x1B.
12.5.1.2
Transmisión en secciones MPEG-2 para reproducción interactiva
Para transmitir una imagen estática en cuadros MPEG-2 I por medio de secciones MPEG-2, el esquema de
codificación debe obligatoriamente estar de conformidad con la ABNT NBR 15606-1. La imagen estática se debe
transmitir obligatoriamente como un archivo en la sección MPEG-2.
Para transmitir una imagen estática en MPEG4-I-VOP por medio de secciones MPEG-2, el esquema de
codificación debe obligatoriamente estar de conformidad con la ABNT NBR 15606-1. La imagen estática se debe
transmitir obligatoriamente como un archivo en la sección MPEG-2.
Para transmitir una imagen estática en H.264|MPEG-4 AVC I-picture por medio de secciones MPEG-2, el
esquema de codificación debe obligatoriamente estar conforme con las convenciones en la ABNT NBR 15606-1.
La imagen estática se debe transmitir obligatoriamente como un archivo en la sección MPEG-2.
En esos casos, el valor del tipo de flujo de la sección MPEG-2 debe obligatoriamente estar de acuerdo con la
ISO/IEC 13818-1.
12.5.2 Transmisión de imagen estática JPEG
Las imágenes estáticas JPEG se deben transmitir obligatoriamente a través de secciones MPEG-2 específicas
(ver la atribución de tipos de flujos para secciones MPEG-2 en la ISO/IEC 13818-1).
12.5.3 Esquema de codificación y transmisión del bitmap PNG
Para los datos de bitmap PNG que son exhibidos solamente bajo el control de datos CLUT especificados por
separado de esta Norma, los datos de la paleta, dentro de los datos PNG, pueden ser abreviados.
El gráfico de bitmap PNG se debe transmitir obligatoriamente a través de secciones MPEG-2 específicas (ver la
atribución de tipos de flujos para secciones MPEG-2 en la ISO/IEC 13818-1).
12.5.4 Esquema de codificación y transmisión de la animación MNG
Para que los datos de bitmap PNG en el formato de animación MNG que son exhibidos solamente bajo el control
de datos CLUT especificados por separado de esta Norma, los datos de la paleta dentro de los datos PNG
pueden ser omitidos. El gráfico de animación de bitmap MNG se debe transmitir obligatoriamente a través de
secciones MPEG-2 específicas (ver atribución de tipos de flujos para secciones MPEG-2 en la ISO/IEC 13818-1).
12.5.5 Esquema de codificación y transmisión de datos y animación de gráficos GIF
Los datos de gráficos y animaciones GIF se deben transmitir obligatoriamente a través de secciones MPEG-2
específicas (ver atribución de tipos de flujos para secciones MPEG-2 en la ISO/IEC 13818-1).
12.6 Codificación y transmisión de caracteres - archivos de texto externos referidos por
elementos <media>
Un archivo de texto codificado de acuerdo con la ISO 8859-1 se debe transmitir obligatoriamente por medio de
secciones MPEG-2 específicas (ver atribución de tipos de flujos para secciones MPEG-2 en la ISO/IEC 13818-1).
© ABNT 2007 - Todos los derechos reservados
147
ABNT NBR 15606-2:2007
12.7 Transmisión de documentos XML
12.7.1 Transmisión de documentos NCL y otros documentos XML que se utilizan en los comandos de
edición
Para transmitir un documento NCL u otro archivo de documento XML usado en parámetros de Comandos de
Edición NCL, uno de los métodos siguientes de transmisión se debe usar obligatoriamente:
a) por medio de un protocolo de canal de interactividad;
b) por medio de secciones MPEG-2 específicas.
Si un protocolo de canal interactivo se usa para bajar un documento NCL u otro archivo de Documento XML
mencionado en un parámetro del comando de edición addNode, el parámetro uri del comando de edición
addDocument o addNode (ver Sección 9) no puede tener su esquema igual a “x-sbtvd”, y su parámetro
correspondiente id se debe definir obligatoriamente como NULL. El parámetro uri debe especificar
obligatoriamente la localización del documento y el esquema de protocolo usado para transmitir el documento.
Si secciones MPEG-2 específicas fueran usadas, son posibles varias alternativas, como a seguir. La alternativa
elegida por el SBTVD debe obligatoriamente seguirla especificaciónABNT NBR 15606-3.
12.7.2 Transmisión en Secciones MPEG-2
12.7.2.1 1Transporte de comandosde edición usando descriptores de evento de flujo y carrusel de
objetos DSM-CC
En los ambientes de televisión digital es usual la adopción de protocolo DSM-CC para transporte de comandos de
edición en flujos elementales MPEG-2.
Comandos de edición son transportados en descriptores de evento de flujo DSM-CC, que tienen una estructura
muy parecida con la de los descriptores de eventos definidos por la Figura 5, como ilustra la Figura 6.
Sintaxis
StreamEventDescriptor ( ) {
descriptorTag
descriptorLenght
eventId
Reserved
eventNPT
privateDataLenght
commandTag
sequenceNumber
finalFlag
privateDataPayload
FCS
Número de bits
8
8
16
31
33
8
8
7
1
8 a 2008
8
}
Figura 6 – Descriptor de evento de flujo DSM-CC para comandos de edición
El protocolo de carrusel de objetos DSM-CC permite la transmisión cíclica de objetos de eventos y sistemas de
archivos. Los objetos de eventos se utilizan para mapear nombres de eventos de flujo a ids de eventos de flujo, y
son utilizadospara informar al Ginga sobre eventos deflujo DSM-CC que pueden serrecibidos. Los nombres de los
eventospermiten especificar tipos de eventos, ofreciendo mayor nivel de abstracción a las aplicaciones del
middleware. En ese caso, conviene que el Gestor de la Base Privada, así como los objetos de ejecución
148
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
procedural NCL (ejemplo, NCLua, NCLet), sean registrados como observadores de los eventos de flujo con los
cuales actúan, utilizando nombres de evento, en el caso: “nclEditingCommand”.
Además de los objetos de eventos, el protocolo de carrusel de objetos DSM-CC también se utiliza para
transportar archivos organizados en directorios. El demultiplexador DSM-CC es responsable de montar el sistema
de archivo en eldispositivoreceptor.
A fin de transmitir los archivos de Documentos NCL u otros archivos de Documento XML, usados en los
parámetros de comandos de edición, por medio de un carrusel de objetos que carga la especificación XML, un
objeto de eventos debe obligatoriamente ser transmitido, a fin de mapear el nombre “nclEditingCommand” para el
eventId del descriptor de evento de flujo DSM-CC, que debe obligatoriamente cargar el comando de edición NCL
(ver Sección 9).
El campo privateDataPayload del descriptor de evento del flujo debe obligatoriamente cargar un conjunto de
pares de referencia {uri, id}. El parámetro uri del primer par debe obligatoriamente tener el esquema “x-sbtvd” y el
camino absoluto del documento XML (el camino en el servidor de datos). El parámetro id correspondiente en el
par debe obligatoriamente hacer referencia al IOR de especificación del documento XML (carouselId, moduleId,
objectKey; de acuerdo con la ABNT NBR 15606-3 e ISO/IEC 13818-6) en el carrusel de objetos.
Si otros sistemas de archivos necesitan ser transmitidos usando otros carruseles de objeto, con el fin de
completar el comando de edición con contenido de media (como es usual en los comandos addDocument y
addNode), otros pares {uri, id} deben estar presentes obligatoriamente en el comando. En ese caso, el parámetro
uri debe tener obligatoriamente el esquema “x-sbtvd” y el camino local absoluto de la raíz del sistema de archivos
(el camino en el servidor de transmisión de datos) y el respectivo parámetro ior en el par debe obligatoriamente
hacer referencia al IOR (carouselId, moduleId, objectKey; de acuerdo con la ABNT NBR 15606-3 e ISO/IEC
13818-6) de cualquier archivo o directorio hijo de la raíz en el carrusel de objetos (el service gateway del carrusel).
La Figura 7 ilustra un ejemplo de transmisión de documento NCL por medio de un carrusel de objetos. En ese
ejemplo, un proveedor de contenido quiere transmitir un programa interactivo llamado "weatherConditions.ncl"
almacenado en uno de sus servidores de datos (sistema local de archivos, de acuerdo con la Figura 7).
Un carrusel de objetos debe entonces ser generado (dominio de servicio = 1, de acuerdo con la Figura 7)
cargando todo el contenido del programa interactivo (archivo .ncl y todos los archivos de media) y también un
objeto de eventos (moduleId = 2 y objectKey = 2, de acuerdo con la Figura 7), mapeando el nombre
“nclEditingCommand” para el valor de eventId (valor “3” de acuerdo con la Figura 7).
Un descriptor de evento de flujo también se deberá transmitir con el valor de eventId apropiado, en el ejemplo "3",
y el valor “0x05” de commandTag, que indica un comando addDocument (ver Sección 9). El parámetro uri debe
contener el esquema “x-sbtvd” y el camino absoluto del documento NCL (“C:\nclRepository\weather” de acuerdo
con la Figura 7). Finalmente, el IOR del documento NCL en el carrusel de objetos se transporta en el parámetro
xmlDocument (carouselId = 1, moduleId = 1, objectKey = 2 de acuerdo con la Figura 7).
© ABNT 2007 - Todos los derechos reservados
149
ABNT NBR 15606-2:2007
Figura 7 — Ejemplo de una transmisión de documento NCL
12.7.2.2
Transporte de comandos de edición usando estructuras específicas
12.7.2.2.1 Definiciones de las estructuras de datos
Los descriptores de evento (definidos en la sección 9) pueden enviarse en flujo elemental MPEG-2 TS usando
eventos de flujo DSM-CC, como discutido en 12.7.1.1, o usando cualquier protocolo para transmisión de datos sin
solicitación (“pushed data”).
Tres tipos de estructura de datos pueden ser definidos para dar soporte a la transmisión deparámetros de los
comandos de edición NCL: mapa, metadatos y archivos de datos.
Para estructuras de mapa, el campo mappingType identifica el tipo del mapa. Si el valor de mappingType es igual
a “0x01” (“events”), un mapa de eventos es caracterizado. En ese caso, después del campo mappingType, viene
una lista de identificadores de eventos, como definido en la Tabla 60. Pueden definirse otros valores para el
campo mappingType, pero no son relevantes para esta Norma.
Tabla 60 – Lista de identificadores de eventos definidos por la estructura de mapa
Sintaxis
Número de bits
mappingStructure ( ) {
mappingType
8
for (i=1; i<N; i++){
eventId
8
eventNameLength
8
eventName
8 a 255
}
}
150
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Los mapas del tipo “event” (mapas de eventos) se usan para mapear nombres de eventos en eventos de los
descriptores de evento (ver Figura 5). Los mapas de eventos son usados para indicar qué eventos deben ser
obligatoriamente recibidos. Los nombres de eventos permiten especificar tipos de eventos, ofreciendomayor nivel
de abstracción a las aplicaciones del middleware. En ese caso, conviene que el Gestor de Base Privada, así
como los objetos de ejecución procedural NCL (ejemplo, NCLua, NCLet) sean registrados como observadores de
los eventos de flujo con los cuales operan, utilizando nombres de eventos, en ese caso: “nclEditingCommand”.
Cuando un comando de edición NCL necesita ser enviado, debe crearse obligatoriamente un mapa de eventos,
mapeando la string “nclEditingCommand” en un eventId de un descriptor de evento seleccionado (ver Figura 5).
Uno o más descriptores de evento con el eventId previamente seleccionado son entonces creados y enviados.
Esos descriptores de evento pueden tener sus tiempos de referencia como cero, o pueden tener su ejecución
postergada para un tiempo especificado. El Gestor de Bases Privadas debe registrarse obligatoriamente como
oyente de un evento “nclEditingCommand” para ser notificado de la llegada de ese tipo de evento.
Cada estructura de archivos de datos es, de hecho, un contenido de archivo que compone una aplicación NCL o
un documento XML definiendo una entidad NCL: un archivo conteniendo la especificación XML o un archivo con
contenido de media de la aplicación o del nudo a ser adicionado (video, audio, texto, imagen, ncl, lua etc.).
Una estructura de metadatos es un documento XML, como se define en el esquema a seguir. El esquema define,
para cada dato entregado sin solicitación (pushed file), una asociación entre su localización en el sistema de
transporte (identificación del sistema de transporte (atributo component_tag) y la identificación del archivo en el
sistema de transporte (atributo structureId)) y su identificador de recurso universal (atributo uri).
<!-XML Schema for NCL Section Metadata File
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCLSectionMetadataFile.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Section Metadata File namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:NCLSectionMetadataFile="http://www.ncl.org.br/NCLSectionMetadataFile"
targetNamespace="http:// www.ncl.org.br/NCL3.0/NCLSectionMetadataFile"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="NCLSectionMetadataType">
<sequence>
<sequence>
<element ref="NCLSectionMetadataFile:baseData" minOccurs="0"
maxOccurs="unbounded"/>
</sequence>
<element ref="NCLSectionMetadataFile:pushedRoot" minOccurs="0"
maxOccurs="1"/>
<sequence>
<element ref="NCLSectionMetadataFile:pushedData" minOccurs="0"
maxOccurs="unbounded"/>
</sequence>
</sequence>
<attribute name="name" type="string" use="optional"/>
<attribute name="size" type="positiveInteger" use="optional"/>
</complexType>
<complexType name="baseDataType">
© ABNT 2007 - Todos los derechos reservados
151
ABNT NBR 15606-2:2007
<sequence>
<element ref="NCLSectionMetadataFile:pushedRoot" minOccurs="0"
maxOccurs="1"/>
<sequence>
<element ref="NCLSectionMetadataFile:pushedData"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</sequence>
<attribute name="uri" type="anyURI" use="required"/>
</complexType>
<complexType name="pushedRootType">
<attribute name="component_tag" type="positiveInteger"
use="optional"/>
<attribute name="structureId" type="string" use="required"/>
<attribute name="uri" type="anyURI" use="required"/>
<attribute name="size" type="positiveInteger" use="optional"/>
</complexType>
<complexType name="pushedDataType">
<attribute name="component_tag" type="positiveInteger"
use="optional"/>
<attribute name="structureId" type="string" use="required"/>
<attribute name="uri" type="anyURI" use="required"/>
<attribute name="size" type="positiveInteger" use="optional"/>
</complexType
<!-- declare global elements in this module -->
<element name="metadata" type="NCLSectionMetadataFile:NCLSectionMetadataType"/>
<element name="baseData" type="NCLSectionMetadataFile:baseDataType"/>
<element name="pushedRoot" type="NCLSectionMetadataFile:pushedRootType"/>
<element name="pushedData" type="NCLSectionMetadataFile:pushedDataType"/>
</schema>
Para cada archivo de documento NCL u otros archivos de documento XML, usados en los comandos de edición
addDocument o addNode, debe ser definida, por lo menos, una estructura de metadatos. Solamente un archivo
de aplicación NCL o un archivo de documento XML representando un nudo NCL a ser insertado puede ser
definido por estructura de metadatos. Sin embargo, una aplicación NCL (y sus archivos de contenido) o un
documento NCL (y sus archivos de contenido) pueden extenderse por más de una estructura de metadatos. Más
aun, pueden existir estructuras de metadatos sin ninguna aplicación NCL o documento XML descritos en sus
elementos <pushedRoot> y <pushedData>.
Las tres estructuras anteriormente definidas pueden ser transmitidas usando sistemas de transporte diferentes,
como se explica a continuación.
12.7.2.2.2 Transporte en un tipo específico de sección MPEG-2
El uso de un tipo específico de sección MPEG-2 (identificado por un valor específico del campo table_id de una
sección privada MPEG-2), a partir de ahora denominada Sección NCL, permite la transmisión de las tres
estructuras de datos anteriormente definidas: mapas, metadatos y archivos de datos.
Cada Sección NCL contiene los datos de solamente un estructura. Sin embargo, una estructura puede extenderse
por varias Secciones. Las estructuras de datos pueden ser transmitidas en cualquier orden y cuantas veces sea
necesario. El inicio de una estructura de datos es limitado por el campo payload_unit_start_indicator de un
paquete TS. Después de los cuatro bytes del encabezamiento TS, la carga (payload) del paquete TS comienza,
con un campo puntero de un byte indicando el comienzo de una Sección NCL (ver ISO/IEC 13818-1). El
encabezamiento de la Sección NCL es definido entonces como una sección MPEG-2 (ver ISO/IEC 13818-1). El
primer byte de carga (payload) de la Sección NCL identifica el tipo de la estructura transportada (0x01 para
152
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
metadatos; 0x02 para archivos de datos y 0x03 para mapas de eventos). El segundo byte carga un identificador
único de la estructura (structureId) en el flujo elemental de transporte.
NOTA El flujo elemental y el identicador de la estructura son aquellos que son asociados, por la estructura de metadatos, a
través de los atributos component_ta y structureId de los elementos <pushedRoot> y <pushedData>, a localizadores de
archivos (URL).
Después del segundo byte viene una estructura de datos seriada que puede ser mappingStructure (como ilustra
la Tabla 60), o la estructura de metadatos (un documento XML), o una estructura de archivos de datos (un
contenido de archivo seriado). El demultiplexador de Secciones NCL es responsable de montar la estructura de la
aplicación en el dispositivo receptor.
NOTA
Es importante resaltar que las Secciones NCL pueden también transportar las estructuras de datos definidas
encapsuladas en otras estructuras de datos. Por ejemplo, MPE (Multi-protocol Encapsulation) puede usarse. En ese caso,
Secciones NCL serían Secciones MPEG-2 de datagrama. Más aun, todas las estructuras de datos mencionadas pueden
empaquetarse en otro formato de datos de protocolo, como, por ejemplo, paquetes FLUTE.
En el mismo flujo elemental que carga la especificación XML (el archivo del documento NCL o de otro documento
XML usados en los comandos de edición NCL) es recomendable que se transmita un archivo mapa de eventos,
para que sea mapeado el nombre “nclEditingCommand” en el eventId del descriptor de eventos que deberá
obligatoriamente transportar los comandos de edición NCL, como se describe en la Sección 9. El campo
privateDataPayload del descriptor de eventos debe obligatoriamente cargar el par de referencias {uri, id}. Los
parámetros uri tienen siempre el valor “null”. En el caso de los documentos addDocument y addNode, el
parámetro id del primer par debe obligatoriamente identificar el flujo elemental (“component_tag”) y la estructura
de metadatos que éste transporta (“structureId”), que, a su vez, contiene el camino absoluto del documento NCL o
de la especificación del nudo NCL (el camino en el servidor de datos) y la estructura relacionada correspondiente
(“structureId”) transportada en las Seccions NCL del mismo flujo elemental. Si otras estructuras de metadatos
adicionales fueran necesarias para completar los comandos de edición addDocument o addNode command, otros
pares {uri, id} deben obligatoriamente hacerse presentes en el comando. En ese caso, los parámetros uri también
deben tener el valor “null” y los parámetros id correspondientes deben referirse obligatoriamente al
component_tag y al metadato structureId correspondiente.
La Figura 8 ilustra un ejemplo de transmisión de un documento NCL a través de Secciones NCL. En ese ejemplo,
un proveedor de contenido quiere transmitir un programa interactivo llamado “weatherConditions.ncl”, almacenado
en uno de sus servidores de datos (sistema de archivo local en la Figura 8). Un flujo elemental MPEG-2
(component_tag=”0x09”) debe, entonces, ser generado, cargando todo el contenido del programa interactivo (el
archivo ncl y todos los archivos de contenido de media). Tambiés es generado un mapa de eventos
(structureType=”0x03”, structureId=”0x0C”, en la Figura 8), mapeando el nombre “nclEditingCommand” al valor de
eventId (valor “3”, en la Figura 8). Un descriptor de evento también debe ser transmitido con el valor apropiado
para eventId, en el ejemplo el valor “3”, y el valor de commandTag igual a “0x05”, que indica un comando
addDocument (ver Sección 9). El parámetro uri debe tener obligatoriamente el valor “null” y el parámetro id debe
tener obligatoriamente el valor (component_tag= “0x09”, structureId= “0x0B”), como en la Figura 8.
© ABNT 2007 - Todos los derechos reservados
153
ABNT NBR 15606-2:2007
Figura 8 – Ejemplo de transmisión de documento NCL usando Secciones NCL MPEG-2
12.7.2.2.3
Transporte de las estructuras de metadatos como parámetro de comandos de edición
Una alternativa al transporte de estructuras de metadatos directamente en Secciones NCL es tratar estas
estructuras como parámetros de los comandos addDocument y addNode, transportados en el campo
privateDataPayload de los descriptores de evnto.
En ese caso, el conjunto de pares {uri, id} de los comandos addDocument y addNode es sustituido por
parámetros de la estructura de metadatos, que definen un conjunto de pares {“uri”, “component_tag, structureId”}
para cada archivo transmitido sin solicitación (pushed file).
En el ejemplo de la Figura 8, el nuevo transporte sería exactamente el mismo, con excepción del descriptor de
evento. Esos descriptores en vez de tener el par {uri; id} igual al valor {“null”; “0x09, 0x0B”} como parámetro,
tendrían la estructura de metadatos seriada. En la estructura de metadatos, los atributos component-tag de los
elementos <pushedRoot> y <pushedData> deben obligatoriamente, en este caso, ser definidos, toda vez que la
estructura no es transportada más en el mismo flujo elemental que transporta los archivos de la aplicación NCL.
12.7.2.2.4
Transporte de estructuras de metadatos en secciones de metadatos MPEG-2
Otra alternativa es transportar las estructuras de metadatos en secciones de metadatos MPEG-2, transportadas
en flujos MPEG-2 del tipo “0x16”. Como siempre, cada sección de metadatos MPEG-2 puede contener datos de
solamente una estructura de metadatos. Sin embargo, una estructura de metadatos puede extenderse por varias
secciones de metadatos.
La Tabla 61 ilustra la sintaxis de la sección de metadatos para el transporte de estructuras de metadatos, que
deben estar de acuerdo con ISO/IEC 13818-1:2007.
154
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Tabla 61 – Sintaxis de la sección para el transporte de estructuras de metadatos
Número de
bits
Valor
table_id
8
0x06
section_syntax_indicator
1
1
prívate_indicator
1
1
random_access_indicator
1
1
decoder_config_flag
1
0
metadata_section_length
12
entero
metadata_service_id
8
entero a ser
estandarizado
reserved
8
section_fragment_indication
2
de acuerdo con
la Tabla 62
versión_number
5
entero
current_next_indicator
1
1
section_number
8
entero
last_section_number
8
entero
structureId
8
entero
Sintaxis
Metadata section() {
For (i=1; i< N; i++) {
serialized_metadata_structure_byte
8
}
CRC_32
32
}
Tabla 62 – Indicación de fragmento de sección
Valor
Descripción
11
Una única sección de metadatos cargando una estructura de metadatos completa
10
Primera sección de metadatos de una serie, con datos de una misma estructura de
metadatos
01
Última sección de metadatos de una serie, con datos de una misma estructura de
metadatos
00
Una sección de metadatos de una serie, con datos de una misma estructura de
metadatos, pero que no es la primera ni la última sección
Como anteriormente, en el mismo flujo elemental que transporta la especificación XML (el archivo del documento
NCL u otro archivo XML usados en los comandos de edicón NCL), es recomendable que se transmita un archivo
mapa de eventos con el fin de mapear el nombre “nclEditingCommand” al eventId del descriptor de evento que
carga el comando de edición NCL, comose describe en la Sección 9. El campo privateDataPayload del descriptor
de evento debe obligatoriamente transportar un conjunto de pares de referencia {uri, id}. Los parámetros uri
deben obligatoriamente el valor “null”. En el caso de los comandos addDocument y addNode, el parámetro id del
primer par debe obligatoriamente identificar el flujo elemental (“component_tag”) del tipo= “0x16” y la estructura de
© ABNT 2007 - Todos los derechos reservados
155
ABNT NBR 15606-2:2007
metadatos (“structureId”) que carga el camino absoluto del documento NCL o de la especificación del nudo NCL
(el camino en el servidor de datos). Si otras estructuras de metadatos es usada para relacionar archivos
presentes en el documento NCL o en la especificación del nudo NCL, con el fin de completar los comandos
addDocument o addNode con contenidos de media, otros pares de referencia {uri, id} deben definirse en el
comando. En ese caso, el parámetro uri debe obligatoriamente tener el valor “null” y el parámetro id
correspondiente en el par debe obligatoriamente referir al component_tag y el structureId del metadato
correspondiente.
En el ejemplo de la Figura 8, el nuevo escenario sería similar. Sólo se deben hacer pequeños cambios de forma
que el descriptor de evento refiera al flujo elemental y su sección que carga la estructura de metadatos
(component_tag= “0x08” y structureId= “0x0B”), y que la estructura de metadatos también refiera al flujo elemental
dónde los archivos del documento serán transportados. La Figura 9 ilustra la nueva situación.
Figura 9 – Ejemplo de transmisión de documento NCL usando Secciones de Metadatos MPEG-2
12.7.3 Transmisión de documentos XML externos
Los documentos XML externos referidos por los elementos <media>, como, por ejemplo, un objeto de media
XHTML, se debe transmitir obligatoriamente a través de secciones MPEG-2 específicas (ver la atribució de tipos d
flujo para secciones MPEG-2 en ISO/IEC 13818-1).
13 Seguridad
El modelo de seguridad Ginga es totalmente compatible con el modelo de seguridad SBTVD. Éste trata con las
mismas áreas de seguridad; o sea, autenticación de aplicaciones de difusión, políticas de seguridad para
aplicaciones, seguridad sobre el canal de interacción y gestión de certificados.
La autenticación de aplicaciones Ginga-NCL se debe realizar obligatoriamente del mismo modo para aplicaciones
Ginga-J. Si está firmada, la aplicación debe seguir obligatoriamente la estructura de firma como especificado para
el Ginga-J. Las aplicaciones Ginga-NCL no autenticadas van a operar dentro de un ambiente de caja de arena
(sand box). Las aplicaciones Ginga-NCL autenticadas, asociadas a un archivo de solicitud de autorización,
pueden tener autorizaciones concedidas fuera de la caja de arena.
156
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Anexo A
(normativo)
Esquemas de los módulos NCL 3.0 que se utilizan en los perfiles TVD
Básico y TVD Avanzado
A.1 Módulo Structure: NCL30Structure.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30Structure.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the Structure module namespace,
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:structure="http://www.ncl.org.br/NCL3.0/Structure"
targetNamespace="http://www.ncl.org.br/NCL3.0/Structure"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- define the top-down structure of an NCL language document.
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<complexType name="nclPrototype">
<sequence>
<element ref="structure:head" minOccurs="0" maxOccurs="1"/>
<element ref="structure:body" minOccurs="0" maxOccurs="1"/>
</sequence>
<attribute name="id" type="ID" use="required"/>
<attribute name="title" type="string" use="optional"/>
</complexType>
<complexType name="headPrototype">
</complexType>
<complexType name="bodyPrototype">
<attribute name="id" type="ID" use="optional"/>
</complexType>
<!-- declare global elements in this module -->
<element name="ncl" type="structure:nclPrototype"/>
<element name="head" type="structure:headPrototype"/>
<element name="body" type="structure:bodyPrototype"/>
</schema>
© ABNT 2007 - Todos los derechos reservados
157
ABNT NBR 15606-2:2007
A.2 Módulo Layout: NCL30Layout.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30Layout.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Layout module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:layout="http://www.ncl.org.br/NCL3.0/Layout"
targetNamespace="http://www.ncl.org.br/NCL3.0/Layout"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="regionBasePrototype">
<attribute name="id" type="ID" use="optional"/>
<attribute name="type" type="string" use="optional"/>
<attribute name="device" type="string" use="optional"/>
<attribute name="region" type="string" use="optional"/>
</complexType>
<complexType name="regionPrototype">
<sequence minOccurs="0" maxOccurs="unbounded">
<element ref="layout:region" />
</sequence>
<attribute name="id" type="ID" use="required"/>
<attribute name="title" type="string" use="optional"/>
<attribute name="height" type="string" use="optional"/>
<attribute name="left" type="string" use="optional"/>
<attribute name="right" type="string" use="optional"/>
<attribute name="top" type="string" use="optional"/>
<attribute name="bottom" type="string" use="optional"/>
<attribute name="width" type="string" use="optional"/>
<attribute name="zIndex" type="integer" use="optional"/>
</complexType>
<!-- declare global attributes in this module -->
<!-- define the region attributeGroup -->
<attributeGroup name="regionAttrs">
<attribute name="region" type="string" use="optional"/>
</attributeGroup>
<!-- declare global elements in this module -->
<element name="regionBase" type="layout:regionBasePrototype"/>
<element name="region" type="layout:regionPrototype"/>
</schema>
158
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
A.3 Módulo Media: NCL30Media.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30Media.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Media module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:media="http://www.ncl.org.br/NCL3.0/Media"
targetNamespace="http://www.ncl.org.br/NCL3.0/Media"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="mediaPrototype">
<attribute name="id" type="ID" use="required"/>
<attribute name="type" type="string" use="optional"/>
<attribute name="src" type="anyURI" use="optional"/>
</complexType>
<!-- declare global elements in this module -->
<element name="media" type="media:mediaPrototype"/>
</schema>
© ABNT 2007 - Todos los derechos reservados
159
ABNT NBR 15606-2:2007
A.4 Módulo Context: NCL30Context.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30Context.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Context module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:context="http://www.ncl.org.br/NCL3.0/Context"
targetNamespace="http://www.ncl.org.br/NCL3.0/Context"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<!-- define the compositeNode element prototype -->
<complexType name="contextPrototype">
<attribute name="id" type="ID" use="required"/>
</complexType>
<!-- declare global elements in this module -->
<element name="context" type="context:contextPrototype"/>
</schema>
160
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
A.5 Módulo MediaContentAnchor: NCL30MediaContentAnchor.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30MediaContentAnchor.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Media Content Anchor module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:mediaAnchor="http://www.ncl.org.br/NCL3.0/MediaContentAnchor"
targetNamespace="http://www.ncl.org.br/NCL3.0/MediaContentAnchor"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<!-- define the temporalAnchorAttrs attribute group -->
<attributeGroup name="temporalAnchorAttrs">
<attribute name="begin" type="string" use="optional"/>
<attribute name="end" type="string" use="optional"/>
</attributeGroup>
<!-- define the textAnchorAttrs attribute group -->
<attributeGroup name="textAnchorAttrs">
<attribute name="text" type="string" use="optional"/>
<attribute name="position" type="unsignedLong" use="optional"/>
</attributeGroup>
<!-- define the sampleAnchorAttrs attribute group -->
<attributeGroup name="sampleAnchorAttrs">
<attribute name="first" type="unsignedLong" use="optional"/>
<attribute name="last" type="unsignedLong" use="optional"/>
</attributeGroup>
<!-- define the coordsAnchorAttrs attribute group -->
<attributeGroup name="coordsAnchorAttrs">
<attribute name="coords" type="string" use="optional"/>
</attributeGroup>
<!-- define the labelAttrs attribute group -->
<attributeGroup name="labelAttrs">
<attribute name="label" type="string" use="optional"/>
</attributeGroup>
<complexType name="componentAnchorPrototype">
<attribute name="id" type="ID" use="required"/>
<attributeGroup ref="mediaAnchor:coordsAnchorAttrs" />
<attributeGroup ref="mediaAnchor:temporalAnchorAttrs" />
<attributeGroup ref="mediaAnchor:textAnchorAttrs" />
<attributeGroup ref="mediaAnchor:sampleAnchorAttrs" />
<attributeGroup ref="mediaAnchor:labelAttrs" />
</complexType>
<!-- declare global elements in this module -->
<element name="area" type="mediaAnchor:componentAnchorPrototype"/>
</schema>
© ABNT 2007 - Todos los derechos reservados
161
ABNT NBR 15606-2:2007
A.6 Módulo CompositeNodeInterface: NC30CompositeNodeInterface.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30CompositeNodeInterface.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Composite Node Interface module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:compositeInterface="http://www.ncl.org.br/NCL3.0/CompositeNodeInterface"
targetNamespace="http://www.ncl.org.br/NCL3.0/CompositeNodeInterface"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="compositeNodePortPrototype">
<attribute name="id" type="ID" use="required" />
<attribute name="component" type="IDREF" use="required"/>
<attribute name="interface" type="string" use="optional" />
</complexType>
<!-- declare global elements in this module -->
<element name="port" type="compositeInterface:compositeNodePortPrototype" />
</schema>
162
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
A.7 Módulo PropertyAnchor: NCL30PropertyAnchor.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30PropertyAnchor.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Property Anchor module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:propertyAnchor="http://www.ncl.org.br/NCL3.0/PropertyAnchor"
targetNamespace="http://www.ncl.org.br/NCL3.0/PropertyAnchor"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="propertyAnchorPrototype">
<attribute name="name" type="string" use="required" />
<attribute name="value" type="string" use="optional" />
</complexType>
<!-- declare global elements in this module -->
<element name="property" type="propertyAnchor:propertyAnchorPrototype"/>
</schema>
© ABNT 2007 - Todos los derechos reservados
163
ABNT NBR 15606-2:2007
A.8 Módulo SwitchInterface: NCL30SwitchInterface.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30SwitchInterface.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Switch Interface module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:switchInterface="http://www.ncl.org.br/NCL3.0/SwitchInterface"
targetNamespace="http://www.ncl.org.br/NCL3.0/SwitchInterface"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="mappingPrototype">
<attribute name="component" type="IDREF" use="required"/>
<attribute name="interface" type="string" use="optional"/>
</complexType>
<complexType name="switchPortPrototype">
<sequence>
<element ref="switchInterface:mapping" minOccurs="1" maxOccurs="unbounded"/>
</sequence>
<attribute name="id" type="ID" use="required"/>
</complexType>
<!-- declare global elements in this module -->
<element name="mapping" type="switchInterface:mappingPrototype"/>
<element name="switchPort" type="switchInterface:switchPortPrototype" />
</schema>
164
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
A.9 Módulo Descriptor: NCL30Descriptor.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30Descriptor.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Descriptor module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:descriptor="http://www.ncl.org.br/NCL3.0/Descriptor"
targetNamespace="http://www.ncl.org.br/NCL3.0/Descriptor"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="descriptorParamPrototype">
<attribute name="name" type="string" use="required" />
<attribute name="value" type="string" use="required"/>
</complexType>
<complexType name="descriptorPrototype">
<sequence minOccurs="0" maxOccurs="unbounded">
<element ref="descriptor:descriptorParam"/>
</sequence>
<attribute name="id" type="ID" use="required"/>
<attribute name="player" type="string" use="optional"/>
</complexType>
<!-Formatters should support the following descriptorParam names.
* For audio players: soundLevel; balanceLevel; trebleLevel; bassLevel.
* For text players: style, which refers to a style sheet with information for text presentation.
* For visual media players: background, specifying the background color used to fill the area of a region displaying media; scroll,
which allows the specification of how an author would like to configure the scroll in a region; fit, indicating how an object will be
presented (hidden, fill, meet, meetBest, slice); transparency, indicating the degree of transparency of an object presentation (the
value shall be between 0 and 1, or a real value in the range [0,100] ending with the character “%” (e.g. 30%)); visible, indicating
if the presentation is to be seen or hidden; and the object positioning parameters: top, left, bottom, right, width, height, sie and
bounds.
* For players in general: reusePlayer, which determines if a new player shall be instantiated or if a player already instantiated
shall be used; and playerLife, which specifies what will happen to the player instance at the end of the presentation.
-->
<complexType name="descriptorBasePrototype">
<attribute name="id" type="ID" use="optional"/>
</complexType>
<!-- declare global elements in this module -->
<element name="descriptorParam" type="descriptor:descriptorParamPrototype"/>
<element name="descriptor" type="descriptor:descriptorPrototype"/>
<element name="descriptorBase" type="descriptor:descriptorBasePrototype"/>
<!-- declare global attributes in this module -->
<attributeGroup name="descriptorAttrs">
<attribute name="descriptor" type="string" use="optional"/>
</attributeGroup>
</schema>
© ABNT 2007 - Todos los derechos reservados
165
ABNT NBR 15606-2:2007
A.10 Módulo Linking: NCL30Linking.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30Linking.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Linking module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:linking="http://www.ncl.org.br/NCL3.0/Linking"
targetNamespace="http://www.ncl.org.br/NCL3.0/Linking"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="paramPrototype">
<attribute name="name" type="string" use="required"/>
<attribute name="value" type="anySimpleType" use="required"/>
</complexType>
<complexType name="bindPrototype">
<sequence minOccurs="0" maxOccurs="unbounded">
<element ref="linking:bindParam"/>
</sequence>
<attribute name="role" type="string" use="required"/>
<attribute name="component" type="IDREF" use="required"/>
<attribute name="interface" type="string" use="optional"/>
</complexType>
<complexType name="linkPrototype">
<sequence>
<element ref="linking:linkParam" minOccurs="0" maxOccurs="unbounded"/>
<element ref="linking:bind" minOccurs="2" maxOccurs="unbounded"/>
</sequence>
<attribute name="id" type="ID" use="optional"/>
<attribute name="xconnector" type="string" use="required"/>
</complexType>
<!-- declare global elements in this module -->
<element name="linkParam" type="linking:paramPrototype"/>
<element name="bindParam" type="linking:paramPrototype"/>
<element name="bind" type="linking:bindPrototype" />
<element name="link" type="linking:linkPrototype" />
</schema>
166
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
A.11 Módulo ConnectorCommonPart: NCL30ConnectorCommonPart.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30ConnectorCommonPart.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Connector Common Part module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:connectorCommonPart="http://www.ncl.org.br/NCL3.0/ConnectorCommonPart"
targetNamespace="http://www.ncl.org.br/NCL3.0/ConnectorCommonPart"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="parameterPrototype">
<attribute name="name" type="string" use="required"/>
<attribute name="type" type="string" use="optional"/>
</complexType>
<simpleType name="eventPrototype">
<restriction base="string">
<enumeration value="presentation" />
<enumeration value="selection" />
<enumeration value="attribution" />
<enumeration value="composition" />
</restriction>
</simpleType>
<simpleType name="logicalOperatorPrototype">
<restriction base="string">
<enumeration value="and" />
<enumeration value="or" />
</restriction>
</simpleType>
<simpleType name="transitionPrototype">
<restriction base="string">
<enumeration value="starts" />
<enumeration value="stops" />
<enumeration value="pauses" />
<enumeration value="resumes" />
<enumeration value="aborts" />
</restriction>
</simpleType>
</schema>
© ABNT 2007 - Todos los derechos reservados
167
ABNT NBR 15606-2:2007
A.12 Módulo ConnectorAssessmentExpression:
NCL30ConnectorAssessmentExpression.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2006 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30ConnectorAssessmentExpression.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Connector Assessment Expression module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:connectorAssessmentExpression="http://www.ncl.org.br/NCL3.0/ConnectorAssessmentExpression"
xmlns:connectorCommonPart="http://www.ncl.org.br/NCL3.0/ConnectorCommonPart"
targetNamespace="http://www.ncl.org.br/NCL3.0/ConnectorAssessmentExpression"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<!-- import the definitions in the modules namespaces -->
<import namespace="http://www.ncl.org.br/NCL3.0/ConnectorCommonPart"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30ConnectorCommonPart.xsd"/>
<simpleType name="comparatorPrototype">
<restriction base="string">
<enumeration value="eq" />
<enumeration value="ne" />
<enumeration value="gt" />
<enumeration value="lt" />
<enumeration value="gte" />
<enumeration value="lte" />
</restriction>
</simpleType>
<simpleType name="attributePrototype">
<restriction base="string">
<enumeration value="repeat" />
<enumeration value="occurrences" />
<enumeration value="state" />
<enumeration value="nodeProperty" />
</restriction>
</simpleType>
<simpleType name="statePrototype">
<restriction base="string">
<enumeration value="sleeping" />
<enumeration value="occurring" />
<enumeration value="paused" />
</restriction>
</simpleType>
<simpleType name="valueUnion">
<union memberTypes="string connectorAssessmentExpression:statePrototype"/>
</simpleType>
<complexType name="assessmentStatementPrototype" >
<sequence>
<element ref="connectorAssessmentExpression:attributeAssessment"/>
<choice>
168
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<element ref="connectorAssessmentExpression:attributeAssessment"/>
<element ref="connectorAssessmentExpression:valueAssessment"/>
</choice>
</sequence>
<attribute name="comparator" type="connectorAssessmentExpression:comparatorPrototype" use="required"/>
</complexType>
<complexType name="attributeAssessmentPrototype">
<attribute name="role" type="string" use="required"/>
<attribute name="eventType" type="connectorCommonPart:eventPrototype" use="required"/>
<attribute name="key" type="string" use="optional"/>
<attribute name="attributeType" type="connectorAssessmentExpression:attributePrototype" use="optional"/>
<attribute name="offset" type="string" use="optional"/>
</complexType>
<complexType name="valueAssessmentPrototype">
<attribute name="value" type="connectorAssessmentExpression:valueUnion" use="required"/>
</complexType>
<complexType name="compoundStatementPrototype">
<choice minOccurs="1" maxOccurs="unbounded">
<element ref="connectorAssessmentExpression:assessmentStatement" />
<element ref="connectorAssessmentExpression:compoundStatement" />
</choice>
<attribute name="operator" type="connectorCommonPart:logicalOperatorPrototype" use="required"/>
<attribute name="isNegated" type="boolean" use="optional"/>
</complexType>
<!-- declare global elements in this module -->
<element name="assessmentStatement" type="connectorAssessmentExpression:assessmentStatementPrototype" />
<element name="attributeAssessment" type="connectorAssessmentExpression:attributeAssessmentPrototype" />
<element name="valueAssessment" type="connectorAssessmentExpression:valueAssessmentPrototype" />
<element name="compoundStatement" type="connectorAssessmentExpression:compoundStatementPrototype" />
</schema>
© ABNT 2007 - Todos los derechos reservados
169
ABNT NBR 15606-2:2007
A.13 Módulo ConnectorCausalExpression: NCL30ConnectorCausalExpression.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2006 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30ConnectorCausalExpression.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Connector Causal Expression module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:connectorCausalExpression="http://www.ncl.org.br/NCL3.0/ConnectorCausalExpression"
xmlns:connectorCommonPart="http://www.ncl.org.br/NCL3.0/ConnectorCommonPart"
targetNamespace="http://www.ncl.org.br/NCL3.0/ConnectorCausalExpression"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<!-- import the definitions in the modules namespaces -->
<import namespace="http://www.ncl.org.br/NCL3.0/ConnectorCommonPart"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/NCL30ConnectorCommonPart.xsd"/>
<simpleType name="conditionRoleUnion">
<union memberTypes="string connectorCausalExpression:conditionRolePrototype"/>
</simpleType>
<simpleType name="conditionRolePrototype">
<restriction base="string">
<enumeration value="onBegin" />
<enumeration value="onEnd" />
<enumeration value="onPause" />
<enumeration value="onResume" />
<enumeration value="onAbort" />
</restriction>
</simpleType>
<simpleType name="maxUnion">
<union memberTypes="positiveInteger connectorCausalExpression:unboundedString"/>
</simpleType>
<simpleType name="unboundedString">
<restriction base="string">
<pattern value="unbounded"/>
</restriction>
</simpleType>
<complexType name="simpleConditionPrototype">
<attribute name="role" type="connectorCausalExpression:conditionRoleUnion" use="required"/>
<attribute name="eventType" type="connectorCommonPart:eventPrototype" use="optional"/>
<attribute name="key" type="string" use="optional"/>
<attribute name="transition" type="connectorCommonPart:transitionPrototype" use="optional"/>
<attribute name="delay" type="string" use="optional"/>
<attribute name="min" type="positiveInteger" use="optional"/>
<attribute name="max" type="connectorCausalExpression:maxUnion" use="optional"/>
<attribute name="qualifier" type="connectorCommonPart:logicalOperatorPrototype" use="optional"/>
</complexType>
<complexType name="compoundConditionPrototype">
<attribute name="operator" type="connectorCommonPart:logicalOperatorPrototype" use="required"/>
<attribute name="delay" type="string" use="optional"/>
170
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
</complexType>
<simpleType name="actionRoleUnion">
<union memberTypes="string connectorCausalExpression:actionNamePrototype"/>
</simpleType>
<simpleType name="actionNamePrototype">
<restriction base="string">
<enumeration value="start" />
<enumeration value="stop" />
<enumeration value="pause" />
<enumeration value="resume" />
<enumeration value="abort" />
<enumeration value="set" />
</restriction>
</simpleType>
<simpleType name="actionOperatorPrototype">
<restriction base="string">
<enumeration value="par" />
<enumeration value="seq" />
</restriction>
</simpleType>
<complexType name="simpleActionPrototype">
<attribute name="role" type="connectorCausalExpression:actionRoleUnion" use="required"/>
<attribute name="eventType" type="connectorCommonPart:eventPrototype" use="optional"/>
<attribute name="actionType" type="connectorCausalExpression:actionNamePrototype" use="optional"/>
<attribute name="delay" type="string" use="optional"/>
<attribute name="value" type="string" use="optional"/>
<attribute name="repeat" type="positiveInteger" use="optional"/>
<attribute name="repeatDelay" type="string" use="optional"/>
<attribute name="min" type="positiveInteger" use="optional"/>
<attribute name="max" type="connectorCausalExpression:maxUnion" use="optional"/>
<attribute name="qualifier" type="connectorCausalExpression:actionOperatorPrototype" use="optional"/>
</complexType>
<complexType name="compoundActionPrototype">
<choice minOccurs="2" maxOccurs="unbounded">
<element ref="connectorCausalExpression:simpleAction" />
<element ref="connectorCausalExpression:compoundAction" />
</choice>
<attribute name="operator" type="connectorCausalExpression:actionOperatorPrototype" use="required"/>
<attribute name="delay" type="string" use="optional"/>
</complexType>
<!-- declare global elements in this module -->
<element name="simpleCondition" type="connectorCausalExpression:simpleConditionPrototype" />
<element name="compoundCondition" type="connectorCausalExpression:compoundConditionPrototype" />
<element name="simpleAction" type="connectorCausalExpression:simpleActionPrototype" />
<element name="compoundAction" type="connectorCausalExpression:compoundActionPrototype" />
</schema>
© ABNT 2007 - Todos los derechos reservados
171
ABNT NBR 15606-2:2007
A.14 Módulo CausalConnector: NCL30CausalConnector.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2006 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30CausalConnector.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Causal Connector module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:causalConnector="http://www.ncl.org.br/NCL3.0/CausalConnector"
targetNamespace="http://www.ncl.org.br/NCL3.0/CausalConnector"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="causalConnectorPrototype">
<attribute name="id" type="ID" use="required"/>
</complexType>
<!-- declare global elements in this module -->
<element name="causalConnector" type="causalConnector:causalConnectorPrototype"/>
</schema>
172
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
A.15 Módulo ConnectorBase: NCL30ConnectorBase.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2006 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30ConnectorBase.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Connector Base module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:connectorBase="http://www.ncl.org.br/NCL3.0/ConnectorBase"
targetNamespace="http://www.ncl.org.br/NCL3.0/ConnectorBase"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="connectorBasePrototype">
<attribute name="id" type="ID" use="optional"/>
</complexType>
<!-- declare global elements in this module -->
<element name="connectorBase" type="connectorBase:connectorBasePrototype"/>
</schema>
© ABNT 2007 - Todos los derechos reservados
173
ABNT NBR 15606-2:2007
A.16 NCL30CausalConnectorFunctionality.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/
NCL30CausalConnectorFunctionality.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL CausalConnectorFunctionality module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:connectorCommonPart="http://www.ncl.org.br/NCL3.0/
ConnectorCommonPart"
xmlns:connectorAssessmentExpression="http://www.ncl.org.br/NCL3.0/
ConnectorAssessmentExpression"
xmlns:connectorCausalExpression="http://www.ncl.org.br/NCL3.0/
ConnectorCausalExpression"
xmlns:causalConnector="http://www.ncl.org.br/NCL3.0/
CausalConnector"
xmlns:causalConnectorFunctionality="http://www.ncl.org.br/NCL3.0/
CausalConnectorFunctionality"
targetNamespace="http://www.ncl.org.br/NCL3.0/
CausalConnectorFunctionality"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<!-- import the definitions in the modules namespaces -->
<import namespace="http://www.ncl.org.br/NCL3.0/ConnectorCommonPart"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/
NCL30ConnectorCommonPart.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/ConnectorAssessmentExpression"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/
NCL30ConnectorAssessmentExpression.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/ConnectorCausalExpression"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/
NCL30ConnectorCausalExpression.xsd"/>
<import namespace="http://www.ncl.org.br/NCL3.0/CausalConnector"
schemaLocation="http://www.ncl.org.br/NCL3.0/modules/
NCL30CausalConnector.xsd"/>
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<!-- CausalConnectorFunctionality
-->
<!-- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -->
<element name="connectorParam" type="connectorCommonPart:parameterPrototype"/>
<!-- extends causalConnector element -->
<complexType name="causalConnectorType">
<complexContent>
<extension base="causalConnector:causalConnectorPrototype">
<sequence>
<element ref="causalConnectorFunctionality:connectorParam" minOccurs="0" maxOccurs="unbounded"/>
<choice>
<element ref="causalConnectorFunctionality:simpleCondition" />
<element ref="causalConnectorFunctionality:compoundCondition" />
</choice>
174
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<choice>
<element ref="causalConnectorFunctionality:simpleAction" />
<element ref="causalConnectorFunctionality:compoundAction" />
</choice>
</sequence>
</extension>
</complexContent>
</complexType>
<!-- extends compoundCondition element -->
<complexType name="compoundConditionType">
<complexContent>
<extension base="connectorCausalExpression:compoundConditionPrototype">
<sequence>
<choice>
<element ref="causalConnectorFunctionality:simpleCondition" />
<element ref="causalConnectorFunctionality:compoundCondition" />
</choice>
<choice minOccurs="1" maxOccurs="unbounded">
<element ref="causalConnectorFunctionality:simpleCondition" />
<element ref="causalConnectorFunctionality:compoundCondition" />
<element ref="causalConnectorFunctionality:assessmentStatement" />
<element ref="causalConnectorFunctionality:compoundStatement" />
</choice>
</sequence>
</extension>
</complexContent>
</complexType>
<element name="causalConnector" type="causalConnectorFunctionality:causalConnectorType"
substitutionGroup="causalConnector:causalConnector"/>
<element name="simpleCondition" substitutionGroup="connectorCausalExpression:simpleCondition"/>
<element name="compoundCondition" type="causalConnectorFunctionality:compoundConditionType"
substitutionGroup="connectorCausalExpression:compoundCondition"/>
<element name="simpleAction" substitutionGroup="connectorCausalExpression:simpleAction"/>
<element name="compoundAction" substitutionGroup="connectorCausalExpression:compoundAction"/>
<element name="assessmentStatement" substitutionGroup="connectorAssessmentExpression:assessmentStatement"/>
<element name="attributeAssessment" substitutionGroup="connectorAssessmentExpression:attributeAssessment"/>
<element name="valueAssessment" substitutionGroup="connectorAssessmentExpression:valueAssessment"/>
<element name="compoundStatement" substitutionGroup="connectorAssessmentExpression:compoundStatement"/>
</schema>
© ABNT 2007 - Todos los derechos reservados
175
ABNT NBR 15606-2:2007
A.17 Módulo TestRule: NCL30TestRule.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30TestRule.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL TestRule module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:testRule="http://www.ncl.org.br/NCL3.0/TestRule"
targetNamespace="http://www.ncl.org.br/NCL3.0/TestRule"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="rulePrototype">
<attribute name="id" type="ID" use="required"/>
<attribute name="var" type="string" use="required"/>
<attribute name="value" type="string" use="required"/>
<attribute name="comparator" use="required">
<simpleType>
<restriction base="string">
<enumeration value="eq"/>
<enumeration value="ne"/>
<enumeration value="gt"/>
<enumeration value="gte"/>
<enumeration value="lt"/>
<enumeration value="lte"/>
</restriction>
</simpleType>
</attribute>
</complexType>
<complexType name="compositeRulePrototype">
<choice minOccurs="2" maxOccurs="unbounded">
<element ref="testRule:rule"/>
<element ref="testRule:compositeRule"/>
</choice>
<attribute name="id" type="ID" use="required"/>
<attribute name="operator" use="required">
<simpleType>
<restriction base="string">
<enumeration value="and"/>
<enumeration value="or"/>
</restriction>
</simpleType>
</attribute>
</complexType>
<complexType name="ruleBasePrototype">
<attribute name="id" type="ID" use="optional"/>
</complexType>
<!-- declare global elements in this module -->
<element name="rule" type="testRule:rulePrototype"/>
<element name="compositeRule" type="testRule:compositeRulePrototype"/>
<element name="ruleBase" type="testRule:ruleBasePrototype"/>
</schema>
176
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
A.18 Módulo TestRuleUse: NCL30TestRuleUse.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30TestRuleUse.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL TestRuleUse module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:testRule="http://www.ncl.org.br/NCL3.0/TestRuleUse"
targetNamespace="http://www.ncl.org.br/NCL3.0/TestRuleUse"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="bindRulePrototype">
<attribute name="constituent" type="IDREF" use="required" />
<attribute name="rule" type="string" use="required" />
</complexType>
<!-- declare global elements in this module -->
<element name="bindRule" type="testRule:bindRulePrototype"/>
</schema>
© ABNT 2007 - Todos los derechos reservados
177
ABNT NBR 15606-2:2007
A.19 Módulo ContentControl: NCL30ContentControl.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30ContentControl.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL ContentControl module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:contentControl="http://www.ncl.org.br/NCL3.0/ContentControl"
targetNamespace="http://www.ncl.org.br/NCL3.0/ContentControl"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="defaultComponentPrototype">
<attribute name="component" type="IDREF" use="required" />
</complexType>
<!-- define the switch element prototype -->
<complexType name="switchPrototype">
<choice>
<element ref="contentControl:defaultComponent" minOccurs="0" maxOccurs="1"/>
</choice>
<attribute name="id" type="ID" use="required"/>
</complexType>
<!-- declare global elements in this module -->
<element name="defaultComponent" type="contentControl:defaultComponentPrototype"/>
<element name="switch" type="contentControl:switchPrototype"/>
</schema>
178
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
A.20 Módulo DescriptorControl: NCL30DescriptorControl.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30DescriptorControl.xsd
Author: TeleMidia Laboratory
Revision: 19/06/2006
Schema for the NCL DescriptorControl module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:descriptorControl="http://www.ncl.org.br/NCL3.0/DescriptorControl"
targetNamespace="http://www.ncl.org.br/NCL3.0/DescriptorControl"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="defaultDescriptorPrototype">
<attribute name="descriptor" type="IDREF" use="required" />
</complexType>
<!-- define the descriptor switch element prototype -->
<complexType name="descriptorSwitchPrototype">
<choice>
<element ref="descriptorControl:defaultDescriptor" minOccurs="0" maxOccurs="1"/>
</choice>
<attribute name="id" type="ID" use="required”/>
</complexType>
<!-- declare global elements in this module -->
<element name="defaultDescriptor" type="descriptorControl:defaultDescriptorPrototype"/>
<element name="descriptorSwitch" type="descriptorControl:descriptorSwitchPrototype"/>
</schema>
© ABNT 2007 - Todos los derechos reservados
179
ABNT NBR 15606-2:2007
A.21 Módulo Timing: NCL30Timing.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30Timing.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Timing module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:timing="http://www.ncl.org.br/NCL3.0/Timing"
targetNamespace="http://www.ncl.org.br/NCL3.0/Timing"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<!-- declare global attributes in this module -->
<!-- define the explicitDur attribute group -->
<attributeGroup name="explicitDurAttrs">
<attribute name="explicitDur" type="string" use="optional"/>
</attributeGroup>
<!-- define the freeze attribute group -->
<attributeGroup name="freezeAttrs">
<attribute name="freeze" type="boolean" use="optional"/>
</attributeGroup>
</schema>
180
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
A.22 Módulo Import: NCL30Import.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30Import.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Import module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:import="http://www.ncl.org.br/NCL3.0/Import"
targetNamespace="http://www.ncl.org.br/NCL3.0/Import"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="importBasePrototype">
<attribute name="alias" type="ID" use="required"/>
<attribute name="region" type="IDREF" use="optional"/>
<attribute name="documentURI" type="anyURI" use="required"/>
</complexType>
<complexType name="importNCLPrototype">
<attribute name="alias" type="ID" use="required"/>
<attribute name="documentURI" type="anyURI" use="required"/>
</complexType>
<complexType name="importedDocumentBasePrototype">
<sequence minOccurs="1" maxOccurs="unbounded">
<element ref="import:importNCL" />
</sequence>
<attribute name="id" type="ID" use="optional" />
</complexType>
<!-- declare global elements in this module -->
<element name="importBase" type="import:importBasePrototype"/>
<element name="importNCL" type="import:importNCLPrototype"/>
<element name="importedDocumentBase" type="import:importedDocumentBasePrototype"/>
</schema>
© ABNT 2007 - Todos los derechos reservados
181
ABNT NBR 15606-2:2007
A.23 Módulo EntityReuse: NCL30EntityReuse.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30EntityReuse.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL EntityReuse module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:entityReuse="http://www.ncl.org.br/NCL3.0/EntityReuse"
targetNamespace="http://www.ncl.org.br/NCL3.0/EntityReuse"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<attributeGroup name="entityReuseAttrs">
<attribute name="refer" type="string" use="optional"/>
</attributeGroup>
</schema>
182
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
A.24 Módulo ExtendedEntityReuse: NCL30ExtendedEntityReuse.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30ExtendedEntityReuse.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL ExtendedEntityReuse module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:extendedEntityReuse="http://www.ncl.org.br/NCL3.0/ExtendedEntityReuse"
targetNamespace="http://www.ncl.org.br/NCL3.0/ExtendedEntityReuse"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<attributeGroup name="extendedEntityReuseAttrs">
<attribute name="instance" type="string" use="optional"/>
</attributeGroup>
</schema>
© ABNT 2007 - Todos los derechos reservados
183
ABNT NBR 15606-2:2007
A.25 Módulo KeyNavigation: NCL30KeyNavigation.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30KeyNavigation.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL KeyNavigation module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:keyNavigation="http://www.ncl.org.br/NCL3.0/KeyNavigation"
targetNamespace="http://www.ncl.org.br/NCL3.0/KeyNavigation"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<simpleType name="colorPrototype">
<restriction base="string">
<enumeration value="white" />
<enumeration value="black" />
<enumeration value="silver" />
<enumeration value="gray" />
<enumeration value="red" />
<enumeration value="maroon" />
<enumeration value="fuchsia" />
<enumeration value="purple" />
<enumeration value="lime" />
<enumeration value="green" />
<enumeration value="yellow" />
<enumeration value="olive" />
<enumeration value="blue" />
<enumeration value="navy" />
<enumeration value="aqua" />
<enumeration value="teal" />
</restriction>
</simpleType>
<!-- declare global attributes in this module -->
<!-- define the keyNavigation attribute group -->
<attributeGroup name="keyNavigationAttrs">
<attribute name="moveLeft" type="positiveInteger" use="optional"/>
<attribute name="moveRight" type="positiveInteger" use="optional"/>
<attribute name="moveUp" type="positiveInteger" use="optional"/>
<attribute name="moveDown" type="positiveInteger" use="optional"/>
<attribute name="focusIndex" type="positiveInteger" use="optional"/>
<attribute name="focusBorderColor" type="keyNavigation:colorPrototype" use="optional"/>
<attribute name="focusBorderWidth" type="string" use="optional"/>
<attribute name="focusBorderTransparency" type="string" use="optional"/>
<attribute name="focusScr" type="string" use="optional"/>
<attribute name="focusSelScr" type="string" use="optional"/>
<attribute name="selBorderColor" type="keyNavigation:colorPrototype" use="optional"/>
</attributeGroup>
</schema>
184
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
A.26 Módulo TransitionBase: NCL30TransitionBase.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2006 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30TransitionBase.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Transition Base module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:transitionBase="http://www.ncl.org.br/NCL3.0/TransitionBase"
targetNamespace="http://www.ncl.org.br/NCL3.0/TransitionBase"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="transitionBasePrototype">
<attribute name="id" type="ID" use="optional"/>
</complexType>
<!-- declare global elements in this module -->
<element name="transitionBase" type="transitionBase:transitionBasePrototype"/>
</schema>
© ABNT 2007 - Todos los derechos reservados
185
ABNT NBR 15606-2:2007
A.27 Módulo Animation: NCL30Animation.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30Animation.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Timing module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:animation="http://www.ncl.org.br/NCL3.0/Animation"
targetNamespace="http://www.ncl.org.br/NCL3.0/Animation"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<!-- declare global attributes in this module -->
<!-- define the animation attribute group -->
<attributeGroup name="animationAttrs">
<attribute name="duration" type="string" use="optional"/>
<attribute name="by" type="string" use="optional"/>
</attributeGroup>
</schema>
A.28 Transition module: NCL30Transition.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2006 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30Transition.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Transition module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:transition="http://www.ncl.org.br/NCL3.0/Transition"
targetNamespace="http://www.ncl.org.br/NCL3.0/Transition"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<!-- declare global attributes in this module -->
<!-- define the type attribute prototype -->
<simpleType name="typePrototype">
<restriction base="string">
<enumeration value="in"/>
<enumeration value="barWipe"/>
186
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<enumeration value="boxWipe"/>
<enumeration value="fourBoxWipe"/>
<enumeration value="barnDoorWipe"/>
<enumeration value="diagonalWipe"/>
<enumeration value="bowTieWipe"/>
<enumeration value="miscDiagonalWipe"/>
<enumeration value="veeWipe"/>
<enumeration value="barnVeeWipe"/>
<enumeration value="zigZagWipe"/>
<enumeration value="barnZigZagWipe"/>
<enumeration value="irisWipe"/>
<enumeration value="triangleWipe"/>
<enumeration value="arrowHeadWipe"/>
<enumeration value="pentagonWipe"/>
<enumeration value="hexagonWipe"/>
<enumeration value="ellipseWipe"/>
<enumeration value="eyeWipe"/>
<enumeration value="roundRectWipe"/>
<enumeration value="starWipe"/>
<enumeration value="miscShapeWipe"/>
<enumeration value="clockWipe"/>
<enumeration value="pinWheelWipe"/>
<enumeration value="singleSweepWipe"/>
<enumeration value="fanWipe"/>
<enumeration value="doubleFanWipe"/>
<enumeration value="doubleSweepWipe"/>
<enumeration value="saloonDoorWipe"/>
<enumeration value="windshieldWipe"/>
<enumeration value="snakeWipe"/>
<enumeration value="spiralWipe"/>
<enumeration value="parallelSnakesWipe"/>
<enumeration value="boxSnakesWipe"/>
<enumeration value="waterfallWipe"/>
<enumeration value="pushWipe"/>
<enumeration value="slideWipe"/>
<enumeration value="fade"/>
<enumeration value="audioFade"/>
<enumeration value="audioVisualFade"/>
</restriction>
</simpleType>
<!-- define subType attribute prototype-->
<simpleType name="subTypePrototype">
<restriction base="string">
<enumeration value="bottom"/>
<enumeration value="bottomCenter"/>
<enumeration value="bottomLeft"/>
<enumeration value="bottomLeftClockwise"/>
<enumeration value="bottomLeftCounterClockwise"/>
<enumeration value="bottomLeftDiagonal"/>
<enumeration value="bottomRight"/>
<enumeration value="bottomRightClockwise"/>
<enumeration value="bottomRightCounterClockwise"/>
<enumeration value="bottomRightDiagonal"/>
<enumeration value="centerRight"/>
<enumeration value="centerTop"/>
<enumeration value="circle"/>
<enumeration value="clockwiseBottom"/>
<enumeration value="clockwiseBottomRight"/>
© ABNT 2007 - Todos los derechos reservados
187
ABNT NBR 15606-2:2007
<enumeration value="clockwiseLeft"/>
<enumeration value="clockwiseNine"/>
<enumeration value="clockwiseRight"/>
<enumeration value="clockwiseSix"/>
<enumeration value="clockwiseThree"/>
<enumeration value="clockwiseTop"/>
<enumeration value="clockwiseTopLeft"/>
<enumeration value="clockwiseTwelve"/>
<enumeration value="cornersIn"/>
<enumeration value="cornersOut"/>
<enumeration value="counterClockwiseBottomLeft"/>
<enumeration value="counterClockwiseTopRight"/>
<enumeration value="crossfade"/>
<enumeration value="diagonalBottomLeft"/>
<enumeration value="diagonalBottomLeftOpposite"/>
<enumeration value="diagonalTopLeft"/>
<enumeration value="diagonalTopLeftOpposite"/>
<enumeration value="diamond"/>
<enumeration value="doubleBarnDoor"/>
<enumeration value="doubleDiamond"/>
<enumeration value="down"/>
<enumeration value="fadeFromColor"/>
<enumeration value="fadeToColor"/>
<enumeration value="fanInHorizontal"/>
<enumeration value="fanInVertical"/>
<enumeration value="fanOutHorizontal"/>
<enumeration value="fanOutVertical"/>
<enumeration value="fivePoint"/>
<enumeration value="fourBlade"/>
<enumeration value="fourBoxHorizontal"/>
<enumeration value="fourBoxVertical"/>
<enumeration value="fourPoint"/>
<enumeration value="fromBottom"/>
<enumeration value="fromLeft"/>
<enumeration value="fromRight"/>
<enumeration value="fromTop"/>
<enumeration value="heart"/>
<enumeration value="horizontal"/>
<enumeration value="horizontalLeft"/>
<enumeration value="horizontalLeftSame"/>
<enumeration value="horizontalRight"/>
<enumeration value="horizontalRightSame"/>
<enumeration value="horizontalTopLeftOpposite"/>
<enumeration value="horizontalTopRightOpposite"/>
<enumeration value="keyhole"/>
<enumeration value="left"/>
<enumeration value="leftCenter"/>
<enumeration value="leftToRight"/>
<enumeration value="oppositeHorizontal"/>
<enumeration value="oppositeVertical"/>
<enumeration value="parallelDiagonal"/>
<enumeration value="parallelDiagonalBottomLeft"/>
<enumeration value="parallelDiagonalTopLeft"/>
<enumeration value="parallelVertical"/>
<enumeration value="rectangle"/>
<enumeration value="right"/>
<enumeration value="rightCenter"/>
<enumeration value="sixPoint"/>
<enumeration value="top"/>
188
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<enumeration value="topCenter"/>
<enumeration value="topLeft"/>
<enumeration value="topLeftClockwise"/>
<enumeration value="topLeftCounterClockwise"/>
<enumeration value="topLeftDiagonal"/>
<enumeration value="topLeftHorizontal"/>
<enumeration value="topLeftVertical"/>
<enumeration value="topRight"/>
<enumeration value="topRightClockwise"/>
<enumeration value="topRightCounterClockwise"/>
<enumeration value="topRightDiagonal"/>
<enumeration value="topToBottom"/>
<enumeration value="twoBladeHorizontal"/>
<enumeration value="twoBladeVertical"/>
<enumeration value="twoBoxBottom"/>
<enumeration value="twoBoxLeft"/>
<enumeration value="twoBoxRight"/>
<enumeration value="twoBoxTop"/>
<enumeration value="up"/>
<enumeration value="vertical"/>
<enumeration value="verticalBottomLeftOpposite"/>
<enumeration value="verticalBottomSame"/>
<enumeration value="verticalLeft"/>
<enumeration value="verticalRight"/>
<enumeration value="verticalTopLeftOpposite"/>
<enumeration value="verticalTopSame"/>
</restriction>
</simpleType>
<attributeGroup name="transAttrs">
<attribute name="transIn" type="string" use="optional"/>
<attribute name="transOut" type="string" use="optional"/>
</attributeGroup>
<!-- define the transition attribute group -->
<attributeGroup name="transitionAttrs">
<attribute name="type" type="transition:typePrototype" use="required"/>
<attribute name="subtype" type="transition:subTypePrototype" use="optional"/>
<attribute name="fadecolor" type="string" use="optional" default="black"/>
<attribute name="dur" type="string" use="optional"/>
<attribute name="startProgress" use="optional" default="0.0">
<simpleType>
<restriction base="decimal">
<minInclusive value="0.0"/>
<maxInclusive value="1.0"/>
</restriction>
</simpleType>
</attribute>
<attribute name="endProgress" use="optional" default="1.0">
<simpleType>
<restriction base="decimal">
<minInclusive value="0.0"/>
<maxInclusive value="1.0"/>
</restriction>
</simpleType>
</attribute>
<attribute name="direction" use="optional" default="forward">
<simpleType>
<restriction base="string">
© ABNT 2007 - Todos los derechos reservados
189
ABNT NBR 15606-2:2007
<enumeration value="forward"/>
<enumeration value="reverse"/>
</restriction>
</simpleType>
</attribute>
</attributeGroup>
<!-- define the transition-modifier attribute group -->
<attributeGroup name="transitionModifierAttrs">
<attribute name="horzRepeat" type="decimal" use="optional" default="1.0"/>
<attribute name="vertRepeat" type="decimal" use="optional" default="1.0"/>
<attribute name="borderWidth" type="nonNegativeInteger" use="optional" default="0"/>
<attribute name="borderColor" type="string" use="optional" default="black"/>
</attributeGroup>
<complexType name="transitionPrototype">
<attributeGroup ref="transition:transitionAttrs"/>
<attributeGroup ref="transition:transitionModifierAttrs"/>
</complexType>
<!-- declare global element in this module -->
<element name="transition" type="transition:transitionPrototype"/>
</schema>
A.29 Metainformation module: NCL30Metainformation.xsd
<!-XML Schema for the NCL modules
This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/modules/NCL30Metainformation.xsd
Author: TeleMidia Laboratory
Revision: 19/09/2006
Schema for the NCL Metainformation module namespace.
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:metainformation="http://www.ncl.org.br/NCL3.0/Metainformation"
targetNamespace="http://www.ncl.org.br/NCL3.0/Metainformation"
elementFormDefault="qualified" attributeFormDefault="unqualified" >
<complexType name="metaPrototype">
<attribute name="name" type="string" use="required"/>
<attribute name="content" type="string" use="required"/>
</complexType>
<complexType name="metadataPrototype">
<sequence>
<any minOccurs="0"/>
</sequence>
</complexType>
190
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<!-- declare global elements in this module -->
<element name="meta" type="metainformation:metaPrototype"/>
<!-- declare global elements in this module -->
<element name="metadata" type="metainformation:metadataPrototype"/>
</schema>
© ABNT 2007 - Todos los derechos reservados
191
ABNT NBR 15606-2:2007
Anexo B
(informativo)
Manual de referencia de Lua 5.1
B.1 Introducción
NOTA
Este Anexo presenta la especificación del lenguaje de programación Lua, versión 5.1. Este contenido es una
traducción del libro de Roberto Ierusalimschy, Luiz Henrique de Figueiredo y Waldemar Celes, Lua 5.1 Reference Manual
(Lua.org, agosto de 2006. ISBN 85-903798-3-3) y se imprime nuevamente aquí con aprobación de los autores. El libro también
está disponible en línea, en inglés, en <http://www.lua.org/manual/5.1/>.
Lua es un lenguaje de programación de extensión proyectada para dar soporte a la programación procedural en
general y que ofrece facilidades para la descripción de datos. El lenguaje también ofrece un buen soporte para
programación orientada a objetos, programación funcional y programación orientada a datos. Lua fue planeada
para ser utilizada por cualquier aplicación que necesite un lenguaje de script ligero y poderoso. Lua es
implementada como una biblioteca, grabación en C limpio (es decir, en el subconjunto común de ANSI C y C++).
Por ser un lenguaje de extensión, Lua no posee la noción de un programa principal: éste solamente funciona
incorporado en un programa cliente anfitrión, llamado programa hospedero o simplemente hospedero. Ese
programa hospedero puede invocar funciones para ejecutar un pedazo de código Lua, puede escribir y leer
variables Lua y puede registrar funciones C para ser llamadas por el código Lua. A través del uso de funciones C,
Lua puede ser extendida para tratar de manera apropiada una amplia variedad de dominios, permitiendo así la
creación de lenguajes de programación personalizados que comparten un núcleo sintáctico. La distribución Lua
incluye un ejemplo de un programa hospedero llamado Lua, el cual usa la biblioteca de Lua para ofrecer un
interpretador de línea de comando Lua completo.
Lua es un software libre y, como es usual, se suministra sin garantías, como se indica en su licencia. La
implementación descrita en esta Norma, así como artículos técnicos sobre Lua, están disponibles en el sitio web
oficial de Lua, www.lua.org.
B.2 El Lenguaje
B.2.1 Notación utilizada
Las construcciones del lenguaje serán explicadas usando la notación BNF extendida usual, en la cual {a} significa
0 o más aes y [a] significa una a opcional. No terminales se muestran como non-terminal, palabras clave se
muestran como kword y otros símbolos terminales se muestran como `=´. La sintaxis completa de Lua está
descrita en B.8.
B.2.2 Convenciones léxicas
En Lua, Nomes (también llamados identificadores) pueden ser cualquier cadena de letras, dígitos y subrayados
que no empiecen con un dígito. Esta definición está de acuerdo con la definición de nombres en la mayoría de los
lenguajes (la definición de letras depende de cuál es el idioma (locale): Cualquier carácter considerado alfabético
por el idioma corriente se puede usar como un identificador). Identificadores se usan para nombrar variables y
campos de tablas.
Las siguientes palabras clave son reservadas y no se pueden utilizar como nombres:
and
end
in
repeat
192
break
false
local
return
do
for
nil
then
else
function
not
true
elseif
if
or
until
while
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Lua es un lenguaje que diferencia minúsculas de mayúsculas: and es una palabra reservada, pero And y AND
son dos nombres válidos diferentes. Como convención, nombres que empiezan con un subrayado seguido por
letras mayúsculas (tales como _VERSION) son reservados para variables globales internas usadas por Lua.
Las siguientes cadenas denotan otros ítems léxicos:
+
==
(
;
~=
)
:
*
<=
{
,
/
>=
}
.
%
<
[
..
^
>
]
...
Cadenas de caracteres literales pueden ser delimitadas a través del uso de comillas simples o comillas dobles,
y pueden contener las siguientes secuencias de escape en el estilo de C: '\a' (campanilla), '\b' (backspace),
\f' (alimentación de formulario), '\n' (quiebra de línea), '\r' (retorno de carro), '\t' (tabulación horizontal), '\v'
(tabulación vertical), '\\' (barra invertida), '\"' (citación [comilla doble]) y '\'' (apóstrofo [comilla simple]). Además de
ello, una barra invertida seguida por una quiebra de línea real da como resultado una quiebra de línea en la
cadena de caracteres. Un carácter en una cadena de caracteres también se puede especificar por su valor
numérico usando la secuencia de escape \ddd, donde ddd es una secuencia de hasta tres dígitos decimales.
Si un carácter numérico representado como una secuencia de escape es seguido por un dígito, la secuencia de
escape debe poseer exactamente tres dígitos. Cadenas de caracteres en Lua pueden contener cualquier valor de
8 bits, incluyendo ceros dentro de las mismas, los cuales se pueden especificar como '\0'.
Para colocar una comilla doble (simple), una quiebra de línea, una barra invertida o insertar un cero dentro de una
cadena de caracteres literal delimitada por comillas dobles (simple) se debe usar una secuencia de escape.
Cualquier otro carácter se puede insertar directamente dentro de la cadena literal (algunos caracteres de control
pueden causar problemas para el sistema de archivos, pero Lua no tiene ningún problema con relación a ellos).
Cadenas literales largas también pueden ser definidas usando un formato largo delimitado por corchetes largos.
Se definió una apertura de corchete largo de nivel n como un abre corchete seguido por n señales de igual
seguido por otro abre corchete. De esa forma, una apertura de corchete largo de nivel 0 es escrita como [[, una
apertura de corchete largo de nivel 1 es escrita como [=[ y así sucesivamente. Un cierre de corchete largo se
define de manera análoga; por ejemplo, un cierre de corchete largo de nivel 4 se escribe como ]====].
Una cadena de caracteres larga empieza con una apertura de corchete largo de cualquier nivel y termina en el
primer cierre de corchete largo del mismo nivel. Literales expresados de esta forma pueden extenderse por varias
líneas, no interpretan ninguna secuencia de escape e ignoran corchetes largos de cualquier otro nivel.
Estos literales pueden contener cualquier cosa, excepto un cierre de corchete largo de nivel igual al de la apertura.
Por conveniencia, cuando una apertura de corchete largo es inmediatamente seguida por una quiebra de línea,
la quiebra de línea no es incluida en la cadena de caracteres. Como ejemplo, en un sistema usando ASCII
(en el cual ‘a’ se codifica como 97, quiebra de línea se codifica como 10 y '1' se codifica como 49), los cinco
literales siguientes denotan la misma cadena:
a = 'alo\n123"'
a = "alo\n123\""
a = '\97lo\10\04923"'
a = [[alo
123"]]
a = [==[
alo
123"]==]
Una constante numérica puede ser escrita con una parte decimal opcional y con un exponente decimal opcional.
Lua también acepta constantes hexadecimales enteras, a través del uso del código 0x. Ejemplos de constantes
numéricas válidas son:
3
3.0
3.1416
314.16e-2
© ABNT 2007 - Todos los derechos reservados
0.31416E1
0xff
0x56
193
ABNT NBR 15606-2:2007
Un comentario empieza con un guión doble (--) en cualquier lugar, siempre que sea fuera de una cadena de
caracteres. Si el texto inmediatamente después de -- no es una apertura de corchete largo, el comentario es un
comentario corto, el cual se extiende hasta el fin de la línea. En caso contrario, es un comentario largo, que se
extiende hasta el cierre de corchete largo correspondiente. Comentarios largos se usan frecuentemente para
desactivar código temporariamente.
B.2.3 Valores y tipos
B.2.3.1
Tipos básicos
Lua es un lenguaje dinámicamente tipado. Esto significa que variables no poseen tipos; solamente valores
poseen tipos. No existe definición de tipos en el lenguaje. Todos los valores transportan su propio tipo.
Todos los valores en Lua son valores de primera clase. Esto significa que todos los valores pueden ser
almacenados en variables, pasados como argumentos para otras funciones y retornados como resultados.
Existen ocho tipos básicos en Lua: nil, boolean, number, string, function, userdata, thread y table. Nil es el tipo del
valor nil, cuya propiedad principal es ser diferente de cualquier otro valor; generalmente representa la ausencia
de un valor útil. Boolean es el tipo de los valores false y true. Tanto nil como false tornan una condición falsa;
cualquier otro valor torna la condición verdadera. Number representa números reales (punto flotante de precisión
doble). Es fácil construir interpretadores Lua que usen otra representación interna para números, tales como
precisión simple de punto flotante o enteros largos; ver el archivo luaconf.h. El tipo string representa cadenas de
caracteres. En Lua, cadenas de caracteres pueden contener cualquier carácter de 8 bits, incluyendo ceros ('\0')
dentro de la misma (ver B.2.2).
Lua puede llamar (y manejar) funciones escritas en Lua y funciones escritas en C (ver B.2.6.9).
El tipo userdata permite que datos C arbitrarios puedan ser almacenados en variables Lua. Este tipo corresponde
a un bloque de memoria y no tiene operaciones predefinidas en Lua, excepto atribución y prueba de identidad.
Sin embargo, a través del uso de metatables, el programador puede definir operaciones para valores userdata
(ver B.2.9). Valores userdata no pueden ser creados o modificados en Lua, solamente a través de la API C. Esto
garantiza la integridad de los datos que pertenecen al programa hospedero.
El tipo thread representa flujos de ejecución independientes y se utiliza para implementar co-rutinas (ver B.2.12).
No confundir el tipo thread de Lua con procesos ligeros del sistema operativo. Lua da soporte a co-rutinas en
todos los sistemas, incluso en aquéllos que no dan soporte a procesos ligeros.
El tipo table implementa arrays asociativos, es decir, arrays que pueden ser indexados no apenas por números,
sino por cualquier valor (excepto nil). Tablas pueden ser heterogéneas; es decir, pueden contener valores de
todos los tipos (excepto nil). Tablas son el único mecanismo de estructuración de datos en Lua; se pueden usar
para representar arrays comunes, tablas de símbolos, conjuntos, registros, grafos, árboles, etc. Para representar
registros, Lua usa el nombre del campo como un índice. El lenguaje da soporte a esta representación ofreciendo
a.name como un azúcar sintáctico para a["name"]. Existen varias formas convenientes de crear tablas en Lua (ver
B.2.6.8).
De la misma forma que los índices, el valor de un campo de la tabla puede poseer cualquier tipo (excepto nil). En
particular, dado que funciones son valores de primera clase, campos de tabla pueden contener funciones. Por lo
tanto, tablas pueden también poseer métodos (ver B.2.6.10).
Valores del tipo table, function, thread y userdata (completo) son objetos: Variables no contienen realmente estos
valores, solamente referencias a ellos. Atribución, paso de parámetro y retorno de funciones siempre manejan
informes para tales valores; estas operaciones no significan ninguna especie de copia.
La función type retorna una cadena de caracteres describiendo el tipo de un cierto valor.
194
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
B.2.3.2
Coerción
Lua provee conversión automática entre valores del tipo string y del tipo number en tiempo de ejecución.
Cualquier operación aritmética aplicada a una cadena de caracteres intenta convertir esta cadena en un número,
siguiendo las reglas de conversión usuales. De forma análoga, siempre que un número se utiliza donde una
cadena de caracteres es esperada, el número es convertido para una cadena, en un formato razonable. Para un
control completo sobre cómo números son convertidos en cadenas, usar la función format de la biblioteca string
(ver string.format).
B.2.4 Variables
Variables son lugares que se utilizan para almacenar valores.
Existen tres tipos de variables en Lua: Variables globales, variables locales y campos de tablas.
Un nombre simple puede denotar una variable global o una variable local (o un parámetro formal de una función,
que es un caso particular de variable local):
var ::= Nombre
Nombre denota identificadores, como definido en B.2.2.
Se presupone que toda variable es una variable global a menos que sea explícitamente declarada como una
variable local (ver B.2.5.8). Variables locales poseen alcance léxico: Variables locales pueden ser libremente
accedidas por funciones definidas dentro de su alcance (ver B.2.7).
Antes que la variable reciba su primera atribución, su valor es nil.
Corchetes se usan para indexar una tabla:
var ::= expprefijo `[´ exp `]´
La semántica de accesos a variables globales y a campos de tablas puede ser alterada a través del uso de
meta-tablas. Un acceso a una variable indexada t[i] es equivalente a una llamada gettable_event(t,i)
(ver B.2.9 para una descripción completa de la función gettable_event. Esta función no es definida ni puede ser
llamada en Lua. Se utiliza aquí solamente para fines didácticos).
La sintaxis var.Nome es sólo un azúcar sintáctico para var["Nombre"]:
var : := expprefijo `.´ Nombre
Todas las variables globales son mantenidas como campos en tablas Lua comunes, llamadas de tablas de
ambiente o simplemente de ambientes (ver B.2.10). Cada función tiene su propia referencia para un ambiente, de
forma que todas las variables globales dentro de una función se referirán a esta tabla de ambiente. Cuando una
función es creada, hereda el ambiente de la función que la creó. Para obtener la tabla de ambiente de una función
Lua, se debe llamar a getfenv. Para cambiar la tabla de ambiente, se debe llamar a setfenv (la única manera de
tratar el ambiente de funciones C es a través de la biblioteca de depuración; ver B.5.11).
Un acceso a una variable global x es equivalente a _env.x, que a su vez es equivalente a
gettable_event (_env, "x")
donde _env es el ambiente de la función corriente (ver B.2.9 para una descripción completa de la función
gettable_event. Esta función no es definida ni puede ser llamada en Lua. De modo análogo, la variable _env no
es definida en Lua. Fueron usadas aquí solamente para fines didácticos).
© ABNT 2007 - Todos los derechos reservados
195
ABNT NBR 15606-2:2007
B.2.5 Comandos
B.2.5.1
Conceptos básicos
Lua ofrece un conjunto casi convencional de comandos, análogo al conjunto de comandos disponibles en Pascal
o C. Este conjunto incluye atribución, estructuras de control, llamadas de funciones y declaraciones de variables.
B.2.5.2
Trechos
La unidad de ejecución de Lua se llama trecho. Un trecho es simplemente una secuencia de comandos, los cuales
se ejecutan en forma secuencial. Cada comando puede opcionalmente ser seguido por un punto y coma:
trecho ::= {comando [ `;´]}
No existen comandos vacíos y por lo tanto la construcción ';;' no es válida.
Lua trata un trecho como el cuerpo de una función anónima con un número variable de argumentos (ver B.2.6.10).
De esta forma, trechos pueden definir variables locales, recibir argumentos y retornar valores.
Un trecho puede ser almacenado en un archivo o en una cadena de caracteres dentro del programa hospedero.
Cuando un trecho se ejecuta, es primero pre-compilado en instrucciones para una máquina virtual y después el
código compilado es ejecutado por un interpretador para la máquina virtual.
Los trechos también pueden ser pre-compilados en una forma binaria; ver el programa luac para más detalles.
Programas en forma de código fuente y en forma de un archivo fuente ya compilado son intercambiables; Lua
automáticamente determina cual es el tipo del archivo y actúa de conformidad con el mismo.
B.2.5.3
Bloques
Un bloque es una lista de comandos; sintéticamente, un bloque es la misma cosa que un trecho:
bloque : := trecho
Un bloque puede ser explícitamente delimitado para producir un único comando:
comando : := do bloque end
Bloques explícitos son útiles para controlar el alcance de declaraciones de variables. Bloques explícitos son
también usados a veces para agregar un comando return o break en medio de otro bloque (ver B.2.5.5).
B.2.5.4
Atribución
Lua permite atribución múltiple. En virtud de ello, la sintaxis para atribución define una lista de variables del lado
izquierdo y una lista de expresiones del lado derecho. Los elementos en ambos lados son separados por comas:
comando ::= listavar `=´ listaexp
listavar ::= var { `,´ var}
listaexp ::= exp { `,´ exp}
196
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Expresiones son discutidas en B.2.6.
Antes de que la atribución sea realizada, la lista de valores es ajustada a la longitud de la lista de variables. Si hay
más valores de lo necesario, los valores en exceso se descartan. Si hay menos valores de lo necesario, la lista es
extendida con tantos nil's como sean necesarios. Si la lista de expresiones termina con una llamada de función,
entonces todos los valores retornados por esta llamada entran en la lista de valores, antes de ser realizado el
ajuste (excepto cuando la llamada es delimitada por paréntesis; ver B.2.6).
Un comando de atribución primero evalúa todas sus expresiones y solamente después se realiza la atribución. De
esta forma, el código
i = 3
i, a[ i] = i+1, 20
atribuye 20 a a[3], sin afectar a[4] porque el I en a[i] es evaluado (a 3) antes de recibir el valor 4. De modo
análogo, la línea
x, y = y, x
cambia los valores de x e y.
La semántica de atribuciones para variables globales y campos de tablas puede ser alterada a través del uso de
meta-tablas. Una atribución para una variable indexada t[i] = Val es equivalente a settable_event(t,i,val) (ver B.2.9
para una descripción completa de la función settable_event. Esta función no es definida ni puede ser llamada en
Lua. Fue usada aquí solamente para fines didácticos).
Una atribución a una variable global x = val es equivalente a la atribución _env.x = val, que a su vez es
equivalente a
settable_event(_env, "x", val)
donde _env es el ambiente de la función siendo ejecutada (la variable _env no es definida en Lua. Fue usada
aquí solamente para fines didácticos).
B.2.5.5
Estructuras de control
Las estructuras de control if, while y repeat poseen el significado usual y la sintaxis familiar:
comando : := while exp do bloque end
comando : := repeat bloque until exp
comando ::= if exp then bloque {elseif exp then bloque} [else bloque] end
Lua también posee un comando for, el cual posee dos variaciones (ver B.2.5.6).
La expresión de la condición de una estructura de control puede retornar cualquier valor. Tanto false como nil
son considerados un valor falso. Todos los valores diferentes de nil y false son considerados como verdaderos
(en particular, el número 0 y la cadena de caracteres vacía también son considerados valores verdaderos).
En el lazo repeat–until, el bloque más interno no termina en la palabra clave until, sino solamente después de la
condición. De esta forma, la condición puede hacer referencia a variables locales declaradas dentro del bloque del
lazo.
© ABNT 2007 - Todos los derechos reservados
197
ABNT NBR 15606-2:2007
El comando return se utiliza para retornar valores de una función o de un trecho (que sólo es una función).
Funciones y trechos pueden retornar más de un valor, de modo que la sintaxis para el comando return es
comando : := return [ listaexp]
El comando break se utiliza para terminar la ejecución de un lazo while, repeat o for, saltando para el próximo
comando después del lazo:
comando : := break
Un break termina la ejecución del lazo más interno.
Los comandos return y break solamente pueden ser escritos como el último comando de un bloque. Si es
realmente necesario tener un return o break en medio de un bloque, entonces se puede usar un bloque interno
explícito, como en las expresiones idiomáticas del return end y del break end, pues ahora tanto el return como el
break son los últimos comandos en sus respectivos bloques (internos).
B.2.5.6
Comando for
El comando for posee dos variaciones: una numérica y otra genérica.
El lazo for numérico repite un bloque de código mientras una variable de control varía de acuerdo con una
progresión aritmética. Posee la siguiente sintaxis:
comando ::= for nombre `=´ exp `,´ exp [ `,´ exp] do bloque end
El bloque es repetido para nombre empezando con el valor de la primera exp, hasta que pase el valor de la
segunda exp a través de pasos seguidos, siendo que a cada paso el valor de la tercera exp es sumado a nombre.
De forma más precisa, un comando for como
for v = e1, e2, e3 do block end
es equivalente al código:
do
local var, limit, step = tonumber(e1), tonumber(e2), tonumber(e3)
if not (var and limit and step) then error() end
while (step > 0 and var <= limit) or (step <=0 and var >= limit) do
local v = var
block
var = var + step
end
end
Observar lo siguiente:
 todas las tres expresiones de control son evaluadas una única vez, antes del inicio del lazo. Deben
obligatoriamente producir números;
 var, limit y step son variables invisibles. Los nombres fueron utilizados aquí solamente para fines didácticos;
 si la tercera expresión (el paso) está ausente, entonces se utiliza un paso de tamaño 1;
 es posible usar break para salir de un lazo for;
198
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
 la variable de lazo v es local al lazo; no es posible usar el valor de esta variable después del fin del for o
después del for haber sido interrumpido por el uso de un break. Si es necesario el valor de esta variable,
debe atribuirlo a otra variable antes de interrumpir o salir del lazo.
El comando for genérico funciona utilizando funciones, llamadas repetidoras. A cada repetición, la función
repetidora es llamada para producir un nuevo valor, parando cuando este nuevo valor es nil. El lazo for genérico
posee la siguiente sintaxis:
comando : := For listadenombres in listaexp do bloque end
listadenombres ::= Nombre { `,´ Nombre}
Un comando for como
for var_1, ···, var_n in explist do block end
es equivalente al código:
do
local f, s, var = explist
while true do
local var_1, ···, var_n = f(s, var) var = var _1
if var == nil then break end
block
end
end
Observar lo siguiente:
 explist es evaluada solamente una vez. Sus resultados son una función repetidora, un estado y un valor inicial
para la primera variable repetidora;
 f, s y var son variables invisibles. Los nombres fueron utilizados aquí solamente para fines didácticos;
 es posible usar break para salir de un lazo for;
 las variables de lazo var_i son locales al lazo; no es posible usar los valores de las mismas después de la
terminación de for. Si se necesitan estos valores, deben atribuirse a otras variables antes de interrumpir el
lazo o salir del mismo.
B.2.5.7
Llamadas de función como comandos
Para permitir posibles efectos colaterales, se pueden ejecutar funciones como comandos:
comando ::= llamadadefuncion
En este caso, todos los valores retornados por la función se descartan. Llamadas de función son explicadas en
B.2.6.9.
© ABNT 2007 - Todos los derechos reservados
199
ABNT NBR 15606-2:2007
B.2.5.8
Declaraciones locales
Variables locales pueden ser declaradas en cualquier lugar dentro de un bloque. La declaración puede incluir una
atribución inicial:
comando ::= local listadenombres [`=´ listaexp]
Caso ocurra una atribución inicial, su semántica es la misma de una atribución múltiple (ver B.2.5.4). En caso
contrario, todas las variables son inicializadas con nil.
Un trecho también es un bloque (ver B.2.5.2) y por lo tanto variables locales pueden ser declaradas en un trecho
fuera de cualquier bloque explícito. El alcance de una variable declarada de esta forma se extiende hasta el fin del
trecho.
Las reglas de visibilidad para variables locales son explicadas en B.2.7.
B.2.6 Expresiones
B.2.6.1
Expresiones básicas
Las expresiones básicas en Lua son las siguientes:
exp : := expprefijo
exp ::= nil | false | true
exp : := Numero
exp : := Cadena
exp : := funcion
exp ::= constructortabla
exp ::= `...´
exp : := exp opbin exp
exp : := opunaria exp
expprefixo ::= var | llamadadefuncion | `(´ exp `)´
Números y cadenas literales se explican en B.2.2; variables se explican en B.2.4; definiciones de funciones se
explican en B.6.10; llamadas funciones se explican en B.2.6.9; constructores de tablas se explican en B.2.6.8.
Expresiones vararg, denotadas por tres puntos ('...'), solamente se pueden usar cuando están inmediatamente
dentro de una función que posee un número variable de argumentos; se explican en B.2.6. 10.
Operadores binarios comprenden operadores aritméticos (ver B.2.6.2), operadores relacionales (ver B.2.6.3),
operadores lógicos (ver B.2.6.4) y el operador de concatenación (ver B.2.6.5). Operadores unarios comprenden el
menos unario (ver B.2.6.2), el not unario (ver B.2.6.4) y el operador de tamaño unario (ver B.2.6.6).
Tanto llamadas de funciones como expresiones vararg pueden dar como resultado múltiples valores. Si la
expresión se utiliza como un comando (ver B.2.5.7) (lo que solamente es posible para llamadas de funciones),
entonces su lista de retorno es ajustada para cero elementos, descartando, por tanto, todos los valores
retornados. Si la expresión se utiliza como el último (o el único) elemento de una lista de expresiones, entonces
no se realiza ningún ajuste (a menos que la llamada sea delimitada por paréntesis). En todos los demás contextos,
Lua ajusta la lista de resultados para un elemento, descartando todos los valores excepto el primero.
200
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Siguen algunos ejemplos:
f()
g(f(), x)
g(x, f())
a,b,c = f(), x
a,b = ...
a,b,c = x, f()
a,b,c = f()
return f()
return ...
return x,y,f()
{f()}
{...}
{f(), nil}
----------------
adjusted to 0 results
f() is adjusted to 1 result
g gets x plus all values returned by f()
f() is adjusted to 1 result (c gets nil)
a gets the first vararg parameter,
b gets the second (both a and b may get nil if
there is no corresponding vararg parameter)
f() is adjusted to 2 results
f() is adjusted to 3 results
returns all values returned by f()
returns all received vararg parameters
returns x, y, and all values returned by f()
creates a list with all values returned by f()
creates a list with all vararg parameters
f() is adjusted to 1 result
Una expresión delimitada por paréntesis siempre da como resultado un único valor. De esa forma, (f(x,y,z)) es
siempre un único valor, aunque f regrese múltiples valores (el valor de (f(x,y,z)) es el primer valor retornado por f,
o nil si f no retorna ningún valor).
B.2.6.2
Operadores aritméticos
Lua provee los operadores aritméticos usuales: Los operadores binarios + (adición), - (substracción), *
(multiplicación), / (división), % (módulo) y ^ (exponenciación); y el operador unario - (negación). Si los operandos
son números o cadenas de caracteres que pueden ser convertidas para números (ver B.2.3.2), entonces todas
las operaciones poseen su significado usual. La exponenciación funciona para cualquier exponente. Por ejemplo,
x^(-0.5) calcula el inverso de la raíz cuadrada de X. Módulo se define como
a % b == a - math.floor(a/b)*b
Es decir, es el resto de una división redondeada en dirección a menos infinito.
B.2.6.3
Operadores relacionales
Los operadores relacionales en Lua son:
==
~=
<
>
<=
>=
Estos operadores siempre tienen como resultado false o true.
La igualdad (==) primero compara el tipo de sus operandos. Si los tipos son diferentes, entonces el resultado es
false. En caso contrario, los valores de los operandos son comparados. Números y cadenas de caracteres son
comparados de manera usual. Objetos (valores del tipo table, userdata, thread y function) son comparados por
referencia: Dos objetos son considerados iguales solamente si son el mismo objeto. Siempre que un nuevo objeto
es creado (un valor con tipo table, userdata, thread o function) este nuevo objeto es diferente a cualquier otro
objeto que existía anteriormente.
Es posible alterar la manera como Lua compara los tipos table y userdata a través del uso del meta-método "eq"
(ver B.2.9).
© ABNT 2007 - Todos los derechos reservados
201
ABNT NBR 15606-2:2007
Las reglas de conversión en B.2.3.2 no se aplican a comparaciones de igualdad. Por lo tanto, "0"==0 es evaluado
como false y t[0] y t["0"] denotan posiciones diferentes en una tabla.
El operador ~= es exactamente la negación de la igualdad (==).
Los operadores de orden trabajan de la siguiente forma. Si ambos argumentos son números, entonces son
comparados como tales. En caso contrario, si ambos argumentos son cadenas de caracteres, entonces sus
valores son comparados de acuerdo con la elección de idioma actual. En caso contrario, Lua intenta llamar el
meta-método "lt" o el meta-método "le" (ver B.2.9).
B.2.6.4
Operadores lógicos
Los operadores lógicos en Lua son and, or y not. Así como las estructuras de control (ver B.2.5.5), todos los
operadores lógicos consideran false y nil como falso y cualquier cosa diferente como verdadero.
El operador de negación not siempre retorna false o true. El operador de conjunción and retorna su primer
argumento si este valor es false o nil; en caso contrario, and retorna su segundo argumento. El operador de
disyunción or retorna su primer argumento si el valor de este es diferente de nil y de false; en caso contrario, or
retorna su segundo argumento. Tanto and como or usan evaluación de cortocircuito; es decir, el segundo
operando es evaluado solamente cuando es necesario. Siguen algunos ejemplos:
10 or 20
10 or error()
nil or "a"
nil and 10
false and error()
false and nil
false or nil
10 and 20
-->
-->
-->
-->
-->
-->
-->
-->
10
10
"a"
nil
false
false
nil
20
En este Norma, --> indica el resultado de la expresión precedente.
B.2.6.5
Concatenación
El operador de concatenación de cadenas de caracteres en Lua es denotado por dos puntos ('..'). Si ambos
operandos son cadenas de caracteres o números, entonces son convertidos en cadenas de caracteres de
acuerdo con las reglas mencionadas en B.2.3.2. En caso contrario, el meta-método "concat" es llamado
(ver B.2.9).
B.2.6.6
El operador de tamaño
El operador de tamaño es denotado por el operador unario #. El tamaño de una cadena de caracteres es su
número de bytes (es decir, el significado usual de tamaño de una cadena cuando cada carácter ocupa un byte).
El tamaño de una tabla t es definido como cualquier índice entero n tal que t[n] no es nil y t[n+1] es nil; además
de ello, si t[1] es nil, n puede ser cero. Para un array común, con todos los valores diferentes de nil yendo de 1
hasta un dato n, su tamaño es exactamente aquél n, el índice de su último valor. Si el array posee "agujeros"
(es decir, valores nil entre otros dos valores diferentes de nil), entonces #t puede ser cualquiera de los índices
que inmediatamente preceda un valor nil (es decir, puede considerar cualquier valor nil como el fin del array).
202
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
B.2.6.7
Precedencia
La precedencia de operadores en Lua sigue la tabla abajo, de la menor prioridad a la mayor:
or
and
<
..
+
*
not
>
<=
>=
~=
/
#
%
- (unary)
==
Como es usual, se pueden usar paréntesis para alterar las precedencias de una expresión. Los operadores de
concatenación ('..') y de exponenciación ('^') son asociativos a la derecha. Todos los demás operadores binarios
son asociativos a la izquierda.
B.2.6.8
Constructores de tablas
Constructores de tablas son expresiones que crean tablas. Siempre que un constructor es evaluado, es creada
una nueva tabla. Constructores se pueden usar para crear tablas vacías o para crear una tabla e inicializar
algunos de sus campos. La sintaxis general de constructores es
constructortabla ::= `{´ [listadecampos] `}´
listadecampos : := campo { separadordecampos campo} [ separadordecampos]
campo ::= `[´ exp `]´ `=´ exp | Nombre `=´ exp | exp
separadordecampos ::= `,´ | `;´
Cada campo de la forma [exp1] = exp2 agrega a la nueva tabla una entrada cuya clave es exp1 y cuyo valor es
exp2. Un campo de la forma Nombre = exp es equivalente a ["Nombre"] = exp. Finalmente, campos de la forma
exp son equivalentes a [i] = exp, donde i representa números enteros consecutivos, empezando con 1. Campos
en los otros formatos no afectan este conteo. Por ejemplo,
a = { [ f(1)] = g; "x", "y"; x = 1, f(x), [30] = 23; 45 }
Es equivalente a
do
local t = {}
t[f(1)] = g
t[1] = "x"
t[2] = "y"
t.x = 1
t[3] = f(x)
t[30] = 23
t[4] = 45
a = t
end
© ABNT 2007 - Todos los derechos reservados
-----
primera exp
segunda exp
t["x"] = 1
tercera exp
-- cuarta exp
203
ABNT NBR 15606-2:2007
Si el último campo en la lista posee la forma exp y la expresión es una llamada de función o una expresión con
un número variable de argumentos, entonces todos los valores retornados por la expresión entran en la lista
consecutivamente (ver B.2.6.9). Para evitar esto, colocar paréntesis alrededor de la llamada de función (o de la
expresión con número variable de argumentos) (ver B.2.6.1).
La lista de campos puede tener un separador más al final, como una conveniencia para código generado
automáticamente.
B.2.6.9
Llamadas de función
Una llamada de función en Lua tiene la siguiente sintaxis:
llamadadefuncion ::= expprefijo args
En una llamada de función, el primer expprefixo y args son evaluados. Si el valor de expprefixo posee tipo
function, entonces esta función es llamada con los argumentos suministrados. En caso contrario, el meta-método
"call" de expprefixo es llamado, teniendo como primer parámetro el valor de expprefixo, seguido por los
argumentos originales de la llamada (ver B.2.9).
La forma
llamadadefuncion ::= expprefijo `:´ Nombre args
se puede usar para llamar "métodos". Una llamada v:nombre(args) es un azúcar sintáctico para v.nombre(v,args),
con la diferencia de que v es evaluado solamente una vez.
Argumentos poseen la siguiente sintaxis:
args ::= `(´ [ listaexp] `) ´
args ::= constructordetabla
args ::= Cadena
Todas las expresiones suministradas como argumento son evaluadas antes de la llamada. Una llamada de la
forma f{campos} es un azúcar sintáctico para f({campos}); es decir, la lista de argumentos consiste solamente
en una tabla nueva. Una llamada de la forma f'cadena' (o f"cadena" o f[[cadena]]) es un azúcar sintáctico para
f('cadena'); es decir, la lista de argumentos consiste solamente en una cadena de caracteres literal.
Una excepción con relación a la sintaxis de formato libre de Lua es que no es posible colocar una quiebra de línea
antes del '(' en una llamada de función. Esta restricción evita algunas ambigüedades en el lenguaje.
Si se escribiese
a = f
(g) .x(a)
Lua podría ver esto como un comando único, a = f(g).x(a). Por lo tanto, si se desean dos comandos, se debe
obligatoriamente colocar un punto y coma entre ellos. Si realmente se desea llamar a f, se debe remover la
quiebra de línea antes de (g).
204
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Una llamada de la forma return llamadadefuncion se denomina llamada final. Lua implementa llamadas finales
propias (o recursos finales propios): En una llamada final, la función llamada reutiliza la entrada en la pila de la
función que la llamó. Por lo tanto, no hay límite en el número de llamadas finales anidadas que un programa
puede ejecutar. Sin embargo, una llamada final apaga cualquier información de depuración sobre la función
llamadora. Una llamada final solamente ocurre con una sintaxis particular, donde el return posee una única
llamada de función como argumento; esta sintaxis hace que la llamada de función retorne exactamente los
valores de retorno de la función llamada. De esa forma, ninguno de los ejemplos a continuación son llamadas
finales:
return (f(_x)) -return 2 * f(x)
return x, f(x) -f(x); return
return x or f(x)
el número de resultados es ajustado para 1
resultados adicionales
-- resultados desechados
-- el número de resultados es ajustado para 1
B.2.6.10 Definiciones de funciones
La sintaxis para la definición de una función es
función ::= function cuerpodelafuncion
función ::= `(´ [listapar] `)´ bloque end
El siguiente azúcar sintáctico simplifica definiciones de funciones:
comando ::= Function nombredelafuncion cuerpodelafuncion
comando ::= Local function Nombre cuerpodelafuncion
nombredelafuncion ::= Nombre {`.´ Nombre} [`:´ Nombre]
El comando
function f () b o d y end
es traducido para
f = function () b o d y end
El comando
function t.a.b.c.f () b o d y end
es traducido para
t.a.b.c.f = function () b o d y end
El comando
local function f () b o d y end
es traducido para
local f; f = function () b o d y end
y no para
local f = function () b o d y end
© ABNT 2007 - Todos los derechos reservados
205
ABNT NBR 15606-2:2007
Esto solamente hace diferencia cuando el cuerpo de la función contiene una referencia para f.
Una definición de función es una expresión ejecutable, cuyo valor tiene tipo function. Cuando Lua pre-compila un
trecho, todos los cuerpos de las funciones del trecho son pre-compilados también. Entonces, siempre que Lua
ejecuta la definición de una función, la función es instanciada (o cerrada). Esta instancia de la función (o cierre) es
el valor final de la expresión. Instancias diferentes de la misma función pueden referirse a diferentes variables
locales externas y pueden tener diferentes tablas de ambiente.
Parámetros se comportan como variables locales que son inicializadas con los valores de los argumentos:
listapar ::= listadenombres [`,´ `...´] | `...´
Cuando una función es llamada, la lista de argumentos es ajustada para el tamaño de la lista de parámetros, a no
ser que la función sea de variedad variable o vararg, lo que se indica por tres puntos ('...') al final de su lista de
parámetros. Una función vararg no ajusta su lista de argumentos; en vez de eso, recolecta todos los argumentos
extras y los suministra a la función a través de una expresión vararg, la cual también es representada como tres
puntos. El valor de esta expresión es una lista de todos los argumentos extras corrientes, análogo a una función
con múltiples valores de retorno. Si una expresión vararg se utiliza dentro de otra expresión o en medio de una
lista de expresiones, entonces su lista de valores de retorno es ajustada para un elemento. Si la expresión se
utiliza como el último elemento de una lista de expresiones, entonces ningún ajuste se realiza (a menos que la
llamada sea delimitada por paréntesis).
Como un ejemplo, considere las siguientes definiciones:
function
function
function
f(a b) end
g(a b, ...) end
r()
return 1,2,3
En este caso, se tiene el siguiente mapeo de argumentos para parámetros y para las expresiones vararg:
LLAMADA
PARÁMETROS
f(3)
f(3, 4)
f(3, 4, 5)
f(r(), 10)
f (r ())
a=3
a=3
a=3
a=1
a=1
b=nil
b=4
b=4
b=10
b=2
g(3)
a=3
,
a=3
a=3
a=5
b=nil,
...
--> (nada)
b=4,
b=4,
b=1,
...
...
...
--> (nada)
--> 5 8
--> 2 3
g(3, 4)
g(3, 4, 5,8)
g(5, r ())
Resultados son retornados usando el comando return (ver B.2.5.5). Si el control alcanza el fin de una función sin
encontrar un comando return, entonces la función retorna sin ningún resultado.
La sintaxis de dos puntos se utiliza para definir métodos, es decir, funciones que poseen un parámetro extra
implícito self. De esta forma, el comando
function t.a.b.c:f ( p a r a m s ) b o d y end
Es un azúcar sintáctico para
t.a.b.c.f = function (self, p a r a m s ) b o d y end
206
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
B.2.7 Reglas de visibilidad
Lua es un lenguaje con alcance léxico. El alcance de las variables empieza en el primer comando después de su
declaración y va hasta el fin del bloque más interno que incluye la declaración. Considerar el siguiente ejemplo:
x = 10
-- variable global
do
-- bloque nuevo
local x = x
-- nuevo 'x', con valor 10
print(x)
--> 10
x = x+1
do
-- otro bloque
local x = x+1
-- otro 'x'
print(x)
--> 12
end
print(x)
--> 11
end
print(x)
--> 10 (o x global)
En una declaración como local x = x, la nueva x siendo declarada no está en el alcance aún y por lo tanto la
segunda x se refiere a una variable externa.
Debido a las reglas de alcance léxico, variables locales pueden ser libremente accedidas por funciones definidas
dentro de su alcance. Una variable local usada por una función más interna se denomina upvalue o variable local
externa, dentro de la función más interna.
Cada ejecución de un comando local define noticias variables locales. Considerar el ejemplo a continuación:
a = {}
local x = 20
for i=1,10 do
local y = 0
a[ i] = function () y=y+1; return x+y end
en d
El lazo crea diez cierres (es decir, diez instancias de la función anónima). Cada uno de estos cierres usa una
variable y diferente, mientras todos ellos comparten la misma variable X.
B.2.8 Tratamiento de errores
Dado que Lua es un lenguaje incorporado de extensión, todas las acciones de Lua empiezan a partir de código C
en el programa hospedero que llama una función de la biblioteca de Lua (ver lua_pcall). Siempre que un error
ocurre durante la compilación o ejecución, el control retorna para C, que puede tomar las medidas apropiadas
(tales como imprimir un mensaje de error).
El código Lua puede explícitamente generar un error a través de una llamada a la función error. Si es necesario
capturar errores en Lua, se puede usar la función pcall.
B.2.9 Metatablas
Todo valor en Lua puede tener una meta-tabla. Ésta meta-tabla es una tabla Lua común que define el
comportamiento del valor original con relación a ciertas operaciones especiales. Es posible alterar varios aspectos
del comportamiento de operaciones sobre un valor especificando campos específicos en la meta-tabla del valor.
Por ejemplo, cuando un valor no numérico es el operando de una adición, Lua verifica si existe una función
asociada con el campo "__add" en la meta-tabla del valor. Si la función existe, Lua llama esta función para
realizar la adición.
© ABNT 2007 - Todos los derechos reservados
207
ABNT NBR 15606-2:2007
Las claves son llamadas en una meta-tabla de eventos y los valores de meta-métodos. En el ejemplo anterior, el
evento es "add" y el meta-método es la función que realiza la adición.
Es posible obtener la meta-tabla de cualquier valor usando la función getmetatable.
Se puede alterar la meta-tabla de tablas a través de la función setmetatable. No se puede cambiar la meta-tabla
de otros tipos de Lua (a menos que sea utilizada la biblioteca de depuración); para hacer esto se debe usar
obligatoriamente la API C.
Tablas y objetos del tipo userdata completos poseen meta-tablas individuales (aunque múltiples tablas y objetos
userdata puedan compartir sus meta-tablas); valores de todos los otros tipos comparten una única meta-tabla por
tipo. Siendo así, hay solamente una meta-tabla para todos los números, una para todas las cadenas de
caracteres, etc.
Una meta-tabla puede controlar cómo un objeto se comporta en operaciones aritméticas, comparaciones con
relación a la orden, concatenación, operación de tamaño e indexación. Una meta-tabla también puede definir una
función a ser llamada cuando un objeto userdata es recolectado por el colector de basura. Para cada una de
estas operaciones Lua asocia una clave específica llamada un evento. Cuando Lua realiza una de estas
operaciones sobre un valor, Lua verifica si este valor posee una meta-tabla con el evento correspondiente. Si éste
es el caso, el valor asociado a esa clave (el meta-método) controla cómo Lua va a realizar la operación.
Metatablas controlan las operaciones listadas a continuación. Cada operación se identifica por su nombre
correspondiente. La clave para cada operación es una cadena de caracteres empezando con el nombre de la
operación siendo precedido por dos subrayados, '__'; por ejemplo, la clave para la operación "add" es la cadena
"__add". La semántica de estas operaciones se explica mejor por medio de una función Lua que describe cómo el
interpretador ejecuta la operación.
El código Lua mostrado en esta sección es meramente ilustrativo; el comportamiento real está codificado en el
interpretador y es mucho más eficiente que esta simulación. Todas las funciones usadas en estas descripciones
(rawget, tonumber etc.) son presentadas en B.5.2. En particular, para recobrar el meta-método de un objeto
determinado, se usa la siguiente expresión:
metatable (obj)[ event]
Esto debe ser leído como
rawget(getmetatable(obj) or {} , event)
Es decir, el acceso a un meta-método no invoca otros meta-métodos y el acceso a objetos que no poseen
metatablas no falla (simplemente da como resultado nil).
208
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007

"add": la operación +.
La función getbinhandler abajo define como Lua elige un tratador para una operación binaria. Primero, Lua
intenta el primer operando. Si este tipo no define un tratador para la operación, entonces Lua intenta el segundo
operando.
function getbinhandler (op1, op2, event)
return metatable(op1)[ event] or metatable(op2)[ event]
end
Usando esa función, el comportamiento del op1 + op2 es
function add_event (op1, op2)
local o1, o2 = tonumber(op1), tonumber(op2)
if o1 and o2 then
-- ¿ambos operandos son numéricos?
return o1 + o2
-- `+' aquí está el `add' primigenio
else
-- por lo menos uno de los operandos no es numérico
local h = getbinhandler(op1, op2, "__add")
if h then
-- llama al tratador pasando ambos operandos
return h(op1, op2)
else
-- sin tratador disponible: comportamiento estándar
error("...")
end
end
end

sub": la operación -. Comportamiento análogo al de la operación “add”.

"mul": la operación *. Comportamiento análogo al de la operación “add”.

"div": la operación /. Comportamiento análogo al de la operación “add”.

"mod": la operación %. Comportamiento análogo a la operación “add”, con la operación o1 floor(o1/o2)*o2 como operación primitiva.

"pow": la operación ^ (exponenciación). Comportamiento análogo al de la operación “add”, con la función
pow (proveniente de la biblioteca matemática del C) como operación primitiva.

"unm": la operación unaria -.
function unm _event (op)
local o = tonumber(op)
if el then
-- ¿operando es numérico?
return –o
-- `'aquí es el `unm' primigenio
else
-- el operando no es numérico
-- intenta encontrar un tratador para el operando local h = metatable(op).__unm
if h then
-- llama el tratador pasando el operando
return h(op)
else
-- sin tratador disponible: comportamiento estándar
error("...")
end
end
end
© ABNT 2007 - Todos los derechos reservados
209
ABNT NBR 15606-2:2007

"concat": la operación .. (concatenación).
function concat_event (op1, op2)
if (type(op1) == "string" or type(op1) == "number") and
(type(op2) == "string" or type(op2) == "number") then
return op1 .. op2 -- concatenacion de strings primitiva
else
local h = getbinhandler(op1, op2, "__concat")
if h then
return h(op1, op2)
else
error("...")
end
end
end

"len": la operación #.
function len_event (op)
if type(op) == "string" then
return strlen(op)
-- tamaño de string primitivo
elseif type(op) == "table" then
return #op
-- tamaño de tabla primitivo
else
local h = metatable(op).__len
if h then
-- llama el tratador pasando el operando
return h(op)
else -- sin tratador disponible: Comportamiento
estándar
error("...")
end
end
end
Ver B.2.6.6 para obtener una descripción de la longitud de una tabla.
 "eq": la operación ==. La función getcomphandler define como Lua elige un meta-método para
comparación de operadores. Un meta-método solo es seleccionado cuando ambos objetos en comparación
tienen el mismo tipo y el mismo meta-método para la operación seleccionada.
function getcomphandler (op1, op2, event)
if type(op1) ~= type(op2) then return nil end
local mm1 = metatable(op1)[ event] local mm2 = metatable(op2)[ event]
if mm1 == mm2 then return mm1 else return nil end
end
El evento “eq” se define como:
function eq_event (op1, op2)
if type(op1) ~= type(op2) then -- different types?
return false
-- different objects
end
if op1 == op2 then
-- primitive equal?
return true
-- objects are equal
end
-- try metamethod
local h = getcomphandler(op1, op2, "__eq")
if h then
210
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
return h(op1, op2)
else
return false
end
end
a ~= b es equivalente a not (a = = b).

"lt": la operación <.
function lt_event (op1, op2)
if type(op1) == "number" and type(op2) == "number" then
return op1 < op2 -- comparación numérica
elseif type(op1)=="string" and type(op2)=="string" then
return op1 < op2 -- comparación lexicográfica
else
local h = getcomphandler(op1, op2, "__lt")
if h then
return h(op1, op2)
else
error("...");
end
end
end
a > b es equivalente a b < a.

"le": la operación <=.
function le_event (op1, op2)
if type(op1) == "number" and type(op2) == "number" then
return op1 <= op2
-- comparación numérica
elseif type(op1)=="string" and type(op2)=="string" then
return op1 <= op2
-- comparación lexicográfica
else
local h = getcomphandler(op1, op2, "__le")
if h then
return h(op1, op2)
else
h = getcomphandler(op1, op2, "__lt")
if h then
return not h(op2, op1)
else
error("...");
end
end
end
end
a >= b es equivalente a b <= a. En la ausencia de un meta-método “le”, Lua intenta el “lt”, asumiendo que a <=
b es equivalente a not (b < a).
© ABNT 2007 - Todos los derechos reservados
211
ABNT NBR 15606-2:2007
 "index": acceso de indexación table[key].
function gettable_event (table, key)
local h
if type(table) == "table" then
local v = rawget(table, key)
if v ~= nil then return v end
h = metatable(table).__index
if h == nil then return nil end
else
h = metatable(table).__index
if h == nil then
error("...");
end
end
if type(h) == "function" then
return h(table, key)
-- llama el tratador
else return h[key]
-- o repita la operación
end
end
 "newindex": atribución indexada table[key] = value
function settable_event (table, key, value)
local h
if type(table) == "table" then
local v = rawget(table, key)
if v ~= nil then rawset(table, key, value); return
h = metatable(table).__newindex
if h == nil then rawset(table, key, value); return
else
h = metatable(table).__newindex
if h == nil then
error("...");
end
end
if type(h) == "function" then
return h(table, key,value)
-- llama el
else h[key] = value
-- o repita
end
end

end
end
tratador
la operación
"call": llamado cuando Lua llama un valor.
function function_event (func, ...)
if type(func) == "function" then
return func(...) -- llamada primitiva
else
local h = metatable(func).__call
if h then
return h(func, ...)
else
error("...")
end
end
end
212
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
B.2.10 Ambientes
Además de meta-tablas, objetos del tipo thread, function y userdata poseen otra tabla asociada a ellos,
denominada su ambiente. Así como meta-tablas, ambientes son tablas normales y varios objetos pueden
compartir el mismo ambiente.
Ambientes asociados con objetos del tipo userdata no poseen significado para Lua. Es sólo una conveniencia
para programadores asociar una tabla a un objeto userdata.
Ambientes asociados con flujos de ejecución (threads) son llamados ambientes globales. Se usan como el
ambiente estándar por sus flujos de ejecución y funciones no anidadas creadas por el flujo de ejecución (a través
de loadfile, loadstring o load) y pueden ser directamente accedidos por el código C (ver B.3.4).
Ambientes asociados con funciones C pueden ser directamente accedidos por el código C (ver B.3.4). Se usan
como el ambiente estándar para otras funciones C creadas por la función.
Ambientes asociados con funciones Lua se usan para resolver todos los accesos a variables globales dentro de la
función (ver B.2.4). Se usan como el ambiente estándar para otras funciones Lua creadas por la función.
Es posible alterar el ambiente de una función Lua o del flujo de ejecución que está siendo ejecutado actualmente
llamando a setfenv. Es posible obtener el ambiente de una función Lua o del flujo de ejecución siendo ejecutado
actualmente llamando a getfenv. Para tratar el ambiente de otros objetos (userdata, funciones C, otros flujos de
ejecución) se debe usar obligatoriamente la API C.
B.2.11 Recolecta de basura
B.2.11.1 Conceptos básicos
Lua realiza gestión automática de la memoria. Esto significa que no es necesario preocuparse con la asignación
de memoria para nuevos objetos ni con la liberación de memoria cuando los objetos ya no son necesarios. Lua
administra la memoria automáticamente ejecutando un colector de basura de vez en cuando para recolectar todos
los objetos muertos (es decir, aquellos objetos que han dejado de ser accesibles desde Lua). Todos los objetos
en Lua están sujetos a la gestión automática de memoria: tablas, userdata, funciones, flujos de ejecución y
cadenas de caracteres.
Lua implementa un colector de basura “marcar y limpiar” (Mark-and-sweep) incremental. El colector usa dos
números para controlar su ciclo de Recolecta de basura: La pausa del colector de basura y el multiplicador de
paso del colector de basura.
La pausa del colector de basura controla cuánto tiempo el colector espera antes de iniciar un nuevo ciclo. Los
valores mayores hacen que el colector sea menos agresivo. Los valores menores que 1 significan que el colector
no esperará para iniciar un nuevo ciclo. Un valor de 2 significa que el colector esperará hasta que la memoria total
en uso se duplique antes de iniciar un nuevo ciclo.
El multiplicador de paso controla la velocidad relativa del colector con relación a la asignación de memoria. Los
valores mayores tornan al colector más agresivo pero también aumentan el tamaño de cada paso incremental.
Los valores menores que 1 hacen que el colector sea muy lento y puede ocurrir que el colector nunca termine un
ciclo. El valor estándar, 2, significa que el colector se ejecuta a una velocidad que es "dos veces" la velocidad de
asignación de memoria.
Es posible alterar estos números a través de llamadas a las funciones lua_gc en C o collectgarbage en Lua.
Ambas reciben valores en puntos porcentuales como argumentos (de modo que un argumento cuyo valor es 100
significa un valor real de 1). Con estas funciones también se puede controlar el colector directamente (por ejemplo,
pararlo y reiniciarlo).
© ABNT 2007 - Todos los derechos reservados
213
ABNT NBR 15606-2:2007
B.2.11.2 Meta-métodos de Recolecta de basura
Usando la API C, se puede configurar los meta-métodos del colector de basura para objetos userdata (ver B.2.9).
Éstos meta-métodos también se denominan finalizadores. Los finalizadores permiten que se coordine la Recolecta
de basura de Lua con la gestión de recursos externos (tales como el cierre de archivos, conexiones de red o de
bancos de datos o la liberación de su propia memoria).
Los objetos userdata con un campo __gc en su meta-tablas no son colectados inmediatamente por el colector de
basura. En vez de eso, Lua los coloca en esa lista. Después que la recolecta se realiza, Lua hace el equivalente
de la siguiente función para cada objeto userdata en una lista:
function gc_event (userdata)
local h = metatable(userdata) .__gc
if h then
h (userdata)
end
end
Al final del ciclo de recolecta de basura, los finalizadores para los objetos userdata son llamados en el orden
inverso al de su creación, entre aquellos colectados en ese ciclo. Es decir, el primer finalizador a ser llamado es
asociado con el objeto userdata que fue creado por último en el programa. El userdata solo es efectivamente
liberado en el próximo ciclo de Recolecta de basura.
B.2.11.3 Tablas débiles
Una tabla débil es una tabla cuyos elementos son informes débiles. Una referencia débil es ignorada por el
colector de basura. En otras palabras, si los únicos informes para un objeto son informes débiles, entonces el
colector de basura colectará este objeto.
Una tabla débil puede tener claves débiles, valores débiles o ambos. Una tabla con claves débiles permite la
recolecta de sus claves pero impide la recolecta de sus valores. Una tabla con claves débiles y valores débiles
permite la recolecta tanto de las claves como de los valores. En cualquier caso, si la clave es colectada o el valor
es colectado, el par entero es borrado de la tabla. La fragilidad de una tabla es controlada por el campo __mode
de su meta-tabla. Si el campo __mode es una cadena de caracteres conteniendo el carácter 'k', las claves de la
tabla son débiles. Si __mode contiene 'v', los valores en la tabla son débiles.
Después de usar una tabla como una meta-tabla, no se debe alterar el valor de su campo __mode. En caso
contrario, el comportamiento débil de las tablas controladas por ésta meta-tabla es indefinido.
B.2.12 Co-rutinas
Lua ofrece soporte a co-rutinas, también conocidas como flujos de ejecución (threads) colaborativos. Una corutina en Lua representa un flujo de ejecución independiente. Al contrario de procesos ligeros en sistemas que
dan soporte a múltiples flujos de ejecución, una co-rutina solamente suspende su ejecución a través de una
llamada explícita a una función de cesión.
Es posible crear una co-rutina con una llamada a la coroutine.create. Su único argumento es una función que es
la función principal de la co-rutina. La función create solamente crea una nueva co-rutina y retorna una referencia
para la misma (un objeto del tipo thread); no inicia la ejecución de la co-rutina.
Cuando la función coroutine.resume es llamada por primera vez, recibiendo como su primer argumento el objeto
del tipo thread retornado por coroutine.create, la co-rutina inicia su ejecución, en la primera línea de su función
principal. Después que la co-rutina empieza a ser ejecutada, continúa ejecutando hasta terminar o ceder.
Una función puede terminar su ejecución de dos formas: Normalmente, cuando su función principal retorna
(explícita o implícitamente, después de la última instrucción); y de manera anormal, si ocurre un error no protegido
en el primer caso, coroutine.resume retorna true más cualquier valor retornado por la función principal de la corutina. En el caso de ocurrir errores, coroutine.resume retorna false más un mensaje de error.
214
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Una co-rutina cede la ejecución a través de una llamada a la función coroutine.yield. Cuando una co-rutina cede,
la coroutine.resume correspondiente retorna inmediatamente, incluso si la cesión ocurrió dentro de una llamada
de función anidada (es decir, no ocurrió dentro de la función principal, sino en una función llamada directa o
indirectamente por la función principal). En el caso de una cesión, coroutine.resume también retorna true, más
cualquier valor pasado para coroutine.yield. La próxima vez que se reinicie la ejecución de la misma co-rutina,
continúa su ejecución desde el punto donde cedió, con la llamada para coroutine.yield retornando cualesquiera
argumentos extras pasados para coroutine.resume.
Como coroutine.create, la función coroutine.wrap también crea una co-rutina, pero en vez de retornar la propia corutina, retorna una función que, cuando es llamada, retoma la ejecución de la co-rutina. Cualesquiera argumentos
pasados para esta función van como argumentos extras para coroutine.resume. Coroutine.wrap retorna todos los
valores retornados por coroutine.resume, excepto el primero (el código booleano de error). Diferentemente de
coroutine.resume, coroutine.wrap no captura errores; cualquier error es propagado para el llamador.
Como un ejemplo, considerar el siguiente código:
function foo (a)
print("foo", a)
return coroutine . yield (2* a)
end
co = coroutine.create(function (a,b)
print("co-body", a, b)
local r = foo(a+1)
print ("co-body", r)
local r, s = coroutine.yield(a+b, a-b)
print("co-body", r, s)
return b, "end"
end)
print("main",
print("main",
print("main",
print("main",
coroutine.resume(co,
coroutine.resume(co,
coroutine.resume(co,
coroutine.resume(co,
1, 10))
"r"))
"x", "y"))
"x", "y"))
Cuando se ejecuta este código, produce el siguiente resultado:
co-body
foo
main
co-body
main
co-body
main
main
1
2
true
r
true
x
true
false
10
4
11
-9
y
10
end
cannot resume dead coroutine
© ABNT 2007 - Todos los derechos reservados
215
ABNT NBR 15606-2:2007
B.3 Interfaz de programación de la aplicación (API)
B.3.1 Conceptos básicos
Todas las funciones de la API, así como los tipos y constantes relacionados, están declarados en el archivo de
encabezamiento lua.h.
Incluso cuando se usa el término "función", cualquier operación en la API puede, de forma alternativa, ser provista
como una macro. Tales macros usan cada uno de sus argumentos exactamente una vez (con excepción del
primer argumento, que es siempre un estado Lua) y por lo tanto no generan cualquier efecto colateral oculto.
Como en la mayoría de las bibliotecas C, las funciones de la API Lua no verifican la validez o la consistencia de
sus argumentos. Sin embargo, es posible alterar este comportamiento compilando Lua con una definición
apropiada para la macro luai_apicheck, en el archivo luaconf.h.
B.3.2 Pila
Lua usa una pila virtual para pasar y recibir valores de C. Cada elemento en esta pila representa un valor Lua (nil,
un número, una cadena de caracteres etc.).
Siempre que Lua llama C, la función llamada recibe una nueva pila, que es independiente de pilas anteriores y de
pilas de funciones C que aún estén activas. Esta pila contiene inicialmente cualesquiera argumentos para la
función C y es donde la función C apila sus resultados para ser retornados al llamador (ver lua_CFunction).
Por conveniencia, la mayoría de las operaciones de consulta en la API no sigue una disciplina estricta de pila. En
vez de eso, pueden referirse a cualquier elemento en la pila usando un índice. Un índice positivo representa una
posición absoluta en la pila (empezando por 1); un índice negativo representa una posición relativa a la parte
superior de la pila. De manera más específica, si la pila posee n elementos, entonces el índice 1 representa el
primer elemento (es decir, el elemento que fue apilado en la pila primero) y el índice n representa el último
elemento; el índice -1 también representa el último elemento (es decir, el elemento en la parte superior) y el índice
-n representa el primer elemento. Se dice que un índice es válido si está entre 1 y la parte superior de la pila (es
decir, si 1 ~ abs(índice) ~ tope).
B.3.3 Tamaño de la pila
Cuando se interactúa con la API de Lua, se es responsable por asegurar consistencia. En particular, se es
responsable por controlar un reventón de la pila. Se puede usar la función lua_checkstack para aumentar el
tamaño de la pila.
Siempre que Lua llama a C, asegura que por lo menos LUA_MINSTACK posiciones en la pila están disponibles.
LUA_MINSTACK es definida como 20, entonces generalmente no es necesario preocuparse con el espacio de la
pila a menos que su código posea lazos apilando elementos en la pila.
La mayoría de las funciones de consulta acepta como índices cualquier valor dentro del espacio de la pila
disponible, es decir, índices hasta el tamaño máximo de la pila que se configuró a través de la función
lua_checkstack. Tales índices son llamados índices aceptables. Más formalmente, definido un índice aceptable de
la siguiente forma:
(índice < 0 && abs(índice) <= tope) ||
(índice > 0 && índice <= espaciodelapila)
Observar que 0 nunca es un índice aceptable.
216
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
B.3.4 Pseudo-índices
A menos que se diga lo contrario, cualquier función que acepta índices válidos también puede ser llamada con
pseudo-índices, que representan algunos valores Lua que son accesibles para el código C pero que no están en
la pila. Pseudo-índices se usan para acceder al ambiente del flujo de ejecución, el ambiente de la función, el
registro y los upvalues de la función C (ver B.3.5).
El ambiente del flujo de ejecución (donde las variables globales existen) está siempre en el pseudo-índice
LUA_GLOBALSINDEX. El ambiente de la función C funcionando está siempre en el pseudo-índice
LUA_ENVIRONINDEX.
Para acceder y alterar el valor de variables globales, se puede usar operaciones de tablas usuales sobre una
tabla de ambiente. Por ejemplo, para acceder al valor de una variable global, hacer
lua _getfield(L, LUA _GLOBALSINDEX, varname);
B.3.5 Cierres C
Cuando una función C es creada, es posible asociar algunos valores a la misma, creando entonces un cierre C;
estos valores son llamados up values y son accesibles para la función siempre que es llamada (ver
lua_pushcclosure).
Siempre que una función C es llamada, sus upvalues son posicionados en pseudo-índices específicos. Estos
pseudo-índices son generados por la macro lua_upvalueindex. El primer valor asociado con una función está en la
posición lua_upvalueindex(1), y así sucesivamente. Cualquier acceso a lua_upvalueindex(n), donde n es mayor
que el número de upvalues de la función actual, produce un índice aceptable (aunque inválido).
B.3.6 Registro
Lua provee un registro, una tabla predefinida que puede ser usada por cualquier código C para almacenar
cualquier valor Lua que el código C necesite almacenar. Esta tabla está siempre localizada en el pseudo-índice
LUA_REGISTRYINDEX. Cualquier biblioteca de C puede almacenar datos en esta tabla, pero debe tener cuidado
para elegir claves diferentes de aquellas usadas por otras bibliotecas, para evitar colisiones. Típicamente, se debe
usar como clave una cadena de caracteres conteniendo el nombre de su biblioteca o un objeto del tipo userdata
ligero con la dirección de un objeto C en su código.
Las claves enteras en el registro son usadas por el mecanismo de referencia, implementado por la biblioteca
auxiliar, y por lo tanto no deben ser usadas para otros propósitos.
B.3.7 Tratamiento de errores en C
Internamente, Lua usa el mecanismo de longjmp de C para tratar errores (se puede también utilizar excepciones
si se utiliza; ver el archivo luaconf.h.) Cuando Lua encuentra cualquier error (tales como errores de asignación de
memoria, errores de tipo, errores de sintaxis y errores de tiempo de ejecución) dispara un error; es decir, hace un
desvío largo. Un ambiente protegido usa setjmp para establecer un punto de recuperación; cualquier error desvía
el flujo de ejecución para el punto de recuperación activado más reciente.
La mayoría de las funciones en la API puede disparar un error, por ejemplo debido a un error de asignación de
memoria. La documentación para cada función indica si puede disparar errores.
Dentro de una función C se puede disparar un error llamando lua_error.
© ABNT 2007 - Todos los derechos reservados
217
ABNT NBR 15606-2:2007
B.3.8 Funciones y tipos
Todas las funciones y tipos de la API C se listan a continuación en orden alfabético. Cada función tiene un
indicador como éste: [-o, +p, x]
El primer campo, o, representa cuántos elementos la función desapila de la pila. El segundo campo, p, indica
cuántos elementos la función apila en la pila (cualquier función siempre apila sus resultados después de desapilar
sus argumentos). Un campo en la forma x|y significa que la función puede apilar (o desapilar) x o y elementos,
dependiendo de la situación; una marca de interrogación '?' significa que no se puede saber cuántos elementos
desapila/apila la función mirando solamente sus argumentos (por ejemplo, el número de elementos puede
depender de lo que está en la pila). El tercer campo, x, dice si la función puede disparar errores: '-' Significa que la
función nunca dispara cualquier error; 'm' significa que la función puede disparar un error solamente debido a la
falta de memoria; 'y' significa que la función puede disparar otros tipos de error; 'v' significa que la función puede
disparar un error intencional.
lua_Alloc
typedef void * (*lua _Alloc) (void *ud, void *ptr, size _t osize, size _t nsize);
El tipo de la función de asignación de memoria usada por los estados Lua. La función de asignación debe
proveer una funcionalidad análoga a la de realloc, pero no exactamente la misma. Sus argumentos son ud, un
indicador opaco pasado para lua_newstate; ptr, un indicador para el bloque siendo asignado/reasignado/liberado;
osize, el tamaño original del bloque; y nsize, el nuevo tamaño del bloque. Ptr es NULL si, y solamente si, osize es
cero. Cuando nsize es cero, la función de asignación debe retornar NULL; si osize es diferente de cero, el bloque
de memoria indicado por ptr debe ser liberado. Cuando nsize no es cero, la función de asignación retorna NULL
si, y solamente si, no puede asignar el tamaño del bloque requerido. Cuando nsize no es cero y osize es cero, la
función de asignación debe comportarse como malloc. Cuando nsize y osize no son cero, la función de
asignación se comporta como realloc. Lua presupone que la función de asignación nunca falla cuando osize >=
nsize.
Sigue una implementación simple para la función de asignación. Se utiliza en la biblioteca auxiliar por
luaL_newstate.
static void *l _alloc (void *ud, void *ptr, size _t osize, size _t nsize) {
(void)ud;
/* not used */
(void) osize;
/* not used */
if (nsize == 0) {
free(ptr); /* ANSI requires that free(NULL) has no effect */
return NULL;
}
else
/* ANSI requires that realloc(NULL, size) == malloc(size) */
return realloc(ptr, nsize);
}
Este código presupone que free(NULL) no posee ningún efecto y que realloc(NULL, size) es equivalente a
malloc(size). ANSI C garantiza esos dos comportamientos.
218
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
lua_atpanic
lua_CFunction lua_atpanic (lua_State *L, lua_CFunction panicf);
Establece una nueva función de pánico y retorna la función de pánico antigua.
Si un error ocurre fuera de cualquier ambiente protegido, Lua llama una función de pánico y entonces llama
exit(EXIT_FAILURE), terminando entonces la aplicación hospedera. Su función de pánico puede evitar esta salida
en el caso que nunca retorne (por ejemplo, haciendo un desvío largo).
La función de pánico puede acceder al mensaje de error en la parte superior de la pila.
lua_call
void lua_call (lua_State *L, int nargs, int nresults);
Llama una función.
Para llamar una función se debe usar el siguiente protocolo: Primero, la función a ser llamada es apilada en la
pila; a continuación, los argumentos de la función son apilados en orden directo; es decir, el primer argumento es
apilado primero. Por último se llama lua_call; nargs es el número de argumentos que se amontonó en la pila.
Todos los argumentos y el valor de la función son desapilados de la pila cuando la función es llamada. Los
resultados de la función son apilados en la pila cuando la función retorna. El número de resultados es ajustado
para nresults, a menos que nresults sea LUA_MULTRET. En este caso, todos los resultados de la función son
apilados. Lua cuida para que los valores retornados quepan dentro del espacio de la pila. Los resultados de la
función son apilados en la pila en orden directo (el primer resultado es apilado primero), de modo que después de
la llamada el último resultado está en la parte superior de la pila.
Cualquier error dentro de la función llamada es propagado hacia arriba (con un longjmp).
El siguiente ejemplo muestra como el programa hospedero puede hacer el equivalente a este código Lua:
a = f("how", t.x, 14)
Sigue el mismo código en C:
lua_getfield(L, LUA_GLOBALSINDEX, "f");
/* función a ser llamada
*/
lua_pushstring(L, "how");
/* primer argumento
*/
lua_getfield(L, LUA_GLOBALSINDEX, "t");
/* tabla a ser indexada
*/
lua_getfield(L, -1, "x");
/* apila el resultado de t.x (2º arg)
*/
lua_remove(L, -2);
/* remueve 't' de la pila */
lua_pushinteger(L, 14);
/* 3er. argumento */
lua_call(L, 3, 1);
/* llama 'f' con 3 argumentos y 1 resultado
*/
lua_setfield(L, LUA_GLOBALSINDEX, "a");
/* establece ‘a’ global
*/
El código anterior es "equilibrado": al final, la pila está de regreso a su configuración original. Esto se considera
una buena práctica de programación.
© ABNT 2007 - Todos los derechos reservados
219
ABNT NBR 15606-2:2007
lua_C Function
typedef int (*lua _CFunction) (lua _State *L);
El tipo para funciones C.
Con el objeto de comunicarse apropiadamente con Lua, una función C debe usar el siguiente protocolo, el cual
define el modo cómo se pasan los parámetros y resultados: Una función C recibe sus argumentos de Lua en su
pila en orden directo (el primer argumento es apilado primero). Por lo tanto, cuando la función empieza,
lua_gettop(L) retorna el número de argumentos recibidos por la función. El primer argumento (si hay) está en el
índice 1 y su último argumento está en el índice lua_gettop(L). Para retornar valores para Lua, una función C sólo
los apila en la pila, en orden directo (el primer resultado se apila primero) y retorna el número de resultados.
Cualquier otro valor en la pila debajo de los resultados será debidamente desechado por Lua. Como una función
Lua, una función C llamada por Lua también puede retornar muchos resultados.
Como un ejemplo, la siguiente función recibe un número variable de argumentos numéricos y retorna el promedio
y la suma de ellos:
static int foo (lua_State *L) {
int n = lua_gettop(L);
/* number of arguments */
lua_Number sum = 0;
int i;
for (i = 1; i <= n; i++) {
if (!lua_isnumber(L, i)) {
lua_pushstring(L,"incorrect argument to function `average'");
lua_error(L);
}
sum += lua_tonumber(L, i);
}
lua_pushnumber(L, sum/n);
/* first result */
lua_pushnumber(L, sum);
/* second result */
return 2;
/* number of results */
}
lua_checkstack
int lua_checkstack (lua_State *L, int extra);
Garantiza que existen por lo menos posiciones extra disponibles en la pila. La función retorna falso si no puede
aumentar el tamaño de la pila para el tamaño deseado. Esta función nunca comprime la pila; si la pila ya es mayor
que el nuevo tamaño, no tendrá su tamaño modificado.
lua_close
void lua _close (lua _State *L);
Destruye todos los objetos en el estado Lua suministrado (llamando los meta-métodos de recolecta de basura
correspondientes, en caso de haberlos) y libera toda la memoria dinámica usada por ese estado. En varias
plataformas, puede no ser necesario llamar esta función, porque todos los recursos son naturalmente liberados
cuando el programa hospedero muere. Por otro lado, programas que se quedan funcionando por mucho tiempo,
como un daemon o un servidor Web, pueden necesitar liberar estados tan pronto no sean necesarios, para evitar
un crecimiento excesivo del uso de la memoria.
220
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
lua_concat
void lua _concat (lua _State *L, int n);
Concatena los n valores en la parte superior de la pila, los desapila y deja el resultado en la parte superior de la pila.
Si n es 1, el resultado es el único valor en la pila (es decir, la función no hace nada); si n es 0, el resultado es la
cadena de caracteres vacía. La concatenación se realiza de acuerdo con la semántica usual de Lua (ver B.2.6.5).
lua_cpcall
int lua _cpcall (lua _State *L, lua _CFunction func, void *ud);
Llama la función C func en modo protegido. func empieza solamente con un único elemento en su pila, el objeto
userdata ligero conteniendo ud. En caso de errores, lua_cpcall retorna el mismo código de error de
lua_pcall, más el objeto de error en la parte superior de la pila; en caso contrario, retorna cero y no cambia la
pila. Todos los valores retornados por func se descartan.
lua_createtable
void lua _createtable (lua _State *L, int narr, int nrec);
Crea una nueva tabla vacía y la apila en la parte superior de la pila. La nueva tabla posee espacio pre-asignado
para narr elementos array y nrec elementos no array. Esta pre-asignación es útil cuando se sabe exactamente
cuántos elementos va a tener la tabla. En caso contrario se puede usar la función lua_newtable.
lua_dump
int lua_dump (lua_State *L, lua_Writer writer, void *data);
Descarga una función como un trecho de código binario. Recibe una función Lua en la parte superior de la pila y
produce un trecho de código binario que, si se carga nuevamente, da como resultado una función equivalente a
aquella que fue descargada. Para producir partes del trecho de código, lua_dump llama la función writer (ver
lua_Writer) con el argumento fecha suministrado para escribirlos.
El valor retornado es el código de error retornado por la última llamada a la función writer; 0 significa que no
ocurrieron errores.
Esta función no desapila la función Lua de la pila.
lua_equal
int lua_equal (lua_State *L, int index1, int index2);
Retorna 1 si los dos valores en los índices aceptables index1 e index2 son iguales, siguiendo la semántica del
operador == de Lua (es decir, puede llamar meta-métodos). En caso contrario retorna 0. También retorna 0 si
cualquiera de los índices no es válido.
lua_error
int lua _error (lua _State *L);
Genera un error Lua. El mensaje de error (que puede ser de hecho un valor Lua de cualquier tipo) debe estar en la
parte superior de la pila. Esta función hace un desvío largo y por lo tanto nunca retorna. (ver luaL_error ).
© ABNT 2007 - Todos los derechos reservados
221
ABNT NBR 15606-2:2007
lua_gc
int lua_gc (lua_State *L, int what, int data);
Controla el colector de basura
Esa función ejecuta varias tareas, de acuerdo con el valor del parámetro what:

LUA_GCSTOP: interrumpe el colector de basura.

LUA_GCRESTART: reinicia el colector de basura.

LUA_GCCOLLECT: realiza un ciclo completo de Recolecta de basura.

LUA_GCCOUNT: retorna la cantidad de memoria (en Kbytes) que está siendo usada habitualmente
por Lua.

LUA_GCCOUNTB: retorna el resto de la división de la cantidad de bytes de memoria usada
habitualmente por Lua por 1024.

LUA_GCSTEP: realiza un paso incremental de recolecta de basura. El "tamaño" del paso es
controlado por data (valores mayores significan más pasos) de manera no especificada. Si se
desea controlar el tamaño del paso, se debe ajustar de manera experimental el valor de data. La
función retorna 1 si el paso finalizó un ciclo de recolecta de basura.

LUA_GCSETPAUSE: establece data/100 como el nuevo valor para la pausa del colector (ver
B.2.11). La función retorna el valor anterior de la pausa.

LUA_GCSETSTEPMUL: establece data/100 como el nuevo valor para el multiplicador de paso
del colector (ver B.2.11). La función retorna el valor anterior del multiplicador de paso.
lua_getallocf
lua_Alloc lua_getallocf (lua_State *L, void **ud);
Retorna la función de asignación de memoria de un dato estado. Si ud no es NULL, Lua almacena en *ud el
indicador opaco pasado para lua_newstate.
lua_getfenv
void lua_getfenv (lua_State *L, int index);
Coloca en la pila la tabla de ambiente del valor en el índice suministrado.
lua_getfield
void lua _getfield (lua _State *L, int index, const char *k);
Coloca en la pila el valor t[k], donde t es el valor en el índice válido suministrado. Como en Lua, esta función
puede disparar un meta-método para el evento "index" (ver B.2.9).
lua_getglobal
void lua _getglobal (lua _State *L, const char *name);
Coloca en la pila el valor de la global name. Esta función es definida como una macro:
#define lua_getglobal(L, s) lua_getfield(L, LUA_GLOBALSINDEX, s)
222
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
lua_getmetatable
int lua _getmetatable (lua _State *L, int index);
Coloca en la pila la meta-tabla del valor en el índice aceptable suministrado. Si el índice no es válido o si el valor
no posee una meta-tabla, la función retorna 0 y no coloca nada en la pila.
lua_gettable
void lua _gettable (lua _State *L, int index);
Coloca en la pila el valor t[k], donde t es el valor en el índice válido suministrado y k es el valor en la parte superior
de la pila.
Esta función desapila la clave 'k' (colocando el resultado en su lugar). Como en Lua, esta función puede disparar
un meta-método para el evento "index" (ver B.2.9).
lua_gettop
int lua _gettop (lua _State *L);
Retorna el índice del elemento en la parte superior de la pila. Visto que los índices empiezan en 1, este resultado
es igual al número de elementos en la pila (y por lo tanto 0 significa una pila vacía).
lua_insert
void lua_insert (lua_State *L, int index);
Mueve el elemento en la parte superior para el índice válido suministrado, desplazando los elementos arriba de
este índice para abrir espacio. Esta función no puede ser llamada con un pseudo-índice, porque un pseudo-índice
no es una posición real de la pila.
lua_Integer
typedef ptrdiff _t lua _Integer;
El tipo usado por la API Lua para representar valores enteros.
El tipo estándar es un ptrdiff_t, que es comúnmente el mayor tipo entero con señal que la máquina maneja
"cómodamente".
lua_isboolean
int lua _isboolean (lua _State *L, int index);
Retorna 1 si el valor en el índice aceptable suministrado posee tipo booleano y 0 en caso contrario.
© ABNT 2007 - Todos los derechos reservados
223
ABNT NBR 15606-2:2007
lua_iscfunction
int lua _iscfunction (lua _State *L, int index);
Retorna 1 si el valor en el índice aceptable suministrado es una función C y 0 en caso contrario.
lua_isfunction
int lua _isfunction (lua _State *L, int index);
Retorna 1 si el valor en el índice aceptable suministrado es una función (C o Lua) y 0 en caso contrario.
lua_isl ig htuserdata
int lua_islightuserdata (lua_State *L, int index);
Retorna 1 si el valor en el índice aceptable suministrado es un objeto userdata ligero y 0 en caso contrario.
lua_isnil
int lua _isnil (lua _State *L, int index);
Retorna 1 si el valor en el índice aceptable suministrado es nil y 0 en caso contrario.
lua_isnone
int lua _isnone (lua _State *L, int index);
Retorna 1 si el índice aceptable suministrado no es válido (es decir, si se refiere a un elemento fuera del espacio
de la pila corriente) y 0 en caso contrario.
lua_isnoneornil
int lua _isnoneornil (lua _State *L, int index);
Retorna 1 si el índice aceptable suministrado no es válido (es decir, si se refiere a un elemento fuera del espacio
de la pila corriente) o si el valor en este índice es nil y 0 en caso contrario.
lua_isnumber
int lua_isnumber (lua_State *L, int index);
Retorna 1 si el valor en el índice aceptable suministrado es un número o una cadena de caracteres que puede ser
convertida para un número y 0 en caso contrario.
224
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
lua_isstring
int lua _isstring (lua _State *L, int index);
Retorna 1 si el valor en el índice aceptable suministrado es una cadena de caracteres o un número (lo cual
siempre puede ser convertido para una cadena) y 0 en caso contrario.
lua_istable
int lua _istable (lua _State *L, int index);
Retorna 1 si el valor en el índice aceptable suministrado es una tabla y 0 en caso contrario.
lua_isthread
int lua_isthread (lua_State *L, int index);
Retorna 1 si el valor en el índice aceptable suministrado es del tipo thread y 0 en caso contrario.
lua_isuserdata
int lua _isuserdata (lua _State *L, int index);
Retorna 1 si el valor en el índice aceptable suministrado es un objeto userdata (completo o ligero) y 0 en caso
contrario.
lua_lessthan
int lua _lessthan (lua _State *L, int index1, int index2);
Retorna 1 si el valor en el índice aceptable index1 es menor que el valor en el índice aceptable index2, siguiendo
la semántica del operador < de Lua (es decir, puede llamar meta-métodos). En caso contrario retorna 0. También
retorna 0 si cualquiera de los índices no es válido.
lua_load
int lua_load (lua_State *L, lua_Reader reader, void *data, const char *chunkname);
Carga un trecho de código Lua. Si no ocurre ningún error, lua_load apila el trecho compilado como una función
Lua en la parte superior de la pila. En caso contrario, apila un mensaje de error. Los valores de retorno de
lua_load son:

0 --- sin errores;

LUA_ERRSYNTAX --- error de sintaxis durante la pre-compilación.

LUA_ERRMEM --- error de asignación de memoria.
Esta función solamente carga un trecho; no lo ejecuta.
© ABNT 2007 - Todos los derechos reservados
225
ABNT NBR 15606-2:2007
Lua_load automáticamente detecta si el trecho está en forma de texto o en la forma binaria y lo carga de manera
correcta (ver el programa luac).
La función lua_load usa una función reader suministrada por el usuario para leer el trecho de código (ver
lua_Reader). El argumento fecha es un valor opaco pasado para la función de lectura.
El argumento chunkname da un nombre al trecho, el cual se utiliza para mensajes de error y en informaciones de
depuración (ver B.3.9).
lua_newstate
lua _State *lua _newstate (lua _Alloc f, void *ud);
Crea un estado nuevo independiente. Retorna NULL si no puede crear el estado (debido a la falta de memoria). El
argumento f es la función de asignación; Lua hace toda la asignación de memoria para este estado a través de
esta función. El segundo argumento, ud, es un indicador opaco que Lua simplemente pasa para la función de
asignación a cada llamada.
lua_newtable
void lua _newtable (lua _State *L);
Crea una nueva tabla vacía y la coloca en la pila. Es equivalente a lua_createtable(L, 0, 0).
lua_newthread
lua _State *lua _newthread (lua _State *L);
Crea un nuevo objeto del tipo thread, lo coloca en la pila y retorna un indicador para un lua_State que representa
este nuevo flujo de ejecución. El nuevo flujo de ejecución retornado por esta función comparte todos los objetos
globales (tales como tablas) con el estado original, pero posee una pila de ejecución independiente.
No hay una función explícita para terminar o destruir un flujo de ejecución. Objetos del tipo thread están sujetos a
la Recolecta de basura, así como cualquier otro objeto de Lua.
lua_newuserdata
void *lua _newuserdata (lua _State *L, size _t size);
Esta función asigna un nuevo bloque de memoria con el tamaño suministrado, coloca en la pila un nuevo objeto
userdata completo con la dirección del bloque y retorna esta dirección.
Objetos userdata representan valores C en Lua. Un userdata completo representa un bloque de memoria. Es un
objeto (así como una tabla): Se debe crear, puede tener su propia meta-tabla y se puede detectar cuando él está
siendo colectado. Un objeto userdata completo solamente es igual al mismo (usando la igualdad primitiva, sin el
uso de meta-métodos).
Cuando Lua colecta un userdata completo con un meta-método gc, Lua llama el meta-método y marca el userdata
como finalizado. Cuando este userdata es colectado nuevamente entonces Lua libera su memoria
correspondiente.
226
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
lua_next
int lua _next (lua _State *L, int index);
Desapila una clave de la pila y apila un par clave-valor de la tabla en el índice suministrado (el "próximo" par
después de la clave suministrada). Si no hay más elementos en la tabla, entonces lua_next retorna 0 (y no apila
nada).
Un recorrido típico se parece con éste:
/* table is in the stack at index `t' */
lua_pushnil(L); /* first key */
while (lua_next(L, t) != 0) {
/* `key' is at index -2 and `value' at index -1 */
printf("%s - %s\n",
lua_typename(L, lua_type(L, -2)), lua_typename(L, lua_type(L, -1)));
lua_pop(L, 1); /* removes `value'; keeps `key' for next iteration */
}
Durante el recorrido de una tabla, no llamar a lua_tolstring directamente sobre una clave, a menos que se sepa
que la clave es realmente una cadena de caracteres. Recordar que lua_tolstring altera el valor en el índice
suministrado; esto confunde la próxima llamada para lua_next.
lua_Number
typedef double lua_Number;
El tipo de números en Lua. Por estándar, es doble, pero se puede alterar en luaconf.h.
A través del archivo de configuración es posible alterar Lua para operar con otro tipo para números (por ejemplo,
float o long).
lua_objlen
size _t lua _objlen (lua _State *L, int index);
Retorna el "tamaño" del valor en el índice aceptable suministrado: Para cadenas de caracteres, éste es el tamaño
de la cadena; para tablas, éste es el resultado del operador de tamaño ('#'); para objetos del tipo userdata, éste es
el tamaño del bloque de memoria asignado para el userdata; para otros valores, el tamaño es 0.
lua_pcall
lua_pcall (lua_State *L, int nargs, int nresults, int errfunc);
Llama una función en modo protegido.
Tanto nargs cuanto nresults poseen el mismo significado que poseían en lua_call. Si no hay errores durante la
llamada, lua_pcall se comporta exactamente como lua_call. Sin embargo, si hay cualquier error, lua_pcall lo
captura, coloca un único valor en la pila (el mensaje de error) y retorna un código de error. Como lua_call,
lua_pcall siempre remueve la función y sus argumentos de la pila.
Si errfunc es 0, entonces el mensaje de error retornado en la pila es exactamente el mensaje de error original. En
caso contrario, errfunc es el índice en la pila de una función de tratamiento de errores. (En la implementación
actual, este índice no puede ser un pseudo-índice.) En el caso de errores de tiempo de ejecución, esta función
será llamada con el mensaje de error y su valor de retorno será el mensaje retornado en la pila por lua_pcall.
© ABNT 2007 - Todos los derechos reservados
227
ABNT NBR 15606-2:2007
Típicamente, la función de tratamiento de errores se utiliza para agregar más información de depuración al
mensaje de error, como un trazo de la pila. Tal información no se puede obtener después del retorno de lua_pcall,
pues en este punto la pila ya fue deshecha.
La función lua_pcall retorna 0 en caso de éxito o uno de los siguientes códigos de error (definidos en lua.h):

LUA_ERRRUN: un error en tiempo de ejecución.

LUA_ERRMEM: error de asignación de memoria. Para tales errores, Lua no llama la función de
tratamiento de errores.

LUA_ERRERR: error durante la ejecución de la función de tratamiento de errores.
lua_pop
void lua_pop (lua_State *L, int n);
Desapila n elementos de la pila.
lua_pushboolean
void lua_pushboolean (lua_State *L, int b);
Apila un valor booleano con valor b en la pila.
lua_pushcclosure
void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n);
Apila un nuevo cierre C en la pila.
Cuando una función C es creada, es posible asociar algunos valores a la misma, creando entonces un cierre C
(ver B.3.5); estos valores son entonces accesibles para la función siempre que es llamada. Para asociar valores
con una función C, primero estos valores se deben colocar en la pila (cuando hay múltiples valores, el primer valor
es apilado primero). Entonces lua_pushcclosure es llamada para crear y colocar la función C en la pila, con el
argumento n informando cuántos valores deben ser asociados con la función. Lua_pushcclosure también desapila
estos valores de la pila.
lua_pushcfunction
void lua _pushcfunction (lua _State *L, lua _CFunction f);
Apila una función C en la pila. Esta función recibe un indicador para una función C y coloca en la pila un valor Lua
del tipo function que, cuando llamado, invoca la función C correspondiente.
Cualquier función para ser registrada en Lua debe seguir el protocolo correcto para recibir sus parámetros y
retornar sus resultados (ver lua_CFunction).
lua_pushcfunction es definida como una macro:
#define lua_pushcfunction(L,f) lua_pushcclosure(L,f,0)
228
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
lua_pushfstring
const char *lua_pushfstring (lua_State *L, const char *fmt, ...);
Coloca en la pila una cadena de caracteres formateada y retorna un indicador para esta cadena. Es análogo a la
función C sprintf, pero posee algunas diferencias importantes:

no es necesario asignar espacio para el resultado: El resultado es una cadena de caracteres y Lua se
encarga de la asignación de memoria (y de la desasignación, a través de la Recolecta de basura);

los especificadores de conversión son bastante limitados. No hay flags, tamaños o precisiones. Los
especificadores de conversión pueden ser solamente '%%' (inserta un '%' en la cadena), '%s' (inserta
una cadena terminada por cero, sin restricciones de tamaño), '%f' (inserta un lua_Number), '%p'
(inserta un indicador como un número hexadecimal), '%d' (inserta un int) y '%c' (inserta un int como un
carácter).
lua_pushinteger
void lua_pushinteger (lua_State *L, lua_Integer n);
Coloca un número con valor n en la pila.
lua_push lightuserdata
void lua_pushlightuserdata (lua_State *L, void *p);
Coloca un objeto del tipo userdata ligero en la pila.
Un userdata representa valores de C en Lua. Un userdata ligero representa un indicador. Es un valor (como un
número): No se puede crear, no posee una meta-tabla individual y no es colectado (ya que nunca fue creado). Un
userdata ligero es igual a "cualquier" userdata ligero con la misma dirección C.
lua_pushlstring
void lua _pushlstring (lua _State *L, const char *s, size _t len);
Apila la cadena de caracteres indicada por s con tamaño len en la pila. Lua crea (o reutiliza) una copia interna de
la cadena suministrada, de tal forma que la memoria indicada por s puede ser liberada o reutilizada
inmediatamente después del retorno de la función. La cadena puede contener ceros dentro de la misma.
lua_pushnil
void lua_pushnil (lua_State *L);
Coloca un valor nil en la pila.
lua_pushnumber
void lua_pushnumber (lua_State *L, lua_Number n);
Coloca un número con valor n en la pila.
© ABNT 2007 - Todos los derechos reservados
229
ABNT NBR 15606-2:2007
lua_pushstring
void lua _pushstring (lua _State *L, const char *s);
Apila la cadena terminada por cero indicada por s en la pila. Lua crea (o reutiliza) una copia interna de la cadena
suministrada, de tal forma que la memoria indicada por s puede ser liberada o reutilizada inmediatamente
después del retorno de la función. La cadena no puede contener ceros dentro de la misma; se presupone que la
cadena termina en el primer cero.
lua_pushthread
void lua _pushthread (lua _State *L);
Apila el flujo de ejecución representado por L en la pila. Retorna 1 si este flujo de ejecución es el flujo de
ejecución principal de su estado.
lua_pushvalue
void lua_pushvalue (lua_State *L, int index);
Apila una copia del elemento en el índice válido suministrado en la pila.
lua_pushvfstring
const char *lua_pushvfstring (lua_State *L, const char *fmt,
va_list argp);
Equivalente a lua_pushfstring, excepto que esta función recibe una va_list en vez de un número variable de
argumentos.
lua_rawequal
int lua _rawequal (lua _State *L, int index1, int index2);
Retorna 1 si los dos valores en los índices aceptables index1 e index2 son iguales primitivamente (es decir, sin
hacer llamadas meta-métodos). En caso contrario retorna 0. También retorna 0 si cualquiera de los índices no es
válido.
lua_rawget
void lua _rawget (lua _State *L, int index);
Análogo a lua_gettable, pero hace un acceso primitivo (o sea, sin usar meta-métodos).
230
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
lua_rawgeti
void lua _rawgeti (lua _State *L, int index, int n);
Coloca en la pila el valor t[n], donde t es el valor en el índice válido suministrado. El acceso es primitivo; es decir,
no invoca meta-métodos.
lua_rawset
void lua _rawset (lua _State *L, int index);
Análogo a lua_settable, pero hace una atribución primitiva (es decir, sin usar meta-métodos).
lua_rawseti
void lua _rawseti (lua _State *L, int index, int n);
Hace el equivalente a t[n] = v, donde t es el valor en el índice válido suministrado y v es el valor en la parte
superior de la pila. Esta función desapila el valor de la pila. La atribución es primitiva; es decir, no invoca metamétodos.
lua_Reader
typedef const char * (*lua_Reader)
(lua _State *L, void *data, size _t *size);
La función de lectura usada por lua_load. Siempre que necesita otro pedazo del trecho, lua_load llama la función
de lectura, pasando junto su parámetro fecha. La función de lectura debe retornar un indicador para un bloque de
memoria con un nuevo pedazo del trecho y atribuir a *size el tamaño del bloque. El bloque debe existir hasta que
la función de lectura sea llamada nuevamente. Para señalizar el fin del trecho, la función de lectura debe retornar
NULL. La función de lectura puede retornar pedazos de cualquier tamaño mayor que cero.
lua_register
void lua _register (lua _State *L, const char *name, lua _CFunction f);
Establece la función C f como el nuevo valor de la global name. Esta función es definida como una macro:
#define lua_register(L,n,f) (lua_pushcfunction(L, f), lua_setglobal(L, n))
lua_remove
void lua _remove (lua _State *L, int index);
Remueve el elemento en el índice válido suministrado, desplazando hacia abajo los elementos arriba de este
índice para rellenar el hueco. Esta función no puede ser llamada con un pseudo-índice, ya que el pseudo-índice
no es una posición real de la pila.
© ABNT 2007 - Todos los derechos reservados
231
ABNT NBR 15606-2:2007
lua_replace
void lua _replace (lua _State *L, int index);
Mueve el elemento de la parte superior para la posición suministrada (y lo desapila), sin desplazar cualquier
elemento (reemplazando por lo tanto el valor en la posición suministrada).
lua_resume
int lua _resume (lua _State *L, int narg);
Inicia y recomienza una co-rutina en un flujo de ejecución.
Para iniciar una co-rutina, se debe primero crear un nuevo flujo de ejecución (ver lua_newthread); a continuación
se debe colocar en su pila la función principal más cualesquiera argumentos; por último es llamado lua_resume,
con narg siendo el número de argumentos. Esta llamada retorna cuando la co-rutina suspende o finaliza su
ejecución. Cuando retorna, la pila contiene todos los valores pasados para lua_yield o todos los valores
retornados por el cuerpo de la función. Lua_resume retorna LUA_YIELD si la co-rutina cede, 0 si la co-rutina
termina su ejecución sin errores o un código de error en el caso de ocurrir errores (ver lua_pcall). En el caso de
errores, la pila no es deshecha, de forma que se puede usar la API de depuración sobre la misma. El mensaje de
error está en la parte superior de la pila. Para reiniciar una co-rutina, se debe colocar en la pila de la misma
solamente los valores a ser pasados como resultados de yield y entonces llamar a lua_resume.
lua_setallocf
void lua _setallocf (lua _State *L, lua _Alloc f, void *ud);
Cambia la función de asignación de un dato estado para f con objeto userdata ud.
lua_setfenv
int lua _setfenv (lua _State *L, int index);
Desapila una tabla de la pila y establece esta tabla como siendo el nuevo ambiente para el valor en el índice
suministrado. Si el valor en el índice suministrado no es una función, ni un flujo de ejecución ni un objeto userdata,
lua_setfenv retorna 0. En caso contrario, la función retorna 1.
lua_setfield
void lua _setfield (lua _State *L, int index, const char *k);
Hace el equivalente a t[k] = v, donde t es el valor en el índice válido suministrado y v es el valor en la parte
superior de la pila.
Esta función desapila el valor de la pila. Como en Lua, esta función puede disparar un meta-método para el evento
"index" (ver B.2.9).
232
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
lua_setg lobal
void lua_setglobal (lua_State *L, const char *name);
Desapila un valor de la pila y lo establece como el nuevo valor de la global name. Esta función es definida como
una macro:
#define lua _setglobal(L,s)
lua _setfield(L, LUA _GLOBALSINDEX, s)
lua_setmetatable
int lua _setmetatable (lua _State *L, int index);
Desapila una tabla de la pila y establece esta tabla como la noticia meta-tabla para el valor en el índice aceptable
suministrado.
lua_settable
void lua_settable (lua_State *L, int index);
Hace el equivalente a t[k] = v, donde t es el valor en el índice válido suministrado, v es el valor en la parte superior
de la pila y k es el valor inmediato abajo de la parte superior.
Esta función desapila tanto la clave como el valor de la pila. De la misma forma que en Lua, esta función puede
disparar un meta-método para el evento "newindex" (ver B.2.9).
lua_settop
void lua _settop (lua _State *L, int index);
Acepta cualquier índice aceptable, o 0, y establece este índice como la parte superior de la pila. Si el nuevo tope
es mayor que el antiguo, entonces los nuevos elementos son rellenados con nil. Si index es 0, entonces todos los
elementos de la pila son removidos.
lua_State
typedef struct lua _State lua _State;
Estructura opaca que guarda el estado completo de un interpretador Lua. La biblioteca de Lua es totalmente
reentrante: No existen variables globales. Toda la información sobre un estado es mantenida en esta estructura.
Un indicador para éste estado debe ser pasado como el primer argumento para toda función en la biblioteca,
excepto para lua_newstate, que crea un nuevo estado Lua desde el cero.
lua_status
int lua_status (lua_State *L); Retorna el estatus del flujo de ejecución L.
El estatus puede ser 0 para un flujo de ejecución normal, un código de error si el flujo de ejecución termina su
ejecución con un error o LUA_YIELD si el flujo de ejecución estuviera suspendido.
© ABNT 2007 - Todos los derechos reservados
233
ABNT NBR 15606-2:2007
lua_toboolean
int lua _toboolean (lua _State *L, int index);
Convierte un valor Lua en el índice aceptable suministrado para un valor booleano C (0 o 1). Como todos los tests
en Lua, lua_toboolean retorna 1 para cualquier valor Lua diferente de false y de nil; en caso contrario la función
retorna 0. La función también retorna 0 cuando llamada con un índice no válido (si se desea aceptar solamente
valores booleanos de hecho, usar lua_isboolean para testar el tipo del valor).
lua_tocfunction
lua _CFunction lua _tocfunction (lua _State *L, int index);
Convierte un valor en el índice aceptable suministrado para una función C. Tal valor debe ser una función C; en
caso contrario, retorna NULL.
lua_tointeger
lua _Integer lua _tointeger (lua _State *L, int idx);
Convierte el valor Lua en el índice aceptable suministrado para el tipo completo con señal lua_Integer. El valor
Lua debe ser un número o una cadena que puede ser convertida para un número (ver B.2.3.2); en caso contrario,
lua_tointeger retorna 0.
Si el número no es un entero, es truncado de alguna manera no especificada.
lua_tolstring
const char *lua _tolstring (lua _State *L, int index, size _t *len);
Convierte el valor Lua en el índice aceptable suministrado para una cadena C. Si len no es NULL, la función
también establece *len como el tamaño de la cadena. El valor Lua debe ser una cadena de caracteres o un
número; en caso contrario, la función retorna NULL. Si el valor es un número, entonces lua_tolstring también
cambia el valor real en la pila para una cadena. (Este cambio confunde lua_next cuando lua_tolstring se aplica a
claves durante un recorrido de tabla.)
lua_tolstring retorna un indicador totalmente alineado para una cadena de caracteres dentro del estado Lua. Esta
cadena siempre tiene un cero ('\0') después de su último carácter (como en C), pero puede contener otros ceros
en su interior. Visto que Lua posee Recolecta de basura, no hay garantía de que el indicador retornado por
lua_tolstring será válido después de ser removido de la pila el valor correspondiente.
lua_tonumber
lua _Number lua _tonumber (lua _State *L, int index);
Convierte el valor Lua en el índice aceptable suministrado para el tipo C lua_Number (ver lua_Number). El valor
Lua debe ser un número o una cadena que puede ser convertida para un número (ver B.2.3.2); en caso contrario,
lua_tonumber retorna 0.
234
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
lua_topointer
const void *lua _topointer (lua _State *L, int index);
Convierte el valor en el índice aceptable suministrado para un indicador C genérico (void*). El valor puede ser un
objeto userdata, una tabla, un flujo de ejecución o una función; objetos diferentes van a suministrar indicadores
diferentes. No hay manera de convertir el indicador de vuelta a su valor original.
Típicamente esta función se utiliza solamente para informaciones de depuración.
lua_tostring
const char *lua_tostring (lua _State *L, int index);
Equivalente a lua_tolstring con len siendo igual a NULL.
lua_tothread
lua_State *lua_tothread (lua_State *L, int index);
Convierte el valor en el índice aceptable suministrado para un flujo de ejecución (representado como lua_State*).
Este valor debe ser un flujo de ejecución; en caso contrario, la función retorna NULL.
lua_touserdata
void *lua _touserdata (lua _State *L, int index);
Si el valor en el índice aceptable suministrado es un objeto userdata completo, la función retorna la dirección de su
bloque. Si el valor es un userdata ligero, la función retorna su indicador. En caso contrario, retorna NULL.
lua_type
int lua _type (lua _State *L, int index);
Retorna el tipo del valor en el índice aceptable suministrado o LUA_TNONE para un índice no válido (es decir, un
índice para una posición de la pila "vacía"). Los tipos retornados por lua_type se codifican por las siguientes
constantes definidas en lua.h: LUA_TNIL, LUA_TNUMBER, LUA_TBOOLEAN, LUA_TSTRING, LUA_TTABLE,
LUA_TFUNCTION, LUA_TUSERDATA, LUA_TTHREAD y LUA_TLIGHTUSERDATA.
lua_typename
const char *lua _typename (lua _State *L, int tp);
Retorna el nombre del tipo codificado por el valor tp, que debe ser uno de los valores retornados por lua_type.
© ABNT 2007 - Todos los derechos reservados
235
ABNT NBR 15606-2:2007
lua_Writer
typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud);
El tipo de la función de escritura usada por lua_dump. Siempre que la misma produce otro pedazo de trecho,
lua_dump llama la función de grabación, pasando junto el buffer a ser escrito (p), su tamaño (sz) y el parámetro
fecha suministrado para lua_dump.
La función de grabación retorna un código de error: 0 significa ningún error; cualquier otro valor significa un error y
hace lua_dump parar de llamar la función de grabación.
lua_xmove
void lua_xmove (lua_State *from, lua_State *to, int n);
Cambia valores entre diferentes flujos de ejecución del mismo estado global. Esta función desapila n valores de la
pila from y los apila en la pila to.
lua_yield
int lua _yield (lua _State *L, int nresults);
Cede una co-rutina.
Esta función solamente debe ser llamada como la expresión de retorno de una función C, de la siguiente forma:
return lua _yield (L, nresults);
Cuando una función C llama a lua_yield de esta manera, la co-rutina siendo ejecutada suspende su ejecución y
la llamada a lua_resume que inició esta co-rutina retorna. El parámetro results es el número de valores de la pila
que son pasados como resultados para lua_resume.
B.3.9 Interfaz de depuración
Lua no posee mecanismos de depuración pre-definidos. En vez de eso, ofrece una interfaz especial por medio de
funciones y ganchos. Esta interfaz permite la construcción de diferentes tipos de depuradores, medidores y otras
herramientas que necesitan "información interna" del interpretador.
lua_Debug
typedef struct lua_Debug {
int event;
const char *name;
/* (n) */
const char *namewhat;
/* (n) */
const char *what;
/* (S) */
const char *source;
/* (S) */
int currentline;
/* (l) */
int nups;
/* (u) number of upvalues */
int linedefined;
/* (S) */
int lastlinedefined;
/* (S) */
char short_src[LUA_IDSIZE]; /* (S) */
/* private part */
...
} lua_Debug;
236
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Una estructura usada para guardar diferentes pedazos de información sobre una función activa. Lua_getstack
rellena solamente la parte privada de esta estructura, para uso posterior. Para rellenar los otros campos de
lua_Debug con información útil, llamar a lua_getinfo.
Los campos de lua_Debug poseen el siguiente significado:

source: si la función fue definida en una cadena de caracteres, entonces source es esa cadena. Si la
función fue definida en un archivo, entonces source empieza con un '@' seguido por el nombre del
archivo;

short_src: una versión "adecuada" para impresión de source, para ser usada en mensajes de error;

linedefined: el número de la línea donde la definición de la función empieza;

lastlinedefined: el número de la línea donde la definición de la función termina;

what: la cadena "Lua" si la función es una función Lua, "C" si es una función C, "main" si es la parte
principal de un trecho y "tail" si fue una función que hizo una recursión final. En el último caso, Lua no
posee ninguna otra información sobre la función;

currentline: la línea corriente donde la función suministrada está siendo ejecutada. Cuando ninguna
información sobre la línea está disponible, se atribuye -1 a currentline;

name: un nombre razonable para la función suministrada. Dado que funciones en Lua son valores de
primera clase, las mismas no poseen un nombre fijo: Algunas funciones pueden ser el valor de
múltiples variables globales, mientras otras pueden estar almacenadas solamente en un campo de una
tabla. La función lua_getinfo verifica cómo la función fue llamada para encontrar un nombre adecuado.
Si no es posible encontrar un nombre, entonces se atribuye NULL a name;

namewhat: explica el campo name. El valor de namewhat puede ser "global", "local", "method", "field",
"upvalue" o "" (la cadena vacía), de acuerdo con cómo la función fue llamada (Lua usa la cadena vacía
cuando ninguna otra opción parece aplicarse);

nups: el número de upvalues de la función.
lua_gethook
lua_Hook lua_gethook (lua_State *L);
Retorna la función gancho actual.
lua_gethookcount
int lua_gethookcount (lua_State *L);
Retorna el conteo de gancho actual.
lua_gethookmask
Int lua_gethookmask (lua_State *L);
Retorna la máscara de gancho actual.
© ABNT 2007 - Todos los derechos reservados
237
ABNT NBR 15606-2:2007
lua_getinfo
int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);
Retorna información sobre una función específica o una invocación de función específica.
Para obtener información sobre una invocación de función, el parámetro ar debe ser un registro de activación
válido que fue rellenado por una llamada anterior a lua_getstack o fue suministrado como argumento para un
gancho (ver lua_Hook).
Para obtener información sobre una función se debe colocar en la pila e iniciar la cadena what con el carácter '>'.
(En este caso, lua_getinfo desapila la función en la parte superior de la pila.) Por ejemplo, para saber en cuál
línea una función f fue definida, se puede escribir el siguiente código:
lua _Debug ar;
lua _getfield(L, LUA _GLOBALSINDEX, "f"); /* get global `f' */
lua _getinfo(L, ">S", &ar);
printf("%d\n", ar.linedefined);
Cada carácter en la cadena what selecciona algunos campos de la estructura ar para ser rellenados o un valor a
ser apilado en la pila:

'n': rellena los campos name y namewhat;

'S': rellena los campos source, short_src, linedefined, lastlinedefined y what;

'l': rellena el campo currentline;

'u': rellena el campo nups;

'f': coloca en la pila la función que está ejecutando en el nivel suministrado;

'L': coloca en la pila una tabla cuyos índices son el número de las líneas que son válidas en la función
(una línea válida es una línea con algún código asociado, es decir, una línea donde se puede colocar
un punto de parada. Líneas no válidas incluyen líneas vacías y comentarios).
Esta función retorna 0 en caso de error (por ejemplo, en el caso de una opción inválida en what).
lua_getlocal
const char *lua_getlocal (lua_State *L, const lua_Debug *aire, int n);
Obtiene información sobre una variable local de un registro de activación suministrado. El parámetro ar debe ser
un registro de activación válido que fue rellenado por una llamada anterior a lua_getstack o fue suministrado como
un argumento para un gancho (ver lua_Hook). El índice n selecciona cuál variable local inspeccionar (1 es el
primer parámetro o variable local activa y así sucesivamente, hasta la última variable local activa). lua_getlocal
coloca el valor de la variable en la pila y retorna el nombre de la misma.
Nombres de variables empezando con '(' (abre paréntesis) representan variables internas (variables de control de
lazos, temporales y funciones C locales.).
Retorna NULL (y no apila nada) cuando el índice es mayor que el número de variables locales activas.
lua_getstack
int lua_getstack (lua_State *L, int level, lua_Debug *aire);
Obtiene información sobre la pila de tiempo de ejecución del interpretador.
238
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Esta función rellena partes de una estructura lua_Debug con una identificación del registro de activación de la
función ejecutando en un dado nivel. El nivel 0 es la función ejecutando actualmente, al tiempo que el nivel n+1 es
la función que llamó el nivel N. Cuando no hay errores, lua_getstack retorna 1; cuando es llamada con un nivel
mayor que la profundidad de la pila, la función retorna 0.
lua_getupvalue
const char *lua _getupvalue (lua _State *L, int funcindex, int n);
Obtiene información sobre un upvalue de un cierre (para funciones Lua, upvalues son variables locales externas
que la función usa y que son conceptualmente incluidas en el cierre de la misma). lua_getupvalue obtiene el
índice n de un upvalue, coloca el valor del upvalue en la pila y retorna su nombre. Funcindex apunta para el cierre
en la pila (upvalues no poseen un orden específico, ya que son activos a lo largo de toda la función. Entonces,
son numerados en un orden arbitrario).
Retorna NULL (y no apila nada) cuando el índice es mayor que el número de upvalues. Para funciones C, esta
función usa la cadena vacía "" como un nombre para todo el upvalues.
lua_Hook
typedef void (*lua_Hook) (lua_State *L, lua_Debug *aire);
El tipo para funciones de gancho de depuración.
Siempre que un gancho es llamado, se atribuye al campo event de su argumento ar el evento específico que
disparó el gancho. Lua identifica estos eventos con las siguientes constantes: LUA_HOOKCALL, LUA_HOOKRET,
LUA_HOOKTAILRET, LUA_HOOKLINE y LUA_HOOKCOUNT. Además de ello, para eventos de línea, el campo
currentline también es atribuido. Para obtener el valor de cualquier campo en ar, el gancho debe llamar a
lua_getinfo. Para eventos de retorno, event puede ser LUA_HOOKRET, el valor normal, o LUA_HOOKTAILRET.
En el último caso, Lua está simulando un retorno de una función que hizo una recursión final; en este caso, es
inútil llamar a lua_getinfo.
Mientras Lua está ejecutando un gancho, deshabilita otras llamadas ganchos. Por lo tanto, si un gancho llama a
Lua de vuelta para ejecutar una función o un trecho, esta ejecución ocurre sin cualesquiera llamadas a ganchos.
lua_sethook
int lua_sethook (lua_State *L, lua_Hook func, int mask, int count);
Establece la función de gancho de depuración.
El argumento f es una función de gancho. Mask especifica sobre para cuáles eventos el gancho será llamado: es
formado por una conjunción bit-a-bit de las constantes LUA_MASKCALL, LUA_MASKRET, LUA_MASKLINE y
LUA_MASKCOUNT. el argumento count solamente tiene significado cuando la máscara incluye
LUA_MASKCOUNT. Para cada evento, el gancho es llamado como explicado a continuación:

el gancho de llamada (CALL): es llamado cuando el interpretador llama una función. El gancho es
llamado después de Lua entrar en la nueva función, antes de la función recibir sus argumentos;

el gancho de retorno (RET): es llamado cuando el interpretador retorna de una función. El gancho es
llamado después de Lua salir de la función. No se tiene acceso a los valores a ser retornados por la
función;

el gancho de línea (LINE): es llamado cuando el interpretador está por iniciar la ejecución de una nueva
línea de código o cuando vuelve atrás en el código (aunque sea a la misma línea) (este evento solamente
ocurre cuando Lua está ejecutando una función Lua;
© ABNT 2007 - Todos los derechos reservados
239
ABNT NBR 15606-2:2007

el gancho del lua (COUNT): es llamado después del interpretador ejecutar cada una de las instrucciones
count (este evento solamente ocurre cuando Lua está ejecutando una función Lua).
Un gancho es desactivado atribuyéndose cero a mask.
lua_setlocal
const char *lua _setlocal (lua _State *L, const lua _Debug *ar, int n);
Establece el valor de una variable local de un registro de activación suministrado. Los parámetros ar y n son como
en lua_getlocal (ver lua_getlocal). lua_setlocal atribuye el valor en la parte superior de la pila a la variable y
retorna el nombre de la misma. La función también desapila el valor de la pila.
Retorna NULL (y no desapila nada) cuando el índice es mayor que el número de variables locales activas.
lua_setupvalue
const char *lua _setupvalue (lua _State *L, int funcindex, int n);
Establece el valor de un upvalue de un cierre. La función atribuye el valor en la parte superior de la pila al upvalue
y retorna su nombre. La misma también desapila el valor de la pila. Los parámetros funcindex y n son como en la
función lua_getupvalue (ver lua_getup value).
Retorna NULL (y no desapila nada) cuando el índice es mayor que el número de upvalues.
B.4 Biblioteca auxiliar
B.4.1 Conceptos básicos
La biblioteca auxiliar suministra varias funciones convenientes para la interfaz de C con Lua. Mientras la API
básica suministra las funciones primitivas para todas las interacciones entre C y Lua, la biblioteca auxiliar
suministra funciones del más alto nivel para algunas tareas comunes.
Todas las funciones de la biblioteca auxiliar son definidas en el archivo de encabezamiento lauxlib.h y poseen un
código luaL_.
Todas las funciones en la biblioteca auxiliar son construidas sobre la API básica y por lo tanto las mismas no
ofrecen nada que no se pueda hacer con la API básica.
Varias funciones en la biblioteca auxiliar son usadas para verificar argumentos de funciones C. El nombre de las
mismas siempre es luaL_check* o luaL_opt*. Todas esas funciones disparan un error si la verificación no se
realiza. Visto que el mensaje de error es formateado para argumentos (por ejemplo, "bad argument #1"), no se
debe usar estas funciones para otros valores de la pila.
B.4.2 Funciones y tipos
Todas las funciones y tipos de la biblioteca auxiliar son listadas a continuación en orden alfabético.
luaL_addchar
void luaL_addchar (luaL_Buffer B, char c);
Agrega el carácter c al buffer B (ver luaL_Buffer).
240
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
luaL_addlstring
void luaL _addlstring (luaL _Buffer *B, const char *s, size _t l);
Agrega la cadena de caracteres indicada por s con tamaño l al buffer B (ver luaL_Buffer). La cadena puede
contener ceros en su interior.
luaL_addsize
void luaL _addsize (luaL _Buffer B, size _t n);
Agrega al buffer B (ver luaL_Buffer) una cadena de largo n copiada anteriormente para el área de buffer (ver
luaL_prepbuffer).
luaL_addstring
void luaL _addstring (luaL _Buffer *B, const char *s);
Agrega la cadena terminada por 0 indicada por s al buffer B (ver luaL_Buffer). La cadena no puede contener
ceros dentro de la misma.
luaL_addvalue
void luaL _addvalue (luaL _Buffer *B);
Agrega el valor en la parte superior de la pila al buffer B (ver luaL_Buffer). Desapila el valor.
Ésta es la única función sobre buffers de cadenas que debe ser llamada con un elemento extra en la pila, que es
el valor a ser agregado al buffer.
lua L_arg check
void luaL _argcheck (lua _State *L, int cond, int numarg, const char *extramsg);
Verifica si cond es verdadera. Si no, dispara un error con el siguiente mensaje, donde func es recobrada desde la
pila de llamada:
bad argument #<narg> to <func> (<extramsg>)
© ABNT 2007 - Todos los derechos reservados
241
ABNT NBR 15606-2:2007
luaL_argerror
int luaL_argerror (lua_State *L, int numarg, const char *extramsg);
Dispara un error con el siguiente mensaje, donde func es recobrada desde la pila de llamada:
bad argument #<narg> to <func> (<extramsg>)
Esta función nunca retorna, pero es idiomático usarla en funciones C como return luaL_argerror(args).
luaL_Buffer
typedef struct luaL _Buffer luaL _Buffer;
El tipo para un buffer de cadena de caracteres.
Un buffer de cadena permite al código C construir cadenas Lua poco a poco. Su estándar de uso es el siguiente:

primero se declara una variable b del tipo luaL_Buffer;

a continuación se inicializa la variable con una llamada luaL_buffinit(L, &b);

después se agregan pedazos de la cadena al buffer llamando a cualquiera de las funciones luaL_add*;

se termina haciendo una llamada luaL_pushresult(&b). Esta llamada deja la cadena final en la parte
superior de la pila.
Durante esa operación normal, un buffer de cadena usa un número variable de posiciones de la pila. Entonces,
cuando se está usando un buffer, no se debe asumir que sabe dónde está la parte superior de la pila. Se puede
usar la pila entre llamadas sucesivas a las operaciones de buffer desde que este uso sea equilibrado; es decir,
cuando es llamada una operación de buffer, la pila está en el mismo nivel en el que estaba inmediatamente
después de la operación de buffer anterior (la única excepción a esta regla es luaL_addvalue). Después de llamar
a luaL_pushresult, la pila está de vuelta a su nivel cuando el buffer fue inicializado, más la cadena final en su tope.
luaL_buffinit
void luaL _buffinit (lua _State *L, luaL _Buffer *B);
Inicializa un buffer B. Esta función no asigna cualquier espacio; el buffer debe ser declarado como una variable
(ver luaL_Buffer).
luaL_callmeta
int luaL_callmeta (lua_State *L, int obj, const char *met);
Llama un meta-método.
Si el objeto en el índice obj posee una meta-tabla y esta meta-tabla posee un campo y, esta función llama ese
campo y pasa el objeto como su único argumento. En este caso esta función retorna 1 y coloca en la pila el valor
retornado por la llamada. Si no hay meta-tabla o meta-método, esta función retorna 0 (sin apilar cualquier valor en
la pila).
242
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
luaL_checkany
void luaL _checkany (lua _State *L, int narg);
Verifica si la función tiene un argumento de cualquier tipo (incluyendo nil) en la posición narg.
luaL_checkint
int luaL _checkint (lua _State *L, int narg);
Verifica si el argumento narg de la función es un número y retorna este número convertido para un int.
luaL_checkinteger
lua _Integer luaL _checkinteger (lua _State *L, int narg);
Verifica si el argumento narg de la función es un número y retorna este número convertido para un lua_Integer.
luaL_checklong
long luaL_checklong (lua_State *L, int narg);
Verifica si el argumento narg de la función es un número y retorna este número convertido para un long.
luaL_checklstring
const char *luaL _checklstring (lua _State *L, int narg, size _t *l);
Verifica si el argumento narg de la función es una cadena y retorna esta cadena; si l no es NULL rellena *l con el
tamaño de la cadena.
luaL_checknumber
lua_Number luaL_checknumber (lua_State *L, int narg);
Verifica si el argumento narg de la función es un número y retorna este número.
luaL_checkoption
int luaL_checkoption
*const lst[]);
(lua_State
*L,
int
narg,
const
char
*def,
const
char
Verifica si el argumento narg de la función es una cadena y busca por esta cadena en el array lst (lo cual debe ser
terminado por NULL). Retorna el índice en el array donde la cadena fue encontrada. Dispara un error si el
argumento no es una cadena o si la cadena no pudo ser encontrada.
© ABNT 2007 - Todos los derechos reservados
243
ABNT NBR 15606-2:2007
Si def no es NULL, la función usa def como un valor estándar cuando no hay argumento narg o si este argumento
es nil.
Ésta es una función útil para mapear cadenas para enumeraciones de C (la convención usual en bibliotecas Lua
es usar cadenas en vez de números para seleccionar opciones).
luaL_checkstack
void luaL _checkstack (lua _State *L, int sz, const char *msg);
Aumenta el tamaño de la pila para Top + sz elementos, disparando un error si la pila no puede ser aumentada
para aquel tamaño. Msg es un texto adicional a ser colocado en el mensaje de error.
luaL_checkstring
const char *luaL_checkstring (lua_State *L, int narg);
Verifica si el argumento narg de la función es una cadena y retorna esta cadena.
luaL_checktype
void luaL _checktype (lua _State *L, int narg, int t);
Verifica si el argumento narg de la función tiene tipo T. Ver lua_type para la codificación de tipos para t.
luaL_checkudata
void *luaL _checkudata (lua _State *L, int narg, const char *tname);
Verifica si el argumento narg de la función es un objeto userdata del tipo tname (ver luaL_newmetatable).
luaL_dofile
int luaL _dofile (lua _State *L, const char *filename);
Carga y ejecuta el archivo suministrado. Es definida como la siguiente macro:
(LuaL_loadfile(L, filename) || lua_pcall(L, 0, LUA_MULTRET, _0))
La función retorna 0 si no hay errores o 1 en caso de errores.
244
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
luaL_dostring
void *luaL_checkudata (lua_State *L, int narg, const char *tname);
Carga y ejecuta la cadena suministrada. Es definida como la siguiente macro:
(LuaL_loadstring(L, str) || lua_pcall(L, 0, LUA_MULTRET, _0))
La función retorna 0 si no hay errores o 1 en caso de errores.
luaL_error
int luaL _error (lua _State *L, const char *fmt, ...);
Dispara un error. El formato del mensaje de error se da por fmt más cualesquiera argumentos extras, siguiendo
las mismas reglas de lua_pushfstring. También agrega en el inicio del mensaje el nombre del archivo y el número
de la línea donde el error ocurrió, caso esta información esté disponible.
Esta función nunca retorna, pero es idiomático usarla en funciones C como return luaL_error(args).
luaL_getmetafield
int luaL _getmetafield (lua _State *L, int obj, const char *met);
Coloca en la pila el campo e de la meta-tabla del objeto en el índice obj. Si el objeto no posee una meta-tabla o si
la meta-tabla no posee este campo, retorna 0 y no apila nada.
luaL_getmetatable
void luaL_getmetatable (lua_State *L, const char *tname);
Coloca en la pila la meta-tabla asociada con el nombre tname en el registro (ver luaL_newmetatable).
luaL_gsub
const char *luaL _gsub (lua _State *L, const char *s, const char *p, const char *r);
Crea una copia de la cadena s reemplazando cualquier ocurrencia de la cadena p por la cadena R. Coloca la
cadena resultante en la pila y a retorna.
© ABNT 2007 - Todos los derechos reservados
245
ABNT NBR 15606-2:2007
luaL_loadbuffer
int luaL _loadbuffer (lua _State *L, const char *buff, size _t sz, const char *name);
Carga un buffer como un trecho de código Lua. Esta función usa lua_load para cargar el trecho en el buffer
indicado por buff con tamaño sz.
Esta función retorna los mismos resultados de lua_load. Name es el nombre del trecho, usado para informaciones
de depuración y mensajes de error.
luaL_loadfile
int luaL _loadfile (lua _State *L, const char *filename);
Carga un archivo como un trecho de código Lua. Esta función usa lua_load para cargar el trecho en el archivo
llamado filename. Si filename es NULL, entonces carga desde la entrada estándar. La primera línea en el archivo
es ignorada si empieza con #.
Esta función retorna los mismos resultados de lua_load, pero posee un código de error extra LUA_ERRFILE si no
puede abrir/leer el archivo.
De la misma forma que lua_load, esta función solamente carga el trecho; no lo ejecuta.
luaL_loadstring
int luaL _loadstring (lua _State *L, const char *s);
Carga una cadena como un trecho de código Lua. Esta función usa lua_load para cargar el trecho en la cadena
(terminada por cero) S.
Esta función retorna los mismos resultados de lua_load.
Así como lua_load, esta función solamente carga el trecho; no lo ejecuta.
luaL_newmetatable
int luaL _newmetatable (lua _State *L, const char *tname);
Si el registro ya posee la llave tname, retorna 0. En caso contrario, crea una nueva tabla para ser usada como
una meta-tabla para el objeto userdata, agrega esta tabla al registro con clave tname y retorna 1.
En ambos casos coloca en la pila el valor final asociado con tname en el registro.
246
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
luaL_newstate
lua_State *luaL_newstate (void);
Crea un nuevo estado Lua. Llama a lua_newstate con una función de asignación con base en la función estándar
de C realloc y entonces establece una función de pánico (ver lua_atpanic) que imprime un mensaje de error para
la salida de error estándar en caso de errores fatales.
Retorna el nuevo estado o NULL si ocurrió un error de asignación de memoria.
luaL_openlibs
void luaL_openlibs (lua_State *L);
Abre todas las bibliotecas estándares en el estado suministrado.
luaL_optint
int luaL _optint (lua _State *L, int narg, int d);
Si el argumento narg de la función es un número, retorna este número convertido para un int. Si este argumento
está ausente o si o es nil, retorna d. En caso contrario, dispara un error.
luaL_optinteger
lua_Integer luaL_optinteger (lua_State *L, int narg, lua_Integer d);
Si el argumento narg de la función es un número, retorna este número convertido para un lua_Integer. Si este
argumento está ausente o si o es nil, retorna d. En caso contrario, dispara un error.
luaL_optlong
long luaL _optlong (lua _State *L, int narg, long d);
Si el argumento narg de la función es un número, retorna este número convertido para un long. Si este argumento
está ausente o si o es nil, retorna d. En caso contrario, dispara un error.
luaL_optlstring
const char *luaL_optlstring (lua_State *L, int narg, const char *d, size_t *l);
Si el argumento narg de la función es una cadena, retorna esta cadena. Si este argumento está ausente o si o es
nil, retorna d. En caso contrario, dispara un error.
Si l no es NULL, rellena la posición *l con el tamaño del resultado.
© ABNT 2007 - Todos los derechos reservados
247
ABNT NBR 15606-2:2007
luaL_optnumber
lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number d);
Si el argumento narg de la función es un número, retorna este número. Si este argumento está ausente o si o es
nil, retorna d. En caso contrario, dispara un error.
luaL_optstring
const char *luaL _optstring (lua _State *L, int narg, const char *d);
Si el argumento narg de la función es una cadena, retorna esta cadena. Si este argumento está ausente o si o es
nil, retorna d. En caso contrario, dispara un error.
luaL_prepbuffer
char *luaL _prepbuffer (luaL _Buffer *B);
Retorna una dirección para un espacio de tamaño LUAL_BUFFERSIZE donde se puede copiar una cadena para
ser agregada al buffer B (ver luaL_Buffer). Después de copiar la cadena para este espacio se debe llamar a
luaL_addsize con el tamaño de la cadena para agregarla realmente al buffer.
luaL_pushresult
void luaL_pushresult (luaL_Buffer *B);
Finaliza el uso del buffer B dejando la cadena final en la parte superior de la pila.
luaL_ref
int luaL _ref (lua _State *L, int t);
Crea y retorna una referencia, en la tabla en el índice t, para el objeto en la parte superior de la pila (y desapila el
objeto).
Una referencia es una clave entera única. Desde que no se agregue manualmente claves enteras en la tabla t,
luaL_ref garantiza la unicidad de la clave que retorna. Se puede recobrar un objeto referido por el referencia r
llamando a lua_rawgeti(L, t, r). La función luaL_unref libera una referencia y el objeto asociado a la misma.
Si el objeto en la parte superior de la pila es nil, luaL_ref retorna la constante LUA_REFNIL. La constante
LUA_NOREF es totalmente diferente de cualquier referencia retornada por luaL_ref.
248
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
luaL_Reg
typedef struct luaL_Reg {
const char *name;
lua _CFunction func;
} luaL _Reg;
El tipo para arrays de funciones a ser registrados por luaL_register. Name es el nombre de la función y func es un
indicador para la función. Cualquier array de luaL_Reg debe terminar con una entrada centinela en la cual tanto
name como func son NULL.
luaL_register
void luaL _register (lua _State *L, const char *libname, const luaL _Reg *l);
Abre una biblioteca.
Cuando llamada con libname igual a NULL, simplemente registra todas las funciones en la lista l (ver luaL_Reg)
en la tabla en la parte superior de la pila.
Cuando llamada con un valor de libname diferente de NULL, luaL_register crea una nueva tabla t, establece la
misma como el valor de la variable global libname, la establece como el valor de package.loaded[libname] y
registra en la misma todas las funciones en la lista L. si existe una tabla en package.loaded[libname] o en la
variable libname, la función reutiliza esta tabla en vez de crear una noticia.
En cualquier caso la función deja la tabla en la parte superior de la pila.
luaL_typename
const char *luaL_typename (lua_State *L, int idx);
Retorna el nombre del tipo del valor en el índice suministrado.
luaL_typerror
int luaL_typerror (lua_State *L, int narg, const char *tname);
Genera un error con un mensaje como el siguiente:
l o c a t i o n : bad argument n a r g to ' f u n c ' ( t n a m e expected, got r t )
Donde location es producida por luaL_where, func es el nombre de la función corriente y rt es el nombre del tipo
del argumento.
© ABNT 2007 - Todos los derechos reservados
249
ABNT NBR 15606-2:2007
luaL_unref
void luaL _unref (lua _State *L, int t, int ref);
Libera la referencia ref de la tabla en el índice t (ver luaL_ref). La entrada es removida de la tabla, de modo que el
objeto mencionado puede ser colectado. La referencia ref también es liberada para ser usada nuevamente.
Si ref es LUA_NOREF o LUA_REFNIL, luaL_unref no hace nada.
luaL_where
void luaL _where (lua _State *L, int lvl);
Coloca en la pila una cadena identificando la posición actual del control en el nivel lvl en la pila de llamada.
Típicamente esta cadena posee el siguiente formato:
chunkname: currentline:
Nivel 0 es la función ejecutando corrientemente, nivel 1 es la función que llamó la función que está ejecutando
actualmente, etc.
Esta función se utiliza para construir un código para mensajes de error.
B.5 Bibliotecas estándar
B.5.1 Visión general
Las bibliotecas estándar de Lua ofrecen funciones útiles que son implementadas directamente a través de la API
C. Algunas de esas funciones ofrecen servicios esenciales para el lenguaje (por ejemplo, type y getmetatable);
otras ofrecen acceso a servicios "externos" (por ejemplo, E/S); y otras podrían ser implementadas en Lua
concretamente, pero son bastante útiles o poseen requisitos de desempeño críticos que merecen una
implementación en C (por ejemplo, table.sort).
Todas las bibliotecas son implementadas a través de la API C oficial y son suministradas como módulos C
separados. Normalmente, Lua posee las siguientes bibliotecas estándar:
250

biblioteca básica;

biblioteca de paquetes;

manipulación de cadenas de caracteres;

manipulación de tablas;

funciones matemáticas (sen, log, etc.);

entrada y salida;

facilidades del sistema operativo;

facilidades de depuración.
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Exceptuándose la biblioteca básica y la biblioteca de paquetes, cada biblioteca provee todas sus funciones como
campos de una tabla global o como métodos de sus objetos.
Para tener acceso a esas bibliotecas, el programa hospedero C debe llamar la función luaL_openlibs, que abre
todas las bibliotecas estándar. De modo alternativo, es posible abrirlas individualmente llamando a luaopen_base
(para la biblioteca básica), luaopen_package (para la biblioteca de paquetes), luaopen_string (para la biblioteca
de cadenas de caracteres), luaopen_table (para la biblioteca de tablas), luaopen_math (para la biblioteca
matemática), luaopen_io (para la biblioteca de E/S), luaopen_os (para la biblioteca del Sistema Operativo), y
luaopen_debug (para la biblioteca de depuración). Esas funciones están declaradas en lualib.h y no deben ser
llamadas directamente: Se deben llamar como cualquier otra función C de Lua, por ejemplo, usando lua_call.
B.5.2 Funciones básicas
La biblioteca de funciones básicas ofrece algunas funciones esenciales la Lua. Si no se incluye esta biblioteca en
su aplicación, se debe verificar cuidadosamente si necesita suministrar implementaciones para algunas de sus
facilidades.
assert (v [, message])
Producen un error cuando el valor de su argumento v es falso (ejemplo, nil o false); en caso contrario, retorna
todos sus argumentos. Message es un mensaje de error; cuándo ausente, el mensaje estándar es "¡assertion
failed!"
collectgarbage (opt [, arg])
Esta función es una interfaz genérica para el colector de basura. Realiza diferentes funciones de acuerdo con su
primer argumento, opt:

“stop” : interrumpe el colector de basura.

“restart” : reinicia el colector de basura.

“collect” : realiza un ciclo de Recolecta de basura completa.

“count” : retorna la memoria total que está siendo usada por Lua (en Kbytes).

“step” : realiza un paso de recolecta de basura. El "tamaño" del paso es controlado por arg (valores
mayores significan más pasos) de manera no especificada. Si se desea controlar el tamaño del paso, se
debe ajustar de manera experimental el valor de arg. Retorna true si el paso terminó un ciclo de
Recolecta de basura.

“steppause” : establece arg/100 como el nuevo valor para la pausa del colector (ver B.2.1 1).

“setstepmul” : establece arg/100 como el nuevo valor para el multiplicador de paso del colector (ver
B.2.1 1).
dofile (filename)
Abre el archivo indicado y ejecuta su contenido como un trecho de código Lua. Cuando es llamada sin
argumentos, dofile ejecuta el contenido de la entrada estándar (stdin). Retorna todos los valores retornados por el
trecho. En caso de errores, dofile propaga el error para su llamador (es decir, dofile no ejecuta en modo protegido).
© ABNT 2007 - Todos los derechos reservados
251
ABNT NBR 15606-2:2007
error (message [, level])
Termina la última función protegida llamada y retorna message como el mensaje de error. La función error nunca
retorna.
Generalmente, error agrega alguna información sobre la posición del error en el inicio del mensaje. El argumento
level especifica cómo obtener la posición del error. Cuando éste es igual a 1 (el estándar), la posición del error es
donde la función error fue llamada. Cuando éste es 2, la posición del error es donde la función que llamó a error
fue llamada; y así sucesivamente. Pasando un valor 0 para level evita la adición de información de la posición del
error al mensaje.
_G
Una variable global (no una función) que almacena el ambiente global (es decir, _G._G = _G). Lua por sí solo no
usa esta variable; una modificación de su valor no afecta cualquier ambiente y viceversa. (usar setfenv para
alterar ambientes.)
getfenv (f)
Retorna el ambiente que está siendo usado normalmente por la función. F puede ser una función Lua o un
número que especifica la función en aquel nivel de pila: La función que llamó a getfenv posee nivel 1. Si la función
suministrada no es una función Lua o se f es 0, getfenv retorna el ambiente global. El valor estándar para f es 1.
getmetatable (object)
Si object no posee una meta-tabla, retorna nil. En caso contrario, si la meta-tabla del objeto posee un campo
"__metatable", retorna el valor asociado. En caso contrario, retorna la meta-tabla del objeto suministrado.
ipairs (t)
Retorna tres valores: una función repetidora, la tabla t y 0, de modo que la construcción
for i,v in ipairs(t) do b o d y end
Repetirá sobre los pares (1,t [1]), (2,t[2]), ···, hasta la primera clave entera ausente de la tabla.
load (func [, chunkname])
Carga un trecho usando la función func para obtener sus pedazos. Cada llamada a func debe retornar una
cadena de caracteres que concatena con resultados anteriores. Cuando func retorna nil (o cuando no retorna
ningún valor), eso indica el fin del trecho.
Si no ocurren errores, retorna el trecho compilado como una función; en caso contrario, retorna nil más el
mensaje de error. El ambiente de la función retornada es el ambiente global.
chunkname se utiliza como el nombre del trecho para mensajes de error e información de depuración. Cuando
ausente, el valor estándar es "=(load)".
252
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
loadfile ([filename])
Análogo a load, pero obtiene el trecho del archivo filename o de la entrada estándar, si ningún nombre de archivo
se suministra.
loadstring (string [, chunkname])
Análogo a load, pero obtiene el trecho de la cadena suministrada.
Para cargar y rodar una dada cadena, usar la expresión idiomática
assert (loadstring(s)) ()
Cuando está ausente, el valor estándar para chunkname es la cadena suministrada.
next (table [, index])
Permite a un programa recorrer todos los campos de una tabla. Su primer argumento es una tabla y su segundo
argumento es un índice en esa tabla. Next retorna el próximo índice de la tabla y su valor asociado. Cuando
llamada con nil como su segundo argumento, next retorna un índice inicial y su valor asociado. Cuando llamada
con el último índice o con nil en una tabla vacía, next retorna nil. Si el segundo argumento está ausente,
entonces éste es interpretado como nil. En particular, se puede usar next(t) para verificar si la tabla está vacía.
El orden en el cual los índices son enumerados no se especifica, incluso para índices numéricos (para recorrer
una tabla en orden numérico, use el for numérico o la función ipairs).
El comportamiento de next es indefinido si, durante el recorrido, se atribuye cualquier valor a un campo no
existente en la tabla. Se puede, sin embargo, modificar campos existentes. En particular, se puede limpiar
campos existentes.
pairs (t)
Retorna tres valores: la función next, la tabla t y nil, de modo que la construcción
for k,v in pairs(t) do body end
Repetirá sobre todos los pares clave–valor de la tabla t.
Ver la función next para los cuidados que se deben tener al modificar la tabla durante su recorrido.
pcall (f, arg1, arg2, ...)
Llama la función f con los argumentos suministrados en modo protegido. Esto significa que cualquier error dentro
de f no es propagado; en vez de eso, pcall captura el error y retorna un código indicando el estatus. Su primer
resultado es el código de estatus (un booleano), que es verdadero si la llamada ocurrió sin errores. En este caso,
pcall también retorna todos los resultados de la llamada, después de este primer resultado. En el caso de ocurrir
un error, pcall retorna false más el mensaje de error.
© ABNT 2007 - Todos los derechos reservados
253
ABNT NBR 15606-2:2007
print (e1, e2, ...)
Recibe cualquier número de argumentos e imprime sus valores para stdout, usando la función tostring para
convertirlos en cadenas de caracteres. Print no es proyectada para salida formateada, sino solamente como una
manera rápida de mostrar un valor, típicamente para depuración. Para salida formateada, use string.format.
rawequal (v1, v2)
Verifica si v1 es igual a v2, sin invocar ningún meta-método. Retorna un booleano.
rawget (table, index)
Obtiene el valor real de table[index], sin invocar ningún meta-método. Table debe ser una tabla; index puede ser
cualquier valor.
rawset (table, index, value)
Atribuye value como el valor real de table[index], sin invocar ningún meta-método. Table debe ser una tabla, index
puede ser cualquier valor diferente de nil y value puede ser cualquier valor Lua.
Esta función retorna table.
select (index, ...)
Si index es un número, retorna todos los argumentos después del argumento número index. En caso contrario,
index debe ser la cadena "#" y select retorna el número total de argumentos extras recibidos.
setfenv (f, table)
Establece el ambiente a ser usado por la función suministrada. F puede ser una función Lua o un número que
especifica la función en aquel nivel de pila: La función llamando a setfenv posee nivel 1. Setfenv retorna la función
suministrada.
Como un caso especial, cuando f es 0 setfenv cambia el ambiente del flujo de ejecución corriente. En este caso,
setfenv no retorna ningún valor.
setmetatable (table, metatable)
Establece la meta-tabla para la tabla suministrada (no se puede alterar la meta-tabla de otros tipos desde Lua,
solamente desde C.) Si metatable es nil, remueve la meta-tabla de la tabla suministrada. Si la meta-tabla original
tiene un campo "__metatable", dispara un error.
Esta función retorna table.
254
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
tonumber (obj [, base])
Intenta convertir su argumento para un número. Si el argumento ya es un número o una cadena de caracteres
que puede ser convertida para un número, entonces tonumber retorna este número; en caso contrario, retorna nil.
Un argumento opcional especifica la base para interpretar el numeral. La base puede ser cualquier entero entre 2
y 36, ambos inclusive. En bases arriba de 10, la letra ‘a’ (mayúscula o minúscula) representa 10, 'B' representa 11
y así sucesivamente, con 'Z' representando 35. En la base 10 (el estándar), el número puede tener una parte
decimal, así como una parte exponente opcional (ver B.2.2). En otras bases, solamente son aceptados enteros
sin señal.
tostring (obj)
Recibe un argumento de cualquier tipo y lo convierte para una cadena de caracteres en un formato razonable.
Para un control completo de como números son convertidos, use string.format.
Si la meta-tabla de e posee un campo "__tostring", entonces tostring llama el valor correspondiente con e como
argumento y usa el resultado de la llamada como su resultado.
type (v)
Retorna el tipo de su único argumento, codificado como una cadena de caracteres. Los resultados posibles de
esta función son "nil" (una cadena de caracteres, no el valor nil), "number", "string", "boolean", "table", "function",
"thread" y "userdata".
unpack (list [, i [, j]])
Retorna los elementos de la tabla suministrada. Esta función es equivalente a
return list[ i], list[ i+1] , ···, list[ j]
excepto que el código anterior puede ser escrito solamente para un número fijo de elementos. Por estándar, i es 1
y j es el tamaño de la lista, como definido por el operador de tamaño (ver B.2.6.6).
_VERSION
Una variable global (no una función) que almacena una cadena conteniendo la versión corriente del interpretador.
El contenido corriente de esta variable es "Lua 5.1".
xpcall (f, err)
Esta función es análoga a pcall, excepto que se puede establecer un nuevo tratador de errores.
xpcall llama la función f en modo protegido, usando err como un tratador de errores. Cualquier error dentro de f no
es propagado; en vez de eso, xpcall captura el error, llama la función err con el objeto de error original y retorna
un código indicando un estatus. Su primer resultado es el código de status (un booleano), que es verdadero si la
llamada ocurrió sin errores. En este caso, xpcall también retorna todos los resultados de la llamada, después de
este primer resultado. En caso de error, xpcall retorna false más el resultado de err.
© ABNT 2007 - Todos los derechos reservados
255
ABNT NBR 15606-2:2007
B.5.3 Manipulación de co-rutinas
Las operaciones relacionadas con co-rutinas constituyen una sub-biblioteca de la biblioteca básica y están dentro
de la tabla coroutine. Ver B.2.12 para una descripción general de co-rutinas.
coroutine.create (f)
Crea una nueva co-rutina, con cuerpo f. f debe ser una función Lua. Retorna esta nueva co-rutina, un objeto con
tipo "thread".
coroutine.resume (co [, val1, ..., valn])
Inicia o continúa la ejecución de la co-rutina co. En la primera vez que se "continúa" una co-rutina, empieza
ejecutando su cuerpo. Los valores val1, ··· son pasados como los argumentos para el cuerpo de la función. Si la
co-rutina ya cedió la ejecución antes, resume la continúa; los valores val1, ··· son pasados como los resultados de
la cesión.
Si la co-rutina ejecuta sin ningún error, resume retorna true más cualesquiera valores pasados para yield (si la corutina cede) o cualquier valor retornados por el cuerpo de la función (si la co-rutina termina). Si hay cualquier error,
resume retorna false más el mensaje de error.
coroutine.running ()
Retorna la co-rutina siendo ejecutada o nil cuando es llamada por el flujo de ejecución principal.
coroutine.status (co)
Retorna el estatus de la co-rutina co, como una cadena de caracteres: "running", si la co-rutina está ejecutando
(es decir, llamó a estatus); "suspended", si la co-rutina está suspensa en una llamada a yield o se no comenzó su
ejecución aún; "normal" si la co-rutina está activa pero no está ejecutando (es decir, continuó otra co-rutina); y
"dead" si la co-rutina terminó su función principal o se paró con un error.
coroutine.wrap (f)
Crea una nueva co-rutina, con cuerpo f. f debe ser una función Lua. Retorna una función que recomienza la corutina cada vez que es llamada. cualesquiera argumentos pasados para la función se comportan como los
argumentos extras para resume. Retorna los mismos valores retornados por resume, excepto el primer booleano.
En caso de error, propaga el error.
coroutine.yield ([val1, ..., valn])
Suspende la ejecución de la co-rutina llamadora. La co-rutina no puede estar ejecutando una función C, un
metamétodo o un repetidor. Cualesquiera argumentos para yield son pasados como resultados extras para
resume.
B.5.4 Módulos
La biblioteca de paquetes provee facilidades básicas para cargar y construir módulos en Lua. Exporta dos de sus
funciones directamente en el ambiente global: Require y module. Todas las otras funciones son exportadas en
una tabla package.
256
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
module (name [, ...])
Crea un módulo. Si hay una tabla en package.loaded[name], esta tabla es el módulo. En caso contrario, si existe
una tabla global t con el nombre suministrado, esta tabla es el módulo. En caso contrario crea una nueva tabla t y
la establece como el valor de la global name y el valor de package.loaded[name]. Esta función también inicializa
t._NAME con el nombre suministrado, t._M con el módulo (el propio t) y t._PACKAGE con el nombre del paquete
(el nombre del módulo completo menos el último componente). Finalmente, module establece t como el nuevo
ambiente de la función corriente y el nuevo valor de package.loaded[name], de modo que require retorna t.
Si name es un nombre compuesto (es decir, un nombre con componentes separados por puntos), module crea (o
reutiliza, si las mismas ya existen) tablas para cada componente. Por ejemplo, si name es a.b.c, entonces module
almacena la tabla del módulo en el campo c del campo b de la global a.
Esta función puede recibir algunas opciones después del nombre del módulo, donde cada opción es una función
a ser aplicada sobre el módulo.
require (mod name)
Carga el módulo suministrado. Esta función empieza buscando en la tabla package.loaded para determinar si
modname ya fue cargado. En caso afirmativo, requiere retornar el valor almacenado en
package.loaded[modname]. En caso contrario, intenta hallar un cargador para el módulo.
Para encontrar un cargador, require es guiada por el array package.loaders. Modificando este array, podemos
alterar cómo require busca por un módulo. La siguiente explicación se basa en la configuración estándar para
package.loaders.
El primer require consulta package.preload[modname]. Se existe un valor en ese campo, este valor (que debe ser
una función) es el cargador. En caso contrario require busca por un cargador Lua usando el camino almacenado
en package.path. Si eso también falla, busca por un cargador C usando el camino almacenado en package.cpath.
Si eso también falla, intenta un cargador todo en uno (ver package.loaders).
Una vez que un cargador se encuentra, require llama el cargador con un único argumento, modname. Si el
cargador retorna cualquier valor, require atribuye el valor retornado a package.loaded[modname]. Si el cargador
no retorna ningún valor y no fue atribuido ningún valor a package.loaded[modname], entonces require atribuye
true a esta posición. En cualquier caso, require retorna el valor final de package.loaded[modname].
Si ocurre un error durante la carga o la ejecución del módulo o si no es posible encontrar un cargador para el
módulo, entonces require señaliza un error.
package.cpath
El camino usado por require para buscar un cargador C.
Lua inicializa el camino C package.cpath de la misma forma que inicializa el camino Lua package.path, usando la
variable de ambiente LUA_CPATH o un camino estándar definido en luaconf.h.
package.loaded
Una tabla usada por require para controlar cuáles módulos ya fueron cargados. Cuando se requisita un módulo
modname y package.loaded[modname] no es falso, require simplemente retorna el valor almacenado allá.
package.loaders
Una tabla usada por require para controlar cómo cargar módulos.
© ABNT 2007 - Todos los derechos reservados
257
ABNT NBR 15606-2:2007
Cada posición en esta tabla es una función buscadora. Cuando está buscando un módulo, require llama a cada
una de estas funciones buscadoras en orden creciente, con el nombre del módulo (el argumento suministrado a
require) como su único parámetro. La función puede retornar otra función (el cargador del módulo) o una cadena
de caracteres explicando por qué no halló aquel módulo (o nil si no tiene nada a decir). Lua inicializa esta tabla
con cuatro funciones.
La primera función buscadora simplemente buscar un cargador en la tabla package.preload.
La segunda función buscadora busca un cargador como una biblioteca Lua, usando el camino almacenado en
package.path. Un camino es una secuencia de estándares separadas por punto y coma. Para cada estándar, la
función buscadora va a alterar cada punto de interrogación en el estándar para filename, que es el nombre del
módulo con cada punto reemplazado por un "separador de directorio" (como "/" en el Unix); entonces intentará
abrir el nombre del archivo resultante. Por ejemplo, si el camino es la cadena de caracteres
"./?.lua;./?.lc;/usr/local/?/init.lua"
la busca de un archivo Lua para el módulo foo intentará abrir los archivos, ./foo.lc y /usr/local/foo/init.lua, en ese
orden.
La tercera función buscadora busca un cargador como una biblioteca C, usando el camino suministrado por la
variable package.cpath. Por ejemplo, si el camino C es la cadena
"./?.so;./?.dll;/usr/local/?/init.so"
la función buscadora para el módulo foo intentará abrir los archivos ./foo.so, ./foo.dll y /usr/local/foo/init.so, en ese
orden. Una vez que encuentra una biblioteca C, esta función buscadora primero usa una facilidad de enlace
dinámica para conectar la aplicación con la biblioteca. Entonces intenta encontrar una función C dentro de la
biblioteca para ser usada como cargador. El nombre de esta función C es la cadena "luaopen_" concatenada con
una copia del nombre del módulo donde cada punto es reemplazado por un subrayado. Además de ello, si el
nombre del módulo posee un guión, su código hasta (e incluyendo) el primer guión es removido. Por ejemplo, si el
nombre del módulo es a.v1-b.c, el nombre de la función será luaopen_b_c.
La cuarta función buscadora intenta un cargador todo en uno. Busca en el camino C una biblioteca para la raíz del
nombre del módulo suministrado. Por ejemplo, al solicitar a.b.c, buscará por una biblioteca C para a. Si encuentra,
busca en esa biblioteca por una función de apertura para el submódulo; en este ejemplo, sería luaopen_a_b_c.
Con esta facilidad, un paquete puede empaquetar varios submódulos C dentro de una única biblioteca, con cada
submódulo guardando su función de apertura original.
package.loadlib (libname, funcname)
Conecta dinámicamente el programa hospedero con la biblioteca C libname. Dentro de esta biblioteca, busca por
una función funcname y retorna esa función como una función C (de ese modo, funcname debe seguir el
protocolo (ver lua_CFunction)).
Ésta es una función de bajo nivel. Contorna completamente el sistema de paquetes y de módulos. Diferentemente
de require, no realiza cualquier busca de camino y no agrega extensiones automáticamente. Libname debe ser el
nombre del archivo completo de la biblioteca C, incluyendo, en caso de ser necesario, un camino y una extensión.
Funcname debe ser el nombre exacto expuesto por la biblioteca C (que puede depender de cómo se usan el
compilador y el conector C).
Esta función no es provista por ANSI C. De esa forma, está disponible solamente en algunas plataformas
(Windows, Linux, MAC LAS X, Solaris, BSD, más otros sistemas Unix que dan soporte al estándar dlfcn).
258
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
package.path
El camino usado por require para buscar un cargador Lua.
Al iniciar, Lua inicializa esta variable con el valor de la variable de ambiente LUA_PATH o con un camino estándar
definido en luaconf.h, si la variable de ambiente no está definida. Cualquier ";;" en el valor de la variable de
ambiente será reemplazado por el camino estándar.
package.preload
Una tabla para almacenar cargadores para módulos específicos (ver require).
package.seeall (module)
Establece una meta-tabla para module con su campo __index refiriéndose al ambiente global, de modo que ese
módulo hereda valores del ambiente global. Para ser usada como una opción a la función module.
B.5.5 Manejo de cadenas de caracteres
Esta biblioteca provee funciones genéricas para el manejo de cadenas de caracteres, tales como encontrar y
extraer subcadenas y casamiento de estándares. Al indexar una cadena en Lua, el primer carácter está en la
posición 1 (no en la posición 0, como en C). Índices pueden tener valores negativos y son interpretados como una
indexación de detrás para delante, desde el final de la cadena. Por lo tanto, el último carácter está en la posición 1 y así sucesivamente.
La biblioteca de cadenas provee todas sus funciones dentro de la tabla string. La misma también establece una
meta-tabla para cadenas donde el campo __index apunta para la tabla string. En consecuencia de eso, se puede
usar las funciones de cadenas en un estilo orientado a objetos. Por ejemplo, string.byte(s, i) puede ser escrito
como s:byte(i).
string.byte (s [, i [, j]])
Retorna el código numérico interno de los caracteres s[i], s[i+1], ···, s[j]. El valor estándar para i es 1; el valor
estándar para j es I.
Códigos numéricos no son necesariamente portátiles entre plataformas.
string.char (i1, i2, ...)
Recibe cero o más enteros. Retorna una cadena con tamaño igual al número de argumentos, en la cual cada
carácter posee un código numérico interno igual a su argumento correspondiente.
Códigos numéricos no son necesariamente portátiles entre plataformas.
string.dump (function)
Retorna una cadena conteniendo la representación binaria de la función suministrada, de modo que un loadstring
posterior en esta cadena retorna una copia de la función. Function debe ser una función Lua sin upvalues.
© ABNT 2007 - Todos los derechos reservados
259
ABNT NBR 15606-2:2007
string.find (s, pattern [, init [, plain]])
Busca la primera coincidencia del estándar pattern en la cadena S. Si la función encuentra una coincidencia,
entonces find retorna los índices de s donde esta ocurrencia comenzó y terminó; en caso contrario, retorna nil. El
tercer argumento, init, es un valor numérico opcional y especifica dónde iniciar la busca; su valor estándar es 1 y
puede ser negativo. Un valor true para el cuarto argumento, plain, que es opcional, deshabilita las facilidades de
coincidencia de estándares, de modo que la función hace una operación "encuentra subcadena" simple, sin
considerar ningún carácter en pattern como "mágico". Si plain se suministra, entonces init debe ser suministrado
también.
Si el estándar posee capturas, entonces en una coincidencia exitosa los valores capturados son también
retornados, después de los dos índices.
string.format (formatstring, e1, e2, ...)
Retorna la versión formateada de su número variable de argumentos siguiendo la descripción fecha en su primer
argumento (que debe ser una cadena). El formato de la cadena sigue las mismas reglas de la familia printf de
funciones C estándar. Las únicas diferencias son que las opciones/modificadores *, l, L, n, p y h no son ofrecidas
y que hay una opción extra, q. La opción q formatea una cadena en una forma adecuada para ser leída de vuelta
de forma segura por el interpretador Lua; la cadena es escrita entre comillas dobles y todas las comillas dobles,
quiebras de línea, barras alteradas y ceros dentro de la cadena son correctamente escapados cuando escritos.
Por ejemplo, la llamada
string.format('%q', 'a string with "quotes" and \n new line')
producirá la cadena:
"a string with \"quotes\" and \
new line"
Las opciones c, d, E, e, f, g, G, i, o, u, X y x esperan un número como argumento, mientras que q y s esperan una
cadena.
Esta función no acepta valores de cadenas conteniendo ceros dentro de las mismas, excepto cuando esos
valores son argumentos para la opción q.
string.gmatch (s, pattern)
Retorna una función repetidora que, cada vez que es llamada, retorna la próxima captura de pattern en la
cadena S. Si pattern no especifica ninguna captura, entonces la coincidencia entera es producida a cada
llamada. Como un ejemplo, el siguiente lazo
s = "hello world from Lua"
for w in string.gmatch(s, "%a+")do
print (w)
end
repetirá sobre todas las palabras de la cadena s, imprimiendo una por línea. El próximo ejemplo recolecta todos
los pares key=value de la cadena suministrada y los coloca en una tabla:
t = {}
s = "from=world, to=Lua"
for k, v in string.gmatch(s, "(%w+)=(%w+)") do
t[k] = v
end
Para esa función, un '^' en el inicio de un estándar no funciona como un ancla, visto que eso iría a impedir la
repetición.
260
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
string.gsub (s, pattern, repl [, n])
Retorna una copia de s en la cual todas las (o las primeras n, si se han suministrado) ocurrencias de pattern son
sustituidas por una cadena de sustitución especificada por repl, que puede ser una cadena, una tabla o una
función. Gsub también retorna, como su segundo valor, el número total de sustituciones que ocurrieron.
Si repl es una cadena, entonces su valor se utiliza para la sustitución. El carácter % funciona como un carácter
de escape: Cualquier secuencia en repl de la forma %n, con n entre 1 9, representa el valor de la n-ésima
subcadena capturada. La secuencia %0 representa el casamiento entero. La secuencia %% representa un %
simple.
Si repl es una tabla, entonces la tabla es consultada a cada coincidencia, usando la primera captura como la
clave; si el estándar no especifica ninguna captura, entonces la coincidencia entera se utiliza como la clave.
Si repl es una función, entonces esta función es llamada a siempre que la coincidencia ocurre, con todas las
subcadenas capturadas siendo pasadas como argumentos, en el orden en el que fueron capturadas; si el
estándar no especifica ninguna captura, entonces la coincidencia entera es pasada como un único argumento.
Si el valor retornado por la consulta a la tabla o por la llamada de función es una cadena o un número, entonces
ese valor se utiliza como la cadena de sustitución; en caso contrario, si es false o nil, entonces no hay
sustitución (es decir, el casamiento original es mantenido en la cadena).
Aquí están algunos ejemplos:
x = string.gsub("hello world", "(%w+)", "%1 %1")
--> x="hello hello world world"
x = string.gsub("hello world", "%w+", "%0 %0", 1)
--> x="hello hello world"
x = string.gsub("hello world from Lua", "(%w+)%s*(%w+)", "%2 %1")
--> x="world hello Lua from"
x = string.gsub("home = $HOME, user = $USER", "%$(%w+)", os.getenv)
--> x="home = /home/roberto, user = roberto"
x = string.gsub("4+5 = $return 4+5$", "%$(.-)%$", function (s)
return loadstring(s)()
end)
--> x="4+5 = 9"
local t = {name="lua", version="5.1"}
x = string.gsub("$name%-$version.tar.gz", "%$(%w+)", t)
--> x="lua-5.1.tar.gz"
string.len (s)
Recibe una cadena y retorna su tamaño. La cadena vacía "" tiene tamaño 0. Ceros dentro de la cadena son
contados, entonces "a\000bc\000" tiene tamaño 5.
string.lower (s)
Recibe una cadena y retorna una copia de esta cadena con todas las letras mayúsculas convertidas para
minúsculas. Todos los demás caracteres permanecen iguales. La definición de lo que es una letra mayúscula
depende del idioma (locale) corriente.
© ABNT 2007 - Todos los derechos reservados
261
ABNT NBR 15606-2:2007
string.match (s, pattern [, init])
Busca la primera coincidencia de pattern en la cadena S. Si encuentra una, entonces match retorna las capturas
del estándar; en caso contrario retorna nil. Si pattern no especifica ninguna captura, entonces la coincidencia
entera es retornada. Un tercer argumento numérico opcional, init, especifica dónde iniciar la busca; su valor
estándar es 1 y puede ser negativo.
string.rep (s, n)
Retorna una cadena que es la concatenación de n copias de la cadena s.
string .reverse (s)
Retorna una cadena que es la cadena s invertida.
string .sub (s, i [, j])
Retorna una subcadena de s que inicia en i y continúa hasta j; i y j pueden ser negativas. Si j está ausente,
entonces se presupone que es igual a -1 (que es lo mismo que el tamaño de la cadena). En particular, la llamada
string.sub(s,1,j) retorna un código de s con tamaño j y string.sub(s, -i) retorna un sufijo de s con tamaño i.
string.upper (s)
Recibe una cadena y retorna una copia de esta cadena con todas las letras minúsculas convertidas para
mayúsculas. Todos los demás caracteres permanecen iguales. La definición de lo que es una letra minúscula
depende del idioma (locale) corriente.
B.5.6 Estándares
Una clase de caracteres se utiliza para representar un conjunto de caracteres. Las siguientes combinaciones se
permiten en descripciones de una clase de caracteres:
262

x: (donde x no es uno de los caracteres mágicos ^$()%.[]* +-?) representa el propio carácter x.

. : (un

%a: representa todas las letras.

%c: representa todos los caracteres de control.

%d: representa todos los dígitos.

%l: representa todas las letras minúsculas.

%p: representa todos los caracteres de puntuación.

%s: representa todos los caracteres de espacio.

%u: representa todas las letras mayúsculas.

%w: representa todos los caracteres alfanuméricos.
punto) representa todos los caracteres.
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007

%x: representa todos los dígitos hexadecimales.

%z: representa el carácter con representación 0.

%x: (donde x es cualquier carácter no alfanumérico) representa el carácter x. Ésta es la manera
estándar de escapar los caracteres mágicos. Cualquier carácter de puntuación (incluso los no
mágicos) puede ser precedido por un '%' cuando usado para representar a sí mismo en un estándar.

[set]: representa la clase que es la unión de todos los caracteres en set. Una banda de caracteres
puede ser especificada separando los caracteres finales de la banda con un '-'. Todas las
clases %x descritas arriba también se pueden usar como componentes en set. Todos los otros
caracteres en set representan ellos mismos. Por ejemplo, [ %w_] (o [_%w]) representa todos los
caracteres alfanuméricos más el subrayado, [ 0-7] representa los dígitos octales y [ 0-7%l%-]
representa los dígitos octales más las letras minúsculas más el carácter '-'.
La interacción entre bandas y clases no es definida. Por lo tanto, estándares como [%a-z] o [a-%%] no
tienen significado.

[^set] : Representa el complemento de set, donde set es interpretado como arriba.
Para todas las clases representadas por una única letra (%a, %c, etc.), la letra mayúscula correspondiente
representa el complemento de la clase. Por ejemplo, %S representa todos los caracteres que no son de espacio.
Las definiciones de letra, espacio y otros grupos de caracteres dependen del idioma (locale) corriente. En
particular, la clase [a-z] puede no ser equivalente a %l.
Un ítem de estándar puede ser:

una clase de un único carácter, que empareja cualquier carácter simple que pertenezca a la clase;

una clase de un único carácter seguida por '*', que empareja 0 o más repeticiones de caracteres de la
clase. Estos ítems de repetición siempre emparejarán la mayor secuencia posible;

una clase de un único carácter seguida por '+', que empareja 1 o más repeticiones de caracteres de la
clase. Estos ítems de repetición siempre emparejarán la mayor secuencia posible;

una clase de un único carácter seguida por '-', que también empareja 0 o más repeticiones de caracteres
de la clase. Diferentemente de '*', estos ítems de repetición siempre emparejarán a menor secuencia
posible;

una clase de un único carácter seguida por '?', que empareja 0 ó 1 ocurrencia de un carácter de la clase;

%n, para n entre 1 9; tal ítem empareja una subcadena igual a la n-ésima cadena capturada;

%bxy, donde x e y son dos caracteres distintos; tal ítem empareja cadenas que empiezan con x, terminan
con y y donde el número de xs y de ys es equilibrado. Esto significa que, si alguien lee la cadena de
izquierda a derecha, contando +1 para una x y -1 para una y, la y final es la primera y donde el contador
alcanza 0. Por ejemplo, el ítem %b() empareja expresiones con paréntesis equilibrados.
Un estándar es una secuencia de ítems de estándar. Un '^' en el inicio de un estándar ancla la coincidencia en el
inicio de la cadena siendo usada. Un '$' al final de un estándar ancla la coincidencia al final de la cadena siendo
usada. En otras posiciones, '^' y '$' no poseen significado especial y representan a sí mismos.
© ABNT 2007 - Todos los derechos reservados
263
ABNT NBR 15606-2:2007
Un estándar puede contener subestándares delimitados por paréntesis; describen capturas. Cuando una
coincidencia ocurre, las subcadenas de la cadena siendo usada que coincidieron con las capturas son
almacenadas (capturadas) para uso futuro. Las capturas son numeradas de acuerdo con sus paréntesis
izquierdos. Por ejemplo, en el estándar "(a*(.)%w(%s*))", la parte de la cadena casando "a*(.)%w(%s*)" es
almacenada como la primera captura (y por lo tanto tiene el número 1); el carácter coincidiendo "." es capturado
con el número 2 y la parte coincidiendo "%s*" tiene el número 3.
Como un caso especial, la captura vacía () captura la posición de la cadena corriente (un número). Por ejemplo, si
aplicamos el estándar "()aA()" en la cadena "flaaap", habrá dos capturas: 3 y 5.
Un estándar no puede contener ceros dentro de él. Use %z como alternativa.
B.5.7 Manejo de tablas
Esta biblioteca provee funciones genéricas para manejo de tablas. Provee todas sus funciones en la tabla table.
La mayoría de las funciones en la biblioteca de tablas presupone que la tabla representa un array o una lista.
Para estas funciones, cuando hablamos sobre el "tamaño" de una tabla estamos hablando sobre el resultado del
operador de tamaño.
table.concat (table [, sep [, i [, j]]])
Dado un array donde todos los elementos son cadenas o números, retorna table[i]..sep..Table[i+1] ··· sep..table[j].
El valor estándar para sep es la cadena vacía, el estándar para i es 1 y el estándar para j es el tamaño de la tabla.
Si i es mayor que j, retorna la cadena vacía.
table.insert (table, [pos,] value)
Inserta el elemento value en la posición pos de table, desplazando los otros elementos para abrir espacio, en
caso de ser necesario. El valor estándar para pos es n+1, donde n es el tamaño de la tabla (ver B.2.6.6), de modo
que una llamada table.insert(t,x) inserta x al final de la tabla t.
table.maxn (table)
Retorna el mayor índice numérico positivo de la tabla suministrada o cero si la tabla no posee índices numéricos
positivos (para realizar su trabajo esta función hace un recorrido lineal de la tabla entera).
table.remove (table [, pos])
Remueve de table el elemento en la posición pos, desplazando los otros elementos para rellenar el espacio, en
caso de ser necesario. Retorna el valor del elemento removido. El valor estándar para pos es n, donde n es el
tamaño de la tabla, de modo que una llamada table.remove(t) remueve el último elemento de la tabla t.
table.sort (table [, comp])
Ordena los elementos de la tabla en un dado orden, in-place, de table[1] hasta table[n], donde n es el tamaño de
la tabla. Si comp se suministra, entonces él debe ser una función que recibe dos elementos de la tabla y retorna
true cuando el primero es menor que el segundo (de modo que not comp(la[i+1,a][i]) será verdadero después de
la ordenación). Si comp no se suministra, entonces el operador estándar de Lua < se utiliza en su lugar.
El algoritmo de ordenación no es estable; es decir, elementos considerados iguales por el orden suministrada
pueden tener sus posiciones relativas cambiadas por la ordenación.
264
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
B.5.8 Funciones matemáticas
Esta biblioteca es una interfaz para la biblioteca matemática de C estándar. Provee todas sus funciones en la
tabla math.
math.abs (x)
Retorna el valor absoluto de x.
math. acos (x)
Retorna el arco coseno de x (en radianos).
math.asin (x)
Retorna el arco seno de x (en radianos).
math.atan (x)
Retorna el arco tangente de x (en radianos).
math.atan2 (x)
Retorna el arco tangente de y/x (en radianos), pero usa la señal de los dos parámetros para hallar el cuadrante
del resultado (también trata correctamente el caso de x ser cero).
math.aceil (x)
Retorna el menor entero mayor o igual a x.
math.cos (x)
Retorna el coseno de x (presupone que x está en radianos).
math.cosh (x)
Retorna el coseno hiperbólico de x.
math.deg (x)
Retorna el ángulo x (dado en radianos) en grados.
math.exp (x)
© ABNT 2007 - Todos los derechos reservados
265
ABNT NBR 15606-2:2007
Retorna el valor de ex.
math.floor (x)
Retorna el mayor entero menor o igual a x.
math.fmod (x, y)
Retorna el resto de la división de x por y.
math.frexp (x)
Retorna m y e tales que x = m2e, e es un entero y el valor absoluto de m está en el intervalo [0.5, 1) (o cero
cuando x es cero).
math.huge (x)
El valor de HUGE_VAL, un valor mayor o igual a cualquier otro valor numérico.
math.ldexp (m, e)
Retorna m2e (e debe ser un entero).
math.log10 (x)
Retorna el logaritmo natural de x.
math.log10 (x)
Retorna el logaritmo base -10 de x.
math.max (x, …)
Retorna el valor máximo entre sus argumentos.
math.min (x, …)
Retorna el valor mínimo entre sus argumentos.
math.modf (x)
Retorna dos números, la parte integral de x y la parte fraccionaria de x.
math. pi
El valor de pi.
266
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
math.pow (x, y)
Retorna xy (también se puede usar la expresión x^y para computar este valor).
math.rad (x)
Retorna el ángulo x (dado en grados) en radianos.
math.random ([m [,n]])
Esta función es una interfaz para la función generadora pseudo-aleatoria simple rand suministrada por ANSI C.
(ninguna garantía puede ser dada para sus propiedades estadísticas).
Cuando llamada sin argumentos, retorna un número real pseudo-aleatorio en el intervalo [0,1). Cuando llamada
con un número m, math.random retorna un entero pseudo-aleatorio en el intervalo [1, m). Cuando llamada con
dos números m y n, math.random retorna un entero pseudo-aleatorio en el intervalo [m, n).
math.randomseed (x)
Establece x como la "semilla" para el generador pseudo-aleatorio: semillas iguales producen secuencias iguales
de números.
math.sin (x)
Retorna el seno de x (presupone que x está en radianos).
math.sinh (x)
Retorna el seno hiperbólico de x.
math.sqrt (x)
Retorna la raíz cuadrada de x (también se puede usar la expresión x^0.5 para computar este valor).
math.tan (x)
Retorna la tangente de x (presupone que x está en radianos).
math.tanh (x)
Retorna la tangente hiperbólica de x.
B.5.9 Facilidades de entrada y salida
La biblioteca de E/S provee dos estilos diferentes para manejo de archivos. El primero usa descriptores de archivo
implícitos; es decir, hay operaciones para establecer un archivo de entrada estándar y un archivo de salida
estándar y todas las operaciones de entrada/salida son realizadas sobre estos archivos. El segundo estilo usa
descriptores de archivo explícitos.
© ABNT 2007 - Todos los derechos reservados
267
ABNT NBR 15606-2:2007
Cuando se usa descriptores de archivo implícitos, todas las operaciones son provistas por la tabla io. Cuando se
usa descriptores de archivo explícitos, la operación io.open retorna un descriptor de archivo y entonces todas las
operaciones son provistas como métodos del descriptor de archivo.
La tabla io también suministra tres descriptores de archivo pre-definidos con sus significados usuales de C:
io.stdin, io.stdout e io.stderr.
A menos que dicho de modo contrario, todas las funciones de E/S retornan nil en caso de fallo (más un mensaje
de error como segundo resultado y un código de error dependiente del sistema como un tercer resultado), o algún
valor diferente de nil en caso de éxito.
io.close ([file])
Equivalente a file:close(). Cuando no recibe file, cierra el archivo de salida estándar.
io.flush ()
Equivalente a file:flush en el archivo de salida estándar.
io.input ([file])
Cuando es llamada con un nombre de archivo, abre el archivo con aquel nombre (en modo texto) y establece su
manipulador como el archivo de entrada estándar. Cuando es llamada con un manipulador de archivo,
simplemente establece este manipulador de archivo como el archivo de entrada estándar. Cuando llamada sin
parámetros, retorna el archivo de entrada estándar corriente.
En caso de errores esta función dispara el error, en vez de retornar un código de error.
io.lines ([filename])
Abre el nombre de archivo suministrado en modo de lectura y retorna una función repetidora que, cada vez que
es llamada, retorna una nueva línea del archivo. Por lo tanto, la construcción
for line in io.lines(filename) do body end
repetirá sobre todas las líneas del archivo. Cuando la función repetidora detecta el fin del archivo, retorna nil (para
finalizar el lazo) y automáticamente cierra el archivo.
La llamada io.lines() (sin ningún nombre de archivo) es equivalente a io.input():lines(); es decir, repite sobre las
líneas del archivo de entrada estándar. En este caso no cierra el archivo cuando el lazo termina.
io.open (filename [, mode])
Esta función abre un archivo, en el modo especificado en la cadena mode. Retorna un nuevo manipulador de
archivo o, en caso de errores, nil más un mensaje de error.
268
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
La cadena de caracteres mode puede ser cualquier una de las siguientes:

“r”: modo de lectura (el estándar);

“w”: modo de grabación;

“a”: modo de adición;

“r+”: modo de actualización, todos los datos anteriores son preservados;

“w+”: modo de actualización, todos los datos anteriores son preservados;

“a+”: modo de actualización de adición, datos anteriores son preservados, la grabación solamente se
permite al final del archivo.
La cadena mode también puede tener una 'b' al final, que es necesaria en algunos sistemas para abrir el archivo
en modo binario. Esta cadena es exactamente la que se utiliza en la función estándar de C fopen.
io.output ([file])
Análogo a io.input, pero opera sobre el archivo de salida estándar.
io.popen ([prog [, mode]])
Inicia el programa prog en un proceso separado y retorna un manipulador de archivo que se puede usar para leer
datos de este programa (si mode es "r", el estándar) o escribir datos para este programa (si mode es "w").
Esta función es dependiente del sistema y no está disponible en todas las plataformas.
io.read (format1, ...)
Equivalente a io.input():read.
io.tmpfile ()
Retorna un manipulador para un archivo temporal. Este archivo es abierto en modo de actualización y es
automáticamente removido cuando el programa termina.
io.type (obj)
Verifica si obj es un manipulador de archivo válido. Retorna la cadena "file" si obj es un manipulador de archivo
abierto, "close file" si obj es un manipulador de archivo cerrado o nil si obj no es un manipulador de archivo.
io.write (value1, ...)
Equivalente a io.output():write.
file:close ()
Cierra file. Archivos son automáticamente cerrados cuando sus manipuladores son colectados por el colector de
basura, pero lleva una cantidad indeterminada de tiempo para que eso ocurra.
© ABNT 2007 - Todos los derechos reservados
269
ABNT NBR 15606-2:2007
file:flush ()
Graba cualquier dato escrito para file.
file:lines ()
Retorna una función repetidora que, cada vez que es llamada, retorna una nueva línea del archivo. Por lo tanto, la
construcción
for line in file:lines() do ... end
repetirá sobre todas las líneas del archivo (al contrario de io.lines, esa función no cierra el archivo cuando el lazo
termina).
file:read (format1, ...)
Lee el archivo file, de acuerdo con los formatos suministrados, los cuales especifican lo que debe ser leído. Para
cada formato, la función retorna una cadena (o un número) con los caracteres leídos o nil si no puede retornar
datos con el formato especificado. Cuando llamada sin formatos, usa el formato estándar que lee la próxima línea
toda.
Los formatos disponibles son:

“*n”: lee un número; éste es el único formato que retorna un número en vez de una cadena.

“*a”: lee el archivo entero, empezando por la posición corriente. Cuando está al final del archivo, retorna
la cadena vacía.

“*l”: lee la próxima línea (saltando el fin de línea), retornando nil al final del archivo. Éste es el formato
estándar.

número: lee una cadena hasta este número de caracteres, retornando nil al final del archivo. Si el
número suministrado es cero, la función no lee nada y retorna una cadena vacía o nil cuando está al
final del archivo.
file:seek ([whence] [, offset])
Establece y obtiene la posición del archivo, medida desde el inicio del archivo, hasta la posición dada por offset
más una base especificada por la cadena whence, de la siguiente forma:
 “set” : base es la posición 0 (el inicio del archivo);
 “cur” : base es la posición corriente;
 “end" : base es el fin del archivo;
En caso de éxito, la función seek retorna la posición final del archivo, medida en bytes desde el inicio del archivo.
Si esta función falla, retorna nil, más una cadena describiendo el error.
El valor estándar para whence es "cur" y para offset es 0. Por lo tanto, la llamada file:seek() retorna la posición del
archivo corriente, sin modificarla; la llamada file:seek("set") establece la posición en el inicio del archivo (y retorna
0); y la llamada file:seek("end") establece la posición en el fin del archivo y retorna su tamaño.
270
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
file:setvbuf (mode [, size])
Define el modo de buferización para un archivo de salida. Hay tres modos disponibles:

“no” : ninguna buferización; el resultado de cualquier operación de salida aparece inmediatamente;

“full” : buferización completa; la operación de salida se realiza solamente cuando el buffer está lleno (o
cuando explícitamente se descarga el archivo (ver io.flush));

“line” : buferización de línea; la salida es buferizada hasta que una nueva línea es producida o hay
cualquier entrada desde algunos archivos especiales (como un dispositivo de terminal).
Para los últimos dos casos, size especifica el tamaño del buffer, en bytes. El estándar es un tamaño apropiado.
file:write (value1, ...)
Escribe el valor de cada uno de sus argumentos para file. Los argumentos deben ser cadenas de caracteres o
números. Para escribir otros valores, use tostring o string.format antes de write.
B.5.10 Facilidades del sistema operativo
Esta biblioteca es implementada a través de la tabla os.
os.clock ()
Retorna una aproximación de la cantidad de tiempo de CPU, en segundos, usada por el programa.
os.date ([format [, time]])
Retorna una cadena o una tabla conteniendo fecha y horario, formateada de acuerdo con la cadena format
suministrada.
Si el argumento time está presente, éste es el tiempo a ser formateado (ver la función os.time para una
descripción de este valor). En caso contrario, date formatea el horario corriente.
Si format empieza con '!', entonces la fecha es formateada en el Tiempo Universal Coordinado. Después de ese
carácter opcional, si format es la cadena "*t", entonces date retorna una tabla con los siguientes campos: Year
(cuatro dígitos), month (1--12), day (1--31), hour (0--23), min (0--59), sec (0--61), yday (día del año) e isdst (flag
que indica el horario de verano, un booleano).
Si format no es "*t", entonces date retorna la fecha como una cadena de caracteres, formateada de acuerdo con
las mismas reglas de la función C strftime.
Cuando llamada sin argumentos, date retorna una representación aceptable de la fecha y del horario que
depende del sistema hospedero y del idioma (locale) corriente. (Es decir, os.date() es equivalente a
os.date("%c")).
© ABNT 2007 - Todos los derechos reservados
271
ABNT NBR 15606-2:2007
os.difftime (t2, t1)
Retorna el número de segundos desde el tiempo t1 hasta el tiempo t2. En POSIX, Windows y algunos otros
sistemas, este valor es exactamente t2-t1.
os.execute ([command])
Esta función es equivalente a la función C system. Pasa command para ser ejecutado por un interpretador de
comandos del sistema operativo. Retorna un código de estatus, que es dependiente del sistema. Si command
está ausente, entonces la función retorna un valor diferente de cero si un interpretador de comandos está
disponible y cero en caso contrario.
os.exit ([code])
Llama la función C exit, con un código code opcional, para terminar el programa hospedero. El valor estándar
para code es el código de éxito.
os.getenv (varname)
Retorna el valor de la variable de ambiente del proceso varname o nil si la variable no está definida.
os.remove (filename)
Remueve un archivo o directorio con el nombre suministrado. Directorios deben estar vacíos para ser removidos.
Si esta función falla, retorna nil, más una cadena describiendo el error.
os.rename (oldname, newname)
Cambia el nombre de un archivo o directorio llamado oldname para newname. Si esta función falla, retorna nil,
más una cadena describiendo el error.
os.setlocale (locale [, category])
Establece el idioma (locale) corriente del programa. Locale es una cadena de caracteres especificando un idioma;
category es una cadena opcional describiendo para cual categoría se debe alterar: "All", "collate", "ctype",
"monetary", "numeric" o “time”; la categoría estándar es "all". Esta función retorna el nombre del nuevo idioma o
nil si la requisición no puede ser honrada.
Si locale es la cadena vacía, se establece el idioma corriente como un idioma nativo definido por la
implementación. Si locale es la cadena "C", se establece el idioma corriente como el idioma estándar de C.
Cuando llamada con nil como el primer argumento, esta función retorna solamente el nombre del idioma corriente
para la categoría suministrada.
os.time ([table])
Retorna el tiempo corriente cuando es llamada sin argumentos o un tiempo representando la fecha y el horario
especificados por la tabla suministrada. Esta tabla debe tener campos year, month y day y puede tener campos
hour, min, sec e isdst (para una descripción de estos campos, ver la función os.date).
272
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
El valor retornado es un número, cuyo significado depende de su sistema. En POSIX, Windows y algunos otros
sistemas, este número cuenta el número de segundos desde algún tiempo de inicio dado (a "era"). En otros
sistemas, el significado no se especifica y el número retornado por equipo se puede usar solamente como un
argumento para date y difftime.
os.tmpname ()
Retorna una cadena de caracteres con el nombre de un archivo que se puede usar para un archivo temporal. El
archivo debe ser explícitamente abierto antes de ser usado y explícitamente removido cuando no sea más
necesario.
B.5.11 Biblioteca de depuración
Esta biblioteca provee las funcionalidades de la interfaz de depuración para programas Lua. Se debe tener
cuidado al usar esta biblioteca. Las funciones suministradas aquí deben ser usadas exclusivamente para
depuración y tareas análogas, tales como medición (profiling). Debe evitarse usarlas como una herramienta de
programación usual: pueden ser muy lentas. Además de ello, varias de esas funciones violan algunas
suposiciones al respecto del código Lua (por ejemplo, que variables locales a una función no se pueden acceder
de fuera de la función o que meta-tablas de objetos userdata no pueden ser modificadas por código Lua) y por lo
tanto pueden comprometer un código que, de otro modo, sería seguro.
Todas las funciones en esta biblioteca son suministradas en la tabla debug. Todas las funciones que operan sobre
un objeto del tipo thread poseen un primer argumento opcional que es el objeto thread sobre el cual la función
debe operar. El estándar es siempre el flujo de ejecución corriente.
debug.debug ()
Entra en un modo interactivo con el usuario, ejecutando cada cadena de caracteres que el usuario entra. Usando
comandos simples y otros mecanismos de depuración, el usuario puede inspeccionar variables globales y locales,
alterar el valor de las mismas, evaluar expresiones, etc. Una línea conteniendo solamente la palabra cont termina
esta función, de modo que la función llamadora continúa su ejecución.
Los comandos para debug.debug no son anidados de modo léxico dentro de ninguna función y, por lo tanto, no
poseen acceso directo a variables locales.
debug.getfenv (o)
Retorna el ambiente del objeto o.
debug.gethook ()
Retorna las configuraciones de gancho corrientes del flujo de ejecución como tres valores: La función de gancho
corriente, la máscara de gancho corriente y el conteo de gancho corriente (como establecido por la función
debug.sethook).
debug.getinfo (function [, what])
Retorna una tabla con información sobre una función. Se puede suministrar la función directamente o se puede
suministrar un número como el valor de function, que significa la función ejecutando en el nivel function de la pila
de llamadas del flujo de ejecución suministrado: Nivel 0 es la función corriente (la propia getinfo); nivel 1 es la
función que llamó a getinfo; y así sucesivamente. Si function es un número mayor que el número de funciones
activas, entonces getinfo retorna nil.
© ABNT 2007 - Todos los derechos reservados
273
ABNT NBR 15606-2:2007
La tabla retornada puede contener todos los campos retornados por lua_getinfo, con la cadena what describiendo
cuáles campos deben ser rellenados. El estándar para what es obtener todas las informaciones disponibles,
excepto la tabla de líneas válidas. En caso de estar presente, la opción 'f' agrega un campo llamado func con la
propia función. En caso de estar presente, la opción 'L' agrega un campo llamado activelines con la tabla de
líneas válidas.
Por ejemplo, la expresión debug.getinfo(1,"n").name retorna una tabla con un nombre para la función corriente, si
un nombre razonable puede ser encontrado, y la expresión debug.getinfo(print) retorna una tabla con todas las
informaciones disponibles sobre la función print.
debug.getlocal (level, local)
Esta función retorna el nombre y el valor de la variable local con índice local de la función en el nivel level de la
pila (el primer parámetro o variable local posee índice 1 y así sucesivamente, hasta la última variable local activa).
La función retorna nil si no existe una variable local con el índice suministrado y dispara un error cuando llamada
con un level fuera de la banda de valores válidos (se puede llamar a debug.getinfo para verificar si el nivel es
válido).
Nombres de variables que empiezan con '(' (abre paréntesis) representan variables internas (variables de control
de lazos, temporales y locales de funciones C).
debug.getmetatable (object)
Retorna la meta-tabla del object suministrado o nil si él no posee una meta-tabla.
debug.getregistry ()
Retorna la tabla de registro (ver B.3.6).
debug.getupvalue (func, up)
Esta función retorna el nombre y el valor del upvalue con índice up de la función func. La función retorna nil si no
hay un upvalue con el índice suministrado.
debug.setfenv (object, table)
Establece la tabla table como el ambiente del object suministrado. Retorna object.
debug.sethook (hook, mask [, count])
Establece la función suministrada como un gancho. La cadena mask y el número count describen cuando el
gancho será llamado. La cadena mask puede tener los siguientes caracteres, con el respectivo significado:
 "c" : el gancho es llamado siempre que Lua llama una función;
 "r" : el gancho es llamado siempre que Lua retorna de una función;
 "l" : el gancho es llamado siempre que Lua entra una nueva línea de código.
Con un count diferente de cero, el gancho es llamado después de cada count instrucciones.
Cuando llamada sin argumentos, debug.gethook deshabilita el gancho.
274
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Cuando el gancho se llama, su primer parámetro es una cadena de caracteres describiendo el evento que
disparó su llamada: "Call", "return" (o "tail return"), "line" y "count". Para eventos de línea, el gancho también
obtiene el nuevo número de línea como su segundo parámetro. Dentro del gancho, es posible llamar a getinfo
con nivel 2 para obtener más información sobre la función siendo ejecutada (nivel 0 es la función getinfo y nivel 1
es la función de gancho), a menos que el evento sea "tail return". En este caso, Lua está solamente simulando el
retorno y una llamada a getinfo retornará datos inválidos.
debug.setlocal (level, local, value)
Esta función atribuye el valor value a la variable local con índice local de la función en el nivel level de la pila. La
función retorna nil si no hay una variable local con el índice suministrado y dispara un error cuando llamada con
un level fuera de la banda de valores válidos (se puede llamar a getinfo para verificar si el nivel es válido). En
caso contrario, la función retorna el nombre de la variable local.
debug.setmetatable (object, table)
Establece table como la meta-tabla del object suministrado (table puede ser nil).
debug.setupvalue (func, up, value)
Esta función atribuye el valor value al upvalue con índice up de la función func. La función retorna nil si no hay un
upvalue con el índice suministrado. En caso contrario, la función retorna el nombre del upvalue.
debug.traceback ([message])
Retorna una cadena de caracteres con un trazo de la pila de llamadas. Una cadena opcional message es
agregada al inicio del trazo. Un número opcional level dice en cuál nivel iniciar el trazo (el estándar es 1, la función
llamando a traceback).
B.6 El interpretador Lua autónomo
Aunque Lua haya sido proyectada como un lenguaje de extensión, para ser incorporada en un programa C
hospedero, Lua también es frecuentemente usada como un lenguaje autosuficiente. Un interpretador para Lua
como un lenguaje autosuficiente, llamado simplemente lua, se suministra con la distribución estándar. Ese
interpretador incluye todas las bibliotecas estándar, incluso la biblioteca de depuración. Su uso es:
lua [ options] [ script [ args]]
Las opciones son:

-e stat : ejecuta la cadena stat;

-l mod : "requisita" mod;

-i : entra en modo interactivo después de ejecutar script;

-v : imprime información de versión;

-- : para de tratar opciones;

- : ejecuta stdin como un archivo y para de tratar opciones.
© ABNT 2007 - Todos los derechos reservados
275
ABNT NBR 15606-2:2007
Después de tratar sus opciones, Lua ejecuta el script suministrado, pasándole los args suministrados como
cadenas de argumentos. Cuando llamado sin argumentos, lua se comporta como lua -v -i cuando la entrada
estándar (stdin) es un terminal y como lua - en caso contrario.
Antes de ejecutar cualquier argumento, el interpretador verifica si hay una variable de ambiente LUA_INIT. Si su
formato es @filename, entonces lua ejecuta el archivo. En caso contrario, lua ejecuta la propia cadena de
caracteres.
Todas las opciones son manejadas en el orden dado, excepto -i. Por ejemplo, una invocación como
$ lua -e'Val=1' -e 'print(Val) ' script.lua
irá primero atribuir 1 a a, después imprimirá el valor de a (que es '1') y finalmente ejecutará el archivo script.lua sin
argumentos (aquí $ es el prompt del interpretador de comandos. Se puede tener un prompt diferente).
Antes de empezar a ejecutar el script, lua guarda todos los argumentos suministrados en la línea de comando en
una tabla global llamada arg. El nombre del script es almacenado en el índice 0, el primer argumento después del
nombre del script queda en el índice 1 y así sucesivamente. Cualesquiera argumentos antes del nombre del script
(es decir, el nombre del interpretador más las opciones) quedan en índices negativos. Por ejemplo, en la llamada
$ lua -la b.lua t1 t2
el interpretador primero ejecuta el archivo a.lua, después crea la tabla
arg = { [-2] = "lua", [-1] = "-la",
[0] = "b.lua",
[1] = "t1", [2] = "t2" }
y finalmente ejecuta el archivo b.lua. El script es llamado con arg[1], arg[2], ··· como argumentos; él también
puede acceder a estos argumentos con la expresión vararg '...'.
En modo interactivo, si se escribe un comando incompleto, el interpretador espera que lo complete e indica esto a
través de un prompt diferente.
Si la variable global _PROMPT contiene una cadena de caracteres, entonces su valor se utiliza como el prompt.
De manera análoga, si la variable global _PROMPT2 contiene una cadena, su valor se utiliza como el prompt
secundario (mostrado durante comandos incompletos). Por lo tanto, los dos prompts pueden ser modificados
directamente en la línea de comando o en cualesquiera programas Lua haciendo una atribución a _PROMPT. Ver
el ejemplo a continuación:
$ lua -e"_PROMPT='myprompt> '" –i
El par de comillas más externo es para el interpretador de comandos y el par más interno es para Lua. El uso de -i
para entrar en modo interactivo; en caso contrario, el programa iría a terminar silenciosamente después de la
atribución a _PROMPT.
Para permitir el uso de Lua como un interpretador de scripts en sistemas Unix, el interpretador de línea de
comando salta la primera línea de un trecho de código si él empieza con #. Por lo tanto, scripts Lua se pueden
usar como programas ejecutables usando chmod +x y la forma #!, como en
#! /usr/local/bin/lua
276
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
Está claro que la localización del interpretador Lua puede ser diferente en su máquina. Si lua está en su PATH,
entonces
#! /usr/bin/env lua
es una solución más portable.
B.7 Incompatibilidades con la versión 5.0
NOTA
Las incompatibilidades que pueden ser encontradas cuando se pasa un programa de Lua 5.0 para Lua 5.1 se listan
en esta sección. Se puede evitar la mayoría de las incompatibilidades compilando Lua con opciones apropiadas (ver el archivo
luaconf.h). Sin embargo, todas esas opciones de compatibilidad serán removidas en la próxima versión de Lua.
B.7.1 Cambios en el lenguaje
A continuación se listan las alteraciones en el lenguaje introducidos en Lua 5.1:
 el sistema de vararg cambió del pseudo-argumento arg con una tabla con los argumentos extras para la
expresión vararg (ver la opción de tiempo de compilación LUA_COMPAT_VARARG en luaconf.h);
 hubo un cambio sutil en el alcance de las variables implícitas del comando for y del comando repeat;
 la sintaxis de cadena larga/comentario largo ([[string]]) no permite anidado. En esos casos se puede usar la
nueva sintaxis ([=[string]=]) (ver la opción de tiempo de compilación LUA_COMPAT_LSTR em luaconf.h).
B.7.2 Cambios en las bibliotecas
A continuación se listan las alteraciones en las bibliotecas estándar introducidas en Lua 5.1:
 la función string.gfind fue rebautizada como string.gmatch (ver la opción de tiempo de compilación
LUA_COMPAT_GFIND en luaconf.h);
 cuando string.gsub es llamada con una función como su tercer argumento, siempre que esta función
retorna nil o false la cadena de reemplazo es la coincidencia entera, en vez de la cadena vacía;
 la función table.setn está ultrapasada y no se debe usar. La función table.getn corresponde al nuevo
operador de tamaño (#); usar el operador em vez de la función (ver la opción de tiempo de compilación
LUA_COMPAT_GETN em luaconf.h.);
 la función loadlib fue rebautizada como package.loadlib (ver la opción de tiempo de compilación LUA_COM
PAT_LOADLI B en luaconf.h);
 la función math.mod fue rebautizada como math.fmod (ver la opción de tiempo de compilación
LUA_COMPAT_MOD en luaconf.h);
 las funciones table.foreach y table.foreachi están ultrapasadas y no deben ser usadas. Se puede usar un
lazo for con pairs o ipairs en vez de las mismas;
 hubo cambios sustanciales en la función require debido al nuevo sistema de módulos. El nuevo
comportamiento es básicamente compatible con el antiguo, aunque ahora require obtiene el camino de
package.path y no más de LUA_PATH;
 la función collectgarbage posee argumentos diferentes. La función gcinfo está ultrapasada y no se debe
usar; usar collectgarbage("count") en vez de la misma.
© ABNT 2007 - Todos los derechos reservados
277
ABNT NBR 15606-2:2007
B.7.3 Cambios en la API
A continuación son listadas los cambios en la API C introducidas en Lua 5.1:
 las funciones luaopen_* (para abrir bibliotecas) no pueden ser llamadas directamente, como una función C
común. Deben ser llamadas a través de Lua, como una función Lua;
 la función lua_open fue reemplazada por lua_newstate para permitir que el usuario defina una función de
asignación de memoria. Se puede usar luaL_newstate de la biblioteca estándar para crear un estado con
una función de asignación estándar (con base en realloc);
 las funciones luaL_getn y luaL_setn (de la biblioteca auxiliar) están ultrapasadas y no deben usarse.
Usar lua_objlen en vez de lua_getn y nada en lugar de lua_setn;
 la función luaL_openlib fue reemplazada por luaL_register;
 la función luaL_checkudata ahora dispara un error cuando el valor suministrado no es un objeto userdata
del tipo esperado (en Lua 5.0 retornaba NULL).
B.8 Sintaxis completa de Lua
La sintaxis completa de Lua en la notación BNF extendida es la siguiente (no describe las precedencias de los
operadores):
chunk ::= {stat [`;´]} [laststat[`;´]]
block ::= chunk
stat ::= varlist1 `=´ explist1 |
functioncall |
do block end |
while exp do block end |
repeat block until exp |
if exp then block {elseif exp then block}[else block] end |
for Name `=´ exp `,´ exp [ `,´ exp] del block end
|
for namelist in explist1 do block end |
function funcname funcbody |
local function Name funcbody |
local namelist [`=´ explist1]
278
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
laststat ::= return [explist1] | break
funcname ::= Name {`.´ Name} [`:´ Name]
varlist1 ::= var {`,´ var}
var ::= Name | prefixexp `[´ exp `]´ | prefixexp `.´ Name
namelist ::= Name {`,´ Name}
explist1 ::= {exp `,´} exp
exp ::= nil | false | true | Number | String | `...´ |
function | prefixexp | tableconstructor |
exp binop | exp | unop exp
prefixexp ::= var | functioncall | `(´ exp `)´
functioncall ::= prefixexp args | prefixexp `:´ Name args
args ::= `(´ [explist1] `)´ | tableconstructor | String
function ::= function funcbody
funcbody ::= `(´ [parlist1] `)´ block end
parlist1 ::= namelist [`,´ `...´] | `...´
tableconstructor ::= `{´ [fieldlist] `}´
fieldlist ::= field {fieldsep field} [fieldsep]
field ::= `[´ exp `]´ `=´ exp | Name `=´ exp | exp
fieldsep ::= `,´ | `;´
binop ::= `+´ | `-´ | `*´ | `/´ | `^´ | `%´ | `..´ |
`<´ | `<=´ | `>´ | `>=´ | `==´ | `~=´ |
and | or
unop ::= `-´ | not | `#´
© ABNT 2007 - Todos los derechos reservados
279
ABNT NBR 15606-2:2007
Anexo C
(informativo)
Base de conectores
Esta base de conectores puede ser importada por cualquier documento NCL 3.0.
<!-This is NCL
Copyright: 2000-2005 PUC-RIO/LABORATORIO TELEMIDIA, All Rights Reserved.
See http://www.telemidia.puc-rio.br
Public URI: http://www.ncl.org.br/NCL3.0/connectorBases/causalConnBase.ncl
Author: TeleMidia Laboratory
Revision: 19/09/2006
-->
<?xml version="1.0" encoding="ISO-8859-1"?>
<ncl id="causalConnBase" xmlns="http://www.ncl.org.br/NCL3.0/CausalConnectorProfile">
<head>
<connectorBase>
<!-- OnBegin -->
<causalConnector id="onBeginStart">
<simpleCondition role="onBegin"/>
<simpleAction role="start"/>
</causalConnector>
<causalConnector id="onBeginStop">
<simpleCondition role="onBegin"/>
<simpleAction role="stop"/>
</causalConnector>
<causalConnector id="onBeginPause">
<simpleCondition role="onBegin"/>
<simpleAction role="pause"/>
</causalConnector>
<causalConnector id="onBeginResume">
<simpleCondition role="onBegin"/>
<simpleAction role="resume"/>
</causalConnector>
<causalConnector id="onBeginSet">
<connectorParam name="var"/>
<simpleCondition role="onBegin"/>
<simpleAction role="set" value="$var"/>
</causalConnector>
<!-- OnEnd -->
<causalConnector id="onEndStart">
<simpleCondition role="onEnd"/>
<simpleAction role="start"/>
280
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
</causalConnector>
<causalConnector id="onEndStop">
<simpleCondition role="onEnd"/>
<simpleAction role="stop"/>
</causalConnector>
<causalConnector id="onEndPause">
<simpleCondition role="onEnd"/>
<simpleAction role="pause"/>
</causalConnector>
<causalConnector id="onEndResume">
<simpleCondition role="onEnd"/>
<simpleAction role="resume"/>
</causalConnector>
<causalConnector id="onEndSet">
<connectorParam name="var"/>
<simpleCondition role="onEnd"/>
<simpleAction role="set" value="$var"/>
</causalConnector>
<!-- OnMouseSelection -->
<causalConnector id="onSelectionStart">
<simpleCondition role="onSelection"/>
<simpleAction role="start" />
</causalConnector>
<causalConnector id="onSelectionStop">
<simpleCondition role="onSelection"/>
<simpleAction role="stop" />
</causalConnector>
<causalConnector id="onSelectionPause">
<simpleCondition role="onSelection"/>
<simpleAction role="pause" />
</causalConnector>
<causalConnector id="onSelectionResume">
<simpleCondition role="onSelection"/>
<simpleAction role="resume" />
</causalConnector>
<causalConnector id="onSelectionSetVar">
<connectorParam name="var" />
<simpleCondition role="onSelection"/>
<simpleAction role="set" value="$var"/>
</causalConnector>
<!-- OnKeySelection -->
<causalConnector id="onKeySelectionStart">
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<simpleAction role="start"/>
</causalConnector>
<causalConnector id="onKeySelectionStop">
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<simpleAction role="stop"/>
</causalConnector>
© ABNT 2007 - Todos los derechos reservados
281
ABNT NBR 15606-2:2007
<causalConnector id="onKeySelectionPause">
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<simpleAction role="pause"/>
</causalConnector>
<causalConnector id="onKeySelectionResume">
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<simpleAction role="resume"/>
</causalConnector>
<causalConnector id="onKeySelectionSetVar">
<connectorParam name="keyCode"/>
<connectorParam name="var"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<simpleAction role="set" value="$var"/>
</causalConnector>
<!-- OnBeginAttribution -->
<causalConnector id="onBeginAttributionStart">
<simpleCondition role="onBeginAttribution"/>
<simpleAction role="start"/>
</causalConnector>
<causalConnector id="onBeginAttributionStop">
<simpleCondition role="onBeginAttribution"/>
<simpleAction role="stop"/>
</causalConnector>
<causalConnector id="onBeginAttributionPause">
<simpleCondition role="onBeginAttribution"/>
<simpleAction role="pause"/>
</causalConnector>
<causalConnector id="onBeginAttributionResume">
<simpleCondition role="onBeginAttribution"/>
<simpleAction role="resume"/>
</causalConnector>
<causalConnector id="onBeginAttributionSet">
<connectorParam name="var"/>
<simpleCondition role="onBeginAttribution"/>
<simpleAction role="set" value="$var"/>
</causalConnector>
<!-- OnEndAttribution -->
<causalConnector id="onEndAttributionStart">
<simpleCondition role="onEndAttribution"/>
<simpleAction role="start"/>
</causalConnector>
<causalConnector id="onEndAttributionStop">
<simpleCondition role="onEndAttribution"/>
<simpleAction role="stop"/>
</causalConnector>
<causalConnector id="onEndAttributionPause">
<simpleCondition role="onEndAttribution"/>
<simpleAction role="pause"/>
</causalConnector>
282
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<causalConnector id="onEndAttributionResume">
<simpleCondition role="onEndAttribution"/>
<simpleAction role="resume"/>
</causalConnector>
<causalConnector id="onEndAttributionSet">
<connectorParam name="var"/>
<simpleCondition role="onEnd"/>
<simpleAction role="set" value="$var"/>
</causalConnector>
<!-- OnBegin multiple actions -->
<causalConnector id="onBeginStartStop">
<simpleCondition role="onBegin"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="stop"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginStartPause">
<simpleCondition role="onBegin"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginStartResume">
<simpleCondition role="onBegin"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginStartSet">
<connectorParam name="var"/>
<simpleCondition role="onBegin"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="set" value="$var"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginStopStart">
<simpleCondition role="onBegin"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="start"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginStopPause">
<simpleCondition role="onBegin"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginStopResume">
<simpleCondition role="onBegin"/>
© ABNT 2007 - Todos los derechos reservados
283
ABNT NBR 15606-2:2007
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginStopSet">
<connectorParam name="var"/>
<simpleCondition role="onBegin"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="set" value="$var"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginSetStart">
<connectorParam name="var"/>
<simpleCondition role="onBegin"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="start"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginSetStop">
<connectorParam name="var"/>
<simpleCondition role="onBegin"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="stop"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginSetPause">
<connectorParam name="var"/>
<simpleCondition role="onBegin"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginSetResume">
<connectorParam name="var"/>
<simpleCondition role="onBegin"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<!-- OnEnd multiple actions -->
<causalConnector id="onEndStartStop">
<simpleCondition role="onEnd"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="stop"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndStartPause">
<simpleCondition role="onEnd"/>
<compoundAction operator="seq">
284
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<simpleAction role="start"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndStartResume">
<simpleCondition role="onEnd"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndStartSet">
<connectorParam name="var"/>
<simpleCondition role="onEnd"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="set" value="$var"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndStopStart">
<simpleCondition role="onEnd"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="start"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndStopPause">
<simpleCondition role="onEnd"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndStopResume">
<simpleCondition role="onEnd"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndStopSet">
<connectorParam name="var"/>
<simpleCondition role="onEnd"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="set" value="$var"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndSetStart">
<connectorParam name="var"/>
<simpleCondition role="onEnd"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="start"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndSetStop">
© ABNT 2007 - Todos los derechos reservados
285
ABNT NBR 15606-2:2007
<connectorParam name="var"/>
<simpleCondition role="onEnd"/>
<compoundAction operator="seq">
<simpleAction role="stet" value="$var"/>
<simpleAction role="stop"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndSetPause">
<connectorParam name="var"/>
<simpleCondition role="onEnd"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndSetResume">
<connectorParam name="var"/>
<simpleCondition role="onEnd"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<!-- OnMouseSelection multiple actions -->
<causalConnector id="onSelectionStartStop">
<simpleCondition role="onSelection"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="stop"/>
</compoundAction>
</causalConnector>
<causalConnector id="onSelectionStartPause">
<simpleCondition role="onSelection"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onSelectionStartResume">
<simpleCondition role="onSelection"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<causalConnector id="onSelectionStartSet">
<connectorParam name="var"/>
<simpleCondition role="onSelection"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="set" value="$var"/>
</compoundAction>
</causalConnector>
<causalConnector id="onSelectionStopStart">
<simpleCondition role="onEnd"/>
<compoundAction operator="seq">
286
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<simpleAction role="stop"/>
<simpleAction role="start"/>
</compoundAction>
</causalConnector>
<causalConnector id="onSelectionStopPause">
<simpleCondition role="onSelection"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onSelectionStopResume">
<simpleCondition role="onSelection"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<causalConnector id="onSelectionStopSet">
<connectorParam name="var"/>
<simpleCondition role="onSelection"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="set" value="$var"/>
</compoundAction>
</causalConnector>
<causalConnector id="onSelectionSetStart">
<connectorParam name="var"/>
<simpleCondition role="onSelection"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="start"/>
</compoundAction>
</causalConnector>
<causalConnector id="onSelectionSetStop">
<connectorParam name="var"/>
<simpleCondition role="onSelection"/>
<compoundAction operator="seq">
<simpleAction role="stet" value="$var"/>
<simpleAction role="stop"/>
</compoundAction>
</causalConnector>
<causalConnector id="onSelectionSetPause">
<connectorParam name="var"/>
<simpleCondition role="onSelection"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onSelectionSetResume">
<connectorParam name="var"/>
<simpleCondition role="onSelection"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
© ABNT 2007 - Todos los derechos reservados
287
ABNT NBR 15606-2:2007
<!-- OnKeySelection multiple actions -->
<causalConnector id="onKeySelectionStartStop">
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="stop"/>
</compoundAction>
</causalConnector>
<causalConnector id="onKeySelectionStartPause">
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onKeySelectionStartResume">
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<causalConnector id="onKeySelectionStartSet">
<connectorParam name="var"/>
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="set" value="$var"/>
</compoundAction>
</causalConnector>
<causalConnector id="onKeySelectionStopStart">
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="start"/>
</compoundAction>
</causalConnector>
<causalConnector id="onKeySelectionStopPause">
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onKeySelectionStopResume">
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="resume"/>
288
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
</compoundAction>
</causalConnector>
<causalConnector id="onKeySelectionStopSet">
<connectorParam name="var"/>
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="set" value="$var"/>
</compoundAction>
</causalConnector>
<causalConnector id="onKeySelectionSetStart">
<connectorParam name="var"/>
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="start"/>
</compoundAction>
</causalConnector>
<causalConnector id="onKeySelectionSetStop">
<connectorParam name="var"/>
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="stop"/>
</compoundAction>
</causalConnector>
<causalConnector id="onKeySelectionSetPause">
<connectorParam name="var"/>
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onKeySelectionSetResume">
<connectorParam name="var"/>
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<!-- OnBeginAttribution multiple actions -->
<causalConnector id="onBeginAttributionStartStop">
<simpleCondition role="onBeginAttribution"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="stop"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginAttributionStartPause">
© ABNT 2007 - Todos los derechos reservados
289
ABNT NBR 15606-2:2007
<simpleCondition role="onBeginAttribution"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginAttributionStartResume">
<simpleCondition role="onBeginAttribution"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginAttributionStartSet">
<connectorParam name="var"/>
<simpleCondition role="onBeginAttribution"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="set" value="$var"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginAttributionStopStart">
<simpleCondition role="onBeginAttribution"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="start"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginAttributionStopPause">
<simpleCondition role="onBeginAttribution"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginAttributionStopResume">
<simpleCondition role="onBeginAttribution"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginAttributionStopSet">
<connectorParam name="var"/>
<simpleCondition role="onBeginAttribution"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="set" value="$var"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginAttributionSetStart">
<connectorParam name="var"/>
<simpleCondition role="onBeginAttribution"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="start"/>
</compoundAction>
</causalConnector>
290
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
<causalConnector id="onBeginAttributionSetStop">
<connectorParam name="var"/>
<simpleCondition role="onBeginAttribution"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="stop"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginAttributionSetPause">
<connectorParam name="var"/>
<simpleCondition role="onBeginAttribution"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onBeginAttributionSetResume">
<connectorParam name="var"/>
<simpleCondition role="onBeginAttribution"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<!-- OnEndAttribution multiple actions -->
<causalConnector id="onEndAttributionStartStop">
<simpleCondition role="onEndAttribution"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="stop"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndAttributionStartPause">
<simpleCondition role="onEndAttribution"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndAttributionStartResume">
<simpleCondition role="onEndAttribution"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndAttributionStartSet">
<connectorParam name="var"/>
<simpleCondition role="onEndAttribution"/>
<compoundAction operator="seq">
<simpleAction role="start"/>
<simpleAction role="set" value="$var"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndAttributionStopStart">
© ABNT 2007 - Todos los derechos reservados
291
ABNT NBR 15606-2:2007
<simpleCondition role="onEndAttribution"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="start"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndAttributionStopPause">
<simpleCondition role="onEndAttribution"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndAttributionStopResume">
<simpleCondition role="onEndAttribution"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndAttributionStopSet">
<connectorParam name="var"/>
<simpleCondition role="onEndAttribution"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="set" value="$var"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndAttributionSetStart">
<connectorParam name="var"/>
<simpleCondition role="onEndAttribution"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="start"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndAttributionSetStop">
<connectorParam name="var"/>
<simpleCondition role="onEndAttribution"/>
<compoundAction operator="seq">
<simpleAction role="stet" value="$var"/>
<simpleAction role="stop"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndAttributionSetPause">
<connectorParam name="var"/>
<simpleCondition role="onEndAttribution"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="pause"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndAttributionSetResume">
<connectorParam name="var"/>
<simpleCondition role="onEndAttribution"/>
<compoundAction operator="seq">
<simpleAction role="set" value="$var"/>
<simpleAction role="resume"/>
292
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-2:2007
</compoundAction>
</causalConnector>
<!--Miscellaneous-->
<causalConnector id="onKeySelectionStopResizePauseStart">
<connectorParam name="width"/>
<connectorParam name="height"/>
<connectorParam name="left"/>
<connectorParam name="top"/>
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="setWidth" value="$width"/>
<simpleAction role="setHeight" value="$height"/>
<simpleAction role="setLeft" value="$left"/>
<simpleAction role="setTop" value="$top"/>
<simpleAction role="pause"/>
<simpleAction role="start"/>
</compoundAction>
</causalConnector>
<causalConnector id="onEndResizeResume">
<connectorParam name="left"/>
<connectorParam name="top"/>
<connectorParam name="width"/>
<connectorParam name="height"/>
<simpleCondition role="onEnd"/>
<compoundAction operator="seq">
<simpleAction role="setLeft" value="$left"/>
<simpleAction role="setTop" value="$top"/>
<simpleAction role="setWidth" value="$width"/>
<simpleAction role="setHeight" value="$height"/>
<simpleAction role="resume"/>
</compoundAction>
</causalConnector>
<causalConnector id="onKeySelectionStopSetPauseStart">
<connectorParam name="bounds"/>
<connectorParam name="keyCode"/>
<simpleCondition role="onSelection" key="$keyCode"/>
<compoundAction operator="seq">
<simpleAction role="stop"/>
<simpleAction role="set" value="$bounds"/>
<simpleAction role="pause"/>
<simpleAction role="start"/>
</compoundAction>
</causalConnector>
</connectorBase>
</head>
</ncl>
© ABNT 2007 - Todos los derechos reservados
293
ABNT NBR 15606-2:2007
Bibliografía
[1]
ITU Recommendation J.201:2004, Harmonization of declarative content format for interactive television
applications
[2] ARIB STD-B24:2004, Data coding and transmission specifications for digital broadcasting
[3]
Cascading Style Sheets, Cascading Style Sheets, level 2, Bert Bos, Håkon Wium Lie, Chris Lilley, Ian
Jacobs. W3C Recommendation 12. Maio de 1998, disponínel em <http://www.w3.org/TR/REC-CSS2>
[4]
DVB-HTML, Perrot P. DVB-HTML - An Optional Declarative Language within MHP 1.1, EBU Technical
Review. 2001
[5]
Namespaces in XML, Namespaces in XML, W3C Recommendation. Janeiro de 1999
[6]
NCM Core, Soares L.F.G; Rodrigues R.F. Nested Context Model 3.0: Part 1 – NCM Core, Technical
Report, Departamento de Informática PUC-Rio. Maio de 2005, ISSN: 0103-9741. Também disponível em
<http://www.ncl.org.br>
[7]
NCL Digital TV Profiles, Soares L.F.G; Rodrigues R.F. Part 8 – NCL (Nested Context Language) Digital TV
Profiles, Technical Report, Departamento de Informática PUC-Rio, No. 35/06. Outubro de 2006, ISSN:
0103-9741. Também disponível em <http://www.ncl.org.br>
[8]
NCL Live Editing Commands, Soares L.F.G; Rodrigues R.F; Costa, R.R.; Moreno, M.F. Part 9 – NCL Live
Editing Commands. Technical Report, Departamento de Informática PUC-Rio, No. 36/06. Dezembro de
2006, ISSN: 0103-9741. Também disponível em <http://www.ncl.org.br>
[9]
NCL-Lua, Cerqueira, R,; Sant’Anna, F. Nested Context Model 3.0: Part 11 – Lua Scripting Language for
NCL, Technical Report, Departamento de Informática PUC-Rio. Maio de 2007, ISSN: 0103-9741.
[10]
NCL Main Profile, Soares L.F.G; Rodrigues R.F; Costa, R.R. Nested Context Model 3.0: Part 6 – NCL
(Nested Context Language) Main Profile, Technical Report, Departamento de Informática PUC-Rio. Maio
de 2005, ISSN: 0103-9741. Também disponível em <http://www.ncl.org.br>
[11]
RDF, Resource Description Framework (RDF) Model and Syntax Specification, Ora Lassila and Ralph R.
Swick. W3C Recommendation. 22 de fevereiro de 1999. Disponível em <http://www.w3.org/TR/REC-rdfsyntax/>
[12]
SMIL 2.1 Specification, SMIL 2.1 - Synchronized Multimedia Integration Language – SMIL 2.1 Specification,
W3C Recommendation. Dezembro de 2005
[13]
XHTML 1.0, XHTML™ 1.0 2º Edition - Extensible HyperText Markup Language, W3C Recommendation,
Agosto de 2002
[14]
Programming in Lua,
ISBN 85-903798-2-5.
[15]
294
Segunda
Edição,
de
Roberto
Ierusalimschy
et
al.
Março
de
2006,
ACAP, Advanced Application Platform (ACAP), ATSC Standard: Document A/101. Agosto de 2005
© ABNT 2007 - Todos los derechos reservados
NORMA
BRASILEÑA
ABNT NBR
15606-3
Primera edición
30.11.2007
Válida a partir de
01.12.2007
Televisión digital terrestre — Codificación de
datos y espacificaciones de transmisión para
radiodifusión digital
Parte 3: Espacificación de transmisión de
datos
Palabras clave: Televisión digital terrestre. Radiodifusión digital. Transmisión
de datos.
ICS 33.160.
ISBN 978-85-07-00932-0
Número de referencia
ABNT NBR 15606-3:2008
82 páginas
© ABNT 2007
ABNT NBR 15606-3:2007
© ABNT 2007
Todos los derechos reservados. A menos que se especifique de otro modo, ninguna parte de esta publicación puede ser
reproducida o utilizada por cualquier medio, electrónico o mecánico, incluyendo fotocopia y microfilm, sin permiso por escrito de
la ABNT.
ABNT
Av.Treze de Maio, 13 - 28º andar
20031-901 - Rio de Janeiro - RJ
Tel.: + 55 21 3974-2300
Fax: + 55 21 2220-1762
[email protected]
www.abnt.org.br
Impresso en Brasi
ii
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Índice
Página
Prefacio.......................................................................................................................................................................vi
1
Alcance ...........................................................................................................................................................1
2
Referencias normativas ................................................................................................................................1
3
Términos y definiciones................................................................................................................................2
4
Tipos de especificación de transmisión de datos .....................................................................................7
5
5.1
5.2
5.2.1
5.2.2
5.3
5.4
5.4.1
5.4.2
5.4.3
5.4.4
5.4.5
5.4.6
5.4.7
5.4.8
5.4.9
5.5
5.5.1
5.5.2
5.5.3
5.5.4
Especificación de transmisión del carrusel de datos................................................................................8
Transmisión con carrusel de datos DSM-CC .............................................................................................8
Mensaje de control DSM-CC.........................................................................................................................8
Mensaje de indicación de información de download (DII) ........................................................................8
Sintaxis y semántica del mensaje DII ..........................................................................................................8
Sintaxis y semántica del dsmccMessageHeader()...................................................................................10
Descriptores del área de información del módulo y área privada .........................................................12
Tipos de descriptores .................................................................................................................................12
Descriptor de tipo ........................................................................................................................................12
Descriptor del nombre ................................................................................................................................13
Descriptor de información ..........................................................................................................................13
Descriptor del Module_link.........................................................................................................................14
Descriptor de la localización ......................................................................................................................14
Descriptor CRC ............................................................................................................................................15
Descriptor de tiempo estimado de download...........................................................................................15
Descriptor de tipo de compresión .............................................................................................................15
Mensaje DownloadDataBlock (DDB) .........................................................................................................16
Sintaxis y semántica del mensaje DDB.....................................................................................................16
Sintaxis y semántica del dsmccDownloadDataHeader().........................................................................16
Sintaxis del dsmccAdaptationHeader().....................................................................................................17
Sintaxis de la sección DSM-CC..................................................................................................................18
6
6.1
6.2
6.2.1
6.2.2
6.3
6.3.1
6.3.2
6.3.3
Especificación del carrusel de objetos .....................................................................................................20
Objetivo del carrusel de objetos ................................................................................................................20
Especificación del transporte de datos.....................................................................................................21
Dirección de carrusel NSAP .......................................................................................................................21
Estructura de la dirección NSAP del carrusel ..........................................................................................21
Descriptores.................................................................................................................................................22
Especificación PSI y SI ...............................................................................................................................22
Deferred_association_tags_descriptor .....................................................................................................22
Tipo de flujo .................................................................................................................................................23
7
7.1
7.2
7.3
7.4
Encapsulado multiprotocolo (MPE)...........................................................................................................24
Especificación de transporte de datos......................................................................................................24
Especificaciones PSI y SI ...........................................................................................................................26
Descriptor de protocolo de transporte......................................................................................................26
Tipo de stream .............................................................................................................................................28
8
8.1
8.2
8.3
8.4
Especificación de la transmisión del data piping ....................................................................................28
Especificación del transporte de datos.....................................................................................................28
Especificaciones PSI y SI ...........................................................................................................................28
Descriptor de protocolo de transporte......................................................................................................28
Tipo de stream .............................................................................................................................................28
9
9.1
9.2
9.3
Especificación de transmisión PES independiente .................................................................................28
Transmisión independiente de PES ..........................................................................................................28
PES sincronizada.........................................................................................................................................29
PES asíncrona..............................................................................................................................................29
© ABNT 2007 - Todos los derechos reservados
iii
ABNT NBR 15606-3:2008
10
Protocolos de transporte ............................................................................................................................30
10.1
Protocolo del canal de transmisión...........................................................................................................30
10.1.1 Stream de transporte MPEG-2....................................................................................................................30
10.1.2 Sección MPEG-2 ..........................................................................................................................................30
10.1.3 Datos privados DSM-CC .............................................................................................................................30
10.1.4 Carrusel de datos DSM-CC.........................................................................................................................31
10.1.5 Carrusel de objetos DSM-CC......................................................................................................................31
10.1.6 Protocolo IP de transporte de multicast en un canal de transmisión....................................................31
10.1.7 Protocolo IP..................................................................................................................................................31
10.1.8 Protocolo UDP .............................................................................................................................................31
10.1.9 Informaciones de servicio ..........................................................................................................................31
10.1.10 Señalización de IP .......................................................................................................................................32
10.2
Protocolos de canal de interacción ...........................................................................................................32
10.2.1 Pila de protocolo del canal interactivo......................................................................................................32
10.2.2 Protocolo dependiente de la red................................................................................................................32
10.2.3 Protocolo de internet (IP)............................................................................................................................32
10.2.4 Protocolo de control de transmisión (TCP) ..............................................................................................33
10.2.5 UNO-RPC ......................................................................................................................................................33
10.2.6 UNO-CDR......................................................................................................................................................33
10.2.7 DSM-CC usuario para usuario....................................................................................................................33
10.2.8 Protocolo HTTP............................................................................................................................................33
10.2.9 Protocolo específico para el servicio ........................................................................................................33
10.2.10 Protocolo de datagrama del usuario (UDP) ..............................................................................................33
10.2.11 DNS ...............................................................................................................................................................33
10.3
Protocolos de transporte para aplicaciones siendo cargados en el canal de interacción..................33
11
11.1
11.2
11.3
11.4
Modelo de aplicación ..................................................................................................................................33
Aplicación Ginga .........................................................................................................................................33
Modelo Ginga-J............................................................................................................................................34
Como manejar el modelo NCL ...................................................................................................................34
Gestión de recursos entre aplicaciones ...................................................................................................34
12
Transmisión de informaciones de aplicación ..........................................................................................34
12.1
Descriptores AIT y valores constantes .....................................................................................................34
12.2
Ejecución de la aplicación Ginga...............................................................................................................35
12.3
Señal de aplicaciones comunes ................................................................................................................36
12.4
Señal de aplicación adicional necesaria para Ginga-J............................................................................36
12.5
Informaciones adicionales en PSI/SI .........................................................................................................37
12.6
Identificación del componente de datos ...................................................................................................37
12.7
Descriptor de componente de datos y descriptor de contenidos de datos ..........................................37
12.7.1 Referencia indirecta ....................................................................................................................................37
12.7.2 Descriptor de componente de datos en aplicación Ginga - Sistema de codificación de datos..........38
12.7.3 Descriptor de contenidos de los datos en la aplicación Ginga - Sistema de contenido de datos .....40
12.7.4 Descriptor de componente de datos para transmisión AIT ....................................................................44
12.8
Localizador en descripción de aplicación ................................................................................................46
12.9
Descripción de aplicación ..........................................................................................................................46
12.10 Transmisión y monitoreo de descripción de aplicación .........................................................................47
12.11 Visibilidad de la descripción de aplicación ..............................................................................................47
12.12 Detalles de la descripción de aplicación...................................................................................................47
12.13 Tratamiento de la aplicación a partir del servicio previamente seleccionado......................................47
12.14 Descripción de aplicación específica al Ginga-J .....................................................................................47
12.15 Detalles de la descripción de aplicación Ginga .......................................................................................47
12.16 Sistema de codificación de información de aplicación...........................................................................47
12.16.1 Información de aplicación ..........................................................................................................................47
12.16.2 Application ID – Identificación de codificación de la aplicación............................................................49
12.16.3 Efecto sobre el ciclo de vida ......................................................................................................................50
12.16.4 Autenticación del ID de aplicación ............................................................................................................50
12.16.5 Control de aplicaciones de ciclo de vida ..................................................................................................50
12.16.6 Acceso y salida del dominio de la aplicación ..........................................................................................51
12.16.7 Control dinámico del ciclo de vida de las aplicaciones Ginga ...............................................................51
12.17 Descriptores para AIT - Descriptores para transmisión de informaciones de las aplicaciones.........52
12.17.1 Descriptores comunes ................................................................................................................................52
iv
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2008
12.17.2 Descriptor de aplicación .............................................................................................................................52
12.17.3 Descriptor del nombre de aplicación ........................................................................................................54
12.17.4 Descriptor de la información de los iconos de la aplicación..................................................................54
12.17.5 Descriptor de autorización de aplicación externa ...................................................................................56
12.17.6 Transport protocol descriptor (descriptor de protocolo de transporte)................................................56
12.17.7 Transporte a través del OC (carrusel de objeto) ......................................................................................57
12.17.8 Transporte a través de IP............................................................................................................................58
12.17.9 Descriptor de señalización de IP ...............................................................................................................59
12.18 Descriptores de la aplicación Ginga-J ......................................................................................................62
12.18.1 Estructura del descriptor de aplicaciones Ginga.....................................................................................62
12.18.2 Descriptor de la localización de la aplicación Ginga...............................................................................62
13
13.1
13.2
13.2.1
13.2.2
13.3
13.4
13.5
13.6
Especificación de la transmisión del mensaje del evento ......................................................................63
Mensaje de evento.......................................................................................................................................63
Descriptores de stream...............................................................................................................................64
Descriptor de stream DSM-CC ...................................................................................................................64
Descriptor de referencia NPT .....................................................................................................................64
Descriptor de modo de stream...................................................................................................................66
Descriptores de evento de stream.............................................................................................................67
Descriptor de evento general .....................................................................................................................68
Sintaxis de sección de DSM-CC transmitiendo el descriptor de stream...............................................69
14
Sistema de archivo de difusión y transporte de disparador...................................................................71
Anexo A (normativo) Video y audio PES ................................................................................................................72
A.1
Formato de transmisión de datos a través de la PES de video MPEG-2 codificado............................72
A.2
Formato de transmisión de datos del audio PES codificado con MPEG-2 BC audio ..........................72
A.3
Formato de transmisión de datos del audio PES codificado con MPEG-2 AAC audio........................73
Anexo B (normativo) Información PSI/SI para transmisión de carruseles de datos y mensajes de eventos .74
B.1
Especificación de la codificación de datos con base en el carrusel de datos y esquema de evento
de mensaje ...................................................................................................................................................74
B.2
Contenido de enlace de additional_data_component_info y data_component_descriptor................74
B.3
Byte selector de data_contents_descriptor..............................................................................................75
B.3.1 Data structure ..............................................................................................................................................75
B.3.2 Estructura de datos para control de recepción de carrusel de datos para servicios de datos no
almacenados ................................................................................................................................................75
B.3.3 Estructura de datos para el control de la recepción del carrusel de datos para el servicio de datos
almacenados ................................................................................................................................................76
Anexo C (informativo) Relación entre el descriptor PMT/EIT y AIT .....................................................................79
Anexo D (informativo) Informaciones adicionales sobre trasmisiones utilizando independientes PES.........81
Bibliografia ................................................................................................................................................................82
© ABNT 2007 - Todos los derechos reservados
v
ABNT NBR 15606-3:2007
Prefacio
La Associação Brasileira de Normas Técnicas (ABNT) es el Fórum Nacional de Normalización. Las Normas
Brasileñas, cuyo contenido es responsabilidad de los Comités Brasileños (ABNT/CB), de los Organismos de
Normalización Sectorial (ABNT/ONS) y de las Comisiones de Estudios Especiales (ABNT/CEE), son elaboradas
por Comisiones de Estudio (CE), formadas por representantes de sus sectores implicados de los que forman
parte: productores, consumidores y neutrales (universidades, laboratorios y otros).
Los Documentos Técnicos ABNT se elaboran de acuerdo con las reglas de Directivas ABNT, Parte 2.
La Associação Brasileira de Normas Técnicas (ABNT) llama la atención sobre la posibilidad de que algunos de los
elementos de este documento pueden ser objeto de derechos de patente. La ABNT no debe ser considerada
responsable por la identificación de cualesquiera derechos de patente.
La ABNT NBR 15606-3 fue elaborada por la Comisión de Estudio Especial de Televisión Digital
(ABNT/CEE-00:001.85). El Proyecto circuló en Consulta Nacional según Edicto nº 09, de 06.09.2007 a 05.11.2007,
con el número de Proyecto 00:001.85-006/3.
En caso que surja cualquier duda con relación a la interpretación de la versión en español siempre deben
prevalecer las prescripciones de la versión en portugués
Esta Norma está basada en los trabajos del Fórum del Sistema Brasileiro de Televisão Digital Terrestre,
según establece el Decreto Presidencial nº 5.820, de 29/06/2006.
La ABNT NBR 15606, bajo el título general “Televisión digital terrestre – Codificación de datos y especificaciones
de transmisión para radiodifusión digital”, está previsto que contenga las siguientes partes:
⎯ Parte 1: Codificación de datos;
⎯ Parte 2: Ginga-NCL para receptores fijos y móviles – Lenguaje de aplicación XML para codificación de
aplicaciones;
⎯ Parte 3: Especificación de transmisión de datos;
⎯ Parte 4: Ginga-J – Ambiente para la ejecución de aplicaciones procedurales;
⎯ Parte 5: Ginga-NCL para receptores portátiles – Lenguaje de aplicación XML para codificación de aplicaciones.
Esta versión en español es equivalente a la versión corregida 2 de la ABNT NBR 15606-3:2007, de 22.08.2008.
vi
© ABNT 2007 - Todos los derechos reservados
NORMA BRASILEIRA
ABNT NBR 15606-3:2007
Televisión digital terrestre — Codificación de datos y espacificaciones de
transmisión para radiodifusión digital
Parte 3: Espacificación de transmisión de datos
1
Alcance
Esta parte de la ABNT NBR 15606 suministra una especificación de codificación y transmisión de datos para el
esquema de transmisión digital.
Esta parte de la ABNT NBR 15606 se aplica a la transmisión de datos realizada como parte de la transmisión
digital de datos.
2
Referencias normativas
Los documentos indicados a continuación son indispensables para la aplicación de este documento. Para las
referencias fechadas, se aplican solamente las ediciones citadas. Para las referencias sin fecha, se aplican las
ediciones más recientes del documento citado (incluyendo enmiendas).
ABNT NBR 15603-1, Televisión digital terrestre - Multiplexación y servicios de información (SI) – Parte 1: SI del
sistema de radiodifusión
ABNT NBR 15603-2:2007, Televisión digital terrestre – Multiplexación y servicios de información (SI) –
Parte 2: Estructura de datos y definiciones de la información básica de SI
ABNT NBR 15603-3, Televisión digital terrestre - Multiplexación y servicios de información (SI) – Parte 3: Sintaxis y
definiciones de información extendida del SI
ABNT NBR 15606-1, Televisión digital terrestre – Codificación de datos y especificaciones de transmisión para
radiodifusión digital - Parte 1: Codificación de datos
ABNT NBR 15606-2:2007, Televisión digital terrestre - Codificación de datos y especificaciones de transmisión
para radiodifusión digital - Parte 2: Ginga-NCL para receptores fijos y móviles – Lenguaje de aplicación XML para
codificación de aplicaciones
ISO 639-2, Codes for the representation of names of languages - Part 2: Alpha-3 code
ISO 8859-1, Information processing - 8-bit single-byte coded graphic character sets – Part 1: Latin alphabet Nº 1
ISO/IEC TR 8802-1, Information technology – Telecommunications and information exchange between systems –
Local and metropolitan area networks - Specific requirements - Part 1: Overview of Local Area Network Standards
ISO/IEC 8802-2, Information technology – Telecommunications and information exchange between systems –
Local and metropolitan area networks - Specific requirements - Part 2: Logical link control
ISO/IEC 13818-1, Information technology – Generic coding of moving pictures and associated audio information:
Systems
ISO/IEC 13818-6:1998, Information technology – Generic coding of moving pictures and associated audio
information – Part 6: Extensions for DSM-CC
© ABNT 2007 - Todos los derechos reservados
1
ABNT NBR 15606-3:2007
EN 300 468:2005, Digital video broadcasting (DVB); specification for service information (SI) in DVB systems
EN 301 192, Digital video broadcasting (DVB); DVB specification for data broadcasting
ARIB STD-B10:2007, Service information for digital broadcasting system
ARIB STD-B23:2004, Application execution engine platform for digital broadcasting
ARIB STD-B24:2007, Presentation engine platform for digital broadcasting
ETSI TR 101 162, Digital Video Broadcasting (DVB); Allocation of service information (SI), codes for DVB systems
ETSI TR 101 202, Digital Video Broadcasting (DVB); Implementation guidelines for data broadcasting
ETSI TS 101 812:2003, Multimedia home platform – MHP specification 1.03
GEM 1.0:2005, Globally executable MHP Version 1.02
GEM 1.1:2006, Globally executable MHP (GEM) Especification 1.1
IEEE 802:2001, IEEE Standard for Local and Metropolitan Area Networks: Overviem and Architecture
RFC 791, DARPA Internet program protocol specification
RFC 793:1981, Transmission Control Protocol Darpa Internet Program Protocol Specification
RFC 2396, URI Generic Syntax
RFC 1112, Host extensions for IP multicasting
RFC 1521, Borenstein N., and N. Freed, MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for
Specifying and Describing the Format of Internet Message
RFC 1950, ZLIB Compressed data format specification version 3.3
3
Términos y definiciones
Para los efectos de esta parte de la ABNT NBR 15606, se aplican los siguientes términos y definiciones.
3.1
acceso múltiple por división de código de múltiple portador
MC-CDMA
esquema de acceso múltiple por división de código (CDMA) que emplea sistemas de múltiples portadores
3.2
buffer de transporte
buffer que decodifica un paquete de stream de transporte en un decodificador-meta de un stream de transporte
MPEG2
3.3
encabezamiento del paquete PES
campo que comprende la primera parte de un paquete PES
2
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
3.4
carrusel de datos
método que envía cualquier conjunto de datos repetidamente para que los datos puedan ser bajados vía
transmisión siempre que sea necesario
NOTA
Este método se especifica en la ISO/IEC 13818-6.
3.5
comando y control de almacenamiento de medios digital
DSMCC
método que brinda soporte al acceso a archivos y streams en servicio digital interactivo
3.6
comité para sistema de televisión avanzado
ATSC
comité con el propósito de estandarizar el sistema de transmisión digital en EUA
3.7
consejo audiovisual digital
DAVIC
Consorcio industrial para estandarización del servicio de multimedia interactiva
3.8
contenido
grupo de datos transmitidos por medio de un programa de transmisión de datos o servicio de comunicaciones
bidireccionales que es generado por el programa de transmisión de datos para servir como parte del programa de
transmisión de datos
NOTA
Como un término en el contexto de transmisión, "contenido" indica un conjunto de streams en el programa que
envía el grupo de datos. Un único programa de transmisión puede estar compuesto por múltiples contenidos.
3.9
contenido local
parte del contenido de transmisión de datos contenido en un único evento de datos
NOTA
Generalmente, un contenido local es un grupo de datos agrupados con base en el contexto o para una mayor
conveniencia de producción de programa.
3.10
DSM-CC U-U
Digital Storage Media – Command and Control User-to-User Interface
3.11
dirección
protocolo utilizado para definir un nombre de servidor utilizando el PPP
NOTA
Esta definición está de acuerdo con la RFC 1877.
3.12
ethernet
estándar LAN que define una red con base en barramento empleando el CSMA/CD (acceso múltiple de sentido de
portador/detección de colisión) para control de acceso
NOTA
Esta definición está de acuerdo con la IEEE 802.
© ABNT 2007 - Todos los derechos reservados
3
ABNT NBR 15606-3:2007
3.13
evento de datos
conjunto de streams de transmisión de datos que representa un grupo de contenido de transmisión de datos a ser
distribuido con los tiempos de inicio y finalización preconfigurados
NOTA
El concepto de evento de datos (data event) es introducido para permitir que un grupo de contenido de transmisión
de datos sea alternado para otro, si están o no en el mismo programa, conforme sea necesario. En otras palabras, un evento
de datos es independiente de un evento.
3.14
formato de adaptación
formato utilizado en un encabezamiento DSM-CC y que es una forma de información inserida en un área de
adaptación que codifica la información para atender a una solicitación, dependiendo de la red de distribución
3.15
hash function
función embrollo
función matemática que mapea un área amplia (inmensa en algunos casos) dentro de una pequeña banda
NOTA
Una hash function es de dirección única y libre de colisión.
3.16
host
máquina
dispositivo de punto de acceso o dispositivo de servidor, necesario para servicios de transmisión bidireccional
3.17
hypertext transfer protocol
HTTP
capa de aplicación para transmitir datos a través de la World Wide Web
NOTA
Esta definición está de acuerdo con la RFC 1954.
3.18
identificador de paquete
PID
identificador de paquete de un stream de transporte MPEG-2
3.19
información de servicio
SI
datos digitales que describen un arreglo de programas, un sistema de distribución para transmisión de streams de
datos, descripción de programas, informaciones de parrilla de programación/tiempo de duración
NOTA
Estos datos también transportan MPEG-2 PSI (Informaciones Específicas del Programa), así como partes de la
extensión definidas de forma independiente.
3.20
información específica del programa
PSI
información de control de transmisión, que suministra la información necesaria para permitir a un receptor
automáticamente demultiplexar y decodificar varios streams de programa que fueron multiplexados
3.21
MIME
protocolo de capa de aplicación que suministra una arquitectura de contenido que permite que datos multimedia,
como archivos de texto, audio e imágenes, en formato que no sea US-ASCII, sean transmitidos vía e-mail
4
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
3.22
paquete PES
formato de datos usado para transmitir streams básicos que consiste en un encabezamiento de paquete PES
y una carga útil PES inmediatamente siguiendo el encabezamiento
3.23
private_stream_1
Tipo de stream transmitido usando PES y que se utiliza para transmitir un stream privado sincronizado con otros
streams
3.24
private_stream_2
tipo de stream transmitido usando PES y que se utiliza para transmitir un stream privado que no necesita ser
sincronizado con otros streams
3.25
procedimiento de control de conexión de datos de alto nivel
procedimiento HDLC
procedimiento de control de transmisión con alta confiabilidad, usado para comunicación entre computadoras,
principalmente en LAN e internet
3.26
protocolo datagrama del usuario
UDP
protocolo de capa de transporte que promueve entrega de datos sin conexión entre dos máquinas
NOTA 1
Aunque el UDP no soporte mensajes de reconocimiento, minimiza el protocolo elevado para mayor eficiencia en
servicios de transmisión.
NOTA 2
Esta definición está de acuerdo con la RFC 768.
3.27
protocolo de autenticación de contraseña NNTP
protocolo de capa de aplicación utilizado para distribuir, enviar y recuperar noticias (Net News) en Internet
NOTA
Esta definición está de acuerdo con la RFC 1334.
3.28
protocolo de autenticación de contraseña PAP
componente del protocolo de punto a punto (PPP) que soporta la autenticación
NOTA 1
Este protocolo no hace identificación de usuario y contraseña al enviar.
NOTA 2
Esta definición ésta de acuerdo con la RFC 1334.
3.29
protocolo de control de transmisión
TCP
protocolo de capa de transporte que promueve distribución de datos altamente confiable, de punta la punta,
orientada por conexión, utilizando un mecanismo de detección y corrección de error
NOTA
Esta definición está de acuerdo con la RFC 793.
3.30
protocolo de control IP
IPCP
protocolo utilizado para establecer varias configuraciones exigidas para utilizar IP en la fase de protocolo de capa
de red
NOTA
Esta definición está de acuerdo con la RFC 1332.
© ABNT 2007 - Todos los derechos reservados
5
ABNT NBR 15606-3:2007
3.31
protocolo de internet
IP
protocolo de capa de red que define el mecanismo de encaminamiento en Internet para permitir que los datos
sean transmitidos
NOTA
Esta definición está de acuerdo con la RFC 791.
3.32
protocolo de resolución de dirección
ARP
Protocolo utilizado en una red TCP/IP para obtener la dirección física del nudo Ethernet basado en su dirección de
IP
3.33
protocolo de transmisión de datos en modo básico
protocolo de comunicaciones desarrollados para transmisión básica de datos entre un host y un terminal
NOTA
El protocolo emplea un método para minimizar los errores de transmisión.
3.34
red digital de servicios integrados
ISDN
red digital de servicios integrados
3.35
reservado
término que, cuando se utiliza en sentencias que definen el stream de bit codificado, indica que el valor se puede
usar en el futuro para extensiones definidas por la ISO
NOTA
Los bits reservados se configuran en 1.
3.36
reserved_future_use
término que, cuando se utiliza en sentencias definiendo el stream de bit codificado, indica que el valor se puede
utilizar en extensiones definidas por la ISO en el futuro
NOTA
Los bits reservados se configuran en 1.
3.37
sección
Estructura sintáctica utilizada para mapear las informaciones de servicio y otros datos dentro de un paquete de
stream de transporte
3.38
servicio de nombre de dominio
DNS
protocolo utilizado por el servicio que mapea un nombre de máquina en una red dentro de su dirección de IP
NOTA
Esta definición está de acuerdo con las RFC 1034 y RFC 1035.
3.39
tabla de información de evento
EIT
tabla de información de evento que contiene datos relacionados a un evento y un programa como un nombre de
evento (programa), hora de inicio y un período
6
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
3.40
tabla de mapeo de programa
PMT
tabla que forma parte del PSI
3.41
transmisión de video digital
DVB
proyecto para estandarización del sistema de transmisión digital en Europa
4
Tipos de especificación de transmisión de datos
Los tipos de especificaciones para transmisión de datos e identificación de tipo de stream contenidas en un PMT
se presentan en la Tabla 1.
Tabla 1 – Tipos de especificación de transmisión
Especificación de la transmisión
Función mayoritaria y facilidad de uso
PES independiente
Utilizado para streams de datos
sincronizados a asíncronos para servicios de
radiodifusión
Carrusel de datos/objetos
Utilizado para transferencias de datos en
general: Sincronizados y asíncronos para
servicios de radiodifusión. Aplicado a la
transmisión de datos para servicios de
download y servicios multimedia
Mensaje de eventos
Protocolos de canal de
interactividad
Identificación del tipo de stream
0x06
0x0B, 0X0D a
Utilizado para notificaciones sincronizadas y
asíncronas referentes a las aplicaciones en
el TA partiendo de la estaca de broadcast.
Utilizado para servicios de multimedia
0x0C, 0X0D b
Protocolo de transmisión utilizado en redes
fijas como redes PSTN/ISDN y redes de
celular, incluyendo red celular/PHS con
d
comunicaciones bidireccionales
—
Encapsulado multiprotocolo
Datagramas son encapsulados en
datagram_sections Que son compatibles con
el formato DSMCC_section para datos
privados
Data piping
Protocolo que permite insertar datos de una
red de radiodifusión directamente en el
payload del paquete MPEG-2
0x0A
c
0x7E
a
Cuando un stream no contiene datos DSM-CC, sino un carrusel de datos, se utiliza 0x0B ó 0x0D y, cuando también tiene
otros datos se utiliza DSM-CC, 0x0D.
b
Cuando un stream no contiene datos DSM-CC, sino como mensaje de evento, se utiliza 0x0C ó 0x0D y, cuando también
tiene otros datos DSM-CC, se utiliza 0x0D.
c
Cuando un stream no contiene datos DSM-CC, sino datos de encapsulado de multiprotocolos (MPE), se utiliza 0x0A y,
cuando también tiene otros datos DSM-CC, se utiliza 0x0D.
d
PSTN: Red Telefónica conmutada pública.
© ABNT 2007 - Todos los derechos reservados
7
ABNT NBR 15606-3:2007
5
Especificación de transmisión del carrusel de datos
5.1
Transmisión con carrusel de datos DSM-CC
La especificación de transmisión del carrusel de datos se destina a implementar la transmisión general
sincronizada o asíncrona sin la necesidad de datos streaming, tales como download de datos para una unidad
receptora o transmisión de contenidos para servicios de multimedia. La especificación de transmisión del carrusel
de datos definida en esta Norma se basa en la especificación del carrusel de datos DSM-CC establecida en la
ISO/I EC 13818-6.
La transmisión repetida de datos, como es definida en la especificación del carrusel de datos DSC-CC, permite a
la unidad receptora obtener datos por demanda en cualquier momento durante un período de transmisión.
Los datos se transmiten en una unidad modular formada por bloques donde todos los bloques, excepto los que
están al final del módulo, tienen el mismo tamaño y cada bloque se transmite en secciones.
En la transmisión de estos datos se utilizan el mensaje download de bloque de datos (referida como mensaje
DDB) y mensaje de indicación de información download (referida como mensaje DII). Ambos mensajes son
componentes del protocolo de download del usuario de la red especificado en la ISO/IEC 13818-6. El cuerpo de
datos se transmite por el mensaje DDB con cada módulo dividido dentro de los bloques. Para informaciones
adicionales relacionadas a la transmisión PSI/SI, ver el Anexo B.
5.2 Mensaje de control DSM-CC
5.2.1
Mensaje de indicación de información de download (DII)
Un mensaje DII forma parte de un mensaje de control DSM-CC. Así, el mensaje DII transmite el contenido del
mensaje reteniéndolo en el userNetworkMessage() en la sección DSM-CC.
La versión del mensaje DII es indicada por el transaction_number (número de la transacción) en el campo
transaction_id (identificación de transacción) del dsmccMessageHeader. Este número de versión es común a
todos los mensajes DII del carrusel de datos y el número de la versión se incrementa en uno cuando el contenido
de uno o más mensajes DII se altera.
5.2.2
Sintaxis y semántica del mensaje DII
La estructura de los datos del mensaje DII se presenta en la Tabla 2.
8
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla 2 — Estructura de los datos del mensaje de indicación de información de download
Sintaxis
DownloadInfoIndication() {
dsmccMessageHeader()
downloadId
blockSize
windowSize
ackPeriod
tCDownloadWindow
tCDownloadScenario
compatibilityDescriptor()
numberOfModules
for(i=0;i< numberOfModules;i++) {
moduleId
moduleSize
moduleVersion
moduleInfoLength
for(i=0;i< moduleInfoLength;i++){
moduleInfoByte
}
}
privateDataLength
for(i=0;i<privateDataLength;i++){
privateDataByte
}
}
Número de bits
Mnemónico
32
16
8
8
32
32
uimsbf
uimsbf
uimsbf
uimsbf
uimsbf
uimsbf
16
uimsbf
16
32
8
8
uimsbf
uimsbf
uimsbf
uimsbf
8
uimsbf
16
uimsbf
8
uimsbf
La semántica de los campos DII debe ser la siguiente:
⎯ dsmccMessageHeader () (encabezamiento del mensaje DSM-CC): tal como especificado en 5.3;
⎯ downloadId (identificador de download): campo de 32 bits que sirve como un rótulo para la identificación
única del carrusel de datos. En el caso de evento de operación de datos, data_event_id (identificación del
evento de datos) debe ser insertado en los bits 28-31 del downloadId (identificador de download). En caso
contrario, la banda y los valores para asegurar la unicidad se especifica en un estándar operativo;
⎯ windowSize: campo de 8 bits que no se utiliza para transmisión del carrusel de datos y el valor debe ser
ajustado en 0;
⎯ ackPeriod: campo de 8 bits que no se utiliza en la transmisión del carrusel de datos y el valor debe ser
ajustado en 0;
⎯ tCDownloadWindow: campo de 32 bits que no se utiliza en la transmisión del carrusel de datos y el valor
debe ser ajustado en 0;
⎯ tCDownloadScenario: campo de 32 bits que indica el período de límite de tiempo en el que se presume que
el download está completo en microsegundos;
⎯ compatibilityDescriptor(): estructura del descriptor de compatibilidad (compatibilityDescriptor()) que se
especifica en la ISO/IEC 13818-6 y que debe ser configurada en este campo. Cuando el contenido de la
estructura del compatibilityDescriptor() no es necesaria, el descriptorCount se debe configurar en 0x0000 y,
así, la extensión del campo debe ser de 4 bytes;
© ABNT 2007 - Todos los derechos reservados
9
ABNT NBR 15606-3:2007
⎯ numberOfModules (número de módulo): campo de 16 bits que indica el número de módulos descritos en el
enlace siguiente en este mensaje DII;
⎯ moduleId (identificador de módulo): campo de 16 bits que indica la identificación del módulo descrito en los
siguientes campos: ModuleSize, module Version y moduleInfoByte;
⎯ moduleSize (extensión del módulo): campo de 32 bits que indica la extensión byte del módulo. Cuando la
extensión del byte del módulo no es conocida, debe ser configurada en 0;
⎯ moduleVersion: campo de 8 bits que indica la versión de este módulo;
⎯ moduleInfoLength (extensión de la información del módulo): campo de 8 bits que indica la extensión byte
del área de información del módulo;
⎯ moduleInfoByte (información del módulo): campo de unidad de 8 bits que se puede usar para insertar
descriptores relacionados al módulo. Estos descriptores se definen en 5.4;
NOTA
Los valores de tag de los descriptores a ser insertados se definen en la Tabla 5.
⎯ privateDataLength: campo de 16 bits que indica la extensión byte del campo PrivateDataByte;
⎯ privateDataByte (datos privados): campo de unidad de 8 bits que se puede usar para contener una
estructura de datos en un formato de descriptor. La estructura de datos es definida con base en un formato de
codificación de datos o por un operador de servicio.
La semántica de los valores de tag de los descriptores para este campo es definida en la Tabla 3. Los descriptores
posibles para este campo son los definidos en 5.4 y por un formato de codificación de datos.
Tabla 3 — Semántica de los tags de los descriptores del área de información
de módulo y área privada en el DII
5.3
Valor de tag del descriptor
Semántica
0x01 – 0x7F
Valores de tag reservados de descriptores compatibles DVB a
ser insertados en el área de información del módulo y área
privada (ver 5.4)
0x80 - 0xBF
Valores de tag disponibles de descriptores definidos por un
operador de servicio
0xC0 – 0 xEF
Valores de tag reservados de descriptores a ser insertados en
el área de información del módulo y área privada (ver 5.4)
0xF0 – 0 xFE
Valores de tag reservados de descriptores definidos con base
en un formato de codificación de datos
Sintaxis y semántica del dsmccMessageHeader()
La estructura de datos del dsmccMessageHeader() se define en la Tabla 4.
10
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla 4 — Estructura de datos del dsmccMessageHeader
Sintaxis
dsmccMessageHeader() {
protocolDiscriminator
dsmccType
messageID
transaction_id
Reserved
adaptationLength
messageLength
if(adaptationLength>0){
dsmccAdaptationHeader()
}
}
Número de bits
Mnemónico
8
8
16
32
8
8
16
uimsbf
uimsbf
uimsbf
uimsbf
bslbf
uimsbf
uimsbf
16
uimsbf
La semántica del dsmccMessageHeader() debe ser la siguiente:
⎯ protocolDiscriminator: campo de 8 bits que se debe configurar en 0 x 11 e indica que este mensaje es del
tipo MPEG-2 DSM-CC;
⎯ dsmccType (tipo DSM-CC): campo de 8 bits que indica el tipo del mensaje MPEG-2 DSM-CC. En un
mensaje DII para transmisión del carrusel de datos, se debe configurar en 0x03 (mensaje download U-N);
⎯ messageId (identificador del tipo del mensaje): campo de 16 bits que identifica el tipo del mensaje DSMCC. En un mensaje DII, se debe configurar en 0x1002;
⎯ transaction_id (identificador de transacción): campo de 32 bits que identifica el mensaje y tiene la función
de controlar la versión. El formato de la transaction_id se muestra en la Figura 1. El campo Transaction
Number en los bits 0-29 se debe usar para identificar la versión de la DII, como especificado en la ISO/IEC
13818-6. El valor de bits 30-31 se debe configurar en ‘10’ (TransactionId asignado por la red) conforme
definido en el Transaction id Originator, como especificado en la ISO/IEC 13818-6;
Figura 1 — Formato de la transaction_id
⎯ adaptationLength: campo de 8 bits que indica el número de bytes del campo dsmccAdaptationHeader();
⎯ messageLength: Campo de 16 bits que indica el número de bytes del mensaje inmediatamente después de
este campo. Es decir, el valor es una suma de la extensión payload y de la extensión
dsmccAdaptationHeader();
⎯ dsmccAdaptationHeader(): La estructura de datos de este campo está definida en 5.5.3.
© ABNT 2007 - Todos los derechos reservados
11
ABNT NBR 15606-3:2007
5.4
5.4.1
Descriptores del área de información del módulo y área privada
Tipos de descriptores
Los tipos de descriptores utilizados en un área de información del módulo y en un área privada son mostrados en
la Tabla 5. Cualquiera de estos descriptores se puede usar en el área de información del módulo y/o en un área
privada conforme sea necesario. Los descriptores contenidos en un área privada en una DII se aplican a los
módulos en la DII. Cuando el área de información del módulo y el área privada tienen el mismo conjunto de
descriptores, sólo los descriptores en el área de información del módulo son activados.
Tabla 5 — Tipos de descriptores
Valor de
tag
0x01
0x02
0x03
0x04
0x05
0x06
0x07
Descriptor
Tipo de módulo
(forma MIME etc.)
Nombre del módulo
name_descriptor
(nombre del archivo)
Información del módulo
info_descriptor
(tipo de carácter)
Información del link
module_link_descriptor
(id del módulo)
CRC32 del módulo
CRC32_descriptor
location_descriptor
Tiempo estimado de
est_download_time_descriptor
download (s)
type_descriptor
0x08 0x7F
0x80 0xBF
0xC0 0xC1
0xC2
o
o
o
o
o
o
o
o
o
o
Reservado para el futuro
Disponible para un broadcaster
Reservado para el futuro
compression_Type_descriptor
0xC3 0xCC
0xCD 0xEE
5.4.2
Área de
Área
información
privada
del módulo
Función
Algoritmo de compresión
cuando el módulo se
transmite
o
Reservado para el futuro
Reservado para el futuro
Descriptor de tipo
El descriptor de tipo (ver Tabla 6) indica el tipo de archivo transmitido como un módulo único, implementando la
transmisión del carrusel de datos con base en esta Norma, que especifica que un archivo único se transmite como
un módulo único.
12
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla 6 — Descriptor de tipo
Sintaxis
Número de bits
Mnemónico
descriptor_tag
8
uimsbf
descriptor_length
8
uimsbf
8
uimsbf
Type_descriptor(){
for(i=0;i<N;i++) {
text_char
}
}
La semántica de campo en el descriptor de tipo debe ser la siguiente:
⎯ text_char: campo de 8 bits. La secuencia de estos campos indica tipo de media de acuerdo con la RFC 1521.
5.4.3
Descriptor del nombre
El descriptor del nombre (ver Tabla 7) indica el nombre del archivo transmitido como un módulo único,
implementando la transmisión del carrusel de datos con base en esta Norma, que especifica que un archivo único
se transmite como un módulo único. Sin embargo, cuando hay el descriptor Module Link, el descriptor del nombre
no debe estar presente en otra posición sino = módulo 0x00 en la DII.
Tabla 7 — Descriptor del nombre
Sintaxis
Name_descriptor() {
descriptor_tag
descriptor_length
for(i=0;i<N;i++) {
text_char
}
}
Número de bits
Mnemónico
8
8
uimsbf
uimsbf
8
uimsbf
La semántica de campo en el descriptor del nombre deber ser la siguiente:
⎯ text_char: campo de 8 bits. La secuencia de este campo indica el nombre del archivo transmitido como un
módulo único usando la especificación de codificación de datos o un código de carácter especificado en un
estándar operativo.
5.4.4
Descriptor de información
El descriptor de información (ver Tabla 8) describe las informaciones relacionadas al módulo.
Tabla 8 — Descriptor de información
Sintaxis
info_descriptor() {
descriptor_tag
descriptor_length
ISO_639_language_code
for(i=0;i<N;i++) {
text_char
}
}
© ABNT 2007 - Todos los derechos reservados
Número de bits
Mnemónico
8
8
24
uimsbf
uimsbf
bslbf
8
uimsbf
13
ABNT NBR 15606-3:2007
La semántica de campos en el descriptor de información debe ser la siguiente:
⎯ ISO_639_language_code: Campo de 24 bits que identifica el lenguaje que se utiliza en el área text_char. El
código del lenguaje es representado por tres caracteres alfabéticos especificados en la ISO 639-2. Cada
carácter se codifica dentro de una representación de 8 bits de acuerdo con la ISO 8859-1 y es insertado
dentro de un campo de 24 bits en ese orden;
⎯ text_char: campo de 8 bits. La secuencia de estos campos indica la información textual relacionada al archivo
transmitido como un módulo único usando la especificación de codificación de datos o un código de
señalización especificado en una norma operativa.
5.4.5
Descriptor del Module_link
El descriptor Module_link (ver Tabla 9) genera una lista de módulos conectados a otros módulos. Por ser la
extensión del campo número de bloques de un mensaje DDB restringido a 16 bits, el tamaño máximo de un
módulo en la transmisión del carrusel de datos es de 256 Mbytes. Cuando se transmite un archivo mayor que 256
Mbytes, el archivo se divide en dos o más módulos antes de ser enviado y esta información se asocia al descriptor
del Module_link.
Tabla 9 — Descriptor del Module_link
Sintaxis
module_link_descriptor() {
descriptor_tag
descriptor_length
position
moduleId
}
Número de bits
Mnemónico
8
8
8
16
uimsbf
uimsbf
uimsbf
uimsbf
La semántica de campos en el descriptor Module_link debe ser la siguiente:
⎯ position: campo de 8 bits que indica la relación de posición con módulo conectado. “0x00” indica que está
localizado en la parte superior del link, “0x01 indica que está en medio y “0x02” indica que está en el final;
⎯ module Id: campo de 16 bits que es la identificación del módulo conectado. Cuando la posición es “0x02”, el
valor de este campo es ignorado.
5.4.6
Descriptor de la localización
El location_descriptor contiene la localización del PID donde los bloques, módulos o grupos pueden ser
encontrados conteniendo los datos del carrusel. La Tabla 10 muestra la sintaxis del location_descriptor.
Tabla 10 — Sintaxis del location_descriptor
Sintaxis
location_descriptor(){
descriptor_tag
descriptor_length
location_tag
}
Número de bits
Valor
8
8
8
0x06
La semántica del location_descriptor debe ser la siguiente:
⎯ descriptor_tag: campo de 8 bits que identifica el descriptor. El location_descriptor está configurado en 0x06;
⎯ descriptor_length: campo de 8 bits que especifica el número de bytes del descriptor inmediatamente
después de este campo;
14
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
⎯ location_tag: campo de 8 bits que tiene el mismo valor que el campo component_tag en el descriptor
identificador del stream.
5.4.7
Descriptor CRC
El descriptor CRC (ver Tabla 11) describe el valor CRC del módulo completo.
Tabla 11 — Descriptor CRC
Sintaxis
CRC32_descriptor() {
descriptor_tag
descriptor_length
CRC_32
}
Número de bits
Mnemónico
8
8
32
uimsbf
uimsbf
rpchof
La semántica de campo en el descriptor CRC debe ser la siguiente:
⎯ CRC_32: campo de 32 bits que almacena el valor CRC calculado para el módulo completo. El valor CRC
debe ser calculado como definido en la ABNT NBR 15603-2:2007, Anexo B.
5.4.8
Descriptor de tiempo estimado de download
El descriptor de tiempo estimado de download (ver Tabla 12) describe el período estimado necesario para el
download del módulo.
Tabla 12 — Descriptor de tiempo estimado de download
Sintaxis
est_download_time_descriptor() {
descriptor_tag
descriptor_length
est_download_time a
}
Número de bits
Mnemónico
8
8
32
uimsbf
uimsbf
uimsbf
La semántica del campo en el descriptor del tiempo estimado de download debe ser la siguiente:
⎯ est_download_time: campo de 32 bits que indica el período estimado, en segundos, necesario para hacer el
download del módulo.
5.4.9
Descriptor de tipo de compresión
El descriptor de tipo de compresión (ver Tabla 13) indica que el módulo fue comprimido en el formato zlib basado
en la RFC 1950 y muestra su algoritmo de compresión y el tamaño del módulo antes de la compresión en bytes.
Un módulo que no haya sido comprimido no tiene ese descriptor.
Tabla 13 — Descriptor de tipo de compresión
Sintaxis
Compression_Type_descriptor() {
descriptor_tag
descriptor_length
compression_type
original_size
}
© ABNT 2007 - Todos los derechos reservados
Número de bits
Mnemónico
8
8
8
32
uimsbf
uimsbf
uimsbf
uimsbf
15
ABNT NBR 15606-3:2007
La semántica de campos en el descriptor de tipo de compresión debe ser la siguiente:
⎯ compression_type: campo de 8 bits que define el tipo de compresión usada para comprimir el módulo;
⎯ original_size: campo de 32 bits que indica el tamaño del módulo antes de la compresión en bytes.
5.5 Mensaje DownloadDataBlock (DDB)
5.5.1
Sintaxis y semántica del mensaje DDB
El contenido de un mensaje DDB se transmite por almacenamiento en el campo downloadDataMessage() en la
sección DSM-CC.
Un mensaje DDB es la estructura de datos transmitiendo bloques de datos (ver Tabla 14). Un módulo se puede
dividir con extensión fijada para formar bloques. En ese caso, cada bloque es representado con un número de
bloque en el mensaje DDB para permitir que una unidad receptora reorganice los bloques en el orden pretendido.
De acuerdo con lo especificado en la ISO/IEC 13818-6, cuando los mensajes DDB se transmiten en MPEG-2 TS,
apenas los mensajes DDB que tienen el mismo downloadId deben ser incluidos en el mismo paquete PID. Eso
significa que los mensajes DDB en dos carruseles diferentes no se deben presentar en un único stream elemental.
Tabla 14 — Estructura de datos del bloque de datos de download
Sintaxis
DownloadDataBlock() {
dsmccDownloadDataHeader()
moduleId
moduleVersion
reserved
blockNumber
for(i=0;i<N;i++) {
blockDataByte
}
}
Número de bits
Mnemónico
16
8
8
16
uimsbf
uimsbf
bslbf
uimsbf
8
uimsbf
Los campos de DDB deben ser los siguientes:
⎯ moduleId: campo de 16 bits que indica el número de identificación al cual este bloque pertenece;
⎯ moduleVersion: campo de 8 bits que indica la versión del módulo al cual este bloque pertenece;
⎯ blockNumber: campo de 16 bits que indica la posición de este bloque dentro del módulo. El primer bloque de
un módulo debe ser representado por el bloque número 0;
⎯ blockDataByte: campo de 8 bits. El tamaño de una serie del área de datos del bloque es igual al tamaño del
bloque de la DII, es decir, el tamaño de los bloques divididos desde un módulo. Sin embargo, el número del
último bloque en el módulo puede ser menor que el tamaño de bloque descrito en la DII.
5.5.2
Sintaxis y semántica del dsmccDownloadDataHeader()
La estructura de datos del dsmccDownloadDataHeader() está definida en la Tabla 15.
16
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla 15 — Estructura de datos del dsmccDownloadDataHeader
Sintaxis
dsmccDownloadDataHeader() {
protocolDiscriminator
dsmccType
messageId
downloadId
Reserved
adaptationLength
messageLength
if(adaptationLength>0) {
dsmccAdaptationHeader()
}
}
Número de bits
Mnemónico
8
8
16
32
8
8
16
uimsbf
uimsbf
uimsbf
uimsbf
bslbf
uimsbf
uimsbf
8
uimsbf
Los campos del dsmccDownloadDataHeader() deben ser los siguientes:
⎯ protocol discriminator: campo de 8 bits que es configurado en 0x11 e indica que este mensaje es un
mensaje DSM-CC MPEG-2 dsmccType. Este campo de 8 bits indica el tipo del mensaje DSM-CC MPEG-2 y
es configurado en 0x03 (mensaje download U-N) para el mensaje DDB en la transmisión del carrusel de
datos;
⎯ messageId: campo de 16 bits que identifica el tipo del mensaje DSM-CC y es configurado en 0x1003 para un
mensaje DDB;
⎯ downloadId: campo de 32 bits que es configurado en el mismo valor que el identificador de download en el
mensaje DII correspondiente;
⎯ adaptationLength: campo de 8 bits que indica el número de bytes del campo dsmccAdaptationHeader();
⎯ dsmccAdaptationHeader(): la estructura de datos de este campo es definida en 5.5.3;
⎯ messageLength: campo de 16 bits que indica la extensión del mensaje, no incluyendo este campo y su área
precedente en bytes. El valor es idéntico a la suma de la extensión de payload y la extensión
dsmccAdaptationHeader.
5.5.3
Sintaxis del dsmccAdaptationHeader()
En el dsmccMessageHeader() que es el encabezamiento de un mensaje DII y en el dsmccDownloadDataHeader()
que es el encabezamiento de un mensaje DDB, puede ser establecida la estructura de datos común
dsmccAdaptationHeader().
La estructura de datos del dsmccAdaptationHeader es indicada en la Tabla 16.
Tabla 16 — Estructura del dsmccAdaptationHeader
Sintaxis
dsmccAdaptationHeader() {
adaptationType
for (i=0; i<(adaptationLength-1);i++) {
adaptationDataByte
}
}
}
© ABNT 2007 - Todos los derechos reservados
Número de bits
Mnemónico
8
uimsbf
8
uimsbf
17
ABNT NBR 15606-3:2007
La semántica del dsmccAdaptationHeader() debe ser la siguiente:
⎯ adaptation Type: campo de 8 bits que indica el tipo de encabezamiento de adaptación. El valor de este
campo indica un formato de adaptación conforme Tabla 17.
Tabla 17 — Tipo de adaptación
Tipo de adaptación
Formato de la adaptación
Definición en la ISO/IEC 13818-6
0x00
Reservado
Lo mismo que en la columna a la izquierda
0x01
Reservado
DSM-CC Acceso condicional
0x02
Reservado
DSM-CC identificador de usuario
0x03
DIIMsgNumber
Lo mismo que en la columna a la izquierda
0x04-0x7F
Reservado
Lo mismo que en la columna a la izquierda
0x80-0xFF
Definición del usuario
Lo mismo que en la columna a la izquierda
NOTA Para los tipos de adaptación utilizados en esta Norma, la operación del formato de adaptación de
definición del usuario del tipo de adaptación 0x80 – 0xFF es opcionalmente hecha por un operador de servicio.
5.5.4
Sintaxis de la sección DSM-CC
Los mensajes DII y DDB se transmiten usando las secciones DSM-CC, como se muestra en la Tabla 18.
18
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla 18 — Sección DSM-CC (transmisión de mensajes DII/DBB)
Sintaxis
DSMCC_section () {
table_id
section_syntax_indicator
private_indicator
reserved
dsmcc_section_length
table_id_extension
reserved
version_number
current_next_indicator
section_number
last_section_number
if (table_id==0x3B) {
userNetworkMessage ()
}
else if (table_id==0x3C) {
downloadDataMessage()
}
else if (table_id==0x3E) {
for (i=0;i<dsmcc_section_length-9;i++) {
private_data_byte
}
}
if (section_syntax_indicator==’0’) {
Checksum
}
else {
CRC_32
}
}
Número de bits
Mnemónico
8
1
1
2
12
16
2
5
1
8
8
uimsbf
bslbf
bslbf
bslbf
uimsbf
uimsbf
bslbf
uimsbf
bslbf
uimsbf
uimsbf
8
uimsbf
32
uimsbf
32
rpchof
La semántica de la sección DSM-CC debe ser la siguiente:
⎯ table_id: campo de 8 bits que contiene el número de identificación del tipo de datos en la sección de payload
DSM-CC. Basado en el valor de este campo, se aplica una regla de codificación específica para el campo
siguiente en la sección DSM-CC. La tabla de los valores de identificación es mostrada en la Tabla 19, como
especificado en la ISO/IEC 13818-6;
Tabla 19 — Table_id
table_id
0x3A
0x3B
a
Tipo de sección DSM-CC
Reservado
Mensaje DII
0x3C
Mensaje DDB
0x3D
Descriptor de Stream
0x3E
Datos privados
0x3F
Reservado
Definición en la ISO/IEC 13818-6
Cápsula multiprotocolo a
Mensaje U-N incluyendo DII
Lo mismo que en la columna a la
izquierda
Lo mismo que en la columna a la
izquierda
Lo mismo que en la columna a la
izquierda
Lo mismo que en la columna a la
izquierda
Ver ISO/IEC 13818-6.
© ABNT 2007 - Todos los derechos reservados
19
ABNT NBR 15606-3:2007
⎯ section_syntax_indicator: campo de 1 bit. Cuando es configurado en 1, indica que existe un CRC32 al final
de la sección. Cuando es configurado en ***0, indica que existe una suma de verificación. Se debe configurar
en 1 para la transmisión de los mensajes DII y DDB;
⎯ private_indicator: campo de 1 bit que almacena el valor complementar del flag del section_syntax_indicator;
⎯ dsmcc_section_length: campo de 12 bits que indica el número de bytes del área desde el inicio del campo,
inmediatamente después de ese campo hasta el fin de la sección. El valor en este campo no debe exceder 4
093 bytes;
⎯ table_id_extension: campo de 16 bits que es configurado como mostrado abajo, de acuerdo con el campo
table_id:
•
cuando el valor del campo table_id es igual a 0x3B, este campo debe transportar una copia de los 2
bytes menos significativos del campo transaction_id;
•
cuando el valor del campo table_id es igual a 0x3C, este campo debe transportar una copia del
campo module_id;
⎯ version_number: campo de 5 bits que es configurado tal como se muestra abajo, de acuerdo con el
identificador de tabla;
⎯ value: cuando el valor del campo table_id es igual a 0x3B, este campo se debe configurar en 02. Cuando el
valor del campo table_id es igual a 0x3C, se debe configurar en los 5 bits menos significativos del campo
versión del módulo;
⎯ current_next_indicator: designación de 1 bit que indica que la subtabla está activa cuando está en “1”.
Cuando está en “0”, a subtabla enviada aún no fue aplicada y usada como la próxima subtabla. Cuando el
valor del campo table_id es igual a un valor en la banda de 0x3A a 0x3C, este campo se debe configurar en
“1”;
⎯ section_number: campo de 8 bits que indica el número de la sección de la primera sección en la subtabla.
Cuando la sección contiene un mensaje DII, este campo se debe configurar en 0. Cuando esta sección
contiene un mensaje DDB, este campo debe transportar una copia de los 8 bits menos significantes del
número del bloque de la DDB;
⎯ last_section_number: campo de 8 bits que indica el número de la última sección (sección que tiene el
número máximo de la sección) de la subtabla a la cual pertenece la sección;
⎯ userNetworkMessage(): mensaje DII es almacenada;
⎯ downloadDataMessage(): mensaje DDB es almacenada.
6
6.1
Especificación del carrusel de objetos
Objetivo del carrusel de objetos
La especificación del carrusel de objetos fue añadida para brindar soporte a los servicios de transmisión de datos
que requieren transmisión periódica de objetos DSM-CC U-U a través de las redes de transmisión compatibles con
el sistema brasileño de televisión digital terrestre (SBDTV).
La transmisión de datos de acuerdo con la especificación del sistema brasileño de televisión digital terrestre para
carrusel de objetos se transmite de acuerdo con la DSM-CC de carrusel de objetos y especificación de carrusel de
datos DSM-CC que se definen en MPEG-2 DSM-CC (ver a ISO/IEC 13818-6:1998, Sección 5).
20
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
6.2
6.2.1
Especificación del transporte de datos
Dirección de carrusel NSAP
La especificación SBTVD para carrusel de objetos se basa en la especificación DSM-CC de carrusel de objetos
(ver a ISO/IEC 13818-6). Un carrusel de objetos SBTVD representa un dominio de servicio particular que consiste
en una colección de objetos DSM-CC U-U dentro de una red SBTVD. El dominio de servicio tiene un puerto de
servicio que presenta un gráfico de servicios y nombres de objetos para los receptores.
La única identificación del puerto de servicio en las redes de transmisión se realiza por medio de la dirección
Network Service Access Point (NSAP) del carrusel, conforme definido en DSM-CC (ver a ISO/IEC 13818-6). Esta
dirección contiene una parte específica de la red que debe tornar la dirección única dentro del ambiente de red
usado. La dirección NSAP del carrusel se utiliza para referirse al carrusel de objetos desde otro dominio de
servicio. Para los ambientes del SBTVD, la sintaxis y la semántica de la dirección NSAP del carrusel se definen
abajo.
6.2.2
Estructura de la dirección NSAP del carrusel
La dirección NSAP del carrusel tiene una estructura según definida en la Figura 2 (ver a ISO/IEC 13818-6).
AFI
Type
carouselId
specifier
privateData
1 byte
1 byte
4 bytes
4 bytes
10 bytes
Figura 2 — Formato de la dirección NSAP del carrusel
La semántica del AFI (identificador de autorización y formato), tipo, carouselId y especificador se definen en la
ISO/IEC 13818-6. En particular:
⎯ AFI: campo de 8 bits que se debe configurar en el valor de 0x00 para indicar el uso privado del formato NSAP
(ver a EN 301 192);
⎯ Type (Tipo): campo de 8 bits que se debe configurar en 0x00 para indicar el uso de la dirección NSAP para
carruseles de objetos;
⎯ carouselId: campo de 32 bits que se debe configurar en el identificador del carrusel de objetos, es decir, el
campo carouselId;
⎯ specifier (especificador): campo de 32 bits que debe transportar el campo specifierType (configurado en el
valor de 0x01) y el código OUI (Identificador Único Organizacional) como definido en la DSM-CC (ver la
ISO/IEC 13818-6:1998, sección 5). El código OUI se debe configurar en un valor que haya sido asignado para
DVB por la autoridad de registro IEEE 802;
⎯ privateData: campo que debe transportar la estructura ginga_service_location que es definida en la Tabla 20.
Tabla 20 — Sintaxis para la estructura ginga_service_location
Sintaxis
ginga_service_location() {
transport_stream_id
org_network_id
service_id
reserved
}
© ABNT 2007 - Todos los derechos reservados
Número de bits
Mnemónico
16
16
16
32
uimsbf
uimsbf
uimsbf
bslbf
21
ABNT NBR 15606-3:2007
La semántica de la estructura dvb_service_location debe ser la siguiente:
⎯ transport_stream_id: campo de 16 bits que identifica el stream de transporte en el cual el carrusel se
transmite;
⎯ org_network_id: campo de 16 bits que identifica el network_id del sistema de entrega del que se origina el
carrusel;
⎯ service_id: campo de 16 bits que suministra el identificador del servicio que contiene el carrusel de objetos.
El service_id es lo mismo que el program_number en la program_map_section asociada.
6.3 Descriptores
NOTA
6.3.1
Todos los descriptores del carrusel de datos son los mismos que se utilizan en la Sección 5.
Especificación PSI y SI
El servicio de transmisión de datos indica el uso de un carrusel de objeto SBTVD por la inclusión de uno o más
descriptores de componentes de los datos – descriptor de ID del carrusel – descriptor de tag de asociación, de
acuerdo con la ARIB STD-B23.
Cada descriptor debe indicar un carrusel de objetos y ser asociado a un stream particular vía un identificador
component_tag. En particular, el valor del campo component_tag es idéntico al valor del campo component_tag de
un stream_identifier_descriptor (ver a EN 300 468) que puede estar presente en la sección de mapa del programa
PSI para el stream que se utiliza como stream de datos.
Cada descriptor de transmisión de datos permite el uso de protocolos de capas más altas basados en el criterio de
lenguaje usando una lista de objetos.
Un carrusel de objeto se puede implementar usando servicios de transmisión de datos múltiples. Los servicios de
transmisión de datos pueden publicar que ellos son parte de un carrusel de objeto particular por la inclusión del
carousel_identifier_descriptor como definido por la DSM-CC (ver la ISO/IEC 13818-6) en el primer enlace de
descriptor de la tabla de mapa de programa.
Además de ello, los carruseles-objetos usan el concepto de taps (ver la ISO/IEC 13818-6) para identificar los
streams en los cuales los objetos se transmiten. La asociación entre los taps y los streams del servicio de datos se
puede realizar por uno u otro, usando el descriptor association_tag definido en (ver la ISO/IEC 13818-6) o el
stream_identifier_descriptor en EN 300 468.
En último caso, se presume que el campo component_tag del descriptor stream_identifier sea el byte de menor
significación del valor association_tag indicado que tiene el byte más significativo configurado en 0x00.
Finalmente, los objetos de stream dentro de los carruseles de objetos U-U pueden ser conectados a los streams
elementales del servicio de transmisión de datos por ellos mismos a los streams elementales de otros servicios o
para completar servicios SBTVD. Si el objeto de stream es conectado a los stream elementales de otros servicios
o para completar los servicios SBTVD, la tabla de mapa de programa del servicio de transmisión de datos debe
incluir el deferred_association_tags_descriptor en el primer enlace del descriptor.
6.3.2
Deferred_association_tags_descriptor
La sintaxis y la semántica del deferred_association_tags_descriptor() en las redes compatibles con el SBTVD se
describen en la Tabla 21.
22
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla 21 — Deferred_association_tags_descriptor
Sintaxis
deferred_association_tags_descriptor() {
descriptor_tag
descriptor_length
association_tags_loop_length
for (i=0;i<N1;i++) {
association_tag
}
transport_stream_id
program_number
for (i=0;i<N2;i++){
private_data_byte
}
}
Número de bits
Mnemónico
8
8
8
uimsbf
uimsbf
uimsbf
16
uimsbf
16
16
uimsbf
uimsbf
8
uimsbf
La semántica del deferred_association_tags_descriptor debe ser la siguiente:
⎯ descriptor_tag: campo de 8 bits que debe tener el valor de 0x15;
⎯ descriptor_length: campo de 8 bits que especifica la extensión del descriptor en bytes;
⎯ association_tags_loop_length: campo de 8 bits que define la extensión en bytes del enlace de las tags de
asociación que siguen este campo;
⎯ association_tag: campo de 16 bits que contiene la association_tag que está asociada a un stream que no
forma parte del servicio de transmisión de datos o con otro servicio SBTVD;
⎯ transport_stream_id: campo de 16 bits que indica la stream de transporte en el cual reside el servicio que
está asociado a las tags de asociación listadas;
⎯ program_number: campo de 16 bits que se debe configurar en el service_id del servicio que está asociado a
las tags de asociación listadas;
⎯ private_data_byte: campo que debe contener la estructura deferred_service_location definida en la Tabla 22.
Tabla 22 — Sintaxis para la estructura deferred_service_location
Sintaxis
deferred_service_location() {
org_network_id
for (i=0;i<N;i++) {
private_data_byte
}
}
Número de bits
Mnemónico
16
uimsbf
8
uimsbf
La semántica de la estructura deferred_service_location debe ser la siguiente:
⎯ org_network_id: campo de 16 bits que identifica el network_id del sistema de entrega a partir del cual se
origina el servicio;
⎯ private_data_byte: campo de 8 bits que no se especifica en esta Norma.
6.3.3
Tipo de flujo
La presencia de un carrusel de objetos en un servicio debe ser indicada en la tabla de mapa de programa de ese
servicio colocando el tipo de stream que contiene el carrusel de datos en el valor de 0x0B (ver ISO/IEC 13818-1) o
un valor definido por el usuario.
© ABNT 2007 - Todos los derechos reservados
23
ABNT NBR 15606-3:2007
7
7.1
Encapsulado multiprotocolo (MPE)
Especificación de transporte de datos
Los datagramas son encapsulados en las datagram_sections que son compatibles con el formato DSMCC_section
para datos privados (ver la ISO/IEC 13818-6). El mapeo de la sección dentro de los paquetes MPEG-2 de stream
de transporte se define en sistemas MPEG-2 (ver la ISO/IEC 13818-1).
La sintaxis y la semántica del datagram_section se definen en la Tabla 23.
Tabla 23 — Sintaxis del datagram_section
Sintaxis
datagram_section () {
table_id
section_syntax_indicator
private_indicator
reserved
section_length
MAC_address_6
MAC_address_5
reserved
payload_scrambling_control
address_scrambling_control
LLC_SNAP_flag
current_next_indicator
section_number
last_section_number
MAC_address_4
MAC_address_3
MAC_address_2
MAC_address_1
if (LLC_SNAP_flag == ‘1’) {
LLC_SNAP()
}
Else{
for (j=0;j<N1;j++) {
IP_datagram_data_byte
}
}
if (section_number == last_section_number) {
for(j=0;j<N2;j++){
stuffing_byte
}
}
If(section_syntax_indicator == ‘0’){
checksum
}
else{
CRC32
}
}
24
Número de de bits
Mnemónico
8
1
1
2
12
8
8
2
2
2
1
1
8
8
8
8
8
8
uimsbf
bslbf
bslbf
bslbf
uimsbf
uimsbf
uimsbf
bslbf
bslbf
bslbf
bslbf
bslbf
uimsbf
uimsbf
uimsbf
uimsbf
uimsbf
uimsbf
8
bslbf
8
bslbf
32
uimsbf
32
rpchof
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
La semántica del datagram_section debe ser la siguiente:
⎯ table_id: campo de 8 bits que se debe configurar en 0x3E, secciones DSM-CC con datos privados (ver la
ISO/IEC 13818-6:1998, Sección 5);
⎯ section_syntax_indicator: campo que se debe configurar conforme definido en la ISO/IEC 13818-6:1998,
sección 5;
⎯ private_indicator: campo que se debe configurar conforme definido en la ISO/IEC 13818-6:1998, Sección 5;
⎯ reserved: campo de 2 bits que se debe configurar en “11”;
⎯ section_length: campo que se debe configurar conforme definido en la ISO/IEC 13818-6:1998, sección 5;
⎯ MAC_address_[1.. 6]: campo de 48 bits que contiene la dirección MAC del destino. La dirección MAC es
fragmentada en 6 campos de 8 bits, rotulados como MAC_address_1 a MAC_address_6. El campo
MAC_address_1 contiene el byte más significativo de la dirección MAC, mientras el MAC_address_6 contiene
el byte menos significativo. La Figura 3 ilustra el mapeo de los bytes de la dirección MAC en los campos de la
sección.
NOTA
El orden de los bits en los bytes no está reservado y el MSB (Bit Más Significativo) de cada byte también se
transmite primero.
Los campos MAC_address contienen una dirección MAC clara o codificada, como indicado por el campo
address_scrambling_control;
Figura 3 — Mapeo de los bytes de la dirección MAC para los campos de la sección
⎯ payload_scrambling_control: campo de 2 bits que define el modo de codificación del payload de la sección.
Eso incluye el comienzo del payload después del MAC_address_1, pero excluye a checksum o campo CRC32
(ver Tabla 24). El método de codificación aplicado es exclusivo del usuario;
Tabla 24 — Codificación del campo payload_scrambling_control
Valor
00
01
10
11
Control de codificación del payload
No codificado
Definido por el servicio
Definido por el servicio
Definido por el servicio
⎯ address_scrambling_control: campo de 2 bits que define el modo de dispersión de la dirección MAC en esta
subsección (ver Tabla 25). Este campo permite un cambio dinámico de las direcciones MAC. El método de
codificación aplicado es exclusivo del usuario;
© ABNT 2007 - Todos los derechos reservados
25
ABNT NBR 15606-3:2007
Tabla 25 — Codificación del campo address_scrambling_control
Valor
00
01
10
11
Control de dirección de codificación
No codificado
Definido por el servicio
Definido por el servicio
Definido por el servicio
⎯ LLC_SNAP_flag: flag de 1 bit. Si el flag está configurado en “1”, la payload carga un datagrama siguiendo
campo MAC_address_1. La estructura LLC/SNAP debe indicar el tipo de datagrama transportadas. Si el flag
está configurado en “0”, la sección debe contener un datagrama IP sin encapsulado LLC/SNAPP;
⎯ current_next_indicator: campo de 1 bit que se debe configurar en el valor de “1”;
⎯ section_number: campo de 8 bits. Si el datagrama es transportado en secciones múltiples, entonces este
campo indica la posición de la sección dentro del proceso de fragmentación. En caso contrario será
configurado en cero;
⎯ last_section_number: campo de 8 bits que debe indicar el número de la última sección usada para cargar el
datagrama, es decir, el número de la última sección del proceso de fragmentación;
⎯ LLC_SNAP: estructura que debe contener el datagrama de acuerdo con las especificaciones de la ISO/IEC
8802-2 LLC (Control de Conexión Lógica) y de la ISO/IEC TR 8802-1 SNAP (Punto de Anexión de la Subrede).
Si la payload de la sección está codificada (ver payload_scrambling_mode), estos bytes deben estar
diseminados;
⎯ IP_datagram_data_byte: Bytes contienen los datos del datagrama. Si la payload de la sección está codificada
(ver payload_scrambling_mode), estos bytes deben estar codificados;
⎯ stuffing_byte: campo opcional de 8 bits cuyo valor no se especifica. Si la payload de la sección está
codificada (ver payload_scrambling_mode), estos bytes se codifican. Deben auxiliar la codificación del bloque
y procesamiento de datos en los ambientes de wide bus. El número de stuffing_bytes que se utilizan debe
adecuarse a las exigencias de alineamiento de los datos definidos en el data_broadcast_descriptor;
⎯ checksum: campo que se debe configurar conforme definido en la ISO/IEC 13818-6:1998, Sección 5. Es
calculado sobre el datagram_section completo;
⎯ CRC_32: campo que se debe configurar conforme definido en la ISO/IEC 13818-6:1998, Sección 5. Es
calculado sobre el datagram_section completo.
7.2
Especificaciones PSI y SI
El servicio de transmisión de datos debe indicar la transmisión de datagramas por la inclusión de uno o más
descriptores de transmisión de datos en SI (ver la ARIB STD-B23). Cada descriptor debe ser asociado a un
stream vía un identificador component_tag. En particular, el valor del campo component_tag debe ser idéntico al
valor del campo component_tag de un stream_identifier_descriptor (ver la EN 300 468:2005, Sección 2) que puede
estar presente en la tabla de mapa de programa PSI (PMT) para el stream usado para transmitir los datagramas.
7.3
Descriptor de protocolo de transporte
El descriptor de protocolo de transporte se utiliza de la siguiente manera:
⎯ protocol_id: campo que se debe configurar en 0x0002 para indicar el uso de la especificación de
encapsulado multiprotocolo;
26
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
⎯ component_tag: campo que debe tener el mismo valor de un campo component_tag de un
stream_identifier_descriptor, que pueda estar presente en la sección de mapa de programa PSI para el
stream en el que se transmiten los datos;
⎯ selector_byte: bytes selectores que deben transportar la estructura multiprotocol_encapsulation_info que es
definida en la Tabla 26.
Tabla 26 — Sintaxis para la estructura multiprotocol_encapsulation_info
Sintaxis
multiprotocol_encapsulation_info() {
MAC_address_range
MAC_IP_mapping_flag
alignment_indicator
reserved
max_sections_per_datagram
}
Número de bits
Mnemónico
3
1
1
3
8
uimsbf
bslbf
bslbf
bslbf
uimsbf
La semántica de la estructura multiprotocol_encapsulation_info debe ser la siguiente:
⎯ MAC_address_range: campo de 3 bits que debe indicar el número de bytes de la dirección MAC que el
servicio usa para diferenciar los receptores de acuerdo con la Tabla 27;
Tabla 27 — Codificación del campo MAC_address_range
MAC_address_range
0x00
0x01
0x02
0x03
0x04
0x05
0x06
0x07
Bytes de MAC_address válidos
Reservado
6
6,5
6,5,4
6,5,4,3
6,5,4,3,2
6,5,4,3,2,1
Reservado
⎯ MAC_IP_mapping_flag: flag de 1 bit. El servicio debe configurar ese flag en “1”, si usa el IP para mapeo MAC
(ver la RFC 1112). Si ese flag está configurado en “0”, el mapeo de las direcciones IP para direcciones MAC
se realiza fuera del objetivo de esta Norma;
⎯ alignment_indicator: campo de 1 bit que debe indicar la alineamiento que existe entre los bytes del
datagram_section y los bytes del stream de transporte, de acuerdo con la Tabla 28;
Tabla 28 — Codificación del campo alignment_indicator
Valor
0
1
Alineamiento en bits
8 (estándar)
32
⎯ reserved: Campo de 3 bits que se debe configurar en "111";
⎯ max_sections_per_datagram: Campo de 8 bits que debe indicar el número máximo de secciones que se
puede usar para cargar una única unidad de datagrama.
© ABNT 2007 - Todos los derechos reservados
27
ABNT NBR 15606-3:2007
7.4
Tipo de stream
La presencia de un stream de datos de multiprotocolo en un servicio debe ser indicada en la sección de mapa de
programa de ese servicio por la configuración del tipo de stream para el valor de 0x0A (ver la ISO/IEC 13818-6:1998,
Sección 5) o un valor definido por el usuario.
8
8.1
Especificación de la transmisión del data piping
Especificación del transporte de datos
El servicio de transmisión de datos debe insertar los datos a ser transmitidos directamente en la payload de los
paquetes MPEG-2 TS.
El servicio de transmisión de datos puede usar el campo payload_unit_start_indicator y el campo
transport_priority de los paquetes de la stream de Transporte MPEG-2 en forma de servicio privado. El uso del
adaptation_field debe ser compatible con MPEG-2.
La entrega de los bits en tiempo a través de un data pipe es un servicio privado y no se especifica en esta Norma.
8.2
Especificaciones PSI y SI
El servicio de transmisión de datos debe indicar el uso de un data pipe (canal de datos), incluyendo uno o más
descriptores de transmisión de datos en SI (ver la EN 300 468). Cada descriptor debe ser asociado a un canal de
datos particular vía un identificador component_tag.
En particular, el valor del campo component_tag debe ser idéntico al valor del campo component_tag de un
stream_identifier_descriptor (ver la EN 300 468) que se puede presentar en la sección de mapa de programa PSI
para el stream que se utiliza como un data pipe.
8.3
Descriptor de protocolo de transporte
El descriptor de transmisión de datos se debe usar de la siguiente forma:
— protocol_id: campo que se debe configurar en 0x0003 para indicar un canal de datos DVB. Los otros campos
están presentes.
8.4
Tipo de stream
La especificación del stream_type en la sección de mapa de programa debe ser 0x7E (ver la ABNT NBR 156032:2007, Tabla J.1),
9
9.1
Especificación de transmisión PES independiente
Transmisión independiente de PES
La especificación de transmisión PES independiente es un método utilizado para implementar el streaming para
servicios de transmisión de datos. Hay dos tipos de especificación de transmisión PES: Sincronizada y asíncrona.
El sistema de transmisión PES sincronizada se utiliza cuando es necesario sincronizar datos en un stream con
otros streams, incluyendo video y audio. La especificación de transmisión PES asíncrona se utiliza cuando la
sincronización no es necesaria. Como un ejemplo de aplicación importante, se espera que el tipo sincronizado sea
utilizado para transmitir closed caption, y el tipo asíncrono para transmisión de caracteres superpuestos
(superimposed). Para informaciones relacionadas a la PES independiente, ver Anexo A.
28
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
9.2
PES sincronizada
De acuerdo con la especificación de transmisión PES sincronizada, los datos se transmiten utilizando un paquete
PES especificado en la ISO/IEC 13818-1. Cualquier mapeo de paquete PES para un stream de transporte MPEG2 debe cumplir la ISO/IEC 13818-1.
De acuerdo con la especificación de transmisión del tipo sincronizada, un paquete PES con las siguientes
restricciones se utiliza además de la sintaxis y semántica especificadas en la ISO/IEC 13818-1.
Para el encabezamiento del paquete PES correspondiente al private_stream_1, se deberá utilizar lo siguiente:
⎯ stream_id: en el caso de un stream del tipo sincronizado, éste se debe configurar en ‘0xBD‘(private_stream_1);
⎯ PES_packet_length: campo de 16 bits que debe tener un valor que no sea cero.
La estructura de datos de la PES sincronizada mostrada en la Tabla 29 se debe insertar en el campo
PES_packet_data_bytes.
Tabla 29 — Estructura de datos de la PES sincronizada
Sintaxis
syncronized_PES_data() {
data_identifier
private_stream_id
reserved_future_use
PES_data_packet_header_length
for (i=0; i<N1; i++) {
PES_data_private_data_byte
}
for(i=0;i<N2;i++){
syncronized_PES_data_byte
}
}
Número de bits
Mnemónico
8
8
4
4
uimsbf
uimsbf
bslbf
uimsbf
8
bslbf
8
bslbf
La semántica de campos en un paquete PES sincronizada es:
⎯ data_identifier: campo de 8 bits que se debe configurar en ‘0x80’;
⎯ private_stream_id: no utilizado (0xFF);
⎯ PES_data_packet_header_length:
PES_data_private_date_bytes;
campo
de
4
bits
indica
la
extensión
en
bytes
del
⎯ PES_data_private_data_byte: campo de 8 bits que es una utilización más detallada de este campo y
depende de un servicio. Una unidad receptora puede omitir este campo;
⎯ synchronized_PES_data_byte: campo de 8 bits conteniendo los datos transmitidos.
9.3
PES asíncrona
De acuerdo con la especificación de PS asíncrona, los datos se transmiten utilizando un paquete PS especificada
en la ISO/IEC 13818-1. Cualquier mapeo de paquete PS para un stream de transporte MPEG-2 debe cumplir la
ISO/IEC 13818-1.
De acuerdo con la especificación de transmisión asíncrona, un paquete PES con las siguientes restricciones se
utiliza además de la sintaxis y semántica especificadas en la ISO/IEC 13818-1.
© ABNT 2007 - Todos los derechos reservados
29
ABNT NBR 15606-3:2007
Para el encabezamiento del paquete PES correspondiente al private_stream_2, se deberá utilizar:
⎯ stream_id: en caso de un stream tipo asíncrono, se debe configurar a ‘0xBF’ (private_stream_2);
⎯ PES_packet_length: campo de 16 bits que debe tener un valor que no sea cero.
La estructura de datos de la PES asíncrona mostrada en la Tabla 30 se inserta en el campo del PES_
packet_data_bytes.
Tabla 30 — Estructura de datos de PES asíncrona
Sintaxis
Asynchronous_PES_data() {
data_identifier
private_stream_id
reserved_future_use
PES_data_packet_header_length
for (i=0; i<N1; i++) {
PES_data_private_data_byte
}
for(i=0;i<N2;i++){
Asynchronous_PES_data_byte
}
}
Número de bits
Mnemónico
8
8
4
4
uimsbf
uimsbf
bslbf
uimsbf
8
bslbf
8
bslbf
La semántica de campos en un paquete PES asíncrona es:
⎯ data_identifier: campo de 8 bits que se debe configurar en ‘0x81;
⎯ private_stream_id: no utilizado (0xFF);
⎯ PES_data_packet_header_length:
PES_data_private_date_bytes;
campo
de
4
bits
que
indica
la
extensión
en
bytes
del
⎯ PES_data_private_data_byte: campo de 8 bits que es una utilización más detallada de este área y depende
de un servicio. Una unidad receptora puede omitir este campo;
⎯ asynchronous_PES_data_byte: campo de 8 bits conteniendo los datos transmitidos.
10 Protocolos de transporte
10.1 Protocolo del canal de transmisión
10.1.1 Stream de transporte MPEG-2
El stream de transporte MPEG-2 debe estar de acuerdo con la GEM 1.0:2005, Subsección 6.2.1.
10.1.2 Sección MPEG-2
La sección MPEG-2 debe estar de acuerdo con la GEM 1.0:2005, Subsección 6.2.2.
10.1.3 Datos privados DSM-CC
Los datos privados DSM-CC deben estar de acuerdo con la GEM 1.0:2005, Subsección 6.2.3.
30
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
10.1.4 Carrusel de datos DSM-CC
El carrusel de datos DSM-CC debe estar de acuerdo con la GEM 1.0:2005, Subsección 6.2.4.
10.1.5 Carrusel de objetos DSM-CC
Para el protocolo de transporte de transmisión que transmite contenidos de aplicación GINGA, se especifican dos
sistemas: El sistema de transmisión de carrusel de objetos y el de carrusel de datos.
Cada sistema está de acuerdo con la GEM 1.0:2005, Subsección 6.2.5, y está disponible a través del paquete
org.dvb.dsmcc (ver Tabla 31).
Tabla 31 – Equivalentes funcionales
Nombre
GEM
Ver la ARIB-STD-B23:2004,
Anexo B
Carrusel
Ver la GEM 1.0:2005,
subsecciones 6.2.5 y
11.7.2
Observaciones
Implementación en la
ARIB STD-B23
En caso de utilización de carrusel
de datos, se aplica la ARIB STDB23:2004, Anexo B
Ver ARIB STD-B24
transport_stream_id, original_network_id, service_id de
dvb_service_location() en la ARIB STD-B23:2004, Tabla B.26: DVB
dirección carrusel NSAP debe seguir la semántica de la ARI B-SI.
Cualquier sistema estándar de carrusel es seleccionable.
ETSI TS 101 812:2003, Anexo B, e
ISO/IEC 13818-6 (DSM-CC carrusel
de objetos)
En caso de utilización de un
carrusel de objetos, se aplica la
ETSI TS 101 812:2003, Anexo B,
10.1.6 Protocolo IP de transporte de multicast en un canal de transmisión
El protocolo IP de transporte de multicast en un canal de transmisión debe estar de acuerdo con la GEM 1.0:2005,
Subsección 6.2.6.
10.1.7 Protocolo IP
El protocolo IP debe estar de acuerdo con la GEM 1.0:2005, Subsección 6.2.7.
10.1.8 Protocolo UDP
El protocolo UDP debe estar de acuerdo con la GEM 1.0:2005, Subsección 6.2.8.
10.1.9 Informaciones de servicio
Las informaciones de servicio deben estar de acuerdo con la ABNT NBR 15603-1, ABNT NBR 15603-2 y
ABNT NBR 15603-3.
© ABNT 2007 - Todos los derechos reservados
31
ABNT NBR 15606-3:2007
10.1.10
Señalización de IP
La señalización de IP debe estar de acuerdo con la GEM 1.0:2005, Subsección 6.2.10.
10.2 Protocolos de canal de interacción
10.2.1 Pila de protocolo del canal interactivo
Los protocolos de canal de interacción deben estar de acuerdo con la GEM 1.0:2005, subsección 6.3. Esta norma
no considera otros protocolos y las API que ofrecerían acceso a ellos. Otros protocolos privados y posiblemente
otras API no están excluidos, pero están fuera del objetivo de esta Norma.
La Figura 4 ilustra el conjunto de protocolos de canal de interacción SBTVD definido que son accesibles por
aplicaciones MHP en algunos o todos los perfiles (ver la ABNT NBR 15606-1). Los detalles completos de las API
que ofrecen acceso a estos protocolos de interacción están en la ETSI TS 101 812:2003, Sección 11.
Figura 4 — Pila de protocolo del canal de interacción
10.2.2 Protocolo dependiente de la red
El protocolo dependiente de la red debe estar de acuerdo con la GEM 1.0:2005, Subsección 6.3.1.
10.2.3 Protocolo de internet (IP)
El protocolo de internet está definido en la RFC 791.
32
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
10.2.4 Protocolo de control de transmisión (TCP)
El protocolo de control de transmisión está definido en la RFC 793.
10.2.5 UNO-RPC
Lo UNO-RPC debe estar de acuerdo con la GEM 1.0 :2005, Subsección 6.3.4.
10.2.6 UNO-CDR
Lo UNO-CDR debe estar de acuerdo con la GEM 1.0:2005, Subsección 6.3.5.
10.2.7 DSM-CC usuario para usuario
El DSM-CC usuario para usuario debe estar de acuerdo con la GEM las 1.0.1:2005, Subsección 6.3.6.
10.2.8 Protocolo HTTP
El protocolo HTTP debe estar de acuerdo con la GEM 1.0 :2005, Subsección 6.3.7.
10.2.9 Protocolo específico para el servicio
El protocolo específico para el servicio debe estar de acuerdo con la GEM 1.0:2005, Subsección 6.3.8.
10.2.10
Protocolo de datagrama del usuario (UDP)
El protocolo de datagrama de usuario (UDP) debe estar de acuerdo con la GEM 1.0:2005, Subsección 6.3.9.
10.2.11
DNS
El DNS debe estar de acuerdo con la GEM 1.0:2005, Subsección 6.3.10.
10.3 Protocolos de transporte para aplicaciones siendo cargados en el canal de interacción
Los protocolos de transporte para aplicaciones siendo cargados en el canal de interacción deben estar de
acuerdo con la GEM 1.1:2006, Subsección 6.4.
El sistema de archivo implementado apenas por el canal de interacción debe estar de acuerdo con la
GEM 1.0:2005, Subsección 6.4.
El híbrido entre el stream de transmisión y el canal de interacción debe estar de acuerdo con la GEM 1.0:2005,
Subsección 6.4.
11 Modelo de aplicación
11.1 Aplicación Ginga
La aplicación Ginga-J debe estar de acuerdo con la GEM 1.0:2005, sección 9 subsección 7.1. En esta Norma,
este modelo se utiliza como modelo Ginga-J; para el modelo Ginga-NCL la aplicación Ginga debe estar de
acuerdo con la ABN NBR 15606-2.
La aplicación Ginga es definida como una aplicación extendida de la aplicación GEM, además de las
especificaciones de la GEM 1.0. La aplicación GEM es un subconjunto de la aplicación GINGA-J. Así, la
aplicación Ginga-J, preparada sin las especificaciones adicionales, es equivalente a la aplicación GEM.
© ABNT 2007 - Todos los derechos reservados
33
ABNT NBR 15606-3:2007
11.2 Modelo Ginga-J
El modelo se utiliza como el modelo Ginga-J y debe estar de acuerdo con la GEM 1.0:2005, Subsección 9.2.
11.3 Como manejar el modelo NCL
El Modelo NCL debe estar de acuerdo con los detalles de la ABNT NBR 15606-2.
11.4 Gestión de recursos entre aplicaciones
La gestión de recursos entre aplicaciones debe estar de acuerdo con la ABNT NBR 15606-2.
12 Transmisión de informaciones de aplicación
12.1 Descriptores AIT y valores constantes
Los descriptores AIT y los valores constantes deben estar de acuerdo con la ARIB STD-B23 y con la Tabla 32.
Tabla 32 — Descriptores AIT y valores constantes
Donde se utiliza
Data contents descriptor
Data coding descriptor
Carousel ID descriptor
Association tag
descriptor
Tipo
Valor
0xC7
0xFD
0x13
Descriptor tag
0x14
Extension tag descriptor
0x1 5
Label descriptor
Caching priority
Content type descriptor
Reservado para MHP
para futuro descriptor OC
Application information
table (AIT)
(AIT)
Application
descriptor
Descriptor tag
0x70
0x71
0x72
0x730x7F
Table ID no PID
AIT
0x74
0x01
Transport protocol
descriptor
0x02
Ginga-J application
location descriptor
External application
authorisation descriptor
Ginga-NCL application
descriptor
34
PMT
Foco
Descriptores
Ver 12.2,
Anexo B,
Anexo C y
ARIB STD-B23
Ver ARIB
STD-B23
DII moduleinfo Ver ARIB STDBIOP objectinfo B23 (Carrusel de
datos y objetos)
OC
Ver Sección 12
0x00
Application name
descriptor
Ginga-J application
descriptor
Donde es
definido
EIT
Descriptor tag
0x03
Ver GEM Middleware
AIT
Ver Sección 12
y Anexo C
0x04
0x05
0x06
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla 32 (continuación)
Donde se utiliza
Tipo
Ginga-NCL application
location descriptor
NCL HTML
reservado por el MHP
NCL-HTML
(reservado por el MHP)
Application icons
descriptor
Valor
0x0A
0x0B
DII location descriptor
0x0D
Reservado para MHP
para uso futuro
Private data specifier
descriptor
Reservado para MHP
para uso futuro
Definido por el usuario
Sistema de codificación
Sistema de codificación
Ginga-J
de datos
Sistema de transmisión (data_component_id)
AIT
Sistema de transmisión
de carrusel de datos
Sistema de transmisión Formato de transmisión
de carrusel de objetos (transmission_format)
Carrusel de objetos
Ginga
Identificación de
protocolo (protocol_id)
Carrusel de datos
Ginga (NCL)
Tipo de aplicación
Ginga-J application type
(application_type)
Descriptores
0x08-0x09
0x0C
IP signalling descriptor
Foco
0x07
Pre-fetch descriptor
Reservado para MHP
para uso futuro
Donde es
definido
0x0E –
0x010
0x11
0x12-0x5E
0x5F
0x60-07F
0x80-0xFE
A0
A3
1
10
0x0001
PMT
Ver 12.2 a 12.18 y
ARIB STD-B23
Área de
sistema
Ver 12.2 a 12.18 y
codificación de
ARIB STD-B23
datos
AIT
Ver 12.2 a 12.18, y
ARIB STD-B23
AIT
Ver 12.2 a 12.18, y
ARI B STD-B23
Ver ARI B
STD-B23
0x0004
0x0001
12.2 Ejecución de la aplicación Ginga
Para realizar la ejecución de las aplicaciones Ginga, es necesario especificar la aplicación y transmitir a
informaciones adicionales de la aplicación para controlarla.
El sistema de transmisión de la información de la aplicación para ser utilizada en esta Norma debe estar de
acuerdo con la GEM 1.0:2005, Sección 10.
© ABNT 2007 - Todos los derechos reservados
35
ABNT NBR 15606-3:2007
Las informaciones adicionales de acuerdo con la ARIB STD-B23 son las siguientes:
⎯ valores de identificación referentes al Ginga y a AIT, para identificar el almacenamiento del componente de
datos del additional_ ginga_j_info() desde el additional identifying information en el data component descriptor
para el ES que transmite la aplicación Ginga en la PMT;
⎯ almacenamiento del ginga_j_info() desde el additional information dentro del data contents descriptor para ser
almacenado con el área de los descriptores de un evento de programa que utilice las aplicaciones Ginga en la
EIT;
⎯ almacenamiento de la ait_identifier_info() desde el additional information dentro del data component descriptor
para el ES que transmite a AIT en la PMT;
⎯ en el campo additional_ ginga_j_info() y ginga_j_info(), el carrusel de objetos debe ser identificado con el
valor ‘10’.
Además de las informaciones arriba, la Application Information Table (Tabla de Informaciones de la Aplicación),
especificada en 12.16.1, debe ser transmitida en un ES que engloba el programa en forma de secciones privadas.
Utilizada la AIT, la información de la aplicación es almacenada (ver 12.17.1) sobre la estructura de los grupos de
descriptores almacenados en la AIT. Para informaciones adicionales relacionadas a las tablas PMT y EIT, ver el
Anexo C.
12.3 Señal de aplicaciones comunes
La señal de aplicaciones comunes debe estar de acuerdo con la GEM 1.0:2005, Subsección 10.1.1.
Las informaciones de aplicaciones se transmiten en secciones privadas, desde la Tabla 46 (ver 12.16.1), como
un ES que engloba el programa. De esta forma, se transmite la información adicional necesaria para cada
aplicación.
Como complemento, los valores de identificación del componente de datos son determinados para indicar la
existencia de la transmisión de la AIT, así como la aplicación GINGA, y la estructura de la selección de área del
data component descriptor (ver 12.7 para detalles).
Los siguientes descriptores deben ser almacenados en la AIT como información común, sin llevar en
consideración el formato de la aplicación:
⎯ transport protocol descriptor: Todas las aplicaciones deben estar en el objetivo de por lo menos un
transport protocol descriptor. Este descriptor puede ser almacenado tanto en el common information
descriptor loop como en el application information descriptor loop;
⎯ application descriptor: Un único descriptor de aplicación debe ser almacenado en un enlace de descriptor
de información de aplicación para cada una de éstas;
⎯ application name descriptor: Una única aplicación debe ser almacenada en un enlace de descriptor de
información de aplicación para cada una de éstas.
12.4 Señal de aplicación adicional necesaria para Ginga-J
Las exigencias especificadas en la GEM 1.0:2005, Subsección 10.1.2, deben ser observadas. Las informaciones
necesarias, como la aplicación Ginga, deben ser transmitidas vía AIT.
NOTA
36
Para los efectos de esta Norma, Ginga-J y DVB-J son equivalentes.
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
En el enlace del descriptor de informaciones de aplicación AIT Ginga, los siguientes deben ser almacenados por
lo menos para una aplicación.
⎯ Ginga-J application descriptor;
⎯ Ginga-J application location descriptor;
o
⎯ Ginga-NCL application descriptor;
⎯ Ginga-NCL application descriptor location.
12.5 Informaciones adicionales en PSI/SI
Como para las informaciones de aplicación, la Tabla 32 de informaciones de aplicación (AIT) se transmite en modo
sección privada como un ES que comprende el programa. Las informaciones adicionales referentes a la
transmisión de informaciones de aplicación son las siguientes:
⎯ definición de valores de identificación correspondientes a Ginga-J y AIT para identificar el almacenamiento del
componente de datos de additional_ginga_j_info() de informaciones adicionales, identificando las
informaciones del descriptor de componente de datos para ES que transmite Ginga-J de PMT;
⎯ almacenamiento de Ginga-J info() en información adicional dentro del descriptor de contenidos de datos a ser
almacenados en el área del descriptor de un evento de programa que utiliza la aplicación Ginga-J en EIT;
⎯ almacenamiento ait_identifier_info() en información adicional dentro del descriptor de componente de datos
para ES que transmite AIT de PMT;
⎯ diferenciación de otros sistemas de transmisión atribuyendo 0x0004 como el protocol_id que corresponde a
los datos de transmisión de carrusel. Para detalles del selector_byte, ver 12.17.6;
⎯ atribución de un sistema de transmisión de carrusel de objetos en ‘10’ en el campo de
additional_ginga_j_info() y ginga_j_info() para identificar el sistema de transmisión de contenidos en nivel
PAT/PMT;
⎯ en el caso de transmission_format=’10’ (= sistema de transmisión de carrusel de objetos), el descriptor
association_tag (valor de tag: 0x14), el descriptor deffered_Association_tag (valor de tag: 0x15) o el descriptor
Carousel_id (valor: 0x13), especificados en la ISO/IEC 13818-6, deben ser almacenados en PMT, conforme
sea necesario.
12.6 Identificación del componente de datos
Un data_component_id es atribuido a la aplicación Ginga. Mientras tanto, un valor de identificación de componente
de datos es atribuido a la transmisión AIT y un stream elemental a ser transferido en el modo de sección privada
se agrega al PMT.
12.7 Descriptor de componente de datos y descriptor de contenidos de datos
12.7.1 Referencia indirecta
Desde el carrusel que transmite la aplicación Ginga, se debe realizar referencia indirecta con el descriptor de
componente de datos relevante al sistema de codificación Ginga por el componente de tag (component_tag.)
© ABNT 2007 - Todos los derechos reservados
37
ABNT NBR 15606-3:2007
12.7.2 Descriptor de componente de datos en aplicación Ginga - Sistema de codificación de datos
Cuando la identificación de la codificación de datos es realizada por el sistema de codificación Ginga, la estructura
additional_ginga_j_info(), tal como demostrado en la Tabla 33, se describe dentro del área de informaciones
adicionales de identificación en el descriptor de componente de datos. La información adicional que no se
transmite en AIT es almacenada aquí (ver la ABNT NBR 15603-2:2007, Subsección 8.3.20).
Tabla 33 — Additional_ginga_j_info()
Número de
bits
Sintaxis
additional_ginga_j_info() {
transmission_format
application_identifier_flag
document_resolution
independent_flag
if (application_identifier_flag == 1) {
application_identifier()
}
if (transmission_format == ‘00’ ){
download_id
ondemand_retrieval_flag
file_storable_flag
event_section_flag
reserved_future_use
}
else if (transmission_format == ‘01 ’){
reserved_future_use
}
else if (transmission_format == ‘10’){
carousel_id
ondemand_retrieval_flag
file_storable_flag
event_section_flag
reserved_future_use
Mnemónico
2
1
4
1
bslbf
bslbf
bslbf
bslbf
8
bslbf
32
1
1
1
5
uimsbf
bslbf
bslbf
bslbf
bslbf
8
bslbf
32
1
1
1
5
uimsbf
bslbf
bslbf
bslbf
bslbf
}
}
La descripción del additional_ginga_j_info( ) debe ser la siguiente:
⎯ transmission_format (formato de transmisión): el área de 2 bits especifica el sistema de transmisión de la
aplicación Ginga (ver Tabla 34);
Tabla 34 – Formato de transmisión
38
Valor
Descripción
00
Carrusel de datos y mensaje de eventos (excepto
servicio de datos sólo para almacenamiento)
00
Carrusel de datos (servicio de datos solo para
almacenamiento)
10
Carrusel de objetos
11
Reservado para el futuro
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
⎯ application_identifier_flag (flag identificador de la aplicación): flag de 1 bit que indica si el identificador de
aplicación está incluido en el área de selección (ver Tabla 35);
Tabla 35 – Flag identificador de la aplicación
default_version_flag
Descripción
0
No utilizar el valor estándar para el número de la versión
1
Usar valor estándar para el número de la versión
⎯ document_resolution (resolución del documento): Resolución de la aplicación Ginga (correspondiente a las
características de resolución) y tasa de aspecto (correspondiente a las características de display-aspect-ratio)
son indicadas. Elegir uno de los valores de la Tabla 36;
Tabla 36 – Resolución del documento
Valor
0
1
10
11
100
101
110
111
1000
1001
1010
1010 - 1111
Descripción
Aplicaciones Ginga con múltiples tamaños y resoluciones
1920 x 1080 (16:9)
1280 x 720 (16:9)
960 x 540 (16:9)
720 x 480 (16:9)
720 x 480 (4: 3)
160 x 120 (4:3)
160 x 90 (16:9)
320 x 240 (4:3
320 x 180 (16:9)
352 x 288 (4:3)
Reservado para el futuro
⎯ independent_flag (flag independiente de disponibilidad de audio y video): indica si se presume que el
programa de transmisión de datos sea oído y visto independientemente; 0 = Imposible y 1 = Posible.
⎯ application_identifier() (identificador de aplicación): un valor para identificar exclusivamente la aplicación..
Ver Tabla 37 para los detalles;
Tabla 37 — Codificación de identificador de aplicación
Estructura de datos
application_identifier() {
Tasa de bits
String de bits
organization_id
32
bslbf
application_id
16
bslbf
⎯ organization_id (ID de la organización): campo de 32 bits que muestra el sistema que creó la aplicación.
La ID almacena el número internacionalmente exclusivo que le fue atribuido;
© ABNT 2007 - Todos los derechos reservados
39
ABNT NBR 15606-3:2007
⎯ application_id (ID de la aplicación): campo de 16 bits que almacena el número exclusivamente atribuido en el
sistema para identificar la aplicación. Si la aplicación descrita por el descriptor es un servicio adicional a un
programa de televisión o de radio, se utiliza para especificar la aplicación que realmente se asocia al
programa de televisión o radio;
⎯ download_id (ID de download): campo de 32 bits que sirve como rótulo que identifica el carrusel de forma
única. Muestra el carrusel que debía estar montado como configuración estándar;
⎯ ondemand_retrieval_flag (flag de disponibilidad de recepción de audio y video por demanda): área de 1 bit
que indica, para la recepción de la aplicación transmitida por dicho ES, si la adquisición de la aplicación desde
el carrusel en cada caso de la operación de audiencia está prevista. La capacidad de recepción es regulada
por la operación de cada entidad de medios; 0 = No disponible y 1 = Disponible;
⎯ file_storable_flag (flag de archivo almacenable): indica si el almacenamiento del archivo del programa de
transmisión de datos correspondiente es posible. Por ejemplo, el almacenamiento de archivo es difícil si la
información se actualiza durante el programa. La capacidad de almacenamiento es regulada por la operación
de cada entidad de medios. 0 = Archivo no almacenable y 1 = Archivo almacenable;
⎯ event_section_flag (flag de evento de la sección de transmisión): campo de 1 bit que indica si el mensaje de
evento es distribuida por este componente. 0 = El mensaje de evento no es distribuida y 1 = El mensaje de
evento es distribuida;
⎯ carousel_id (ID del carrusel): campo de 32 bits que es el valor de identificación que especifica de forma
exclusiva el carrusel de objetos. Este valor de identificación es especificado por el descriptor carousel_id
(descriptor del identificador del carrusel), que está almacenado en el PMT.
12.7.3 Descriptor de contenidos de los datos en la aplicación Ginga - Sistema de contenido de datos
Si la identificación de la codificación de datos se hace conforme el sistema de codificación Ginga, la estructura
ginga_j_info() mostrada en la Tabla 38 debe ser descrita en el área de selección del descriptor de contenidos de
datos en el EIT. Eso permite que la notificación avanzada de la aplicación Ginga sea programada para uso por la
unidad de evento de programa.
Las informaciones referentes a la aplicación Ginga y señales de controles se almacenan en la AIT. No se presume
que la aplicación sea controlada por la unidad de evento de programa. Como consecuencia de ello, no hay
mecanismo en la AIT que comprenda el cronograma por el cual la aplicación Ginga será utilizada para cada
unidad de programa por adelantado (ver la ABNT NBR 15603-2007, Subsección 8.3.28).
40
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla 38 — Ginga_j_info()
Estructura de datos
ginga_j_info(){
transmission_format
reserved_future_use
document_resolution
default_version_flag
independent_flag
application_identifier_flag
content_id_flag
associated_application_flag
reserved_future_use
update_flag
ISO_639_language_code
if (application_identifier_flag == 1) {
application_identifier()
}
if (content_id_flag== 1) {
content_id
content_version
}
if (default_version_flag==0) {
application_profiles_length
for ( i=0; I<N; i++) {
application_profile
profile_major_version
Profile_minor_version
profile_micro_version
}
}
if (transmission_format == ‘00’ ){
ginga_carousel_info()
ondemand_retrieval_flag
file_storable_flag
reserved_future_use
} else if (transmission_format == ‘01’) {
ginga_stored_carousel_info()
} else if (transmission_format == ‘10’) {
ginga_object_carousel_info()
ondemand_retrieval_flag
file_storable_flag
reserved_future_use
Tasa de bits
2
1
4
1
1
1
1
1
3
1
24
bslbf
String de bits
bslbf
bslbf
bslbf
bslbf
bslbf
bslbf
bslbf
bslbf
bslbf
bslbf
bslbf
32
uimsbf
16
uimsbf
8
uimsbf
16
uimsbf
8
8
8
uimsbf
uimsbf
uimsbf
1
bslbf
1
6
bslbf
bslbf
1
bslbf
1
6
bslbf
bslbf
La descripción de la ginga_j_info( ) debe ser la siguiente:
⎯ transmission_format (formato de transmisión): área de 2 bits que especifica el sistema de transmisión de la
aplicación Ginga (ver Tabla 39);
© ABNT 2007 - Todos los derechos reservados
41
ABNT NBR 15606-3:2007
Tabla 39 – Formato de transmisión
Valor
Descripción
00
Carrusel de datos y mensaje de eventos (excepto
servicio de datos sólo para almacenamiento)
00
Carrusel de datos (servicio de datos sólo para
almacenamiento)
10
Carrusel de objetos
11
Reservado para el futuro
⎯ document_resolution (resolución de documento): resolución de la aplicación Ginga-J y display-aspect-ratio
que son indicadas en la Tabla 40;
Tabla 40 – Resolución de documento
Valor
0
1
10
11
100
101
110
111
1000
1001
1010
1010 - 1111
Descripción
Aplicaciones Ginga con múltiples tamaños y resoluciones
1920 x 1080 (16:9)
1280 x 720 (16:9)
960 x 540 (16:9)
720 x 480 (16:9)
720 x 480 (4: 3)
160x120 (4:3)
160x90 (16:9)
320x240 (4:3
320x180 (16:9)
352x288
Reservado para el futuro
⎯ default_version_flag (flag de utilización de la versión estándar): flag de 1 bit que indica que el valor estándar
especificado por la operación se utiliza como un perfil para la ejecución de la aplicación Ginga-J que debe ser
transmitida por el ES correspondiente. Debe estar de acuerdo con la Tabla 41;
Tabla 41 – default_version_flag
default_version_flag
Descripción
0
No utilizar el valor estándar para el número de la
versión
1
Usar valor estándar para el número de la versión
⎯ independent_flag (flag independiente de disponibilidad de audio y video): indica si se presupone que el
programa de transmisión de datos sea oído y visto independientemente; 0 = Imposible y 1 = Posible;
⎯ application_identifier_flag (flag identificador de la aplicación): flag de 1 bit que indica si el identificador de
aplicación está incluido en el área de selección; 0 = No Incluido y 1 = Incluido;
⎯ content_id_flag (flag de ID de contenidos): flag de 1 bit que indica si la ID de los contenidos y su Versión
están incluidos en el descriptor; 0 = No Incluido y 1 = Incluido;
42
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
⎯ associated_application_flag (flag de aplicación asociada): flag de 1 bit que indica los contenidos asociados
al programa de televisión o radio, cuando la aplicación descrita por este descriptor sea un servicio adicional de
datos para el programa de televisión o radio. Para una aplicación que no sea un servicio adicional, el valor
debe siempre ser 0;
⎯ update_flag (flag de actualización): indica si hay distribución diferencial para esta aplicación en el futuro; 0 =
No hay distribución diferencial y 1 = Hay distribución diferencial;
⎯ ISO_639_language_code (código de lenguaje): código de lenguaje usado para la aplicación Ginga;
⎯ application_identifier() (identificador de aplicación): valor para identificar exclusivamente la aplicación (ver
Tabla 42);
Tabla 42 — Estructura del identificador de aplicación
Estructura de datos
Tasa de bits
String de bits
32
bslbf
16
bslbf
application_identifier() {
organization_id
application_id
}
⎯ organization_id (ID de la organización): campo de 32 bits que indica el sistema que preparó la aplicación.
Esta ID almacena el número internacionalmente exclusivo que le fue atribuido;
⎯ application_id (ID de la aplicación): campo de 16 bits que almacena el número que identifica la aplicación. El
número es atribuido de forma exclusiva en el sistema. Cuando la aplicación descrita por el descriptor sea un
servicio adicional al programa de televisión o radio, se utiliza para especificar la aplicación que de hecho se
asocia al programa de televisión o radio;
⎯ content_id (ID de contenidos): campo de 32 bits que es un rótulo que identifica el programa de transmisión
de datos y es atribuido de forma exclusiva en compañía de la transmisión. En caso de almacenamiento de
datos, si el content_id tiene el mismo valor de un programa de transmisión de datos anterior, los datos pueden
ser sobrescritos;
⎯ content_version (versión de los contenidos): campo de 16 bits que indica el número de la versión entre el
programa de transmisión de datos que tiene una ID de contenidos idéntica;
⎯ application_profiles_length (especificación de extensión del perfil de la aplicación): indica la extensión del
campo que especifica el perfil receptor con el cual la aplicación es ejecutable;
⎯ profile_major_version (número principal del perfil): campo de 8 bits que indica que el número principal entre
los números de versión de los perfiles de recepción debe corresponder por lo menos a la ejecución de
aplicación Ginga relevante;
⎯ profile_minor_version (número secundario de perfil): campo de 8 bits que indica el número secundario entre
los números de versión de los perfiles de recepción que debe corresponder a por lo menos la ejecución de
aplicación Ginga relevante;
⎯ profile_micro_version (micronúmero de perfil): campo de 8 bits que indica el micronúmero entre los números
de versión de los perfiles de recepción que debe corresponder a por lo menos la ejecución de aplicación
Ginga relevante;
© ABNT 2007 - Todos los derechos reservados
43
ABNT NBR 15606-3:2007
⎯ ginga_carousel_info( ): estructura de datos especificada en la ARIB STD-B24:2007, Anexo C2;
⎯ ondemand_retrieval_flag (flag de disponibilidad de recepción de audio y video por demanda): área de 1 bit
que indica, para la recepción de la aplicación transmitida por dicho ES, si la adquisición de la aplicación desde
el carrusel en cada caso de la operación de audiencia está prevista. La capacidad de recepción es regulada
por la operación de cada entidad de medios; 0 = No disponible y 1 = Disponible;
⎯ file_storable_flag (flag de archivo almacenable): indica si el almacenamiento del archivo del programa de
transmisión de datos correspondiente es posible. Por ejemplo, el almacenamiento de archivo es difícil si la
información se actualiza durante el programa. La capacidad de almacenamiento es regulada por la operación
de cada entidad de medios;
⎯ ginga_ stored_carousel_info(): estructura de datos especificada en la ARIB STD-B24:2007, Anexo C2;
⎯ ginga_object_carousel_info(): estructura de datos especificada en 12.7.4.2.
12.7.4 Descriptor de componente de datos para transmisión AIT
12.7.4.1
Ait identifier inf
Cuando la ID de la codificación de datos es transmisión AIT, la estructura ait_identifier_info() mostrada en la
abla 43 debe ser descrita dentro del área de selección del descriptor de componente de datos en el PMT
(ver la ABNT NBR 15603-2:2007, Subsección 7.2.3).
Tabla 43 — Ait_identifier_info()
Estructura de datos
ait_identifier_info(){
for ( i=0; i<N; i++ ) {
application_type
reserved_future_use
AIT_version_number
}
}
Tasa de bits
String de bits
16
3
5
uimsbf
bslbf
uimsbf
La descripción de la ait_identifier_info( ) debe ser la siguiente:
⎯ application_type (tipo de aplicación): indica el valor del tipo de aplicación a ser transmitido en la AIT. Como
en el DVB, al DVB-J se le atribuye 0x0001. En el Ginga-J, el valor debe también ser 0x0001;
⎯ AIT_version_number (número de la versión AIT): versión actual version_number almacenada.
12.7.4.2
objetos
Área de selección del descriptor de contenidos de datos en la transmisión del carrusel de
Cuando las informaciones para el control de recepción del carrusel de objetos están dentro del área de selección
del descriptor de contenido de datos, las informaciones mostradas en la Tabla 44 deben ser agregadas en la
posición del área de selección para cada esquema de codificación de datos.
44
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla 44 — Estructura Ginga_object_carousel_info()
Estructura de datos
ginga_object_carousel_info(){
num_of_carousels
for(i=0; i< num_of_carousels; i++) {
association_tag
event_section_flag
reserved_future_use
Component_size_flag
default_transaction_id_flag
Tasa de bits
String de bits
8
uimsbf
16
1
3
1
1
uimsbf
bslbf
bslbf
bslbf
bslbf
default_timeout_DSI_flag
default_leak_rate_flag
1
1
bslbf
bslbf
32
uimsbf
32
uimsbf
32
uimsbf
22
2
uimsbf
bslbf
if (component_size_flag == ‘1’) {
component_size
}
if (default_transaction_id_flag == ‘1’) {
transaction_id
}
if (default_timeout_DSI_flag == ‘1’) {
timeout_value_DSI
}
if (default_leak_rate_flag == ‘1’) {
leak_rate
reserved
}
}
}
La descripción de la ginga_object_carousel_info() debe ser la siguiente:
⎯ num_of_carousels (número de carruseles): campo de 8 bits que indica el número de carruseles de objetos
incluidos en una vuelta del enlace;
⎯ association_tag (tag de asociación): campo de 16 bits que especifica el componente de stream en el cual el
mensaje DSI con el ServiceGatewayInfo del carrusel de objeto es almacenada, por el tag de asociación que
es atribuido por el descriptor association_tag de PMT;
⎯ event_section_flag: con este componente, es indicada la distribución de mensaje de evento;
⎯ component_size_flag (flag de tamaño de componente): campo de 1 bit que indica si el tamaño del
componente se codifica en la estructura de datos. Cuando el valor del campo component_size aún no está
definido, no está codificado (0: no codificado; 1: codificado);
⎯ default_transaction_id_flag: campo de 1 bit que indica si la ID de transacción está codificada en la estructura
de datos. Cuando la adquisición de DLL para ID opcional de transacción está especificada, la ID de
transacción no está codificada (0: no codificada; 1: codificada);
© ABNT 2007 - Todos los derechos reservados
45
ABNT NBR 15606-3:2007
⎯ default_timeoutDSI_flag: campo de 1 bit que indica si el valor de intervalo DSI está codificado en la
estructura de datos. Cuando el valor estándar definido por la operación se utiliza como el valor de intervalo
DSI, no está codificado (0: No codificado; 1: Codificado);
⎯ default_leak_rate_flag: campo de 1 bit que indica si la tasa de flujo está codificado en la estructura de datos.
Cuando el valor estándar definido por la operación se utiliza como valor de tasa de flujo, no está codificado (0:
No codificado; 1: Codificado);
⎯ component_size (tamaño de componente): campo de 32 bits que indica el tamaño total de los datos (unidad:
Byte) a ser transferidos por dicho carrusel de objetos;
⎯ transaction_id (ID de la transacción): valor de ID de la transacción a ser transmitido por el componente. La ID
no codificada de transacción muestra la necesidad de adquisición DSI que tiene ID de transacción opcional;
⎯ time_out_value_DSI (valor de intervalo DSI): campo de 32 bits que indica el valor de intervalo recomendado
(unidad en milisegundos) para la recepción de toda la sección DSI del carrusel relevante. Cuando el valor sea
0xFFFFFFFF, será una indicación de que no es valor de intervalo recomendable;
⎯ leak_rate (tasa de flujo): campo de 22 bits que indica la tasa de flujo del buffer de transporte del receptor. La
unidad es de 50 byte/s.
12.8 Localizador en descripción de aplicación
El localizador en descripción de aplicación debe estar de acuerdo con la GEM 1.0:2005, Subsección 11.3. El
locator descriptor debe estar de acuerdo con la ARIB STD-B23:2004, Sección 14.
12.9 Descripción de aplicación
La descripción de aplicación debe estar de acuerdo con la GEM 1.0:2005, Subsección 10.4. El sistema de
transmisión se describe en 12.3. La estructura de sesión AIT a ser transmitida en el modo de transmisión de
sesión privada debe estar de acuerdo con 12.16. El campo de string en la AIT puede ser codificado por un código
de caracteres de 8 unidades, así como UTF-8. Para la operación, uno de ellos se debe aplicar y la mezcla de
ambos códigos debe ser evitada. Por otro lado, los strings adquiridos por el método getName(), como la API
org.dvb.application, pueden ser automáticamente convertidos en strings utilizables en Java.
Los tipos de aplicaciones deben ser modificados, incluso el tipo de aplicación 0x0008, como aplicación reservada
GINGA, y 0x0009, como aplicación Ginga-NCL, como mostrado en la Tabla 45.
Tabla 45 — Tipo de aplicación
Tipo de aplicación
0x00
0x0001
0x0002
0x0006
0x0007
0x0008
0x0009
0x000A…0x7FFF
46
Descripción
Reservado
DVB-J / Ginga-J
DVB-HTML
ACAP-J
ARIB - BML
Ginga - Bridge
Ginga-NCL
Sujeto a registro con DVB
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
12.10
Transmisión y monitoreo de descripción de aplicación
La transmisión y monitoreo de descripción de aplicación debe estar de acuerdo con la GEM 1.0:2005, Subsección
10.4.1. Como para el proceso de transmisión, la tabla de la sección que está de acuerdo con la estructura AIT se
transmite como ES que comprende el modo de transmisión vía sección privada del programa.
Para la operación, el valor 0x0001, 0x0008 y 0x0009 son atribuidos como el application_type de Ginga-J, Ginga y
Ginga-NCL, y 0x0001 es atribuido como el valor de protocol_id para significar el sistema de transmisión de
carrusel de objetos.
El selector_byte en el descriptor de protocolo de transporte para el sistema de transmisión del carrusel de datos
debe ser de la misma sintaxis, como para el caso del “protocolo de transporte de carrusel de datos” (protocol_id
=0x0004). Para los detalles de la estructura, ver Tabla 56.
12.11
Visibilidad de la descripción de aplicación
La visibilidad de la descripción debe estar de acuerdo con la GEM 1.0:2005, Subsección 10.4.2.
12.12
Detalles de la descripción de aplicación
Las descripciones de aplicación se transmiten con base en el sistema de transmisión descrito en 12.3. Los
descriptores de aplicación especificados en 12.17 se deben utilizar para el almacenamiento de las descripciones
de aplicación.
12.13
Tratamiento de la aplicación a partir del servicio previamente seleccionado
El tratamiento de la aplicación a partir del servicio previamente seleccionado debe estar de acuerdo con la GEM
1.0:2005, Subsección 10.4.4.
12.14
Descripción de aplicación específica al Ginga-J
La descripción de aplicación específica debe estar de acuerdo con la GEM 1.0:2005, Subsección 10.5.
12.15
Detalles de la descripción de aplicación Ginga
Las descripciones de aplicación Ginga-J se transmiten con base en el sistema de transmisión descrito en 12.3.
La estructura AIT y la estructura del descriptor en AIT deben estar de acuerdo con 12.6. El DVB-J en MHP debe
ser interpretado como Ginga-J en esta Norma. Los descriptores de aplicación especificados en 12.18 se deben
utilizar para el almacenamiento de los descriptores de la aplicación Ginga.
12.16
12.16.1
Sistema de codificación de información de aplicación
Información de aplicación
En la AIT, todas las informaciones relevantes a la aplicación y exigencias para estatus de partida están
almacenadas. También es posible instruir el receptor para alterar el estatus de partida desde la estación de TV
con los datos en la AIT.
Todas las secciones AIT que tengan el mismo Application_Type en el PID idéntico comprenden una subtabla. El
valor de tag de descripción en la AIT debe ser único en la AIT.
La estructura de datos de la información de aplicación AIT es mostrada en la Tabla 46.
© ABNT 2007 - Todos los derechos reservados
47
ABNT NBR 15606-3:2007
Tabla 46 — Tabla de información de la aplicación (AIT)
Estructura de datos
Tasa de bits
String de bits
application_information_section (){
Table_id
section_syntax_indicator
reserved_future_use
reserved
section_length
application_type
reserved
8
1
1
2
12
16
2
uimsbf
bslbf
bslbf
bslbf
uimsbf
uimsbf
bslbf
version_number
current_next_indicator
5
1
uimsbf
bslbf
section_number
8
uimsbf
last_section_number
reserved_future_use
common_descriptors_length
for (i=0, i<N; i++) {
descriptor ()
8
4
12
uimsbf
uimsbf
4
bslbf
12
uimsbf
8
4
12
uimsbf
bslbf
uimsbf
32
rpchof
}
reserved_future_use
application_loop_length
for (i=0; i<N;i++) {
application_identifier ()
application_control_code
reserved_future_use
application_descriptors_loop_length
for (j=0; j<M; ;j++) {
descriptor ()
}
}
CRC_32
}
La descripción de la application_information_section () debe ser la siguiente:
⎯ table_id (ID tabla): en este campo de 8 bits, 0x74 es almacenado para indicar que ésta es la tabla AIT;
⎯ section_syntax_indicator (indicador de sintaxis de la sección): la indicación de sintaxis de la sección es
siempre “1” en un campo de 1 bit;
⎯ section_length (extensión de la sección): campo de 12 bits. Los primeros 2 bits deben siempre ser “00.” Esto
especifica el número de bits del campo de extensión de sección para la última sección, incluyendo CRC32. El
valor debe ser inferior a 1021 (0x3FD en hexadecimal);
48
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
⎯ application_type (tipo de aplicación): campo de 16 bits que indica el valor del tipo de aplicación que está
siendo transmitido por la AIT. En DVB, 0x0001 es atribuido a la aplicación DVB-J y el valor de los tipos de
aplicación se muestra en la Tabla 45;
⎯ version_number (número de la versión): campo de 5 bits que es el número de la versión de la subtabla. Se
debe agregar uno al número de la versión, cuando se haga una alteración en la información dentro de la
subtabla. Cuando el valor alcance “31,” el próximo valor será nuevamente “0.”
⎯ current_next_indicator (próximo indicador actual): esta indicación de 1 bit es siempre “1.”;
⎯ section_number (número de sección): campo de 8 bits que muestra el número de la sección. El número de la
sección de la primera sección en la subtabla es 0x00. Cada adición de una sección que tiene la ID de tabla y
tipo de aplicación idénticos añade “1” al número de la sección;
⎯ last_section_number (número de la última sección): campo de 8 bits que especifica el número de la última
sección en la subtabla a la cual las secciones pertenecen;
⎯ common_descriptors_length (extensión del enlace de descriptores comunes): campo de 12 bits que
especifica la extensión del byte del área común subsiguiente de descriptores. Los descriptores dentro del área
de descriptores son aplicables a todas las aplicaciones en la subtabla AIT;
⎯ application_control_code (código de control de la aplicación): campo de 8 bits que especifica el código de
control del estatus de la aplicación. El campo es dependiente del valor de tipo de aplicación. Ver 12.16.5 para
mayores detalles;
⎯ application_loop_length (extensión del enlace de información de aplicación): campo de 12 bits que
especifica la extensión total del enlace en byte donde es almacenada la información de la aplicación
subsiguiente;
⎯ application_identifier() (identificador de aplicación): ver Tabla 47;
⎯ application_descriptors_loop_length (extensión del enlace de descriptores de información de aplicación):
campo de 12 bits que especifica la extensión del byte del área subsiguiente de descriptores. Estos
descriptores en el área de descriptores se aplican solamente a la aplicación designada.
12.16.2
Application ID – Identificación de codificación de la aplicación
Una aplicación es identificada exclusivamente por el identificador de aplicación mostrado en la Tabla 47. Este
identificador está compuesto por una estructura de 6 bytes (48 bits).
Tabla 47 — Identificador de la aplicación
Estructura de datos
application_identifier () {
organization_id
application_id
}
Tasa de bits
String de bits
32
16
bslbf
bslbf
bslbf
La descripción de la application_identifier () debe ser la siguiente:
⎯ organization_id (ID de la organización): campo de 32 bits que indica la organización que creó la aplicación.
Esta ID almacena el número atribuido exclusivamente en el mundo;
⎯ application_id (ID de la aplicación): campo de 16 bits que almacena el número que identifica la aplicación y
que es atribuido exclusivamente en la ID de la organización. La ID de aplicación se divide en dos bandas. Una
es la banda de aplicación no firmada y la otra es la banda de aplicación firmada. Esta división se realiza para
fines de seguridad (ver Anexo B). La banda del valor es respectivamente mostrada en la Tabla 48.
© ABNT 2007 - Todos los derechos reservados
49
ABNT NBR 15606-3:2007
Tabla 48 — Valor de ID de la aplicación
Valor de ID de la aplicación
0x0000. ..0x3fff
0x40000...0x7fff
0x8000. ..0xfffd
0xfffe
0xffff
Tipo de aplicación
Banda de aplicación no firmada
Banda de aplicación firmada
Reservado por DVB
Wild card value (indica todas las aplicaciones
firmadas de la misma ID de organización)
Wild card value (indica todas las aplicaciones de
la misma ID de organización)
En la ID de la aplicación, los valores 0xffff y 0xfffe son para wild card value. Éstos no se utilizan para especificar la
aplicación, pero, por ejemplo, se usan como descriptor para autorización de aplicación externa. 0xffff corresponde
a todas las aplicaciones que tienen la misma ID de organización (organization_id). 0xfffe corresponde a todas las
aplicaciones firmadas que tienen la misma ID de organización.
Algunas veces el mismo identificador de aplicación se utiliza entre aplicaciones de diferentes tipos, como,
por ejemplo, en el caso de la ejecución de la misma función por diferentes tipos de aplicación.
NOTA
12.16.3
Un sólo tipo aparece en la colección de subtablas AIT del mismo tipo de aplicación en un servicio.
Efecto sobre el ciclo de vida
La directriz básica del efecto sobre el ciclo de vida se presenta para la ocasión en la que el servicio es alterado o
en que las aplicaciones que tienen el mismo identificador de aplicación son iniciadas, de la siguiente manera:
⎯ en el changeover de servicio, si el service_bound_flag en la aplicación activa en el servicio anterior es “0” y el
identificador de la aplicación existe en la AIT del servicio recientemente seleccionado, entonces la aplicación
funciona continuamente, a menos que haya alguna restricción de recurso;
⎯ en el changeover de servicio, si el service_bound_flag en la aplicación activa en el servicio anterior es “0” y si
sólo la aplicación está en la lista de descriptores de autorización de aplicación externa, la aplicación trabaja
continuamente, incluso si la aplicación no forma parte del servicio recientemente seleccionado, a menos que
haya alguna restricción de recurso;
⎯ como para una aplicación que tiene un identificador de aplicación, sólo una instancia es activada. Incluso si
otra aplicación tiene el mismo identificador, no puede ser activada si una aplicación con el mismo identificador
de aplicación ya ha existido;
⎯ eso afecta el comportamiento de la API de inicio de aplicación o inicio automático de la aplicación. Si el
service_bound_flag “1” es configurado para la aplicación, terminará (KILL) a cada selección de servicio.
12.16.4
Autenticación del ID de aplicación
La autenticación del ID de aplicación debe estar de acuerdo con la GEM 1.0:2005, Subsección 12.5. La ID de la
aplicación es autenticada con la ID de la organización (organization_id) almacenada en el campo de sujeto de
certificado.
12.16.5
Control de aplicaciones de ciclo de vida
Para Application Life Cycle Control, mecanismos de señalización se deben suministrar desde la estación de
transmisión, para controlar el ciclo de vida de las aplicaciones del tipo estándar.
50
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
12.16.6
Acceso y salida del dominio de la aplicación
Entering and Leaving the Application Domain Application es el dominio definido como una colección de servicios
que tiene aplicaciones listadas en la AIT. Eso significa que las aplicaciones son las listadas en los enlaces de
información de aplicación de AIT o las listadas en los descriptores de autorización de aplicación externa.
Los servicios cuyas aplicaciones no están listadas como arriba mencionado son considerados fuera del dominio de
la aplicación.
12.16.7
Control dinámico del ciclo de vida de las aplicaciones Ginga
El control dinámico del ciclo de vida de las aplicaciones Ginga debe estar de acuerdo con la GEM 1.0:2005,
Subsección 10.4.3 y se extiende a ETSI TS 101 812:2003, Subsección 10.6.2.
Ginga define el “application_control_code” valor 0x07 como aplicaciones UNBOUND (ver Tabla 49).
Tabla 49 — Valores de código de control de aplicación Ginga
Código
0x00
Identificador
0x01
AUTOSTART
0x02
PRESENT
0x03
DESTROY
0x04
KILL
0x05
0x06
REMOTE
0x07
UNBOUND
0x08…0xFF
© ABNT 2007 - Todos los derechos reservados
Semántica
Reservado para uso futuro
Aplicaciones con el código de control
AUTOSTART son iniciadas automáticamente
cuando el receptor cambia para este servicio
Los aplicaciones con código de control
PRESENT no son iniciadas automáticamente,
pero son agregadas a la lista de aplicaciones
disponibles del receptor.
El usuario puede entonces elegir iniciar este
aplicativo seleccionándolo en la lista
Las aplicaciones con DESTROY son
automáticamente eliminadas por el receptor
Los aplicaciones con KILL son
automáticamente eliminados por el receptor.
La diferencia de ese código con el código de
control DESTROY es que una aplicación con
el código de control KILL puede tener opción
de garantía de continuidad de operación si la
aplicación lo elige
Reservado para uso futuro
Identifica una aplicación remota que
solamente es lanzada después de la
selección del servicio
Aplicaciones con código de control
UNBOUND son análogas a las aplicaciones
La diferencia del PRESENT es que el
receptor pregunta al usuario si la aplicación
debe ser almacenada para ejecución
posterior
Reservado para uso futuro
51
ABNT NBR 15606-3:2007
12.17 Descriptores para AIT - Descriptores para transmisión de informaciones de las
aplicaciones
12.17.1
Descriptores comunes
Los descriptores a ser comúnmente utilizados en la AIT, independientemente del tipo de aplicación, se describen
el 12.17.2 a 12.17.11.
12.17.2
Descriptor de aplicación
Un descriptor de aplicación es almacenado en el enlace del descriptor de información de la aplicación AIT para cada
aplicación (ver Tabla 50).
Tabla 50 — Estructura del descriptor de aplicación
Estructura de datos
Tasa de bits
String de bits
application_descriptor () {
descriptor_tag
descriptor_length
application_profiles_length
for ( i=0; i<N ; i++ ) {
application_profile
version.major
version.minor
8
8
8
uimsbf
uimsbf
uimsbf
16
8
8
uimsbf
uimsbf
uimsbf
version.micro
8
uimsbf
service_bound_flag
1
bslbf
visibility
reserved_future_use
application_priority
for ( i=0; i<N ; i++ ) {
transport_protocol_label
2
5
8
bslbf
bslbf
uimsbf
}
8
}
}
La descripción de la application_descriptor () debe ser la siguiente:
⎯ descriptor_tag (tag descriptor): campo de 8 bits; 0x00 es almacenado para indicar que éste es el descriptor
mencionado;
⎯ application_profiles_length (extensión de información del perfil de la aplicación): Campo de 8 bits que indica
la extensión total de información del perfil de la aplicación que está incluida en el enlace subsiguiente;
⎯ application_profile (perfil de la aplicación): campo de 16 bits. El perfil de la aplicación que puede ejecutar la
aplicación es almacenado. Si el perfil es montado en el receptor, significa que la aplicación es ejecutable. Los
detalles de perfil se definen para cada tipo de aplicación;
⎯ version.major (versión principal): campo de 8 bits que indica la versión principal del perfil arriba mencionado;
⎯ version.minor (versión secundaria): campo de 8 bits que indica la versión secundaria del perfil arriba
mencionado;
⎯ version.micro (microversión): campo de 8 bits que indica la microversión del perfil arriba mencionado;
52
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Los cuatro primeros campos descritos arriba comprenden un perfil mínimo para ejecución de esta aplicación.
El terminal Ginga inicia esa aplicación si cualquiera de las siguientes fórmulas teóricas es aplicable y cualquier
perfil evidencial “verdadero” en la información de perfil de la aplicación:
(perfil de la aplicación Є recolecta de los perfiles montados en el terminal)
Y {(versión principal de la aplicación < versión principal del terminal para el perfil)
O [(versión principal de la aplicación – versión principal del terminal para el perfil)
Y ({versión secundaria de la aplicación < versión secundaria del terminal para el perfil }
O {[versión secundaria de la aplicación = versión secundaria del terminal para el perfil]
Y [microversión de la aplicación ~ microversión del terminal para el perfil]} ) ] }
Las definiciones del perfil detallado de la plataforma en aplicación Ginga-J y Ginga-NCL deben estar de
acuerdo con la ABNT NBR 15606-1.
La codificación del perfil en aplicación Ginga-J debe estar de acuerdo con el GEM 1.0.
La codificación del perfil de la aplicación Ginga-NCL debe estar de acuerdo con la ABNT NBR 15606-2.
⎯ service_bound_flag (service bound flag): campo de 1 bit que indica si la aplicación está efectiva apenas en
el presente servicio. Si el campo es “1,” la aplicación es relevante apenas al servicio actual. Cuando el servicio
es alterado para otro servicio, la finalización del procesamiento de la aplicación mencionada será iniciada;
⎯ visibility (visibilidad): campo de 2 bits que indica si la aplicación es visible a los usuarios finales cuando está
activada. Las definiciones de estatus para el valor de visibilidad son mostrados en la Tabla 51;
⎯ application_priority (prioridad de la aplicación): campo de 8 bits que indica la prioridad relativa entre las
aplicaciones notificadas en el servicio;
⎯ transport_protocol_label (rótulo de protocolo de transporte): campo de 8 bits que almacena el valor para
identificación única del protocolo de transporte que transporta la aplicación. El valor corresponde al valor del
campo transport_protocol_label del descriptor del protocolo de transporte.
Tabla 51 — Visibilidad
Valor visible
Descripción
0
Esta aplicación no es visible a las otras aplicaciones vía
enumeración de aplicación API, ni a los usuarios vía
navegador, excepto en caso de error de información de
1
Esta aplicación no es visible para los usuarios, pero es
visible desde otras aplicaciones vía enumeración de
aplicación API
10
Reservado para uso futuro
11
Esta aplicación es visible tanto para los usuarios como para
las otras aplicaciones
© ABNT 2007 - Todos los derechos reservados
53
ABNT NBR 15606-3:2007
12.17.3
Descriptor del nombre de aplicación
Un descriptor de nombre de la aplicación es almacenado para cada aplicación en el enlace del descriptor de
información de la aplicación AIT. El nombre de la aplicación se utiliza para diferenciación y suministra la información a
los usuarios (ver Tabla 52).
Tabla 52 — Estructura del descriptor de nombre de la aplicación
Estructura de datos
Tasa de bits
String de bits
8
8
24
8
uimsbf
uimsbf
uimsbf
bslbf
uimsbf
8
uimsbf
application_name_descriptor () {
descriptor_tag
descriptor_length
for ( i=0; i<N ; i++ ) {
ISO_639_language_code
application_name_length
for ( j=0; j<application_name_length ; j++ ) {
application_name_char
}
}
}
La descripción de la application_name_descriptor () debe ser la siguiente:
⎯ descriptor_tag (descriptor de tag): campo de 8 bits; 0x01 es almacenado para indicar que éste es el
descriptor mencionado;
⎯ ISO_639_language_code (código del lenguaje): campo de 24 bits que identifica el lenguaje del descriptor del
nombre de la aplicación. El código del lenguaje es indicado por el código three-alphabetical-letter como
dispuesto en la ISO 639-2. Cada letra se codifica en 8 bits, de acuerdo con la ISO 8859-1, e inserida de
acuerdo con el orden en el campo de 24 bits;
⎯ application_name_length (descripción de la longitud del nombre de la aplicación): campo de 8 bits que
indica la longitud del byte de la subsiguiente descripción del nombre de la aplicación;
⎯ application_name_char (descripción del nombre de la aplicación): campo de 8 bits que especifica la letra de
descripción del nombre de la aplicación. Esta letra de descripción se utiliza como información por los usuarios.
12.17.4
Descriptor de la información de los iconos de la aplicación
El descriptor de la información de los iconos de la aplicación es almacenado por uno en su mayoría para cada
aplicación (ver Tabla 53). El descriptor indica la información sobre el icono relevante para la aplicación. El formato de
los contenidos del icono se codifica por el PNG y usa un sistema proporcionado de acuerdo con la ABNT NBR 15606-1.
54
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla 53 — Estructura del descriptor de la información de los iconos de la aplicación
Estructura de datos
Tasa de bits
String de bits
8
8
8
uimsbf
uimsbf
uimsbf
8
uimsbf
16
bslbf
8
uimsbf
application_icons_descriptor () {
descriptor_tag
descriptor_length
icon_locator_length
for ( i=0; i<N ; i++ ) {
icon_locator_byte
}
icon_flags
for ( i=0; i<N ; i++ ) {
reserved_future_use
}
}
La descripción de la application application_icons_descriptor () debe ser la siguiente:
⎯ descriptor_tag (descriptor de tag): campo de 8 bits que almacena 0x0B, que indica el descriptor mencionado;
⎯ icon_locator_length (longitud del localizador de icono): campo de 8 bits que indica la longitud de byte del
subsiguiente localizador del icono;
⎯ icon_locator_byte (localizador de icono): campo de 8 bits que almacena el localizador del archivo de imagen
estática como un icono. Este localizador debe ser colocado antes del nombre del archivo de icono y debe
estar de acuerdo con la GEM 1.0:2005, Subsección 10.4.3. Para la aplicación Ginga-J, existen reglas en el
caso en el que application_type sea 0x0008 y hay un camino relativo de la base del directorio definido por la
aplicación Ginga-J almacenado;
⎯ icon_flags (icono de flag): este campo de 16 bits almacena la flag que indica el tamaño y el aspecto de la
relación del icono usable. Los detalles deben estar de acuerdo con la GEM 1.0:2005, Subsección 10.4.3, y la
codificación de cada caso es según mostrado en la Tabla 54. El valor es almacenado después del OR
(dirección lógica) por la unidad.
Tabla 54 — Bits del icono de la flag
Bits de icono de flag
0000 0000 0000 0001
0000.0000.0000.0010
0000.0000.0000.0100
0000.0000.0000.1000
0000.0000.0001.0000
0000.0000.0010.0000
0000.0000.0100.0000
0000.0000.1000.0000
0000 0001 0000 0000
xxxx xxx0 0000 0000
Tamaño de los iconos y relación de aspecto
32 x 32 para exhibir pixels cuadrados
32 x 32 para transmitir pixels en una pantalla 4:3
24 x 32 para transmitir pixels en una pantalla 16:9
64 x 64 para exhibir pixels cuadrados
64 x 64 para transmitir pixels en una pantalla 4:3
48 x 64 para transmitir pixels en una pantalla 16:9
128 x 128 para exhibir pixels cuadrados
128 x 128 para transmitir pixels en una pantalla 4:3
96 x 128 para transmitir pixels en una pantalla 16:9
reserved_future_use
El nombre del archivo del icono se codifica de acuerdo con el valor del icono de la flag descrito arriba. La codificación
del nombre del archivo debe estar de acuerdo con la GEM 1.0:2005, Subsección 10.4.3.
© ABNT 2007 - Todos los derechos reservados
55
ABNT NBR 15606-3:2007
12.17.5
Descriptor de autorización de aplicación externa
El descriptor de autorización de aplicación externa puede ser almacenado en uno o más en el primer enlace
descriptor común del AIT, conforme necesidad. En cada descriptor hay información relevante almacenada de las
aplicaciones externas. Una aplicación externa es aquélla que puede operar continuamente con las aplicaciones
listadas en la subtabla AIT, pero no pueden ser activadas del servicio mencionado.
La autorización externa es aplicable para la aplicación que tiene application_identifier() en la application_type
especificada por la AIT que incluye este descriptor (ver Tabla 55).
Tabla 55 — Estructura del descriptor de autorización de aplicación externa
Estructura de datos
external_application_authorisation_descriptor () {
descriptor_tag
descriptor_length
for ( i=0; i<N ; i++ ) {
application_identifier ()
application_priority
}
}
Tasa de bits
String de bits
8
8
uimsbf
uimsbf
8
uimsbf
La descripción del external_application_authorisation_descriptor () debe ser la siguiente:
⎯ descriptor_tag (descriptor de tag): campo de 8 bits donde 0x05 es almacenado para indicar el descriptor de
autorización de aplicación.
⎯ application_identifier() (identificador de aplicación): campo de 48 bits que indica la aplicación en la que la
referencia externa está disponible. Para detalles de la estructura del campo, ver 12.16.1;
⎯ application_priority (prioridad de la aplicación): campo de 8 bits que indica la prioridad de la presente
aplicación en la suposición del contexto del servicio mencionado. Para detalles de la prioridad, ver 12.17.2.
12.17.6
Transport protocol descriptor (descriptor de protocolo de transporte)
El transport protocol descriptor indica la identificación del protocolo de transporte relevante para el componente del
servicio y almacena información sobre el protocolo. Este protocolo es almacenado en el primer enlace del descriptor
común o enlace del descriptor de la información de la aplicación. Cuando esto es almacenado en el enlace de
descriptor común, es aplicable para todas las subtablas del AIT. El descriptor del protocolo de transporte en el enlace
del descriptor de la información de la aplicación describe el protocolo de transporte adicional para ser usado
específicamente en la aplicación (ver Tabla 56).
Tabla 56 — Estructura del descriptor de protocolo de transporte
Estructura de datos
transport_protocol_descriptor () {
descriptor_tag
descriptor_length
protocol_id
transport_protocol_label
for ( i=0; i<N ; i++ ) {
selector_byte
Tasa de bits
String de bits
8
8
16
8
uimsbf
uimsbf
uimsbf
uimsbf
8
uimsbf
}
}
56
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
La descripción del transport_protocol_descriptor () debe ser la siguiente:
⎯ descriptor_tag (descriptor de tag): campo de 8 bits que almacena 0x02, que indica que éste es el actual
descriptor de transporte;
⎯ protocol_id (identificación de protocolo): campo de 16 bits que indica el protocolo que transporta la aplicación
(ver Tabla 57);
Tabla 57 — Valores de la identificación de protocolo
Valores
0x0000
0x0001
0x0002
0x0003
0x0004
0x0005.. . FxFFFF
Descripción
Reservado para el futuro
Protocolo de transporte del carrusel de
objetos
IP a través de DVB Multiprotocolo
Encapsulado conforme definido en la
EN 301 192 y ETSI TR 101 202
Reservado/Data Piping
Protocolo de transporte del carrusel de
datos
reserved_future_use
⎯ transport_protocol_label (rótulo de protocolo de transporte): Campo de 8 bits que indica el valor que
identifica únicamente el protocolo de transporte en la sección AIT. Para el descriptor de la aplicación, ver el
dispositivo de conexión (por ejemplo, el stream elemental del carrusel) que transporta la aplicación con estos
valores;
⎯ selector_byte (selector de área): Campo de 8 bits que almacena información adicional proveída por cada
identificación de protocolo. La estructura de datos descrita en el área se especifica por separado por cada
protocol_id (ver Tabla 58).
Tabla 58 — Estructura del selector_byte
Valores del Protocol_id
0x0000
0x0001
0x0002
0x0003
0x0004 (T.B.D.)
0x0005.. .FxFFFF
12.17.7
Estructura del selector de área
Reservado para el futuro
Ver Tabla 54
Ver 12.17.8
Indefinido / Data Piping
Ver Tabla 54
Reservado para el futuro
Transporte a través del OC (carrusel de objeto)
La estructura de datos se muestra en la Tabla 59 para el protocolo de transporte del carrusel de objetos
(protocol_id=0x0001) y el protocolo de transporte del carrusel de datos (protocol_id=0x0004).
© ABNT 2007 - Todos los derechos reservados
57
ABNT NBR 15606-3:2007
Tabla 59 — Estructura del protocolo de transporte del descriptor del selector
de área (en el caso de protocolo de transporte del carrusel de objetos/protocolo
de transporte de carrusel de datos)
Estructura de datos
remote_connection
reserved_future_use
if (remote_connection == “1”) {
original_network_id
transport_stream_id
service_id
}
component_tag
Tasa de bits
String de bits
1
7
bslbf
bslbf
16
16
16
uimsbf
uimsbf
uimsbf
8
uimsbf
La descripción debe ser la siguiente:
⎯ remote_connection (conexión remota): si este campo de 1 bit está en “1,” esto muestra que el componente
de servicio vigente se transmite de otra fuente distinta a la que transmite para AIT. Un servicio como éste no
se ejecuta automáticamente, pero es visible y viable de iniciarse a través de la API. Además de ello, REMOTE
es almacenado de esa manera en la aplicación en application_control_code;
⎯ original_network_id (identificador de la red original): cuando remote_connection está en “1,” el identificador
de la red original para el servicio de transmisión vigente es almacenado;
⎯ transport_stream_id (identificador de transport stream): cuando remote_connection es “1,” el identificador de
transport stream de la transmisión de servicio actual es almacenado;
⎯ service_id (identificador de servicio): cuando remote_connection está en “1,” el servicio (identificado por el
identificador de servicio) de la transmisión vigente es almacenado;
⎯ component_tag (componente de tag): indica el componente del servicio principal que transmite la aplicación.
En el caso de carrusel de datos, el stream elemental que transmite el carrusel automáticamente montado en
el inicio de la aplicación es indicado. En el caso de carrusel de objetos, el stream elemental que transmite DSI
es indicado.
12.17.8
Transporte a través de IP
Cuando el identificador de protocolo es 0x0002 el selector de bytes en el descriptor del protocolo de transporte
debe estar de acuerdo con la Tabla 60, para proveer toda la información necesaria para la obtención de las
aplicaciones Ginga y componentes de datos de las aplicaciones entregadas por el protocolo de IP.
58
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla 60 — Sintaxis del selector de bytes para el transporte de IP
Estructura de datos
remote_connection
reserved_future_use
if (remote_connection == “1”) {
original_network_id
transport_stream_id
service_id
}
Tasa de bits
1
7
String de bits
bslbf
bslbf
16
16
16
uimsbf
uimsbf
uimsbf
1
7
bslbf
bslbf
8
uimsbf
8
uimsbf
alignment indicator
reserved for future use
for ( i=0; i<N; i++) {
URL_length
for ( j=0; j<URL length; j++) {
URL_byte }
}
La descripción debe ser la siguiente:
⎯ remote_connection: este y los tres campos asociados (original_network_id, transport_stream_id y
service_id) tienen semántica y sintaxis idénticas a los campos con los mismos nombres de acuerdo con
12.17.7;
⎯ alignment_indicator: campo de 1 bit que indica la alineamiento que existe entre los bytes del
datagram_section y los bytes de transporte de stream;
⎯ URL_length: campo de 8 bits que indica el número de bytes en la URL;
⎯ URL_byte: estos bytes forman una URL conforme RFC 2396.
Para la URL usando el campo del “servidor” incluyendo la notación host:port, conforme definido en la RFC 2396,
solamente direcciones numéricas IP serán usadas para identificar las transmisiones de IP transportadas en el
canal de difusión conforme no hay Domain Name Service-Servicio del Nombre de Dominio en el escenario
solamente de difusión a ser usado para nombres en resolución. IP para mapeo MAC se hará tal como se describe
en la RFC 1112.
NOTA
Esta Norma no define el formato de URL a ser mantenido por este descriptor. Por eso, el formato de URL no se
puede usar de manera interoperable.
12.17.9
Descriptor de señalización de IP
El descriptor de señalización IP se define para el uso tanto en el “común” como en la “aplicación” del enlace de la
AIT. Este descriptor indica la identificación de la organización que provee los streams multicast usados por todas
las aplicaciones (cuando está presente en el enlace “común”) o por la aplicación de señalización particular
(cuando está presente en el enlace de la “aplicación”). Para la definición del INT, ver EN 301 192.
Este descriptor y el INT con action_type 0x01 se deben utilizar por las aplicaciones confiando en la presencia de
los streams multicast IP en el link de la difusión. El conocimiento de la identificación presente en el descriptor
habilita la recuperación de la tabla apropiada de notificación de IP (INT) con action_type 0x01 que contiene la
correspondencia entre la dirección del IP multicast, port y localización del stream (ver Tabla 61).
© ABNT 2007 - Todos los derechos reservados
59
ABNT NBR 15606-3:2007
Tabla 61 — Sintaxis del descriptor de señalización de IP
Sintaxis
ip_signalling_descriptor () {
descriptor_tag
descriptor_length
platform_id
Bits
Mnemónicos
8
8
24
uimsbf
uimsbf
uimsbf
La descripción del ip_signalling_descriptor () debe ser la siguiente:
⎯ descriptor_tag: campo de 8 bits que con valor 0x11 identifica el descriptor;
⎯ descriptor_length: campo de 8 bits que identifica el número de bytes, siguiendo la longitud del campo;
⎯ platform_id: campo de 24 bits conteniendo un platform_id de la organización proveyendo streams IP/MAC en
el transporte de streams/servicios. Asignaciones del valor de platform_id son encontradas en el ETSI TR 101
162.
12.17.10 Pre-fetch descriptor (descriptor de pre-busca)
Solamente un descriptor pre-fetch es almacenado en el enlace del descriptor de la información de la aplicación AIT,
conforme necesidad. Este descriptor se define para ser usado por el carrusel de objetos (protocol_id=0x0001).
Cada descriptor es asociado a un descriptor de protocolo de transporte a través del rótulo del protocolo de
transporte (ver Tabla 62).
El terminal Ginga-J puede adquirir anticipadamente módulos denotados por el rótulo terminal para acelerar el
tiempo de inicio de la aplicación. Así como para los rótulos, los descriptores de rótulos especificados por la
transmisión del carrusel de objetos se usan de acuerdo con la ISO/IEC 13818-6:1998, Anexo B, y con la ARIB
STD-B23. La difusión de esta señalización es opcional.
Tabla 62 — Estructura del descriptor de pre-fetch
Estructura de datos
Tasa de bits
String de bits
8
8
8
uimsbf
uimsbf
uimsbf
8
uimsbf
label_char
8
uimsbf
prefetch_priority
8
uimsbf
prefetch_descriptor () {
descriptor_tag
descriptor_length
transport_protocol_label
for ( i=0; i<N ; i++ ) {
label_length
for ( j=0; j<label_length ; j++ ) {
}
}
}
60
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
La descripción del prefetch_descriptor () debe ser la siguiente:
⎯ descriptor_tag (descriptor tag): campo de 8 bits donde 0x0C es almacenado para mostrar dicho descriptor;
⎯ transport_protocol_label (rótulo del protocolo de transporte): campo de 8 bits que almacena el rótulo del
protocolo de transporte para especificar el carrusel de objetos que transmite los módulos referidos en el
descriptor pre-fetch arriba. Para el rótulo del protocolo de transporte, ver 12.17.6;
⎯ label_length (longitud de rótulo): campo de 8 bits que indica la longitud de bytes del rótulo de descripción a
ser incluido en el consecuente enlace;
⎯ label_char (descripción de rótulo): campo de 8 bits. Un rótulo del módulo está almacenado. Esto corresponde
a la descripción de rótulo transmitida por el descriptor de rótulos que está almacenado en el userInfo del
moduleInfo del DII en el carrusel de objetos;
⎯ prefetch_priority (prioridad pre-fetch): campo de 8 bits que almacena los valores de 1 a 100. Estos valores
muestran la prioridad del pre-fetch. Mayor valor muestra mayor prioridad.
12.17.11 Descriptor de localización DII
Para cada aplicación solamente un descriptor de localización DII puede ser dado, en caso de ser necesario. Este
descriptor puede ser almacenado tanto en el enlace de descriptor común como en el enlace del descriptor de la
información de la aplicación. Esto se define para ser usado por el sistema de transmisión del carrusel de objetos
(protocol_id=0x0001). Cada descriptor es asociado a un descriptor de protocolo de transporte a través de un rótulo
de protocolo de transporte.
El grupo de módulos como una parte del carrusel de objetos DSM-CC es notificado por el DownloadInfoIndication
(DII). Todos los mensajes DII que muestran la existencia del carrusel de objetos no pueden ser listados en
localización uno por uno.
Es necesario hacer todos los mensajes DII disponibles en orden para encontrar los módulos correspondientes a
los rótulos para hacer el pre-fetch (ver 12.17.10). El descriptor de localización DII lista la localización de estos DII.
En el caso de que el descriptor de localización DII no estuviera incluido, solamente los módulos de indicación DII
que incluyen el ServiceGateway serían encontrados.
Los enlaces de la identificación DII en el descriptor están localizados en orden de importancia. Es decir, DII que
tiene alta prioridad de pre-fetch será localizado en el comienzo del enlace. El receptor montado con mecanismos
de módulos-base de pre-fetch verifica el DII en el orden listado en el descriptor de localización de DII (ver Tabla 63).
Tabla 63 — Estructura del descriptor de localización de DII
Estructura de datos
DII_location_descriptor () {
descriptor_tag
descriptor_length
transport_protocol_label
for ( i=0; i<N ; i++ ) {
reserved_future_use
DII_identification
association_tag
Tasa de
bits
String de
bits
8
8
8
uimsbf
uimsbf
uimsbf
1
15
bslbf
uimsbf
16
uimsbf
}
}
© ABNT 2007 - Todos los derechos reservados
61
ABNT NBR 15606-3:2007
La descripción del DII_location_descriptor () debe ser la siguiente:
⎯ descriptor_tag (descriptor de tag): campo de 8 bits que almacena 0x0D que indica que éste es el
DII_location_descriptor
⎯ transport_protocol_label (rótulo de protocolo de transporte): campo de 8 bits que almacena el rótulo del
protocolo de transporte que especifica el carrusel de objetos que es transmisor del descriptor de pre-fetch
modulesreferredin. Para detalles del rótulo del protocolo de transporte, ver 12.17.6;
⎯ DII_identification (identificación DII): campo de 15 bits que almacena el valor que especifica el DIImessage.
Este valor corresponde al bit 1-15 de la transacción ID en el dsmMessageHeader() del DII message;
⎯ association_tag (asociación de la tag): campo de 16 bits que indica la relación con DII message que se
transmite (por ejemplo, el stream elemental).
12.18
12.18.1
Descriptores de la aplicación Ginga-J
Estructura del descriptor de aplicaciones Ginga
Un descriptor es almacenado en el enlace del descriptor de la información de la aplicación AIT para cada
aplicación Ginga-J. Esto indica el parámetro de información para el inicio de la aplicación (ver Tabla 64).
Tabla 64 — Estructura del descriptor de la aplicación Ginga
Estructura de datos
Tasa de bits
String de bits
8
8
uimsbf
uimsbf
8
uimsbf
8
uimsbf
ginga_j_application_descriptor () {
descriptor_tag
descriptor_length
for ( i=0; i<N ; i++ ) {
parameter_length
for ( j=0; j<parameter_length ; j++ ) {
parameter_byte
}
}
}
La descripción del ginga_j_application_descriptor () debe ser la siguiente:
⎯ descriptor_tag (descriptor de tag): campo de 8 bits donde 0x03 es almacenado para indicar el descriptor de
aplicación Ginga-J y 0x06 es almacenado para indicar en el respectivo descriptor de aplicación Ginga-NCL;
⎯ parameter_length (longitud del parámetro): campo de 8 bits que muestra la longitud de bytes de la
descripción de parámetro subsiguiente;
⎯ parameter_byte (descripción de parámetro): campo de 8 bits. La string a ser dada a la aplicación como
parámetro es almacenada.
12.18.2
Descriptor de la localización de la aplicación Ginga
El descriptor es almacenado en el enlace del descriptor de la información de la aplicación AIT por una de cada
aplicación Ginga-J. Ésta almacena la información de camino necesaria en la aplicación (ver Tabla 65).
62
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla 65 — Estructura del descriptor de aplicación de localización Ginga
Estructura de datos
Tasa de bits
String de bits
8
8
8
uimsbf
uimsbf
uimsbf
8
uimsbf
8
uimsbf
8
uimsbf
8
uimsbf
ginga_j_application_location_descriptor () {
descriptor_tag
descriptor_length
base_directory_length
for ( i=0; i<N ; i++ ) {
base_directory_byte
}
classpath_extension_length
for ( i=0; i<N ; i++ ) {
classpath_extension_byte
}
for ( i=0; i<N ; i++ ) {
initial_class_byte
}
}
La descripción del ginga_j_application_location_descriptor () debe ser la siguiente:
⎯ descriptor_tag (descriptor de tag): Campo de 8 bits donde 0x04 es almacenado para indicar descriptor de
localización de aplicación Ginga-J y 0x07 es almacenado para indicar en el respectivo descriptor de aplicación
Ginga-NCL;
⎯ base_directory_length (longitud del directorio base): Campo de 8 bits que indica la longitud de los bytes a
ser incluidos en los enlaces subsiguientes. El valor almacenado será 1 o mayor;
⎯ base_directory_byte (byte del directorio base): Campo de 8 bits. El nombre del directorio del camino del
archivo del sistema debe ser almacenado por una letra delimitadora, usando “/” (0x2F). Este nombre de
directorio es usado por el directorio-base en el camino relativo. Si el directorio de camino del archivo del
sistema es designado conforme un directorio-base, “/” debe ser almacenado;
⎯ classpath_extension_length (longitud adicional del camino de clase): Campo de 8 bits que indica la longitud
del byte del camino de clase adicional subsiguiente;
⎯ classpath_extension_byte (camino de clase adicional): Campo de 8 bits. Cuando un camino de clase es
designado por un directorio distinto al directorio-base, el nombre del camino de clase es almacenamiento.
El nombre del directorio del camino del archivo del sistema es almacenado por la letra delimitadora usando “/”
(0x2F). Si hay más de un camino, deben ser almacenados por enumeración con “;” (0x3B);
⎯ initial_class_byte (clase de activación inicial): campo con 8 bits. El nombre del objeto en el archivo del
sistema de la interfaz de clase montada Xlet es almacenada.
13 Especificación de la transmisión del mensaje del evento
13.1 Mensaje de evento
La especificación de la transmisión del mensaje del evento provee un medio para enviar mensajes de información
inmediatamente o en horas específicas para una aplicación operada en una unidad de receptor de una estación de
difusión.
© ABNT 2007 - Todos los derechos reservados
63
ABNT NBR 15606-3:2007
La especificación de la transmisión del mensaje del evento definido en esta Norma es extendida para negociar los
distintos tiempos apuntando métodos por la aplicación con base en la especificación del descriptor de stream y su
especificación de la transmisión de sección DSM-CC especificada en la ISO/IEC 13818-6.
13.2 Descriptores de stream
13.2.1 Descriptor de stream DSM-CC
Esta sección está de acuerdo con los requisitos de la ISO/IEC 13818-6.
Los descriptores de stream se pueden usar para proveer información DSM-CC que está correlacionada con un
transport stream o program stream MPEG-2. Estos descriptores están en formato de programas y elementos de
programas descriptores conforme definido en ISO/IEC 13818-1. Los descriptores de stream DSM-CC deben ser
solamente cargados en una DSMCC_section (ver a ISO/IEC 13818-6:1998, Sección 9). Esto crea un espacio
identificador único (de aquel definido por ISO/IEC 13818-1) para valores de descriptor de tag. El formato general
de todos los descriptores de stream definidos en esta especificación está mostrado en la Tabla 66.
Tabla 66 — Descriptor de stream DSM-CC
Sintaxis
Número de bits
Mnemónico
8
8
uimsbf
uimsbf
dsmccStreamDescriptor () {
descriptorTag
descriptorLength
descriptor()
}
La descripción del dsmccStreamDescriptor () debe ser la siguiente:
⎯ descriptorTag: campo de 8 bits que identifica cada descriptor. La extensión de posibles valores para el
descriptorTag se muestra en la Tabla 67;
⎯ descriptorLength: éste es un campo de 8 bits que especifica el número de bytes del descriptor
inmediatamente después del campo descriptorLength.
Tabla 67 — Valor del campo DescriptorTag
Descriptor de tag
Descripción
0x00
0x01
0x02
ISO/IEC 13818-6 reservado
Descriptor de referencia NPT
Descriptor de endpoint NPT
0x03
Descriptor de modo stream
0x04
Descriptor de evento de stream
0x05 – 0xFF
ISO/IEC 13818-6 reservado
13.2.2 Descriptor de referencia NPT
Para activar la determinación de tiempo del NPT de un evento, se define el descriptor de referencia NPT. El formato del
descriptor de referencia se muestra en la Tabla 68.
64
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla 68 — Descriptor de referencia NPT
Sintaxis
Número de bits
Mnemónico
8
8
1
7
7
33
uimsbf
uimsbf
bslbf
uimsbf
bslbf
uimsbf
reserved
NPT_Reference
31
33
bslbf
tcimbsf
scaleNumerator
16
tcimbsf
scaleDenominator
16
tcimbsf
NPTReferenceDescriptor () {
descriptor_tag
descriptor_length
postDescontinuityIndicator
dsm_contentId
Reserved
STC_Reference
}
La descripción del NPTReferenceDescriptor () debe ser la siguiente:
⎯ descriptorTag: campo de 8 bits que identifica el tipo del descriptor de stream. El valor del campo
descriptorTag para el descriptor de referencia NPT se muestra en la Tabla 62;
⎯ descriptorLength: campo de 8 bits que especifica el número de bytes del descriptor inmediatamente
después del campo descriptorLength;
⎯ postDiscontinuityIndicator: campo de 1 bit. Un valor de 0 indica que el descriptor de referencia NPT es
válido en la recepción. Un valor de 1 indica que el descriptor de referencia NPT torna válido en el próximo
tiempo la base de discontinuidad del sistema, conforme definido en la ISO/IEC 13818-1;
⎯ dsm_contentId: campo de 7 bits que identifica que un conjunto anidado de contenido está siendo presentado.
El campo satisfecho se puede usar para indicar la transición para una base de tiempo diferente NPT dentro de
una base de tiempo existente NPT. Por ejemplo, este campo puede ser cambiado cuando un comercial es
presentado dentro de un programa de televisión y después nuevamente cambiado cuando el programa de
televisión es reiniciado;
⎯ STC_Reference: entero sin signo de 33 bits, que indica el valor de STC para el cual NPT iguala el campo
NPT_Reference. El valor del campo STC_Reference se especifica en unidades de períodos del sistema de
frecuencia de reloj, conforme definido en la ISO/I EC 13818-1, dividido entre 300, rindiendo unidades de
90 kHz. STC_Reference es derivado de un sistema de frecuencia de reloj, según mostrado en la ecuación
siguiente:
STC_Referencek = (STCNPT(k) / 300) % 233
donde
STCNPT(k) es el valor del sistema de tiempo del reloj “System Time Clock” cuando el NPT iguala el valor de
NPT_Reference;
⎯ NPT_Reference: entero con signo de 33 bits indicando el valor de NPT en el valor dado de STC en el campo
STC_Reference field;
© ABNT 2007 - Todos los derechos reservados
65
ABNT NBR 15606-3:2007
⎯ scaleNumerator: entero con signo de 16 bits usado con el scaleNumerator, un entero sin signo de 16 bits,
para definir la extensión del cambio de NPT con relación al STC. Un valor de 1 para scaleNumerator con un
valor de 1 para scaleDenominator indica que el NPT está cambiando en una tasa equivalente al STC,
rindiendo la tasa estándar de la presentación. Un valor de 0 para scaleNumerator con un valor no cero para
scaleDenominator indica que NPT no está cambiando con relación al STC, rindiendo un valor constante del
NPT. Un valor de 0 para scaleNumerator con un valor de 0 para scaleDenominator indica que los campos
scaleNumerator y scaleDenominator no están provistos en el descriptor de referencia NPT. Un valor no-cero
para scaleNumerator con un valor de 0 para scaleDenominator no será usado (ver Tabla 69).
Tabla 69 — ScaleNumerator
scaleNumerator
scaleDenominator
Semántica
0
0
0
Otro además de 0
Indica que el scaleNumerator y el scaleDenominator no
se usan
NPT continúa el valor constante irrelevante para STC
1
1
NPT y STC avanzan en la misma tasa
Otro además de 0
0
Tal combinación no se debe usar
13.3 Descriptor de modo de stream
El descriptor de modo de stream contiene información sobre el modo de la máquina de estado del stream,
permitiendo que los clientes sincronicen mejor sus acciones con los cambios de estado del stream. El formato del
descriptor de modo del stream se muestra en la Tabla 70.
Tabla 70 — Descriptor de modo de stream
Sintaxis
StreamModeDescriptor () {
descriptorTag
descriptorLength
streamMode
reserved
}
Número de bits
Mnemónico
8
8
8
8
uimsbf
uimsbf
uimsbf
bslbf
La descripción del StreamModeDescriptor () debe ser la siguiente:
⎯ descriptorTag: campo de 8 bits que identifica el tipo del descriptor del stream. El valor del campo
descriptorTag para el descriptor de modo del stream se muestra en la Tabla 65;
⎯ descriptorLength: campo de 8 bits que especifica el número de bytes del descriptor inmediatamente
después del campo descriptorLength;
⎯ streamMode: campo de 8 bits cuyo valor indica el estado actual de la máquina de estado del stream. Los
valores para streamMode se muestran en la Tabla 71. Los estados de la máquina de estado de stream se
definen en la ISO/IEC 13818-6:1998, Sección 5.
66
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla 71 — Valores del campo StreamMode
Descriptor de modo
Descripción
0
1
2
Abierto
Pausa
Transporte
3
Pausa en el transporte
4
Transporte de busca
5
Pausa de transporte de busca
6
Transporte de pausa de la busca
7
8
Fin de stream
Transporte de pre-busca
9
Pausa de transporte de pre-busca
10 - 255
ISO/IEC 13818-6 reservado
13.4 Descriptores de evento de stream
El descriptor de evento de stream contiene información que permite la transmisión de eventos específicos,
conforme definido en la ISO/IEC 13818-6:1998, Sección 5, de modo que puedan ser sincronizados con el stream.
La definición de evento en este contexto no es la misma si el evento está relacionado con NPT. El formato del
descriptor de evento de stream se muestra en la Tabla 72.
Tabla 72 — Descriptor de evento de stream
Sintaxis
StreamEventDescriptor () {
descriptorTag
descriptorLength
eventId
reserved
eventNPT
for(i=0;i<N;i++){
privateDataByte
}
}
Número de bits
Mnemónico
8
8
16
31
33
uimsbf
uimsbf
uimsbf
bslbf
uimsbf
8
uimsbf
La descripción del StreamEventDescriptor () debe ser la siguiente:
⎯ descriptorTag: campo de 8 bits que identifica el tipo del descriptor de stream. El valor del campo descriptorTag
para el descriptor de evento de stream se muestra en la Tabla 72;
⎯ descriptorLength: campo con 8 bits que especifica el número de bytes del descriptor inmediatamente después
del campo descriptorLength;
⎯ eventid: campo de 8 bits cuyo valor es un tipo de evento específico de la aplicación;
⎯ eventNPT: entero sin signo, cuyo valor es el valor de NPT cuando el evento ocurrió, o el valor de NPT cuando
el evento ocurra;
⎯ privateDataByte: campos que permiten la inclusión de datos específicos de aplicación en el descriptor de
eventos de stream.
© ABNT 2007 - Todos los derechos reservados
67
ABNT NBR 15606-3:2007
13.5 Descriptor de evento general
El descriptor de evento general (general_event_descriptor) es un descriptor para comunicar información aplicables
a mensajes de eventos.
La estructura de datos del descriptor de evento general se muestra en la Tabla 73.
Tabla 73 — Descriptor de evento general
Sintaxis
General_event_descriptor () {
descriptor_tag
descriptor_length
event_msg_group_id
reserved_future_use
time_mode
if(time_mode == 0){
reserved_future_use
}
Número de bits
Mnemónico
8
8
12
4
8
uimsbf
uimsbf
uimsbf
bslbf
uimsbf
40
bslbf
40
bslbf
7
33
bslbf
uimsbf
7
36
bslbf
bslbf
8
16
uimsbf
uimsbf
8
uimsbf
else if(time_mode == 0x01 || time_mode == 0x05){
event_msg_MJD_JST_time
}
else if(time_mode == 0x02){
reserved_future_use
event_msg_NPT
}
else if(time_mode == 0x03){
reserved_future_use
event_msg_relative_time
}
event_msg_type
event_msg_id
for(i=0;i<N;i++){
private_data_byte
}
}
La descripción del General_event_descriptor () debe ser la siguiente:
⎯ event_msg_group_id (identificador de grupo de mensaje de evento): campo de 12 bits que identifica el grupo
de mensajes a ser recibidas por el aplicador. Detalles de las operaciones se especifican en cada identificador
de codificación de datos. Cuando está operando un evento de mensaje con la identificación de más de un
grupo de mensajes al mismo tiempo, solamente los descriptores de evento general con el identificador del
mismo grupo de mensajes deben ser incluidos en una sección DSM-CC;
⎯ time_mode (modo de tiempo): campo de 8 bits que indica el método para designar el tiempo cuando un
evento de mensaje es generado (ver Tabla 74);
68
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla 74 — Modo de tiempo
Time_mode
Método de
designación de tiempo
0x00
Ninguno
0x01
mjd_utc_time
0x02
NPT
0x03
eventRelative Time
0x04
---
0x05
MJD_UTC_time
0x06-0xFF
---
Semántica
El mensaje de evento es generado inmediatamente
después de la recepción
El mensaje de evento es generado en el tiempo
absoluto indicado por el tiempo MJD UTC. El mensaje
de evento también es generado cuando el contenido
grabado del stream es reproducido refiriéndose al
tiempo de reproducción
El mensaje de evento es generado en el tiempo
específico con los datos de tiempo NPT
El mensaje de evento es generado cuando el período
se especifica en este campo (en milésimos de
segundo) después del tiempo de inicio del programa
Reservado para el futuro
El mensaje de evento es generado en el tiempo
absoluto indicado por el tiempo MJD UTC. Cuando el
contenido grabado del stream es reproducido, el
mensaje de evento también es generado refiriéndose al
tiempo en el aire
Reservado para el futuro
⎯ event_msg_MJD_UTC_time: campo de 40 bits se codifica en el caso del modo de tiempo = 0 x 01 ó 0x05
e indica el tiempo cuando el evento de mensaje es generado en el UTC y MJD (se refiere a
ARIB STD-B10:2003, Parte 2, Anexo C). Este campo contiene una copia de los 16 bits más bajos de MJD
y es seguido por seis representaciones de 4 bits decimal codificado en binario (BCD);
⎯ event_msg_NPT: campo de 33 bits que se codifica en el caso del modo de tiempo = 0 x 02 e indica el tiempo
usando el Normal Play Time de DSM-CC (ver 7.1), cuando el evento de mensaje es generado;
⎯ event_msg_relativeTime: campo de 36 bits que se codifica en el caso del modo de tiempo = 0 x 03 e indica
que el evento de mensaje es generado cuando el período especificado en este campo pasa después del
horario de inicio del programa. El valor de este campo se describe en el orden de hora (2 dígitos), minuto
(2 dígitos), segundo (2 dígitos) milésimos de segundo (3 dígitos), para formar nueve representaciones de 4 bits
decimales codificados en binario (BCD);
⎯ event_msg_type (tipo de mensaje de evento): un identificador que indica el tipo de mensaje de evento.
El uso y la semántica son especificados en cada especificación de codificación de datos.
⎯ event_msg_id (identificador de mensaje de evento): campo de 16 bits que contiene el identificador para
identificar cada mensaje de evento. El uso y la semántica son especificados en cada especificación de
codificación de datos.
⎯ private_data_byte (datos privados): campo de 8 bits que almacena información relacionada al evento de
mensaje requerido por la especificación de codificación de datos especificado en el event_msg_type.
13.6 Sintaxis de sección de DSM-CC transmitiendo el descriptor de stream
El descriptor de stream se transmite en la sección DSM-CC mostrada en la Tabla 75.
© ABNT 2007 - Todos los derechos reservados
69
ABNT NBR 15606-3:2007
Tabla 75 — Sección DSM-CC (transmisión de descriptor de stream)
Sintaxis
Número de bits
Mnemónico
8
1
1
2
12
4
uimsbf
bslbf
bslbf
bslbf
uimsbf
uimsbf
event_msg_group_id
Reserved
12
2
uimsbf
bslbf
version_number
5
uimsbf
current_next_indicator
section_number
last_section_number
if(table_id == 0x3D){
for(i=0;i<N;i++){
stream_descriptor()
}
}
if(section_syntax_indicator == ‘0’){
Checksum
}
Else{
CRC_32
}
1
8
8
bslbf
uimsbf
uimsbf
32
uimsbf
32
rpchof
DSMCC_section () {
table_id
section_syntax_indicator
private_indicator
Reserved
dsm_cc_section_length
data_event_id
}
La descripción de la DSMCC_section () debe ser la siguiente:
⎯ table_id (tabla de identificación): campo de 8 bits que es regulado para 0x3D, para indicar que el descriptor
de stream está almacenado en el payload de la sección DSM-CC;
⎯ section_syntax_indicator: campo de 1 bit que indica que CRC32 existe al final de la sección cuando es 1.
Cuando es 0, esto indica que existe verificación de suma. Para transmitir un evento de mensaje, este campo
debe ser regulado en 1;
⎯ private_indicator: campo de 1 bit que almacena el valor complementario de la sección de valor indicador de
sintaxis;
⎯ dsmcc_section_length: campo de 12 bits que indica la longitud de byte del área de posición inmediatamente
siguiente a este campo al fin de la sección. Este valor de campo no debe exceder 4 093;
⎯ data_event_id: campo de 4 bits que es el identificador para identificar el evento de datos entre los datos
precedentes y siguientes que usan el evento de mensaje para permitir el contenido local pretendido, a pesar
de ser precedidos y/o seguidos otros contenidos locales, para recibir el evento de mensaje. Contenidos
locales adyacentes, cuando están transmitiendo, son asignados con diferentes identificadores;
70
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
⎯ event_msg_group_id (identificador de grupos de mensaje): campo de 12 bits que contiene el campo para
identificar el evento de mensajes a ser recibidos por la aplicación. La semántica detallada se detalla en cada
especificación de codificación de datos;
⎯ version_number: campo de 5 bits que es el número de la versión de la subtabla. El número de versión se
incrementa en 1 cuando cualquier pieza de información en la subtabla sea cambiada. Los valores disponibles
son de 0 a 31. El valor 0 se utiliza para actualizar el 31;
⎯ current_next_indicator: indicador de 1 bit que indica que la subtabla es la actual subtabla cuando es '1'.
Cuando es '0', la subtabla enviada no es aún aplicada y usada como la próxima subtabla;
⎯ section_number: campo de 8 bits que indica el número de la sección;
⎯ last_section_number: campo de 8 bits que indica el número de la última sección (que es la sección con el
número máximo de secciones de la subtabla a la que las secciones participantes pertenecen).
14 Sistema de archivo de difusión y transporte de disparador
El sistema de archivo de difusión y transporte de disparador debe estar de acuerdo con la GEM 1.0:2005, Anexo B.
© ABNT 2007 - Todos los derechos reservados
71
ABNT NBR 15606-3:2007
Anexo A
(normativo)
Video y audio PES
A.1 Formato de transmisión de datos a través de la PES de video MPEG-2 codificado
En el caso del uso de PES de video codificado con el video MPEG-2 (ver ISO/IEC 13818-2) para transmitir datos,
se deberá utilizar el campo de datos del usuario (user_data_area), de conformidad con el encabezamiento de la
pantalla del stream de video. La sintaxis del campo de datos del usuario se muestra en la Tabla A.1. El uso más
detallado de este área depende del modo de operación de las emisoras.
Tabla A.1 — Sintaxis del campo de datos del usuario del stream de video
Sintaxis
Número de bits
Mnemónico
32
bslbf
8
uimsbf
User Data () {
user_data_start_code
while (nextbits() != 0x000001){
user_data
}
next_start_code()
}
NOTA
Código de inicio de datos de usuarios: 0x000001b2.
A.2 Formato de transmisión de datos del audio PES codificado con MPEG-2 BC audio
En la utilización de paquetes PES de audio MPEG-2 BC audio (ver ISO/IEC 13818-3) para transmisión de datos, el
área de datos jerárquicos (ancillary data area), que puede contener otros datos que no sean audio MPEG, se debe
utilizar. La sintaxis del área de datos jerárquicos se muestra en la Tabla A.2 Un uso más detallado de ese área
depende de los operadores de servicio.
Tabla A.2 — Área de datos subordinada al stream de audio
Sintaxis
MPEG1_ancillary_data() {
if(ext_bit_stream_present == 1){
for(b=0; b<8*n_ad_bytes;b++)
ancillary_bit
}
}
72
Número de bits
Mnemónico
1
bslbf
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
A.3 Formato de transmisión de datos del audio PES codificado con MPEG-2 AAC audio
En la utilización de paquetes PES de audio MPEG-2 AAC audio (ver ISO/IEC 1381 8-3) para transmisión de datos,
el área data_stream_element se debe usar para permitir que otros datos, además de datos de audio MPEG,
puedan estar contenidos en cada bloque de datos puro (raw_data_block). La sintaxis del área se muestra en la
Tabla A.3. Un uso más detallado de ese área depende de los operadores de servicio.
Tabla A.3 — Área base de datos de stream del audio stream (MPEG-2 AAC audio)
Sintaxis
data_stream_element () {
element_instance_tag
data_byte_align_flag
cnt = count
if(cnt == 255){
cnt += esc_count
}
Número de bits
Mnemónico
4
1
8
8
uimsbf
uimsbf
uimsbf
uimsbf
8
bslbf
if(data_byte_align_flag)
byte_alignment()
for(i=0;i<cnt;i++)
data_stream_byte[element_instance_tag][i]
}
© ABNT 2007 - Todos los derechos reservados
73
ABNT NBR 15606-3:2007
Anexo B
(normativo)
Información PSI/SI para transmisión de carruseles de datos
y mensajes de eventos
B.1 Especificación de la codificación de datos con base en el carrusel de datos y
esquema de evento de mensaje
En adición a la especificación de codificación de datos aplicada, la transmisión de datos con base en el carrusel de
datos y el esquema de evento de mensaje serán definidos; una sintaxis adicional depende del formato de
transmisión de datos a ser insertada en el data_component_descriptor en PMT y data_content_descriptor en EIT
especificados en la ARIB STD-B23.
Esta Norma se basa en las siguientes suposiciones sobre operación de transmisión para servicios de difusión de
datos, de la siguiente manera:
— el DII y DDB pertenecientes a un carrusel se transmiten en un ES;
— un servicio de difusión de datos puede consistir en dos o más carruseles. Eventos de mensajes se pueden
transmitir.
B.2 Contenido
de
enlace
data_component_descriptor
de
additional_data_component_info
y
Para insertar la información para control de recepción del carrusel de datos y el posible evento de mensajes en el
enlace que contiene additional_data_component_info al final de data_component_descriptor, la siguiente
estructura de datos debe ser colocada en el enlace, según determinado por la especificación de codificación de
datos (ver Tabla B.1).
Tabla B.1 – Additional ginga carousel info
Sintaxis
Número de bits
Mnemónico
4
1
3
uimsbf
bslbf
bslbf
additional_ginga_carousel_info() {
data_event_id
event_section_flag
reserved
}
La descripción de la additional_ginga_carousel_info() debe ser la siguiente:
⎯ data_event_id: identificador de 4 bits que reconoce los eventos de datos precedentes y siguientes, usando el
carrusel de datos y mensajes del posible evento para evitar defecto al recibir el contenido local apropiado
transmitido en el carrusel de datos y mensajes de posibles eventos. En el caso de todos los bits de este
campo regulados en 1, eso significa que los DIIs tienen un identificador de data_event_id entregado en este
servicio y el evento de mensajes es válido;
74
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
⎯ event_section_flag: campo de 1 bit indica si un evento de mensajes fue o no enviado con este componente,
de la siguiente manera:
0: mensajes del evento no fueron transmitidos;
1: mensajes del evento fueron transmitidos;
⎯ reserved: reservado.
B.3 Byte selector de data_contents_descriptor
B.3.1 Data structure
Para insertar información para control de recepción de carrusel de datos en el byte selector de descriptor de
contenidos de datos como EIT, una estructura de datos debe ser colocada en el campo selector_byte, según
determinado por la especificación de codificación de datos participante.
B.3.2 Estructura de datos para control de recepción de carrusel de datos para servicios de
datos no almacenados
Para servicios de datos no almacenados, insertar las informaciones contenidas en la Tabla B.2.
Tabla B.2 — Servicios de datos no almacenados
Sintaxis
Número de bits
Mnemónico
ginga_carousel_info () {
num_of_carousels
for(i=0;i<num_of_carrousels;i++){
component_tag
event_section_flag
reserved_future_use
component_size_flag
8
uimsbf
8
1
3
1
uimsbf
bslbf
bslbf
bslbf
default_transaction_id_flag
default_timeout_DII_flag
1
1
bslbf
bslbf
default_leak_rate_flag
1
bslbf
32
uimsbf
32
uimsbf
22
2
uimsbf
bslbf
if(component_size_flag == ‘1’){
component_size
}
if(default_transaction_id_flag == ‘1’){
timeout_value_DII
}
if(default_leak_rate_flag == ‘1’){
leak_rate
reserved
}
}
}
© ABNT 2007 - Todos los derechos reservados
75
ABNT NBR 15606-3:2007
La descripción de la ginga_carousel_info() debe ser la siguiente:
⎯ num_of carousels: campo de 8 bits que indica el número de carruseles, incluidos en el enlace siguiente;
⎯ component_tag: campo de 8 bits que designa el componente del stream transmitiendo los carruseles con el
componente de tag dado por el descriptor identificador de stream en el PMT;
⎯ event_section_flag: campo que indica si el evento de mensajes fue o no enviado usando este componente;
⎯ component_size_flag: campo de 1 bit que indica si la estructura de datos contiene o no el componente de
tamaño. Cuando el valor del campo component_size no está disponible, debe ser regulado a “0”:
0: no codificado;
1: codificado;
⎯ default_transaction_id_flag: campo de 1 bit que indica si el identificador de transacción está codificado o no
en esta sintaxis. Para designación de manera que se obtenga todo de la identificación de transacción opcional,
la identificación de transacción no debe ser codificada (0: no codificado; 1: codificado);
⎯ default_timeout DII_flag: campo de 1 bit que indica si el valor de explosión de tiempo de DII está codificado
en esta sintaxis. Cuando el valor estándar especificado en esta operación como valor de explosión de DII se
utiliza, no está codificado (0: no codificado; 1: codificado);
⎯ default_leak_rate_flag: campo de 1 bit que indica si la tasa de dispersión está codificada o no en esta
sintaxis. Cuando el valor estándar especificado en esta operación como valor de dispersión de DII se utiliza,
no está codificado (0: no codificado; 1: codificado);
⎯ component_size: campo de 32 bits que indica el tamaño total (en bytes) de los datos transmitidos en los
carruseles de este componente;
⎯ transaction_id: identificación del valor de la transacción DII transmitida en este componente. En el caso de
que la identificación de transacción no esté presente, debe obtenerse una DII con la identificación de
transacción;
⎯ time_out_value_DII: campo de 32 bits que indica el valor de intervalo recomendado (en milésimas de
segundo) para recibir la sección completa de DII de este carrusel. Cuando el valor es 0 x FFFFFFFF, eso
significa que no existe valor de intervalo recomendado;
⎯ leak_rate: campo de 22 bits que indica la tasa de dispersión del transporte de buffer de la unidad del receptor
en una unidad de 50 bytes/s.
B.3.3 Estructura de datos para el control de la recepción del carrusel de datos para el servicio
de datos almacenados
Para el servicio de datos almacenados, insertar las informaciones contenidas en la Tabla B.3.
76
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Tabla B.3 — Servicio de datos almacenados
Sintaxis
Número de bits
Mnemónico
8
uimsbf
8
1
1
1
uimsbf
bslbf
bslbf
bslbf
compressed_component_size_flag
component_size_flag
1
1
bslbf
bslbf
default_transaction_id_flag
1
bslbf
default_timeout_DII_flag
default_leak_rate_flag
if(num_dataEvent_flag == ‘1’){
num_dataEvent
}
if(num_modules_flag == ‘1’){
num_modules
}
if(num_resources_flag == ‘1’){
num_resources
}
if(compressed_component_size_flag == ‘1’){
compressed_component_size
1
1
bslbf
bslbf
16
uimsbf
32
uimsbf
32
uimsbf
32
uimsbf
ginga_stored_carousel_info () {
num_of_carousels
for(i=0;i<num_of_carrousels;i++){
component_tag
num_dataEvent_flag
num_modules_flag
num_resources_flag
}
}
La descripción de la ginga_stored_carousel_info () debe ser la siguiente:
⎯ num_of carousels: campo de 8 bits que indica el número de carruseles incluyendo el del enlace siguiente;
⎯ component_tag: campo de 8 bits que designa el componente de stream transmitiendo los carruseles con el
componente de la tag dado por el descriptor identificador de stream en PMT;
⎯ num_dataEvent_flag: campo de 1 bit indica si la estructura de datos contiene o no un número de eventos de
datos. Cuando el valor del campo num_dataEvent no está disponible, debe ser regulado a 0 (0: no codificado;
1: codificado);
⎯ num_modules_flag: campo de 1 bit que indica si la estructura de datos contiene o no un número total de
módulos. Cuando el valor del campo num_modules no está disponible, debe ser regulado a 0 (0: no
codificado; 1: codificado);
⎯ num_resources_flag: campo de 1 bit que indica si la estructura de datos contiene o no un número total de
recursos. Cuando el valor del campo num_resources no está disponible, debe ser regulado a 0 (0: no
codificado; 1: codificado);
⎯ compressed_component_size_flag: campo de 1 bit que indica si la estructura de datos contiene o no el
tamaño comprimido del componente. Cuando el valor del campo compressed_component_size no está
disponible, debe ser regulado a 0 (0: no codificado; 1: codificado);
© ABNT 2007 - Todos los derechos reservados
77
ABNT NBR 15606-3:2007
⎯ component_size_flag: campo de 1 bit que indica si la estructura de datos contiene o no el tamaño del
componente. Cuando el valor del campo component_size no está disponible, debe ser regulado a 0 (0: no
codificado; 1: codificado);
⎯ default_transaction_id_flag: campo de 1 bit que indica si el identificador de la transacción está codificada o
no en la sintaxis. Para designar la ganancia de DII de identificación de transacción opcional, la identificación
de la transacción no debe estar codificada (0: no codificado; 1: codificado);
⎯ default_timeout DII_flag: campo de 1 bit que indica si el valor de intervalo está o no codificado en la sintaxis.
Cuando el valor básico especificado en la operación conforme el valor de intervalo DII se utiliza, no se codifica
(0: no codificado; 1: codificado);
⎯ default_leak_rate_flag: campo de 1 bit que indica si la tasa de dispersión está o no codificada en la sintaxis.
Cuando el valor básico especificado en la operación como el valor de la tasa de dispersión se utiliza, no se
codifica (0: no codificado; 1: codificado);
⎯ num_dataEvent: campo de 32 bits que indica el número total de eventos de datos en el componente
participante;
⎯ num_modules: campo de 32 bits que indica el número total de módulos en los eventos de datos en el
componente participante;
⎯ num_resources: campo de 32 bits que indica el número total de recursos en los eventos de datos en el
componente participante;
⎯ compressed_component_size: campo de 32 bits que indica el tamaño total (en bytes) de los datos en los
eventos de datos en los carruseles de datos de este componente. El tamaño del módulo comprimido es
calculado con base en el estado comprimido, no en el estado expandido;
⎯ component_size: campo de 32 bits que indica el tamaño total (en bytes) de los datos en los eventos de datos
en los carruseles de datos de este componente. El tamaño del módulo comprimido es calculado con base en
el estado extraído, no en el estado comprimido;
⎯ transaction_id: transacción de identificación del valor DII transmitido en este componente. En el caso de la
identificación de la transacción no estar definida, debe obtenerse la DII con la identificación de la transacción;
⎯ time_out_value_DII: campo de 32 bits que indica el valor de intervalo recomendado (en milésimas de
segundos) para recibir la sección completa de DII en este carrusel. Cuando el valor sea 0xFFFFFFFF, ello
significa que no existe valor de intervalo recomendado;
⎯ leak_rate: campo de 22 bits que indica la tasa de dispersión del transporte de buffer de la unidad del receptor
en una unidad de 50 byte/s.
78
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Anexo C
(informativo)
Relación entre el descriptor PMT/EIT y AIT
La Figura C.1 muestra la relación de AIT para el descriptor componente de datos PMT y el descriptor de
contenidos de datos EIT en Ginga.
Los ítems de extensión para Ginga son los siguientes:
⎯ nueva atribución para la identificación de valor a ser usado en Ginga (por ejemplo, componentes de datos ID,
transport_id, application_id);
⎯ para el componente ES que transmite la aplicación Ginga o para el componente ES que transmite AIT,
las áreas del selector son especificadas para los descriptores de componentes de datos que almacenan
información adicional a no ser transmitida a través de AIT;
⎯ las áreas de selector son especificadas para los descriptores de contenidos de datos en orden para
almacenar los detalles de la aplicación Ginga en la base del evento del programa;
⎯ en un descriptor, es regulada application_identifier_flag en vez de entry_point_flag en orden para almacenar
información especificando una aplicación que es un punto de entrada en PMT/EIT.
Las informaciones adicionales son para las áreas del selector de los descriptores de componentes de datos, así
como descriptores de contenidos de datos relevantes para transmisión Ginga y AIT. El resto está supuesto para
estar de conformidad con la transmisión AIT bajo MHP1.0.
Para el carrusel de datos que no transmite aplicación Ginga, es posible referir a los contenidos especificando el
asignador de la aplicación Ginga.
© ABNT 2007 - Todos los derechos reservados
79
ABNT NBR 15606-3:2007
Figura C.1 — Relación de a transmisión AIT y descriptor de componente de datos
80
© ABNT 2007 - Todos los derechos reservados
ABNT NBR 15606-3:2007
Anexo D
(informativo)
Informaciones adicionales sobre trasmisiones utilizando independientes
PES
Un data_identifier debe estar presente en el inicio de PES_packet_data_byte para identificar el tipo de datos. (ver
EN 301 192, ATSC DVS 161 y DAVIC 1.4:1998, parte 9).
NOTA
la PMT.
En Japón, el Ministerio de Telecomunicaciones (Notification Hei 10/260) estipula el uso de data_component_id en
Para asegurar la conformidad DVB, ATSC y DAVIC, el campo data_identifier contiene una copia del valor
asignado para el área del usuario definido en esos estándares.
Las razones para emplear las especificaciones independientes PES como un estándar para el método de
transmisión PES son las siguientes:
⎯ tamaño (menor de restricciones) permite una libertad mayor;
⎯ se permite que datos de video y audio sean producidos por separado antes de ser multiplexados por menos
esfuerzo;
⎯ es permitido compartir datos en múltiples piezas de datos de video y audio para un acceso más fácil.
La transmisión de carrusel de datos se basa en el download U-N (carrusel de datos DSM-CC) estipulado en la
ISO/IEC 13818-6, en el cual fue agregado lo siguiente:
⎯ con relación al área de datos del módulo, asumiendo su uso para la transmisión de archivos etc., fueron
agregados los descriptores de Activation time, de Expire y de Compression Type.
excepto por los servicios de download asumidos cuando el original ISO/IEC 13818-6 fue desarrollado, estas
estipulaciones permiten el uso de las transmisiones del carrusel de datos que son eficientes y que tienen la
recepción mínima procesando cargas en una amplia variedad de aplicaciones, como servicios de multimedia.
© ABNT 2007 - Todos los derechos reservados
81
ABNT NBR 15606-3:2007
Bibliografia
[1]
ITU-T X.208: 1988, Specification of abstraction construction describing format (ASN. 1)
[2]
ITU-T X.209: 1988, Specification of basic encryption rule of abstraction construction describing format
(ASN.1)
[3]
ITU-T X.234: 1994, Encryption key management and authenticating system for audio visual service
[4]
ITU-T X.509: 1997, Directory – Frame of authentication
[5]
JIS X 5055:1996, Security technology – Data completeness function using encryption inspection function by
block encryption algorithm
[6]
JIS X 5056-3:1996, Security technology – Entity authentication function – Part 3: Authentication function
using open key algorithm
[7]
JIS X 5057-1:1996, Security technology – Hash function – Part 1: Introduction
[8]
JIS X 5057-2:1996, Security technology – Hash function – Part 2: Hush function using n bitblock encryption
algorithm
[9]
JIS X 5060:1994, Data encryption technology – Registration procedure of encryption algorithm
[10] http://www.nist.gov/aes (1999-3) “Advanced Encryption Standard”
[11] FIPS PUB 46-2:1993, http://www.itl.nist.gov/div897/pubs/fip46-2.htm – Data encryption standard (DES)
[12] RC5, RFC2040:1996, The RC5 Encryption algorithm
[13]
FIPS PU B 140-1:1994, http://www-09.nist.gov/div897/pubs/fip140-1 .htm, Security requirements for
cryptographic modules
[14]
FIPS PU B 180-1:1995, http://www.itl.nist.gov/div897/pubs/fip180-1 .htm, Secure hash standard
[15]
MD5, RFC1321:1992, The MD5 Message-Digest Algorithm
[16]
MD2, RFC1319:1992, The MD2 Message-Digest Algorithm
[17]
RFC 2246:1999, The TLS Protocol Version 1.0
[18]
RFC 1590:1994, J.Postel, Media Type Registration Procedure, RFC 1590, ISI
[19]
The Notification No. 260 of Ministry of Posts and Telecommunications in 1998 – JAPAN
[20]
RFC 1877:1995, PPP Internet Protocol Control Protocol Extensions for Name Server Addresses
[21]
RFC 1954:1996, Transmission of Flow Labelled IPv4 on ATM Data Links Ipsilon Version 1.0
[22]
RFC 768:1980, User Datagram Protocol
[23]
RFC 1334: 1992, PPP Authentication Protocols
[24]
RFC 1332: 1992, The PPP Internet Protocol Control Protocol (IPCP)
[25]
RFC 1034:1987, Domain names - concepts and facilities
[26]
RFC 1035:1987, Domain names - implementation and specification
82
© ABNT 2007 - Todos los derechos reservados
NORMA
BRASILEÑA
ABNT NBR
15606-5
Primera edición
05.03.2008
Válida a partir de
05.04.2008
Versión corregida
18.06.2009
Televisión digital terrestre — Codificación de
datos y especificaciones de transmisión para
radiodifusión digital
Parte 5: Ginga-NCL para receptores portátiles –
Lenguaje de aplicación XML para codificación
de aplicaciones
Palabras clave: Televisión digital terrestre. Middleware. Ginga. NCL. Receptores
portátiles. Perfil one-seg.
ICS 33.160.01
ISBN 978-85-07-00917-7
Número de referencia
ABNT NBR 15606-5:2008
118 páginas
© ABNT 2008
ABNT NBR 15606-5:2008
© ABNT 2008
Todos los derechos reservados. A menos que se especifique de otro modo, ninguna parte de esta publicación puede ser
reproducida o utilizada por cualquier medio, electrónico o mecánico, incluyendo fotocopia y microfilm, sin permiso por escrito de
la ABNT.
ABNT
Av.Treze de Maio, 13 - 28º andar
20031-901 - Rio de Janeiro - RJ
Tel.: + 55 21 3974-2300
Fax: + 55 21 2220-1762
[email protected]
www.abnt.org.br
Impresso en Brasil
ii
© ABNT 2008 - Todos los derechos reservados
ABNT NBR 15606-5:2008
Índice
Página
Prefacio........................................................................................................................................................................v
Introducción ...............................................................................................................................................................iv
1
Alcance ...........................................................................................................................................................1
2
Referencias normativas ................................................................................................................................1
3
Términos y definiciones................................................................................................................................1
4
Abreviaturas...................................................................................................................................................7
5
5.1
5.2
Arquitectura Ginga ........................................................................................................................................8
Ginga main modules .....................................................................................................................................8
Interacción con el ambiente nativo..............................................................................................................9
6
6.1
6.2
6.3
6.3.1
6.3.2
Objetos XHTML incorporados en presentaciones NCL.............................................................................9
NCL como lenguaje cola ...............................................................................................................................9
Formato de contenido XHTML ...................................................................................................................10
XHTML para el perfil portátil.......................................................................................................................10
Marcaciones XML ........................................................................................................................................10
Hojas de estilo .............................................................................................................................................15
7
7.1
7.1.1
7.1.2
7.1.3
7.2
7.3
7.3.1
7.3.2
7.3.3
7.3.4
7.3.5
NCL - Lenguaje declarativo XML para especificación de presentaciones multimedia interactivas ...19
Lenguajes modulares y perfiles de lenguajes..........................................................................................19
Módulos NCL................................................................................................................................................19
Identificadores para módulos y perfiles de lenguaje de la NCL 3.0.......................................................22
Informaciones sobre versiones de NCL....................................................................................................24
Módulos NCL................................................................................................................................................24
Perfiles del lenguaje NCL para el SBTVD..................................................................................................24
Módulos de perfiles .....................................................................................................................................24
Esquema del perfil NCL 3.0 DTV avanzado...............................................................................................24
Esquema do perfil NCL 3.0 CausalConnector ..........................................................................................34
Atributos y elementos del perfil NCL 3.0 DTV básico..............................................................................34
Esquema del perfil NCL 3.0 DTV Básico ...................................................................................................37
8
8.1
8.2
8.3
8.5
Objetos de media en presentaciones NCL................................................................................................45
Implementación modular de Ginga-NCL ...................................................................................................45
Comportamiento esperado de los exhibidores de media .......................................................................46
Comportamiento esperado de los exhibidores de media después de instrucciones aplicadas a los
objetos de composición..............................................................................................................................46
Relación entre la máquina de estado de eventos de presentación de un nudo y la máquina de
estado del evento de presentación de su nudo de composición padre................................................46
Comportamiento esperado de los exhibidores procedurales Lua.........................................................46
9
Transmisión de contenido y eventos de flujo NCL..................................................................................48
10
10.1
10.2
10.3
10.3.1
10.3.2
10.3.3
10.3.4
10.3.5
Objetos procedurales Lua en presentaciones NCL .................................................................................48
Lenguaje Lua - Funciones retiradas de la biblioteca Lua .......................................................................48
Modelo de ejecución ...................................................................................................................................49
Módulos adicionales ...................................................................................................................................49
Módulos obligatorios ..................................................................................................................................49
Módulo canvas.............................................................................................................................................49
Módulo event................................................................................................................................................61
Módulo settings ...........................................................................................................................................74
Módulo persistent........................................................................................................................................74
11
Objetos procedurales Java en documentos NCL ....................................................................................75
12
Requisitos de codificación de media y métodos de transmisión instados en documentos NCL ......77
8.4
© ABNT 2008 - Todos los derechos reservados
iii
ABNT NBR 15602-2:2007
13
Seguridad .....................................................................................................................................................77
Anexo A (normativo) Esquemas de los módulos NCL 3.0 que se utilizan en los perfiles TVD Básico y TVD
Avanzado......................................................................................................................................................78
A.1
Módulo Structure: NCL30Structure.xsd ....................................................................................................78
A.2
Módulo Layout: NCL30Layout.xsd ............................................................................................................79
A.3
Módulo Media: NCL30Media.xsd................................................................................................................80
A.4
Módulo Context: NCL30Context.xsd .........................................................................................................81
A.5
Módulo MediaContentAnchor: NCL30MediaContentAnchor.xsd ...........................................................82
A.6
Módulo CompositeNodeInterface: NC30CompositeNodeInterface.xsd.................................................84
A.7
Módulo PropertyAnchor: NCL30PropertyAnchor.xsd .............................................................................85
A.8
Módulo SwitchInterface: NCL30SwitchInterface.xsd...............................................................................86
A.9
Módulo Descriptor: NCL30Descriptor.xsd ................................................................................................87
A.10 Módulo Linking: NCL30Linking.xsd ..........................................................................................................89
A.11 Módulo ConnectorCommonPart: NCL30ConnectorCommonPart.xsd ..................................................90
A.12 Módulo ConnectorAssessmentExpression: NCL30ConnectorAssessmentExpression.xsd .............91
A.13 Módulo ConnectorCausalExpression: NCL30ConnectorCausalExpression.xsd .................................93
A.14 Módulo CausalConnector: NCL30CausalConnector.xsd ........................................................................96
A.15 Módulo ConnectorBase: NCL30ConnectorBase.xsd...............................................................................97
A.16 NCL30CausalConnectorFunctionality.xsd................................................................................................98
A.17 Módulo TestRule: NCL30TestRule.xsd....................................................................................................101
A.18 Módulo TestRuleUse: NCL30TestRuleUse.xsd ......................................................................................103
A.19 Módulo ContentControl: NCL30ContentControl.xsd .............................................................................104
A.20 Módulo DescriptorControl: NCL30DescriptorControl.xsd ....................................................................105
A.21 Módulo Timing: NCL30Timing.xsd ..........................................................................................................106
A.22 Módulo Import: NCL30Import.xsd............................................................................................................107
A.23 Módulo EntityReuse: NCL30EntityReuse.xsd ........................................................................................108
A.24 Módulo ExtendedEntityReuse: NCL30ExtendedEntityReuse.xsd........................................................109
A.25 Módulo KeyNavigation: NCL30KeyNavigation.xsd................................................................................110
A.26 Módulo TransitionBase: NCL30TransitionBase.xsd..............................................................................111
A.27 Módulo Animation: NCL30Animation.xsd...............................................................................................112
Bibliografía ..............................................................................................................................................................118
iv
© ABNT 2008 - Todos os direitos reservados
ABNT NBR 15606-5:2008
Prefacio
La Associação Brasileira de Normas Técnicas (ABNT) es el Fórum Nacional de Normalización. Las Normas
Brasileñas, cuyo contenido es responsabilidad de los Comités Brasileños (ABNT/CB), de los Organismos de
Normalización Sectorial (ABNT/ONS) y de las Comisiones de Estudios Especiales (ABNT/CEE), son elaboradas
por Comisiones de Estudio (CE), formadas por representantes de sus sectores implicados de los que forman
parte: productores, consumidores y neutrales (universidades, laboratorios y otros).
Los Documentos Técnicos ABNT se elaboran de acuerdo con las reglas de Directivas ABNT, Parte 2.
La Associação Brasileira de Normas Técnicas (ABNT) llama la atención sobre la posibilidad de que algunos de los
elementos de este documento pueden ser objeto de derechos de patente. La ABNT no debe ser considerada
responsable por la identificación de cualesquiera derechos de patente.
La ABNT NBR 15606-5 fue elaborada por la Comisión de Estudio Especial de Televisión Digital
(ABNT/CEE-00:001.85). El Proyecto circuló en Consulta Nacional según Edicto nº 12, de 13.12.2007 a 11.02.2008,
con el número de Proyecto 00:001.85-006/5.
En caso que surja cualquier duda con relación a la interpretación de la versión en español siempre deben
prevalecer las prescripciones de la versión en portugués
Esta Norma está basada en los trabajos del Fórum del Sistema Brasileiro de Televisão Digital Terrestre, según
establece el Decreto Presidencial nº 5.820, de 29/06/2006.
La ABNT NBR 15606, bajo el título general “Televisión digital terrestre – Codificación de datos y especificaciones
de transmisión para radiodifusión digital”, está previsto que contenga las siguientes partes:
 Parte 1: Codificación de datos;
 Parte 2: Ginga-NCL para receptores fijos y móviles – Lenguaje de aplicación XML para codificación de
aplicaciones;
 Parte 3: Especificación de transmisión de datos;
 Parte 4: Ginga-J – Ambiente para la ejecución de aplicaciones procedurales;
 Parte 5: Ginga-NCL para receptores portátiles – Lenguaje de aplicación XML para codificación de aplicaciones.
Esta versión en español es equivalente a la versión corregida 2 de la ABNT NBR 15606-5:2008, de 14.04.2009.
Esta versión corregida de la ABNT NBR 15606-5:2008 incorpora la Errata 1 de 18.06.2009.
© ABNT 2008 - Todos los derechos reservados
v
ABNT NBR 15606-5:2008
Introducción
La Associação Brasileira de Normas Técnicas (ABNT) llama la atención para el hecho de que la exigencia de
conformidad con este documento ABNT puede involucrar el uso de una patente relacionada a NCL, tal como
mencionado en 5.1.
La ABNT no toma posición con respecto a evidencias, validez y alcance de estos derechos de patente.
El propietario de este derecho de patente aseguró a ABNT que él está preparado para negociar licencias sobre
términos y condiciones razonables y no discriminatorias con los solicitantes. Sobre esto, una declaración del
propietario de esta patente está registrada en ABNT. Informaciones se pueden obtener en:
Pontificia Universidad Católica de Río de Janeiro, Departamento de Transferencia de Tecnología
Rua Marquês de São Vicente, 225 – Gávea, 22451-900 - Rio de Janeiro - RJ - Brasil.
ABNT llama la atención para la posibilidad de que algunos de los elementos de este documento ABNT puedan ser
objeto de otros derechos de patente además de los identificados anteriormente. La ABNT no se debe considerar
responsable por la identificación de cualesquiera derechos de patente.
Esta Norma estandariza un lenguaje de aplicación XML que permite a los autores escribir presentaciones
multimedia interactivas. Este componente de ABNT NBR 15606 es parte de las especificaciones de codificación de
datos para el sistema brasileño de televisión digital terrestre (SBTVD) y comprende la especificación del lenguaje
utilizado por la máquina de presentación Ginga-NCL del middleware SBTVD, denominado Ginga.
Por medio de ese lenguaje, denominado NCL (Nested Context Language - Lenguaje de Contextos Anidados), un
autor puede describir el comportamiento temporal de una presentación multimedia, asociar hyperlinks (interacción
del usuario) a objetos de media, definir alternativas para presentación (adaptación) y describir el layout de la
presentación en múltiples dispositivos.
Esta Norma se destina fundamentalmente a las entidades que están especificando terminales y/o estándares
basados en el Ginga. También se destina a los desarrolladores de aplicaciones que utilizan las funcionalidades del
Ginga y de sus API. El middleware Ginga tiene como objeto garantizar la interoperabilidad de las aplicaciones en
diferentes implementaciones de plataformas que lo soportan.
Las aplicaciones Ginga se clasifican en dos categorías, dependiendo si la aplicación inicialmente procesada posee
contenido de naturaleza declarativa o imperativa. Esas categorías de aplicaciones son denominadas aplicaciones
declarativas y aplicaciones procedurales, respectivamente. Los ambientes de aplicación se clasifican del mismo
modo en dos categorías, dependiendo si procesan aplicaciones declarativas o procedurales, siendo entonces
denominados Ginga-NCL y Ginga-J, respectivamente.
Una implementación únicamente Ginga-NCL es permitida para receptores portátiles, siendo que, en ese caso, la
implementación del ambiente Ginga-J es opcional. Al ser implementado solamente con el Ginga-NCL, el
middleware Ginga brinda soporte a códigos procedurales a través del lenguaje Lua.
Esta Norma no especifica la forma de implementación de los ambientes de aplicación en un receptor.
vi
© ABNT 2008 - Todos os direitos reservados
NORMA BRASILEÑA
ABNT NBR 15606-5:2008
Televisión digital terrestre — Codificación de datos y especificaciones de
transmisión para radiodifusión digital
Parte 5: Ginga-NCL para receptores portátiles – Lenguaje de aplicación XML
para codificación de aplicaciones
1
Alcance
Esta parte de la ABNT NBR 15606 especifica un lenguaje de aplicación XML denominado NCL (Nested Context
Language), el lenguaje declarativo del middleware Ginga, la codificación y la transmisión de datos para
radiodifusión digital.
2
Referencias normativas
Los documentos indicados a continuación son indispensables para la aplicación de este documento. Para las
referencias fechadas, se aplican solamente las ediciones citadas. Para las referencias sin fecha, se aplican las
ediciones más recientes del documento citado (incluyendo enmiendas).
ABNT NBR 15603-2:2007, Televisión digital terrestre — Multiplexación y servicios de información (SI) — Parte 2:
Estructura de datos y definiciones de la información básica de SI
ABNT NBR 15606-1, Televisión digital terrestre — Codificación de datos y especificaciones de transmisión para
radiodifusión digital — Parte 1: Codificación de datos
ABNT NBR 15606-2: 2007, Televisión digital terrestre — Codificación de datos y especificaciones de transmisión
para radiodifusión digital — Parte 2: Ginga-NCL para receptores fijos y móviles — Lenguaje de aplicación XML
para codificación de aplicaciones
ISO/IEC 13818-1:2008, Information technology — Generic coding of moving pictures and associated audio
information: Systems
ECMA 262, ECMAScript language specification
3
Términos y definiciones
Para los efectos de esta parte de la ABNT NBR 15606, se aplican los siguientes términos y definiciones.
3.1
ambiente de aplicación
contexto o ambiente de software en el cual se procesa una aplicación
3.2
ambiente de aplicación declarativa
ambiente que brinda soporte al procesamiento de aplicaciones declarativas
NOTA
Un formateador (user agent) NCL es un ejemplo de ambiente de aplicación declarativa.
3.3
ambiente de aplicación procedural
ambiente que brinda soporte al procesamiento de aplicaciones procedurales
© ABNT 2008 - Todos los derechos reservados
1
ABNT NBR 15606-5:2008
3.4
API DON
API que define la estructura lógica de un documento XML y la forma de acceder, o manejar, un documento XML
NOTA
Esta API es una interfaz independiente de plataformas y lenguajes y sigue el Modelo DOM (Document Object Model).
3.5
aplicación
información que expresa un conjunto específico de comportamientos observables
3.6
aplicación declarativa
aplicación que utiliza principalmente, y como punto de partida, información declarativa para expresar su
comportamiento
NOTA
Una instancia de documento NCL es un ejemplo de aplicación declarativa.
3.7
aplicación híbrida
aplicación híbrida declarativa o aplicación híbrida procedural
3.8
aplicación híbrida declarativa
aplicación declarativa que contiene contenido de objeto activo
NOTA
Un documento NCL con un Java Xlet embutido es un ejemplo de aplicación híbrida declarativa.
3.9
aplicación híbrida procedural
aplicación procedural con contenido declarativo
NOTA
Un Java Xlet que crea y causa la exhibición de una instancia de documento NCL es un ejemplo de aplicación híbrida
procedural.
3.10
aplicación nativa
función intrínseca implementada por una plataforma receptora
NOTA
Una exhibición en closed caption es un ejemplo de aplicación nativa.
3.11
aplicación procedural
aplicación que utiliza principalmente, y como punto de partida, informaciones procedurales para expresar su
comportamiento
NOTA
Un programa en Java es un ejemplo de una aplicación procedural.
3.12
almacenamiento persistente
memoria disponible que puede ser leída o grabada por una aplicación y puede ser mantenida por más tiempo que
el tiempo de vida de la misma aplicación
NOTA
El almacenamiento persistente puede ser volátil o no volátil.
3.13
atributo
parámetro que representa la modalidad de una propiedad
2
© ABNT 2008 - Todos los derechos reservados
ABNT NBR 15606-5:2008
3.14
atributo de un elemento
propiedad de un elemento XML
3.15
autor
persona que escribe documentos NCL
3.16
canal de interactividad
canal de retorno
mecanismo de comunicación que suministra conexión entre el receptor y un servidor remoto
3.17
carácter
"letra" específica u otro símbolo identificable
EJEMPLO
“A”
3.18
carrusel de datos
método que envía cualquier conjunto de datos en forma cíclica, para que esos datos se puedan obtener, vía
radiodifusión, en un intervalo de tiempo tan largo como sea necesario
[ISO/IEC 13818-6:2001]
3.19
codificación de caracteres
mapeo entre un valor de entrada entero y el carácter textual, representado por ese mapeo
3.20
contenido de objeto activo
tipo de contenido que toma la forma de un programa ejecutable
NOTA
Un Xlet Java compilado es un ejemplo de contenido de objeto activo.
3.21
contenido NCL
conjunto de informaciones que consiste en un documento NCL y en un grupo de datos, incluyendo objetos (de
media o de ejecución), que acompañan el documento NCL
3.22
digital storage media command and control
DSM-CC
método de control que suministra acceso a un archivo o flujo en servicios digitales interactivos
[ISO/IEC 13818-6:2001]
3.23
document type definition
DTD
declaración que describe un tipo de documento XML
3.24
ECMAScript
lenguaje de programación definido en la ECMA 262
© ABNT 2008 - Todos los derechos reservados
3
ABNT NBR 15606-5:2008
3.25
elemento
unidad de estructuración del documento delimitada por tags
NOTA
Por lo general, un elemento es delimitado por una tag inicial y una tag final, excepto un elemento vacío que es
delimitado por una tag de elemento vacío.
3.26
elemento property
elemento NCL que define un nombre de propiedad y su valor asociado
3.27
entidad de la aplicación
unidad de información que expresa alguna parte de una aplicación
3.28
evento
ocurrencia en el tiempo que puede ser instantánea o tener duración mensurable
3.29
exhibidor de media
media player
componente identificable de un ambiente de aplicación que decodifica o ejecuta un tipo específico de contenido
3.30
eXtensible HTML
XHTML
versión extendida del HTML como aplicación XML
NOTA
En la especificación XHTML, un documento HTML es reconocido como aplicación XML.
3.31
herramienta de autoría
herramienta para ayudar a los autores a crear documentos NCL
3.32
fuente
mecanismo que permite la renderización específica de un carácter
EJEMPLO
NOTA
Tiresias, 12 puntos.
En la práctica, un formato de fuente incorpora aspectos de la codificación de un carácter.
3.33
formateador NCL
componente de software responsable por recibir la especificación de un documento NCL y controlar su presentación,
intentando garantizar que se respeten las relaciones entre los objetos de media, especificados por el autor
NOTA
Renderizador (renderer) de documentos, agente del usuario (user agent) y exhibidor son otros nombres que se
utilizan con el mismo significado del formateador de documentos.
3.34
flujo de transporte
se refiere a la sintaxis del flujo de transporte MPEG-2 para empaquetado y multiplexación de video, audio y
señales de datos en sistemas de radiodifusión digital
4
© ABNT 2008 - Todos los derechos reservados
ABNT NBR 15606-5:2008
3.35
flujo elemental
elementary stream
ES
flujo básico que contiene datos de video, audio, o datos privados
NOTA
Un único flujo elemental se transporta en una secuencia de paquetes PES con un, y sólo un, identificador
(stream_id).
3.36
gestor de aplicaciones
entidad responsable por la administración del ciclo de vida de las aplicaciones y que administra las aplicaciones,
funcionando tanto en la máquina de presentación como en la máquina de ejecución
3.37
identificador de paquete
PID
valor entero único, utilizado para asociar los flujos elementales de un programa, tanto en un flujo de transporte
único como multiprograma
3.38
información de servicio
SI
datos que describen programas y servicios
3.39
informaciones específicas del programa
program specific information
PSI
datos normativos necesarios para demultiplexar los flujos de transporte y regenerar los programas
3.40
Interfaz de programación de la aplicación
API
bibliotecas de software que ofrecen acceso uniforme a los servicios del sistema
3.41
lenguaje de marcación
formalismo que describe una clase de documentos que emplean marcación para delinear la estructura, apariencia
u otros aspectos del documento
3.42
lenguaje de script
lenguaje utilizado para describir un contenido de objeto activo incorporado en documentos NCL y en documentos
HTML
3.43
localizador
identificador que suministra una referencia a una aplicación o recurso
3.44
máquina de presentación
subsistema en un receptor que analiza y presenta aplicaciones declarativas, con contenidos como audio, video,
gráficos y texto, con base en reglas definidas en la máquina de presentación
NOTA
Una máquina de presentación es responsable por el control del comportamiento de la presentación y por iniciar
otros procesos en respuesta a entradas del usuario y otros eventos.
EJEMPLO
Navegador HTML y formateador NCL.
© ABNT 2008 - Todos los derechos reservados
5
ABNT NBR 15606-5:2008
3.45
máquina de ejecución
subsistema en un receptor que evalúa y ejecuta aplicaciones procedurales, compuestas por instrucciones en
lenguaje de computadora, contenido de media asociados y otros datos
NOTA
Una máquina de ejecución se puede implementar con un sistema operativo, compiladores de lenguaje de
computadora, interpretadores e interfaces de programación de aplicaciones (API), que una aplicación procedural puede utilizar
para presentar contenido audiovisual, interactuar con el usuario o ejecutar otras tareas que no sean evidentes para el usuario.
EJEMPLO
Ambiente de software JavaTV, utilizando lenguaje de programación Java e interpretador bytecode, API
JavaTV y máquina virtual Java para ejecución del programa.
3.46
método
función asociada a un objeto autorizado para manejar los datos del objeto
3.47
nudo NCL
elemento <media>, <context>, <body> o <switch> de NCL
3.48
normal play time
NPT
coordenada temporal absoluta que representa la posición en un flujo
3.49
objeto de media
colección de pedazos de datos identificados por nombre que puede representar un contenido de media o un
programa escrito en lenguaje específico
3.50
perfil
especificación de una clase de capacidades, ofreciendo diferentes niveles de funcionalidades en un receptor
3.51
perfil one-seg
caracteriza el servicio que puede ser recibido por un sintonizador de banda estrecha (430 KHz) y por lo tanto con
ahorro en el consumo de batería
NOTA
El perfil one-seg también es conocido como perfil portátil.
3.52
perfil full-seg
caracteriza el servicio que necesita necesariamente un demodulador de banda ancha (5,7 MHz) para ser recibido
NOTA
Dependiendo de las configuraciones de transmisión y de funcionalidad específicas del receptor, se puede recibir en
movimiento o sólo por receptores fijos, aunque sin el beneficio del ahorro de energía. La resolución del video transmitido puede
ser o no de alta definición.
3.53
plug-in
conjunto de funcionalidades que se puede agregar a una plataforma genérica para suministrar funcionalidad
adicional
3.54
plataforma receptora
plataforma
hardware, sistema operativo y bibliotecas de software nativas del receptor, elegidos por el fabricante
6
© ABNT 2008 - Todos los derechos reservados
ABNT NBR 15606-5:2008
3.55
recurso
objeto de datos o un servicio de la red que es identificado unívocamente
3.56
sistema de archivos local
sistema de archivos suministrado por la plataforma receptora local
3.57
tiempo de vida de una aplicación
período de tiempo entre el momento en que una aplicación se carga y el momento en que se destruye
3.58
uniform resource identifier
URI
método de encaminamiento que permite el acceso a objetos en una red
3.59
user agent
cualquier programa que interpreta un documento NCL
NOTA
Un user agent puede exhibir un documento, intentando garantizar que se respeten las relaciones especificadas por el
autor entre objetos de media, pronunciarlo en audio sintetizado, convertirlo en otro formato etc.
3.60
usuario
persona que interactúa con un formateador para visualizar, oír o utilizar de otra forma un documento NCL
3.61
usuario final
individuo que opera o interactúa con un receptor
4
Abreviaturas
Para los efectos de esta parte de la ABNT NBR 15606, se aplican las siguientes abreviaturas:
API
BML
CLUT
CSS
DOM
DSM-CC
DTD
DTV
DVB
GIF
HTML
HTTP
JPEG
MIME
MNG
MPEG
Application Programming Interface
Broadcast Markup Language
Color Look-up Table
Cascading Style Sheets
Document Object Model
Digital Storage Media Command and Control
Document Type Definition
Digital Television
Digital Video Broadcasting
Graphics Interchange Format
Hypertext Markup Language
Hypertext Transfer Protocol
Joint Photographic Expert Group
Multipurpose Internet Mail Extensions
Multiple Network Graphics
Moving Picture Expert Group
© ABNT 2008 - Todos los derechos reservados
7
ABNT NBR 15606-5:2008
NCL
NCM
NPT
OS
PAT
PES
PID
PMT
PNG
PSI
SBTVD
SMIL
TS
UCS
URI
URL
XHTML
XML
W3C
5
Nested Context Language
Nested Context Model
Normal Play Time
Operating System
Program Association Table
Packetized Elementary Stream
Packet Identifier
Program Map Table
Portable Network Graphics
Program Specific Information
Sistema Brasileño de Televisión Digital Terrestre
Synchronized Multimedia Integration Language
Transport Stream
Universal (Coded) Character Set
Universal Resource Identifier
Universal Resource Locator
eXtensible HTML
Extensible Markup Language
World-Wide Web Consortium
Arquitectura Ginga
5.1 Ginga main modules
El universo de las aplicaciones Ginga se puede dividir en un conjunto de aplicaciones declarativas y un conjunto
de aplicaciones procedurales. Una aplicación declarativa es aquella donde el tipo del contenido de la entidad inicial
es declarativo. Por otro lado, una aplicación procedural es aquella cuyo tipo del contenido de la entidad inicial es
procedural. Una aplicación declarativa pura es aquella en la cual el contenido de todas las entidades es del tipo
declarativo, y una aplicación procedural pura es aquella en la cual el contenido de todas las entidades es del tipo
procedural. Una aplicación híbrida es aquella cuyo conjunto de entidades posee tanto contenido del tipo
declarativo como procedural. Una aplicación Ginga no necesita ser puramente declarativa o procedural.
En particular, las aplicaciones declarativas frecuentemente utilizan scripts, cuyo contenido es de modalidad
procedural. Además de ello, una aplicación declarativa puede hacer referencia a un código Java TV Xlet
incorporado. Del mismo modo, una aplicación procedural puede hacer referencia a una aplicación declarativa,
conteniendo, por ejemplo, contenido gráfico, o puede construir e iniciar la presentación de aplicaciones con
contenido declarativo. Por lo tanto, ambos tipos de aplicación Ginga pueden utilizar las facilidades de los
ambientes de aplicación: declarativo y procedural.
Ginga-NCL, ambiente obligatorio para receptores portátiles, es un subsistema lógico del sistema Ginga
responsable por el procesamiento de documentos NCL. Un componente clave del Ginga-NCL es la máquina de
interpretación del contenido declarativo (formateador NCL). Otros módulos importantes son el exhibidor
(user agent) XHTML y la máquina de presentación Lua, que es responsable por la interpretación de los scripts Lua
(ver la ABNT NBR 15606-2:2007, Anexo B).
NOTA
NCL es marca registrada y su especificación es propiedad intelectual de la PUC-Rio (INPI Departamento de
Transferencia Tecnológica - No. 0007162-5; 20/12/2005).
Ginga-J, ambiente obligatorio para receptores portátiles, es un subsistema lógico del sistema Ginga, responsable
por el procesamiento de contenidos activos. Un componente clave del ambiente de aplicación procedural es la
máquina de ejecución del contenido procedural, compuesta por una máquina virtual Java.
Decodificadores de contenido comunes sirven tanto para las aplicaciones procedurales con respecto a las
declarativas que necesitan decodificar y presentar tipos comunes de contenido como PNG, JPEG, MPEG y otros
formatos. El núcleo común Ginga (Ginga Common Core) está compuesto por los decodificadores de contenido
8
© ABNT 2008 - Todos los derechos reservados
ABNT NBR 15606-5:2008
comunes y por procedimientos para obtener contenidos transportados en flujos de transporte (transport streams)
MPEG-2 y a través del canal de interactividad. El Núcleo Común Ginga también debe soportar obligatoriamente el
modelo conceptual de exhibición, tal como se describe en la ABNT NBR 15606-1.
La arquitectura (ver Figura 1) y facilidades Ginga fueron proyectadas para ser aplicadas a sistemas de
radiodifusión y receptores terrestres de radiodifusión. Adicionalmente, la misma arquitectura y facilidades se
pueden aplicar a sistemas que utilizan otros mecanismos de transporte de datos (como sistemas de televisión vía
satélite o por cable).
Figura 1 — Arquitectura Ginga
5.2 Interacción con el ambiente nativo
Por lo general, el Ginga es ajeno a cualesquiera aplicaciones nativas que pueden también optar por utilizar el
plano gráfico. Eso incluye, pero no se limita a aplicaciones como: closed caption, mensajes del sistema de acceso
condicional (CA), menús del receptor y guías de programación nativos.
Las aplicaciones nativas pueden tener prioridad sobre las aplicaciones Ginga. El closed caption y los mensajes de
emergencia deben tener obligatoriamente prioridad sobre el sistema Ginga.
Algunas aplicaciones nativas, como el closed caption, representan un caso especial en el cual la aplicación nativa
puede estar activa por largos períodos en conjunto con las aplicaciones Ginga.
6
Objetos XHTML incorporados en presentaciones NCL
6.1 NCL como lenguaje cola
Diferentemente de XHTML o HTML, NCL define una separación bien delimitada entre el contenido y la estructura
de un documento (o aplicación), probando un control no invasivo del enlace entre el contenido y su presentación y
layout.
El foco del lenguaje declarativo NCL es más amplio que el ofrecido por la XHTML. La sincronización espaciotemporal, definida genéricamente por los enlaces NCL; adaptabilidad, definida por los elementos switch y
descriptor switch de NCL; y soporte a múltiples dispositivos de exhibición, definidos por regiones NCL, es el foco
de ese lenguaje declarativo. La interacción del usuario se trata sólo como un caso particular de sincronización
temporal.
Como la NCL tiene una separación más exacta entre el contenido y la estructura, la misma no define ninguna
media en sí. Al contrario, define la cola que sujeta la media en presentaciones multimedia.
Un documento NCL sólo define cómo los objetos de media son estructurados y relacionados en el tiempo y
espacio. Como un lenguaje de cola, la misma no restringe o prescribe los tipos de contenido de los objetos de
© ABNT 2008 - Todos los derechos reservados
9
ABNT NBR 15606-5:2008
media. En ese sentido, es posible tener objetos de imagen (GIF, JPEG etc.), de video (MPEG, MOV etc.), de audio
(MP3, WMA etc.), de texto (TXT, PDF etc.), de ejecución (Xlet, Lua etc.), entre otros, como objetos de media NCL.
Cuáles objetos de media son soportados depende de los exhibidores de media que están acoplados al
formateador NCL (exhibidor NCL). Uno de esos exhibidores es el decodificador/exhibidor MPEG-4, normalmente
implementado en hardware en el receptor de televisión digital. De esa forma, el video y el audio MPEG-4 principal
se tratan como todos los demás objetos de media que pueden estar relacionados utilizando NCL.
Otro objeto de media NCL que debe ser obligatoriamente soportado es el objeto de media basado en XHTML. La
NCL no reemplaza, pero incorpora documentos (u objetos) basados en XHTML. Como ocurre con otros objetos de
media, qué lenguaje basado en XHTML tiene soporte en un formateador NCL es una elección de implementación
y, por lo tanto, depende de qué navegador XHTML, incorporado en el formateador NCL, actúa como exhibidor de
esa media.
Aunque un navegador XHTML deba ser obligatoriamente soportado, se recomienda evitar la utilización de
elementos XHTML para definir relaciones (incluso enlaces XHTML) en la autoría de documentos NCL. Se
recomienda que la autoría con base en la estructura sea priorizada por razones conocidas y ampliamente
divulgadas en la literatura.
Durante la exhibición del contenido de objetos de media se generan varios eventos. Algunos ejemplos son la
presentación de parte del contenido de un objeto de media, la selección de parte del contenido de un objeto etc.
Los eventos pueden generar acciones sobre otros objetos de media, como iniciar o terminar sus presentaciones.
Por lo tanto, los eventos deben ser obligatoriamente relatados por los exhibidores de media al formateador NCL
que, a su vez, puede generar acciones a ser aplicadas a ésos u otros exhibidores. Ginga-NCL define la API (ver
Sección 8) de un adaptador con el objetivo de estandarizar la interfaz entre el formateador Ginga-NCL y cada
exhibidor específico.
Para que cualquier exhibidor de media, en particular un navegador XHTML, sea acoplado al formateador
Ginga-NCL, debe brindar soporte obligatoriamente a la API de los adaptadores. Así, para algunos exhibidores de
media, incluso navegadores XHTML, puede ser necesario un módulo adaptador para alcanzar la integración.
Para edición en vivo, el Ginga-NCL también define eventos de flujo NCL para ofrecer soporte a los eventos
generados en vivo sobre flujos de media, en particular sobre el flujo de video del programa principal. Esos eventos
son una generalización del mismo concepto encontrado en otras normas, como, por ejemplo, los b-events de BML
Aunque un navegador XHTML deba ser obligatoriamente soportado, se recomienda evitar la utilización de
elementos XHTML para definir relaciones (incluso eventos de flujo) durante la creación de documentos NCL, por la
misma razón, es decir, se recomienda que la autoría con base en la estructura sea priorizada por razones
conocidas y ampliamente divulgadas en la literatura.
6.2 Formato de contenido XHTML
Formatos comunes de contenido deben ser obligatoriamente adoptados para la producción e intercambio de
contenido multimedia, como definido en la ABNT NBR 15606-1. Además de ello, en el ambiente de aplicación
declarativa también se exige la especificación de formatos comunes de contenidos XHTML para las aplicaciones
de televisión interactiva.
De este modo, esta Norma también especifica los elementos obligatorios de los objetos de media XHTML
incorporados en aplicaciones NCL, así como las propiedades de hojas de estilo obligatorias.
6.3 XHTML para el perfil portátil
6.3.1
NOTA
10
Marcaciones XML
Objetos de media NCL basados en XHTML siguen la recomendación W3C “Modularization of XHTML”.
© ABNT 2008 - Todos los derechos reservados
ABNT NBR 15606-5:2008
Las colecciones de atributo XHTML se definen de acuerdo con la Tabla 1. Las marcaciones XML que deben ser
soportadas obligatoriamente por cualquier implementación, se listan en la Tabla 2.
Tabla 1 — Colecciones de atributos
Nombre de la
colección
Core
Atributos en la
colección
class (NMTOKENS)
Requerido
Id (ID),
Requerido
title (CDATA)
I18N
Events
–
xml:lang (CDATA)
Requerido (default)
onclick (Script)
-
ondblclick (Script)
–
onmousedown (Script)
–
onmouseup (Script)
–
onmouseover (Script)
–
onmousemove (Script)
–
onmouseout (Script)
–
onkeypress (Script)
–
onkeydown (Script)
-
onkeyup (Script)
-
Style
style (CDATA)
Common
Core + Events + I18N
+ Style
© ABNT 2008 - Todos los derechos reservados
Condición del
atributo
Requerido
11
ABNT NBR 15606-5:2008
Tabla 2 — Elementos de marcación XML obligatorios
Módulo
Elemento
Condición del
elemento
body
Requerido
head
Requerido
html
title
abbr
acronym
address
blockquote
br
cite
code
dfn
div
em
h1
h2
h3
h4
h5
h6
kbd
p
pre
q
samp
span
strong
var
Requerido
Requerido
–
–
–
–
Requerido
–
–
–
Requerido
–
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
–
Requerido
–
–
–
Requerido
–
–
Structure
Text
Core
12
Hypertext
a
Requerido
List
dl
dt
dd
ol
ul
li
–
–
–
–
–
–
Atributo
Condición del
atributo
%Common.attrib
%Core.attrib
%I18n.attrib
%Events.attrib
%I18n.attrib
profile
Requerido
Requerido
–
Requerido
–
%I18n.attrib
Requerido
%Core.attrib
Requerido
%Common.attrib
Requerido
%Common.attrib
%Common.attrib
%Common.attrib
%Common.attrib
%Common.attrib
%Common.attrib
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
%Common.attrib
Requerido
%Common.attrib
Requerido
%Common.attrib
accesskey
charset
href
hreflang
rel
rev
tabindex
type
Requerido
Requerido
Requerido
Requerido
–
–
–
–
–
© ABNT 2008 - Todos los derechos reservados
ABNT NBR 15606-5:2008
Tabla 2 (continuación)
applet
param
b
big
hr
i
small
sub
sup
tt
del
ins
Condición del
elemento
–
–
–
–
–
–
–
–
–
–
–
–
Bi-directional
text
bdo
–
Basic forms
form
input
label
select
option
textarea
–
–
–
–
–
–
Módulo
Elemento
Applet
Presentation
Text extension
Edit
form
Requerido
input
Requerido
select
option
textarea
button
fieldset
label
legend
optgroup
Requerido
Requerido
Requerido
–
–
–
–
–
Forms
Forms
© ABNT 2008 - Todos los derechos reservados
Atributo
Condición del
atributo
%Common.attrib
action
method
enctype
accept-charset
accept
name
%Common.attrib
accesskey
checked
disabled
readonly
maxlength
alt
name
size
src
tabindex
accept
type
value
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
Requerido
–
Requerido
Requerido
Requerido
–
–
Requerido
–
–
–
Requerido
Requerido
13
ABNT NBR 15606-5:2008
Tabla 2 (continuación)
Módulo
Elemento
Basic tables
Table
Tables
Image
Client side map
Server side image map
Object
Frames
Target
IFrame
14
caption
table
td
th
tr
caption
table
td
th
tr
col
colgroup
tbody
thead
tfoot
img
a&
area
img&
input&
map
object&
img&
Input&
Condición del
elemento
–
Requerido
Requerido
–
Requerido
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
object
Requerido
param
frameset
frame
noframe
a&
area&
base&
link&
form&
iframe
–
–
–
–
–
–
–
–
–
–
Atributo
Condición del
atributo
%Common.attrib
archive
classid
codebase
codetype
data
declare
height
name
standby
tabindex
type
width
Requerido
–
–
–
–
Requerido
–
Requerido
–
–
–
Requerido
Requerido
© ABNT 2008 - Todos los derechos reservados
ABNT NBR 15606-5:2008
Tabla 2 (continuación)
Módulo
Elemento
Intrinsic events
a&
area&
frameset&
form&
body&
label&
input&
select&
textarea&
button&
Metainformation
meta
Condición del
elemento
–
–
–
–
–
–
–
–
–
–
Requerido
Atributo
Condición del
atributo
%I18n.attrib
http-equiv
name
content
scheme
–
–
Requerido
Requerido
–
charset
type
src
defer
%I18n.attrib
id
type
media
title
Requerido
–
Requerido
Requerido
–
noscript
Scripting
Stylesheet
Style attribute
Link
Base
6.3.2
script
–
style
Requerido
link
base
Requerido
Requerido
–
Hojas de estilo
Las propiedades de hojas de estilo que deben ser soportadas obligatoriamente por cualquier implementación
están listadas en la Tabla 3.
© ABNT 2008 - Todos los derechos reservados
15
ABNT NBR 15606-5:2008
Tabla 3 — Propiedades de hojas de estilo CSS 2 obligatorias
Propiedad
Condición de la propiedad
Value assignment/Inheritance
@import
–
!important
–
Media type
@media
Requerido
box model
margin-top
–
margin-right
–
margin-bottom
–
margin-left
–
margin
Requerido
padding-top
Requerido
padding-right
Requerido
padding-bottom
Requerido
padding-left
Requerido
padding
Requerido
border-top-width
–
border-right-width
–
border-bottom-width
–
border-left-width
–
border-width
Requerido
border-top-color
–
border-right-color
–
border-bottom-color
–
border-left-color
–
border-color
Requerido
border-top-style
–
border-right-style
–
border-bottom-style
–
border-left-style
–
border-style
Requerido
border-top
–
border-right
–
border-bottom
–
border-left
–
border
Requerido
Visual formatting model
position
Requerido
left
Requerido
top
Requerido
width
Requerido
height
Requerido
z-index
Requerido
line-height
Requerido
vertical-align
–
display
Requerido
bottom
–
right
–
float
–
clear
–
direction
–
16
© ABNT 2008 - Todos los derechos reservados
ABNT NBR 15606-5:2008
Tabla 3 (continuación)
Propiedad
Condición de la propiedad
unicode-bidi
–
min-width
–
max-width
–
min-height
–
max-height
–
Other visual effects
visibility
Requerido
overflow
Requerido
clip
–
Generated content/Auto numbering/List
content
–
quotes
–
counter-reset
–
counter-increment
–
marker-offset
–
list-style-type
–
list-style-image
–
list-style-position
–
list-style
–
Page media
"@page"
–
size
–
marks
–
page-break-before
–
page-break-after
–
page-break-inside
–
page
–
orphans
–
widows
–
Background
background
–
background-color
–
background-image
Requerido
background-repeat
Requerido
background-position
–
background-attachment
–
Font
color
Requerido
font-family
Requerido
font-style
Requerido
font-size
Requerido
font-variant
Requerido
font-weight
Requerido
font
Requerido
font-stretch
–
font-adjust
–
Text
text-indent
–
text-align
Requerido
text-decoration
–
© ABNT 2008 - Todos los derechos reservados
17
ABNT NBR 15606-5:2008
Tabla 3 (continuación)
Propiedad
Condición de la propiedad
text-shadow
–
letter-spacing
Requerido
word-spacing
–
text-transform
–
white-space
Requerido
Pseudo class/ Pseudo element
:link
–
:visited
–
:active
Requerido
:hover
–
:focus
Requerido
:lang
–
:first-child
–
:first-line
–
:first-letter
–
:before
–
:after
–
Table
caption-side
–
border-collapse
–
border-spacing
–
table-layout
–
empty-cells
–
speak-header
–
User interface
outline-color
–
outline-width
–
outline-style
–
outline
–
cursor
–
Voice style sheet
volume
–
speak
–
pause-before
–
pause-after
–
pause
–
cue-before
–
cue-after
–
cue
–
play-during
–
azimuth
–
elevation
–
speech-rate
–
voice-family
–
pitch
–
pitch-range
–
stress
–
richness
–
speak-punctuation
–
peak-numeral
–
18
© ABNT 2008 - Todos los derechos reservados
ABNT NBR 15606-5:2008
Tabla 3 (continuación)
Propiedad
Extended property
clut
color-index
background-color-index
border-color-index
border-top-color-index
border-right-color-index
border-bottom-color-index
border-left-color-index
outline-color-index
resolution
display-aspect-ratio
grayscale-color-index
nav-index
nav-up
nav-down
nav-left
nav-right
used-key-list
Condición de la propiedad
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
Las siguientes restricciones se deberán aplicar obligatoriamente a las propiedades de exhibición:

Solamente elementos de bloque se pueden aplicar para <p>, <div>, <body>, <input> y <object>;

solamente valores definidos en el mismo elemento HTML se pueden aplicar para <br>, <a> y <span>.
Además de ello, las siguientes restricciones se deberán aplicar obligatoriamente a las propiedades de posición:

solamente valores absolutos se pueden aplicar para <p>, <div>, <input> y <object>;

solamente valores estáticos se pueden aplicar para <br>, <span> y <a>.
Los selectores CSS que deben ser soportados obligatoriamente por cualquier implementación son los siguientes:
 universal;
 type;
 class;
 id.
7 NCL - Lenguaje declarativo XML para especificación de presentaciones multimedia
interactivas
7.1 Lenguajes modulares y perfiles de lenguajes
7.1.1
Módulos NCL
El abordaje modular ha sido utilizado en varios lenguajes recomendados por el W3C.
Módulos son colecciones de elementos, atributos y valores de atributos XML semánticamente relacionados que
representan una unidad de funcionalidad. Módulos se definen en conjuntos coherentes. Esa coherencia se
expresa por medio de la asociación de un mismo namespace a los elementos de esos módulos.
NOTA
Namespaces se discuten en Namespaces
© ABNT 2008 - Todos los derechos reservados
in XML:1999 .
19
ABNT NBR 15606-5:2008
Un perfil de lenguaje es una combinación de módulos. Los módulos son atómicos, es decir, no se pueden
subdividir cuando incluidos en un perfil de lenguaje. Además de ello, la especificación de un módulo puede incluir
un conjunto de requisitos para integración, con el cual los perfiles de lenguaje, que incluyen el módulo, deben ser
compatibles obligatoriamente.
NCL fue especificada de forma modular, permitiendo la combinación de sus módulos en perfiles de lenguaje. Cada
perfil puede agrupar un subconjunto de módulos NCL, permitiendo la creación de lenguajes orientados hacia las
necesidades específicas de los usuarios. Además de ello, los módulos y perfiles NCL se pueden combinar con
módulos definidos en otros lenguajes, permitiendo la incorporación de características de la NCL en esos lenguajes
y viceversa.
Normalmente, hay un perfil de lenguaje que incorpora casi todos los módulos asociados a un único namespace.
Ése es el caso del perfil Lenguaje NCL.
Otros perfiles de lenguaje se pueden especificar como subconjuntos de un perfil mayor o incorporar una
combinación de módulos asociados a diferentes namespaces. Ejemplos del primer caso son los perfiles TVD
Básico (perfil BDTV) y TVD Avanzado (perfil EDTV) de la NCL.
Subconjuntos de los módulos del perfil Lenguaje NCL utilizados en la definición de los perfiles TVD Básico y TVD
Avanzado se definen para ajustar el lenguaje a las características del ambiente de radiodifusión de televisión, con
sus varios dispositivos de presentación: Aparato de televisión, dispositivos móviles etc.
NOTA
Un abordaje análogo también se encuentra en otros lenguajes (SMIL 2.1 Specification:2005 y XHTML 1.0:2002).
El principal objetivo de la conformidad con perfiles de lenguaje es aumentar la interoperabilidad. Los módulos
obligatorios se definen de tal forma que cualquier documento, especificado de conformidad con un perfil de
lenguaje, da como resultado una presentación razonable cuando es presentado en un perfil distinto de aquél para
el cual fue especificado. El formateador de documentos, soportando el conjunto de módulos obligatorios, ignoraría
todos los otros elementos y atributos desconocidos.
NOTA
Renderizador de documentos, agente del usuario y exhibidor son otros nombres atribuidos al formateador de
documentos.
El perfil BDTV es el perfil mínimo exigido para dispositivos portátiles. En forma alternativa, se puede usar el perfil
EDTV.
La versión NCL 3.0 revisa las funcionalidades contenidas en la NCL 2.3 (NCL Main Profile: 2005) y se divide
en 15 áreas funcionales, que se subdividen nuevamente en módulos. A partir de las 15 áreas funcionales, 14 se
utilizan para definir los perfiles TVD Avanzado y TVD Básico. Dos áreas funcionales tienen módulos con la misma
semántica definida por SMIL 2.0. Las 14 áreas funcionales utilizadas y sus módulos correspondientes son:
1)
Structure
Módulo Structure
2)
Layout
Módulo Layout
3)
Components
Módulo Media
Módulo Context
4)
20
Interfaces
© ABNT 2008 - Todos los derechos reservados
ABNT NBR 15606-5:2008
Módulo MediaContentAnchor
Módulo CompositeNodeInterface
Módulo PropertyAnchor
Módulo SwitchInterface
5)
Presentation Specification
Módulo Descriptor
6)
Linking
Módulo Linking
7)
Connectors
Módulo ConnectorCommonPart
Módulo ConnectorAssessmentExpression
Módulo ConnectorCausalExpression
Módulo CausalConnector
Módulo CausalConnectorFunctionality
Módulo ConnectorBase
8)
Presentation Control
Módulo TestRule
Módulo TestRuleUse
Módulo ContentControl
Módulo DescriptorControl
9)
Timing
Módulo Timing
10)
Reuse
Módulo Import
Módulo EntityReuse
Módulo ExtendedEntityReuse
11)
Navigational Key
Módulo KeyNavigation
12)
Animation
Módulo Animation
13) Transition Effects
Módulo TransitionBase
Módulo Transition
14) Meta-Information”
Módulo Metainformation
© ABNT 2008 - Todos los derechos reservados
21
ABNT NBR 15606-5:2008
7.1.2
Identificadores para módulos y perfiles de lenguaje de la NCL 3.0
Se recomienda que cada perfil NCL declare explícitamente el URI del namespace que será usado para identificarlo.
Los documentos creados en perfiles de lenguaje que incluyen el módulo Structure de NCL se pueden asociar con
el tipo MIME “application/x-ncl+xml”. Los documentos que utilizan el tipo MIME “application/x-ncl+xml” deben
obligatoriamente estar de conformidad con el lenguaje hospedero.
Los identificadores de namespace XML para el conjunto completo de módulos, elementos y atributos NCL 3.0
están contenidos en el siguiente namespace: http://www.ncl.org.br/NCL3.0/
Cada módulo NCL tiene un identificador único asociado a él. Los identificadores de los módulos NCL 3.0 deben
estar de acuerdo obligatoriamente con la Tabla 4.
Los módulos también pueden ser identificados colectivamente. Las siguientes colecciones de módulos se definen:
 módulos utilizados por el perfil Lenguaje NCL 3.0: http://www.ncl.org.br/NCL3.0/LanguageProfile
 módulos utilizados por el perfil Conector Causal NCL 3.0:
http://www.ncl.org.br/NCL3.0/CausalConnectorProfile
 módulos utilizados por el perfil DTV Avanzado NCL 3.0: http://www.ncl.org.br/NCL3.0/EDTVProfile
 módulos utilizados por el perfil DTV Básico NCL 3.0: http://www.ncl.org.br/NCL3.0/BDTVProfile
22
© ABNT 2008 - Todos los derechos reservados
ABNT NBR 15606-5:2008
Tabla 4 — Identificadores de los módulos de NCL 3.0
Módulos
Identificadores
Animation
http://www.ncl.org.br/NCL3.0/Animation
CompositeNodeInterface
http://www.ncl.org.br/NCL3.0/CompositeNodeInterface
CausalConnector
http://www.ncl.org.br/NCL3.0/CausalConnector
CausalConnectorFunctionality
http://www.ncl.org.br/NCL3.0/CausalConnectorFunctionality
ConnectorCausalExpression
http://www.ncl.org.br/NCL3.0/ConnectorCausalExpression
ConnectorAssessmentExpression
http://www.ncl.org.br/NCL3.0/ConnectorAssessmentExpression
ConnectorBase
http://www.ncl.org.br/NCL3.0/ConnectorBase
ConnectorCommonPart
http://www.ncl.org.br/NCL3.0/ConnectorCommonPart
ContentControl
http://www.ncl.org.br/NCL3.0/ContentContro
Descargar