{"id":243,"date":"2018-10-25T18:35:50","date_gmt":"2018-10-25T18:35:50","guid":{"rendered":"http:\/\/eic.cefet-rj.br\/~jsantos\/?page_id=243"},"modified":"2018-10-25T18:39:16","modified_gmt":"2018-10-25T18:39:16","slug":"linguagem-xtemplate-3-0","status":"publish","type":"page","link":"https:\/\/eic.cefet-rj.br\/~jsantos\/linguagem-xtemplate-3-0\/","title":{"rendered":"Linguagem XTemplate 3.0"},"content":{"rendered":"<h2>Introdu\u00e7\u00e3o<\/h2>\n<p>A linguagem XTemplate torna poss\u00edvel a especifica\u00e7\u00e3o de componentes e rela\u00e7\u00f5es gen\u00e9ricas que ser\u00e3o usadas em uma composi\u00e7\u00e3o atrav\u00e9s de um template de composi\u00e7\u00e3o. Dessa forma o usu\u00e1rio final precisa apenas apresentar as m\u00eddias que ser\u00e3o usadas na composi\u00e7\u00e3o ficando o processador de templates respons\u00e1vel por criar as rela\u00e7\u00f5es especificadas no template.<\/p>\n<h2>Defini\u00e7\u00f5es<\/h2>\n<h3>Composi\u00e7\u00e3o<\/h3>\n<p>Elemento hiperm\u00eddia cuja funcionalidade \u00e9 conter outros elementos, podendo ser outras composi\u00e7\u00f5es ou n\u00f3s de m\u00eddia. Em NCL \u00e9 representado pelo elemento <em>context<\/em>.<\/p>\n<h3>Template<\/h3>\n<p>Documento escrito com a linguagem XTemplate, vers\u00e3o 3.0.<\/p>\n<h3>NCL<\/h3>\n<p>Documento NCL que usa um template de composi\u00e7\u00e3o. Este deve possuir em seu cabe\u00e7alho o elemento <em>templateBase<\/em> definido ao menos um template e pelo menos uma composi\u00e7\u00e3o referenciando o template definido.<\/p>\n<h3>Processador<\/h3>\n<p>Software que transforma um documento ncl usando templates em um documento completo.<\/p>\n<h2>A Linguagem<\/h2>\n<p>Uma composi\u00e7\u00e3o \u00e9 aqui representada pelo n\u00f3 de contexto (elemento <em>context<\/em>) da linguagem NCL (<em>Nested Context Language<\/em>). Vale lembrar que na especifica\u00e7\u00e3o da linguagem NCL o corpo (elemento <em>body<\/em>) de um documento NCL \u00e9 considerado tamb\u00e9m um n\u00f3 de contexto, logo um template pode tamb\u00e9m ser utilizado pelo corpo do ncl.<\/p>\n<p>Um <strong>template<\/strong> \u00e9 definido pelo elemento <em>xtemplate<\/em>, esse elemento possui como atributos:<\/p>\n<ol>\n<li><strong>id<\/strong> &#8211; define um identificador para o template;<\/li>\n<li><em>name<\/em> &#8211; define um nome para o template;<\/li>\n<li><em>description<\/em> &#8211; descreve o template.<\/li>\n<\/ol>\n<p>Um template \u00e9 definido em quatro partes, s\u00e3o elas, o cabe\u00e7alho (elemento <em>head<\/em>), o vocabul\u00e1rio (elemento <em>vocabulary<\/em>), o corpo (elemento <em>body<\/em>) e as restri\u00e7\u00f5es (elemento <em>constraints<\/em>).<\/p>\n<h2>Cabe\u00e7alho<\/h2>\n<p>O cabe\u00e7alho (elemento <em>head<\/em>) do template, permite especificar bases de conectores e defini\u00e7\u00f5es de apresenta\u00e7\u00e3o (bases de regi\u00f5es, descritores e regras) que ser\u00e3o importadas pelo ncl. O cabe\u00e7alho permite tamb\u00e9m que um template estenda as defini\u00e7\u00f5es especificadas em um outro template.<\/p>\n<h3>Importando Bases<\/h3>\n<p>A especifica\u00e7\u00e3o das bases de conectores a serem importadas \u00e9 feita atrav\u00e9s do elemento <em>connectorBase<\/em>, este possui como filhos elementos <em>importBase<\/em>.<code><br \/>\n&lt;connectorBase&gt;<br \/>\n&lt;importBase alias=\"connBase\" documentURI=\"connectorbase.ncl\"\/&gt;<br \/>\n&lt;\/connectorBase&gt;<br \/>\n<\/code><\/p>\n<p>A especifica\u00e7\u00e3o das defini\u00e7\u00f5es de apresenta\u00e7\u00e3o (bases de regi\u00f5es, descritores e regras) a serem importadas \u00e9 feita atrav\u00e9s do elemento <em>descriptorBase<\/em>, possuindo este elementos <em>importBase<\/em> como filhos.<code><br \/>\n&lt;descriptorBase&gt;<br \/>\n&lt;importBase alias=\"presBase\" documentURI=\"descriptorbase.ncl\"\/&gt;<br \/>\n&lt;\/descriptorBase&gt;<br \/>\n<\/code><\/p>\n<p>A importa\u00e7\u00e3o \u00e9 feita desta forma pois em NCL, um documento <em>A<\/em> que importe a base de descritores de <em>B<\/em>, importa tamb\u00e9m as bases de regi\u00f5es e regras de <em>B<\/em>, caso <em>B<\/em> as tenha definido. Logo a linguagem XTemplate tira proveito dessa funcionalidade de forma a definir como o <strong>ncl<\/strong> dever\u00e1 apresentar as m\u00eddias nele contidas.<\/p>\n<p>O elemento <em>importBase<\/em> define uma base que ser\u00e1 importada pelo <strong>ncl<\/strong>. Este possui os seguintes atributos:<\/p>\n<ol>\n<li><strong>alias<\/strong> &#8211; define um apelido pelo qual a base ser\u00e1 referenciada;<\/li>\n<li><strong>documentURI<\/strong> &#8211; define a localiza\u00e7\u00e3o da base.<\/li>\n<\/ol>\n<h3>Estendendo Templates<\/h3>\n<p>Um <strong>template<\/strong> pode estender um ou mais <strong>templates<\/strong>. Ao fazer isso, o <strong>template<\/strong> herdar\u00e1 todas as defini\u00e7\u00f5es presentes nos <strong>templates<\/strong> estendidos, a \u00fanica exce\u00e7\u00e3o s\u00e3o as <strong>constraints<\/strong> que poder\u00e3o ser sobrescritas para evitar inconsist\u00eancias. Essa extens\u00e3o \u00e9 feita no cabe\u00e7alho atrav\u00e9s do elemento <em>extends<\/em>.<\/p>\n<p>O elemento <em>extends<\/em> possui os seguintes atributos:<\/p>\n<ol>\n<li><strong>xtemplate<\/strong> &#8211; define a localiza\u00e7\u00e3o do <strong>template<\/strong> a ser estendido.<\/li>\n<li><em>overwriteConstraints<\/em> &#8211; define se as constraints ser\u00e3o ou n\u00e3o sobrescritas<\/li>\n<\/ol>\n<p>Vale lembrar que se um template <em>A<\/em> estende um template <em>B<\/em>, as restri\u00e7\u00f5es, de <em>B<\/em>, caso estendidas, ainda sim dever\u00e3o ser satisfeitas. Logo \u00e9 necess\u00e1rio um maior cuidado para n\u00e3o se definir um <strong>template<\/strong> que seja contr\u00e1rio a essas restri\u00e7\u00f5es.<\/p>\n<h2>Vocabul\u00e1rio<\/h2>\n<p>O vocabul\u00e1rio (elemento <em>vocabulary<\/em>) permite especificar quem estar\u00e1 presente na <strong>composi\u00e7\u00e3o<\/strong>, al\u00e9m dos tipos de rela\u00e7\u00f5es poss\u00edveis. Para isso o vocabul\u00e1rio define dois elementos, <em>component<\/em> e <em>connector<\/em>.<\/p>\n<h3>Componentes<\/h3>\n<p>Os componentes (elemento <em>component<\/em>) definir\u00e3o quem poder\u00e1, e em que quantidade, estar presente na <strong>composi\u00e7\u00e3o<\/strong>. O elemento <em>component<\/em> possui os seguintes atributos:<\/p>\n<ol>\n<li><strong>xlabel<\/strong> &#8211; define um r\u00f3tulo pelo qual o componente ser\u00e1 referenciado;<\/li>\n<li><em>xtype<\/em> &#8211; define o tipo do componente. Este tipo \u00e9 especificado em MIME, podendo assumir tamb\u00e9m os valores <em>context<\/em>, <em>switch<\/em> caso o componente n\u00e3o seja um n\u00f3 de m\u00eddia. Este atributo pode tamb\u00e9m assumir os tipos MIME gen\u00e9ricos <em>audio<\/em>, <em>text<\/em>, <em>image<\/em>, <em>video<\/em> quando uma maior especificidade n\u00e3o seja necess\u00e1ria. No caso deste atributo n\u00e3o estar presente, qualquer elemento definido na <strong>composi\u00e7\u00e3o<\/strong> ser\u00e1 aceito, ficando o <strong>processador<\/strong> livre de conferir os tipos dos elementos;<\/li>\n<li><em>descriptor<\/em> &#8211; define o descritor usado pelo componente, deve ser especificada tamb\u00e9m a base sendo utilizada no formato <em>base#descritor<\/em>;<\/li>\n<li><em>minOccurs<\/em> &#8211; define um n\u00famero m\u00ednimo de vezes que o componente estar\u00e1 presente na composi\u00e7\u00e3o. O valor padr\u00e3o assumido no processamento \u00e9 0;<\/li>\n<li><em>maxOccurs<\/em> &#8211; define o n\u00famero m\u00e1ximo de vezes que o componente estar\u00e1 presente. Este pode ser um n\u00famero ou a string <em>unbounded<\/em> caso o valor seja ilimitado. O valor padr\u00e3o assumido no processamento \u00e9 ilimitado.<\/li>\n<\/ol>\n<p>Um componente pode ter outro componente como filho, caso esteja representando um contexto ou um <em>switch<\/em>. Um componente pode conter tamb\u00e9m\u00a0 o elemento <em>port<\/em>, caso seja necess\u00e1rio representar \u00e2ncoras ou n\u00f3s de propriedade do componente.<\/p>\n<p>O elemento <em>port<\/em> possui os seguintes atributos:<\/p>\n<ol>\n<li><strong>xlabel<\/strong> &#8211; define um r\u00f3tulo para o port;<\/li>\n<li><em>minOccurs<\/em> &#8211; n\u00famero m\u00ednimo de ocorr\u00eancias;<\/li>\n<li><em>maxOccurs<\/em> &#8211; n\u00famero m\u00e1ximo.<\/li>\n<\/ol>\n<p><code><br \/>\n&lt;component xlabel=\"subtitleSWITCH\" type=\"switch\"&gt;<br \/>\n&lt;component xlabel=\"subtitlePT\" type=\"text\/html\"\u00a0descriptor=\"presBase#d_legenda\" maxOccurs=\"1\"\/&gt;<br \/>\n&lt;component xlabel=\"subtitleEN\" type=\"text\/html\"\u00a0descriptor=\"presBase#d_legenda\" maxOccurs=\"1\"\/&gt;<br \/>\n&lt;\/component&gt;<br \/>\n<\/code><\/p>\n<p>O exemplo acima mostra a especifica\u00e7\u00e3o de um elemento <em>switch<\/em>. Vale ressaltar que s\u00f3 s\u00e3o definidor os elementos filhos do switch (legendas). As regras a serem utilizadas ficam especificadas no pr\u00f3prio <em>switch<\/em> em sua especifica\u00e7\u00e3o no corpo do template como ser\u00e1 visto posteriormente.<\/p>\n<h3>Conectores<\/h3>\n<p>Os conectores definem os tipos de rela\u00e7\u00f5es poss\u00edveis na <strong>composi\u00e7\u00e3o<\/strong>. O elemento cont\u00e9m os seguintes atributos:<\/p>\n<ol>\n<li><strong>src<\/strong> &#8211; localiza\u00e7\u00e3o do conector dentro de uma base de conectores (<em>base#conector<\/em>);<\/li>\n<li><strong>xlabel<\/strong> &#8211; define um r\u00f3tulo para o conector;<\/li>\n<li><em>minOccurs, maxOccurs<\/em> &#8211; igual aos anteriores.<\/li>\n<\/ol>\n<p><code><br \/>\n&lt;connector src=\"connBase#onBeginStartN\" xlabel=\"L\" maxOccurs=\"unbounded\"\/&gt;<br \/>\n<\/code><\/p>\n<p>O exemplo acima mostra a especifica\u00e7\u00e3o do conector <em>onBeginStartN<\/em>.<\/p>\n<h2>Corpo<\/h2>\n<p>O corpo (elemento <em>body<\/em>) \u00e9 respons\u00e1vel por declarar pontos de interface (portas) da composi\u00e7\u00e3o que usa o <strong>template<\/strong>; inst\u00e2ncias de componentes do vocabul\u00e1rio e seus pontos de interface; especifica\u00e7\u00e3o de relacionamentos entre os componentes usando conectores e de inclus\u00e3o, referenciando os tipos de componentes e conectores declarados no vocabul\u00e1rio ou inst\u00e2ncias de componentes. \u00c9 poss\u00edvel a utiliza\u00e7\u00e3o de instru\u00e7\u00f5es para declara\u00e7\u00e3o de vari\u00e1veis (elemento <em>variable<\/em>) e instru\u00e7\u00f5es para a realiza\u00e7\u00e3o de repeti\u00e7\u00f5es (elemento <em>for-each<\/em>) especificadas pelo padr\u00e3o XSLT na especifica\u00e7\u00e3o de pontos de interface da composi\u00e7\u00e3o, dos componentes, relacionamentos e elementos de controle de conte\u00fado (<em>switch<\/em>).<\/p>\n<p>Os elementos <em>port<\/em>, <em>media<\/em>, <em>switch<\/em>, <em>context<\/em> e <em>link<\/em> apresentados abaixo, s\u00e3o definidos como em NCL. Aqui ser\u00e3o apresentados apenas os diferentes usos dos atributos existentes, al\u00e9m dos atributos adicionados.<\/p>\n<h3>Port<\/h3>\n<p>O elemento <em>port<\/em> \u00e9 usado para a inser\u00e7\u00e3o de portas dentro da <strong>composi\u00e7\u00e3o<\/strong>. Em sua defini\u00e7\u00e3o, podem ser usadas duas abordagens.<\/p>\n<p>Na identifica\u00e7\u00e3o do n\u00f3 relacionado \u00e0 porta, poder\u00e1 ser usado o atributo <em>component<\/em> juntamente com o atributo <em>interface<\/em>, por\u00e9m estes n\u00e3o conter\u00e3o os identificadores do n\u00f3 relacionado, e sim os r\u00f3tulos dos mesmos. Alternativamente, pode-se usar o atributo <em>select<\/em> para se identificar o n\u00f3 relacionado atrav\u00e9s de uma express\u00e3o XPath.<\/p>\n<p>Caso seja necess\u00e1rio (uso da porta em uma rela\u00e7\u00e3o criada por outro template, ou restri\u00e7\u00f5es) uma porta poder\u00e1 definir um r\u00f3tulo atrav\u00e9s do atributo <em>xlabel<\/em>.<\/p>\n<p><em>RESUMINDO: atributos adicionados ao elemento port: xlabel e select.<\/em><\/p>\n<h3>Media<\/h3>\n<p>O elemento <em>media<\/em> define uma inst\u00e2ncia do vocabul\u00e1rio, permitindo que o <strong>template<\/strong> insira uma m\u00eddia na <strong>composi\u00e7\u00e3o<\/strong>. Em sua defini\u00e7\u00e3o \u00e9 usado o atributo <em>xlabel<\/em>, de forma a identificar a que componente este elemento est\u00e1 relacionado. Os elementos filhos de <em>media<\/em>, <em>area<\/em> e <em>property<\/em> podem tamb\u00e9m conter o atributo <em>xlabel<\/em>.<\/p>\n<p>O elemento <strong>property<\/strong> cont\u00e9m um atributo adicional chamado <strong>select<\/strong>, este cont\u00e9m uma express\u00e3o XPath que ser\u00e1 avaliada durante o processamento e seu valor colocado em <strong>value<\/strong>.<br \/>\n<em>RESUMINDO: atributo adicionado ao elemento media: xlabel.<\/em><\/p>\n<h3>Switch<\/h3>\n<p>O elemento <em>switch<\/em> define uma inst\u00e2ncia do vocabul\u00e1rio, permitindo que o <strong>template<\/strong> insira um <em>switch<\/em> na <strong>composi\u00e7\u00e3o<\/strong>. Em sua defini\u00e7\u00e3o foi adicionado o atributo <em>xlabel<\/em> de forma a identificar a que componente do vocabul\u00e1rio o <em>switch<\/em> est\u00e1 relacionado.<\/p>\n<p>O <em>switch<\/em> define de forma direta, as regras que ser\u00e3o usadas atrav\u00e9s do elemento <em>bindRule<\/em>. S\u00e1 poder\u00e3o ser definidos um n\u00famero de <em>bindRule<\/em> igual ao n\u00famero de filhos (do elemento <em>component<\/em>) definido no vocabul\u00e1rio. O exemplo abaixo demonstra a utiliza\u00e7\u00e3o do <em>switch<\/em>.<code><br \/>\n&lt;switch id=\"subtitle\" xlabel=\"subtitleSWITCH\"&gt;<br \/>\n&lt;bindRule rule=\"presBase#rPT\" constituent=\"subtitlePT\"\u00a0select=\"child::media[@xlabel='subtitlePT'][position() = 1]\"\/&gt;<br \/>\n&lt;bindRule rule=\"presBase#rEN\" constituent=\"subtitleEN\"\u00a0select=\"child::media[@xlabel='subtitleEN'][position() = 1]\"\/&gt;<br \/>\n&lt;\/switch&gt;<br \/>\n<\/code><\/p>\n<p>Pode-se notar que o elemento <em>bindRule<\/em> define o componente ao qual se relaciona pelo atributo <em>constituent<\/em>, referenciando o r\u00f3tulo apropriado. O switch pode ent\u00e3o definir dentro dele os elementos que este usar\u00e1 (estes contendo o r\u00f3tulo apropriado) ou especificar uma express\u00e3o XPath atrav\u00e9s de seu atributo <em>select<\/em>.<\/p>\n<p><em>RESUMINDO: o switch referencia um componente do vocabul\u00e1rio pelo atributo xlabel, enquanto seus filhos bindRule referenciam o filho relacionado \u00e0 regra pelo atributo constituent. O switch pode definir os elementos filhos diretamente ou uma express\u00e3o XPath que os localiza dentro da composi\u00e7\u00e3o.<\/em><\/p>\n<h3>Context<\/h3>\n<p>O elemento <em>context<\/em> define uma inst\u00e2ncia do vocabul\u00e1rio, permitindo que o <strong>template<\/strong> insira um contexto na <strong>composi\u00e7\u00e3o<\/strong>. O contexto <strong>deve<\/strong> definir todos os elementos filhos que este possuir\u00e1 (portas, m\u00eddias e etc.) identificando-se com um r\u00f3tulo j\u00e1 especificado no vocabul\u00e1rio atrav\u00e9s do seu atributo <em>xlabel<\/em>. Caso necess\u00e1rio seus elementos filhos podem tamb\u00e9m especificar um r\u00f3tulo.<\/p>\n<p><em>RESUMINDO: o contexto dever\u00e1 ser definido como ser\u00e1 inserido. Este deve se identificar usando um r\u00f3tulo e caso necess\u00e1rio identificar seus elementos filhos.<\/em><\/p>\n<p><strong>Obs.: o contexto n\u00e3o poder\u00e1 identificar um template, pois este n\u00e3o ser\u00e1 processado.<\/strong><\/p>\n<h3>Link<\/h3>\n<p>O elemento <em>link<\/em> define um rela\u00e7\u00e3o a ser usada na <strong>composi\u00e7\u00e3o<\/strong>. Este deve identificar o conector a ser usado atrav\u00e9s do seu atributo <em>xtype<\/em> e o r\u00f3tulo do conector. O atributo <em>xconnector<\/em> fica ent\u00e3o inutilizado.<\/p>\n<p>Os <em>binds<\/em> do <em>link<\/em> identificar\u00e3o os pap\u00e9is (assim como em NCL) e o(s) elemento(s) relacionados ao <em>bind<\/em>. A identifica\u00e7\u00e3o do(s) elemento(s) \u00e9 feita atrav\u00e9s do uso de uma express\u00e3o XPath no atributo <em>select<\/em>.<\/p>\n<p>O exemplo abaixo demonstra a utiliza\u00e7\u00e3o do <em>link<\/em>.<code><br \/>\n&lt;link xtype=\"L\"&gt;<br \/>\n&lt;bind role=\"onBegin\" select=\"child::media[@xlabel='audio']\"\/&gt;<br \/>\n&lt;bind role=\"start\" select=\"child::media[@xlabel='logo']\"\/&gt;<br \/>\n&lt;\/link&gt;<br \/>\n<\/code><\/p>\n<p>Os elementos <strong>linkParam<\/strong> e <strong>bindParam<\/strong> possuem um atributo adicional chamado <strong>select<\/strong>, este cont\u00e9m uma express\u00e3o XPath que ser\u00e1 avaliada durante o processamento e seu valor colocado em <strong>value<\/strong>.<\/p>\n<p><em>RESUMINDO: o link identificar\u00e1 o conector pelo atributo xtype. Seus filhos (bind) identificam os elementos participantes pelo atributo select.<\/em><\/p>\n<h3>variable e for-each<\/h3>\n<p>Os elementos <em>variable<\/em> e <em>for-each<\/em> s\u00e3o usados de forma conjunta para ajudar na especifica\u00e7\u00e3o de m\u00faltiplas instancias do vocabul\u00e1rio. O elemento <em>variable<\/em> cont\u00e9m somente dois atributos, <em>name<\/em> e <em>select<\/em>. Este elemento \u00e9 usado para declara uma vari\u00e1vel, o atributo <em>select<\/em> identificando ent\u00e3o o valor inicial da vari\u00e1vel. Quando dentro do <em>for-each<\/em> o elemento <em>variable<\/em> define em seu atributo <em>select<\/em> o passo da vari\u00e1vel. O conte\u00fado da vari\u00e1vel pode ser acessado usando <span class=\"style_8\">$nomedavari\u00e1vel<\/span>.<\/p>\n<p>O elemento <em>for-each<\/em> \u00e9 utilizado para a cria\u00e7\u00e3o de itera\u00e7\u00f5es. O n\u00famero total de itera\u00e7\u00f5es \u00e9 dado pelo n\u00famero de elementos &#8220;encontrados&#8221; pela express\u00e3o XPath contida em seu atributo select. Estes elementos podem ser referenciados em uma express\u00e3o usando-se o valor <span class=\"style_9\">current()<\/span>. Dentro do <em>for-each<\/em> podem ser definidos os elementos <em>port<\/em>, <em>link<\/em>, <em>area<\/em>, <em>property<\/em> e <em>switch<\/em>. Os elementos <em>port<\/em>, <em>link<\/em> e <em>switch<\/em> definem inst\u00e2ncias do vocabul\u00e1rio utilizando ou n\u00e3o os elementos &#8220;encontrados&#8221; pelo <em>for-each<\/em>. J\u00e1 <em>area<\/em> e <em>property<\/em> s\u00e3o inseridos nos elementos &#8220;encontrados&#8221;.<\/p>\n<p><em>RESUMINDO: o elemento variable cria e identifica o passo de uma vari\u00e1vel. O elemento for-each cria itera\u00e7\u00f5es no template permitindo a inser\u00e7\u00e3o de m\u00faltiplos componentes na composi\u00e7\u00e3o.<\/em><\/p>\n<h2>Restri\u00e7\u00f5es<\/h2>\n<p>As restri\u00e7\u00f5es (elemento <em>constraints<\/em>), s\u00e3o respons\u00e1veis pela defini\u00e7\u00e3o de restri\u00e7\u00f5es adicionais a serem aplicadas sobre os elementos do vocabul\u00e1rio. As restri\u00e7\u00f5es s\u00e3o definidas separadamente (elemento <em>constraint<\/em>) contendo uma express\u00e3o na linguagem XPath retornando um valor boleano (atributo <em>select<\/em>) e uma defini\u00e7\u00e3o (atributo <em>description<\/em>) que pode ser utilizada como mensagem de erro caso a restri\u00e7\u00e3o n\u00e3o seja satisfeita pela <strong>composi\u00e7\u00e3o<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o A linguagem XTemplate torna poss\u00edvel a especifica\u00e7\u00e3o de componentes e rela\u00e7\u00f5es gen\u00e9ricas que ser\u00e3o usadas em uma composi\u00e7\u00e3o atrav\u00e9s de um template de composi\u00e7\u00e3o. Dessa forma o usu\u00e1rio final precisa apenas apresentar as m\u00eddias que ser\u00e3o usadas na composi\u00e7\u00e3o ficando o processador de templates respons\u00e1vel por criar as rela\u00e7\u00f5es especificadas no template. Defini\u00e7\u00f5es Composi\u00e7\u00e3o &#8230; <a title=\"Linguagem XTemplate 3.0\" class=\"read-more\" href=\"https:\/\/eic.cefet-rj.br\/~jsantos\/linguagem-xtemplate-3-0\/\" aria-label=\"Read more about Linguagem XTemplate 3.0\">Ler mais<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-243","page","type-page","status-publish"],"_links":{"self":[{"href":"https:\/\/eic.cefet-rj.br\/~jsantos\/wp-json\/wp\/v2\/pages\/243","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eic.cefet-rj.br\/~jsantos\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/eic.cefet-rj.br\/~jsantos\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/eic.cefet-rj.br\/~jsantos\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eic.cefet-rj.br\/~jsantos\/wp-json\/wp\/v2\/comments?post=243"}],"version-history":[{"count":3,"href":"https:\/\/eic.cefet-rj.br\/~jsantos\/wp-json\/wp\/v2\/pages\/243\/revisions"}],"predecessor-version":[{"id":248,"href":"https:\/\/eic.cefet-rj.br\/~jsantos\/wp-json\/wp\/v2\/pages\/243\/revisions\/248"}],"wp:attachment":[{"href":"https:\/\/eic.cefet-rj.br\/~jsantos\/wp-json\/wp\/v2\/media?parent=243"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}