3.8. Sessões marcadas
Prev | Chapter 3. SGML Primer | Next

## 3.8. Sessões marcadas

O SGML fornece um mecanismo para indicar que uma parte particular do documento deve ser processada de uma forma especial. Estas partes são denominadas “sessões marcadas”.

Example 3.14. Estrutura de uma sessão marcada
<![ `Palavra-chave` [ Conteúdo da sessão marcada ]]>

Como você esperaria, sendo uma construção SGML, uma sessão marcada inicia com um `<!`.

O primeiro colchete começa a limitar a sessão marcada.

A `Palavra-chave` descreve como esta sessão marcada deve ser processada pelo interpretador.

O segundo colchete indica que o conteúdo da sessão marcada inicia aqui.

A sessão marcada é finalizada pelo fechamento dos dois colchetes e então retornando ao contexto do documento a partir do contexto SGML com o `>`.

### 3.8.1. Palavras-Chave de sessões marcadas

#### 3.8.1.1. `CDATA`, `RCDATA`

Estas palavras chave denotam o modelo do conteúdo das sessões marcadas, e permitem que você o altere a partir do padrão.

Quando um interpretador SGML esta processando um documento ele tenta seguir o que chamamos de “modelo de conteúdo”

Resumidamente, o modelo de conteúdo descreve que tipo de conteúdo o interpretador esta esperando encontrar, e o que fará com ele quando o encontrar.

Os dois modelos de conteúdo que você provavelmente irá achar mais úteis são o `CDATA` e o `RCDATA`.

O `CDATA` é para “Dados de Caracter”. Se o interpretador está neste modelo de conteúdo então ele está esperando encontrar caracteres, e apenas caracteres. Neste modelo os símbolos `<` e o `&` perdem o seu status especial, e serão tratados como caracteres ordinários.

O `RCDATA` é para “Referências de entidade e dados de caracter ”. Se o interpretador está neste modelo de conteúdo ele está esperando encontrar caracteres e entidades. O símbolo `<` perde o seu status especial, mas o `&` continuará sendo tratado como o inicio de uma entidade geral.

Isto é particularmente útil se você está incluindo algum texto literal o qual contém muitos caracteres `<` e `&`. Ao invés de atravessar o texto todo tendo que verificar se todos os `<` estão convertidos para um `&lt;` e todos os `&` estão convertidos para um `&amp;` pode ser mais simples marcar a sessão como contendo apenas `CDATA`. Quando o interpretador SGML encontrá-los ele irá ignorar os símbolos `<` e `&` embutidos no conteúdo.

### Note:

Quando você utiliza `CDATA` ou `RCDATA` nos exemplos de texto marcado em SGML, tenha em mente que o conteúdo do `CDATA` não é validado. Você tem que verificar o SGML incluso no texto utilizando algum outro meio. Você pode, por exemplo, escrever o exemplo em outro documento, validar o código de exemplo, e então colá-lo para o seu conteúdo `CDATA`.

Example 3.15. Utilizando uma sessão marcada como CDATA
<para>Aqui está um exemplo de como você incluiria algum texto que contenha muitos símbolos <literal><</literal> e <literal>></literal>. O texto de exemplo é um fragmento de HTML. O texto circunvizinho (<para> e <programlisting>) é do DocBook.</para> <programlisting> <![CDATA[>![RCDATA[ <p>Esta é uma amostra que apresenta alguns elementos de HTML. Uma vez que os símbolos de < e > são utilizados muitas vezes, é mais fácil dizer que o exemplo todo é uma sessão marcada do tipo CDATA, do que utilizar nomes de entidades para representar estes símbolos ao longo de todo o texto.</p> <ul> <li>Este é um item de lista</li> <li>Este é um segundo item de lista</li> <li>Este é um terceiro item de lista</li> </ul> <p>Este é o final do exemplo.</p>]]> ]]> </programlisting>

Se você examinar o fonte deste documento você irá ver que esta técnica foi utilizada por toda parte.

#### 3.8.1.2. `INCLUDE` and `IGNORE`

Se a palavra chave for `INCLUDE` então o conteúdo da sessão marcada será processado. Se a palavra chave for `IGNORE` então a sessão marcada será ignorada e não será processada. Ela não irá aparecer no output.

Example 3.16. Utilizando `INCLUDE` e `IGNORE` nas sessões marcadas
<![ INCLUDE [ Este texto será processado e incluído. ]]> <![ IGNORE [ Este texto não será processado nem incluído. ]]>

Por si só, isto não é muito útil. Se você desejar remover o texto do seu documento você pode cortá-lo fora, ou comentá-lo.

Torna-se mais útil quando você utilizar entidades de parâmetro para controlá-lo. Lembre-se que entidades de parâmetro só podem ser utilizadas em um contexto SGML, e que a palavra chave de uma sessão marcada é um contexto SGML.

Por exemplo, suponha que você produza uma cópia impressa e uma versão eletrônica de alguma documentação. Você pode desejar incluir na versão eletrônica algum conteúdo extra, o qual não deve aparecer na versão impressa.

Crie uma entidade de parâmetro, e configure seu valor para `INCLUDE`. Escreva seu documento, usando uma sessão marcada para delimitar o conteúdo que deve aparecer apenas na versão eletrônica. Nesta sessão marcada utilize a entidade de parâmetro no lugar da palavra chave.

Quando você desejar produzir uma cópia impressa do documento, altere o valor da entidade de parâmetro para `IGNORE` e reprocesse o documento.

Example 3.17. Utilizando uma entidade de parâmetro para controlar uma sessão marcada
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [ <!ENTITY % electronic.copy "INCLUDE"> ]]> ... <![ %electronic.copy [ Este conteúdo deve aparecer apenas na versão eletrônica do documento. ]]>

Quando for produzir uma versão impressa do documento, altere a definição da entidade para;

<!ENTITY % electronic.copy "IGNORE">

Ao reprocessar o documento, a sessão marcada que utilizar a entidade `%electronic.copy` como a sua palavra chave será ignorada.

### 3.8.2. Para você fazer…

1. Crie um novo arquivo chamado `section.xml`, o qual deve conter o seguinte conteúdo:

   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" [ <!ENTITY % text.output "INCLUDE"> ]> <html> <head> <title>Um exemplo utilizando uma sessão marcada.</title> </head> <body> <p>Este parágrafo <![CDATA[contêm muitos caracteres < (< < < < <) de forma que é mais simples utilizar uma sessão marcada do tipo CDATA.]]></p> <![ IGNORE [ <p>Este parágrafo definitivamente não será incluído no output.</p> ]]> <![ %text.output [ <p>Este parágrafo pode ou não aparecer no output.</p> <p>A sua ocorrência é controlada pela entidade de parâmetro %text.output .</p> ]]> </body> </html>

2. Normalize este arquivo utilizando o `osgmlnorm` e examine o resultado. Observe quais parágrafos apareceram, quais desapareceram e o que aconteceu com o conteúdo da sessão marcada como CDATA.

3. Altere a definição da entidade `text.output` de `INCLUDE` para `IGNORE`. Re-normalize o arquivo, e observe o resultado para ver o que foi alterado.

Prev | Up | Next
3.7. Utilizando entidades para incluir arquivos | Home | 3.9. Conclusão

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.