De STBs de telespectador único para salas de estar multiusuário
Limitação do Ginga-NCL Legado (TV 2.0 / 2.5)
system (system.language, system.caption).Padronização
Novos Elementos XML
<userBase>: Contêiner para definições de perfis de usuários ativos.<userProfile>: Representa perfis de telespectadores; suporta consultas JSON externas via src.<settings user="...">: Vincula atributos de perfil de usuário específicos a propriedades NCL.gender, age) para conduzir a apresentação.
NCL com links básicos (video.ncl)

NCL com grade de vídeos (video_grid.ncl)

NCL embutido em NCL (emb_ncl.ncl)

NCL com navegação de foco e seleção (focus_nav.ncl)

NCL com desenho em tela Lua e teclas (lua_canvas.ncl)

HTML com CCWS /current-service/ (current_service.html)

NCL com documento HTML embutido (emb_html.ncl)

NCL com troca de perfil multiusuário (multiuser_profile/main.ncl)

Atualiza automaticamente propriedades <media> do tipo Settings para o usuário
<media id="uSettings" type="application/x-ncl-user-settings" user="currentUser">
<property name="id"/>
<property name="name"/>
<property name="gender"/>
<property name="age"/>
</media>
<link xconnector="onBeginOrAttributionSet">
<bind role="onBegin" component="mVideo"/>
<bind role="onEndAttribution" component="uSettings" interface="id"/>
<bind role="get1" component="uSettings" interface="id"/>
<bind role="get2" component="uSettings" interface="name"/>
<bind role="get3" component="uSettings" interface="gender"/>
<bind role="get4" component="uSettings" interface="age"/>
<bind role="set" component="mUserLua" interface="userId">
<bindParam name="var" value="$get1"/>
</bind>
<bind role="set" component="mUserLua" interface="userName">
<bindParam name="var" value="$get2"/>
</bind>
<bind role="set" component="mUserLua" interface="userGender">
<bindParam name="var" value="$get3"/>
</bind>
<bind role="set" component="mUserLua" interface="userAge">
<bindParam name="var" value="$get4"/>
</bind>
</link>

adult_query.json).<userBase>
<userProfile id="pAdult" src="adult_query.json" max="1"/>
</userBase>
...
<media id="uSettings" type="application/x-ncl-user-settings" user="currentUser">
<property name="id"/>
<property name="name"/>
<property name="gender"/>
<property name="age"/>
</media>
<media id="uAdult" type="application/x-ncl-user-settings" user="pAdult">
<property name="gender"/>
</media>
Adaptação Personalizada de Conteúdo: exibe o anúncio geral (ad_general.png) sem usuário adulto masculino ativo, ou o anúncio direcionado (ad_male.png) quando ativo.

(a) Sem usuário adulto masculino (anúncio geral)

(b) Com usuário adulto masculino (anúncio direcionado)

<compoundCondition> e <assessmentStatement> para cada teste.<link> para apresentação condicional.<connectorBase>
<causalConnector id="onBeginTestVarStart">
<compoundCondition operator="and">
<simpleCondition role="onBegin"/>
<assessmentStatement comparator="eq">
<attributeAssessment role="var" attributeType="nodeProperty" eventType="attribution"/>
<valueAssessment value="$value"/>
</assessmentStatement>
</compoundCondition>
<simpleAction role="start"/>
</causalConnector>
</connectorBase>
Estendendo Regras Declarativas Nativas do NCL
O NCL suporta nativamente <switch> e <rule> para adaptação de conteúdo.
Proposta: Adicionar o atributo user aos elementos <rule>:
<rule id="rAdultMale" user="pAdult" var="gender" comparator="eq" value="male"/>
Seleção Declarativa via <switch>
<switch>.Contribuições Principais:
gingaf com resolução dinâmica de perfis e vinculação reativa de propriedades.user para o elemento <rule>, permitindo apresentação adaptativa e concisa via <switch>.Validação: Casos de testes automatizados e validação em cenários de aplicações multiusuário.
Repositório: https://github.com/ginga-org-br/gingaf
Sobre o Ginga: https://ginga.org.br
Contato: a.guedes@reading.ac.uk | danielmoraes@telemidia.puc-rio.br
