Todos os DTDs escritos em SGML compartilham certas características. Isto é uma dura surpresa, como a filosofia por de trás do SGML nos mostrará ser completamente inevitável. Uma das manifestações mais óbvias desta filosofia está no conteúdo e nos elementos.
A sua documentação (independente se é uma única página web ou um livro longo) é composta de conteúdo. Este conteúdo é então dividido (e de novo subdividido) em elementos. O propósito da adição de marcações é atribuir nome e identidade para os limites destes elementos de forma a possibilitar o processamento adicional.
Por exemplo, considere um livro típico. No nível mais alto, o livro por si só é um elemento. Este elemento “livro” (book) obviamente contém capítulos, os quais também podem ser considerados elementos em sua própria forma. Cada capítulo irá conter mais elementos, tais como parágrafos, citações, notas de rodapé, etc. Cada parágrafo pode conter elementos adicionais, identificando o conteúdo que era de discurso direto, ou o nome de um personagem da história.
Você pode preferir pensar nisto como uma “quebra” do conteúdo. No nível mais alto você tem um pedaço, o Livro. Olhando um pouco mais abaixo, você tem mais pedaços, os capítulos individuais. Estes estão divididos em pedaços ainda menores, os parágrafos, notas de rodapé, nomes de personagens, etc.
Observe que você pode fazer esta diferenciação entre os diferentes elementos do conteúdo sem recorrer a nenhum termo SGML. Na realidade é surpreendentemente fácil de usar. Você pode fazer isso utilizando uma caneta de marcação e uma cópia impressa do livro, utilizando diferentes cores para indicar os diferentes pedaços do conteúdo.
Naturalmente, nós não possuímos uma caneta eletrônica de marcação, assim nós necessitamos de alguma outra maneira de indicar a que elemento cada peça de conteúdo pertence. Nas linguagens escritas em SGML (HTML, DocBook, etc) isto é feito através do uso de tags.
Uma tag é utilizada para identificar onde um elemento particular começa e onde ele termina. A tag não é uma parte própria do elemento . Porque cada DTD foi normalmente escrito para marcar um tipo específico de informação, cada um deles reconhecerá diferentes elementos, e terá nomes diferentes para cada tag.
Para um elemento chamado element-name
a tag de início normalmente irá
se parecer com
. E
a tag correspondente de fechamento para este elemento seria
element-name
/
.
element-name
O HTML possui um elemento para indicar que o
conteúdo envolvido por este elemento é um
parágrafo, chamado p
. Este
elemento possui ambas as tags de início e de fim.
Nem todos os elementos requerem uma tag de finalização. Alguns elementos não possuem conteúdo. Por exemplo, em HTML você pode indicar que deseja que uma linha horizontal apareça no documento. Obviamente, esta linha não possui conteúdo, assim apenas a tag de inicio é requerida para este elemento.
O HTML possui um elemento para indicar uma linha
horizontal, chamado hr
. Este elemento
não contém nenhum conteúdo, assim ele
possui apenas uma tag de inicio.
Se isto não é óbvio agora, os elementos podem conter outros elementos. No exemplo anterior do livro, o elemento livro continha todos os elementos capítulos, os quais por sua vez continham todos os elementos parágrafos, etc.
em
O DTD irá especificar as regras detalhando quais elementos podem conter outros elementos, e o que exatamente eles podem conter.
As pessoas sempre confundem os termos tags e elementos, e utilizam os termos como se eles fossem intercambiáveis. Eles não são.
Um elemento é uma parte conceitual do seu documento. Um elemento possui um inicio e fim determinados. As tags marcam onde os elementos começam e terminam.
Quando este documento (ou qualquer pessoa que
conheça SGML) se refere a “tag
p
” estamos nos referindo
literalmente ao texto de três caracteres
<
, p
e
>
. Mas a frase “o elemento
p
” se refere ao elemento inteiro.
Esta distinção é muito sutil. Mas mantenha ela em mente
Os elementos podem ter atributos. Um atributo possui um nome e um valor, e é utilizado para adicionar informações extras ao elemento. Esta pode ser a informação a qual indica como o conteúdo deve ser renderizado, ou pode ser algo que identifique a ocorrência única do elemento, ou pode ser qualquer outra coisa.
O atributo de um elemento é sempre escrito
dentro da tag de início para
aquele elemento, e assume a forma
.nome-do-atributo
="valor-do-atributo
"
Nas versões suficientemente recentes do HTML, o
elemento p
possui um atributo chamado
align
, o qual sugere o alinhamento
(Justificação) de um parágrafo para o programa
que estiver exibindo o HTML.
O atributo align
pode assumir um de
quatro valores possíveis, left
(esquerda), center
(centralizado),
right
(direita) e justify
(justificado). Se o atributo não for especificado
será assumido o valor padrão
left
.
Alguns atributos irão assumir apenas valores
específicos, como o left
ou
justify
. Outros irão permitir que
você entre com qualquer coisa que deseje. Se você
precisar incluir aspas ("
) no valor de um
atributo, você deve envolver o valor do atributo com
aspas simples ('
).
Algumas vezes você não precisa utilizar aspas em volta de todos os valores dos atributos. Entretanto, a regra para fazer isso é muito sutil, e é muito mais simples sempre utilizar as aspas em volta dos valores dos seus atributos.
A informação nos atributos, elementos e tags
são armazenados nos catálogos SGML. Várias
ferramentas do projeto de documentação utilizam
estes arquivos de catalogo para validarem o seu trabalho. As
ferramentas no textproc/docproj
incluem uma variedade de arquivos de catalogo
SGML. O projeto de documentação do FreeBSD
inclui seu próprio conjunto de arquivos de catálogos.
Suas ferramentas precisam reconhecer ambos os tipos de
arquivos de catalogo.
Para poder praticar com os exemplos deste documento você precisará instalar alguns aplicativos no seu sistema, além de assegurar que as variáveis de ambiente estejam corretamente configuradas.
Faça o download e instale o
textproc/docproj
a partir do sistema de ports do FreeBSD. Ele é um
meta-port o qual deve efetuar o
download e a instalação de todos os
aplicativos e arquivos de suporte que são
utilizados pelo projeto de documentação.
Adicione linhas ao seu arquivo de
inicialização do shell para configurar a
variável de ambiente
SGML_CATALOG_FILES
. (Se você
não estiver trabalhando com a versão no
idioma inglês da documentação,
você pode precisar substituir o caminho com o
diretório correto para o seu idioma.)
Para carregar estas variáveis, execute um logout do sistema, logando novamente em seguida, ou execute os comandos acima na sua linha de comando para configurar os valores das variáveis.
Crie o arquivo example.xml
, e
entre com o seguinte texto:
Tente validar este arquivo utilizando um interpretador SGML.
Um dos componentes do
textproc/docproj
é o onsgmls
, um interpretador de
validação. Normalmente, o
onsgmls
lê um documento marcado
de acordo com um DTD SGML e retorna uma cópia do
conjunto de informações sobre a estrutura
dos elementos (ESIS, mas isso não é
importante agora).
Entretanto, quando o onsgmls
é executado com o parâmetro
-s
, ele irá suprimir o output
normal, e imprimir apenas as mensagens de erro. Isto o
torna um meio útil de verificar se o seu documento
é válido ou não.
Utilize o onsgmls
para verificar
se o seu documento é válido:
%
onsgmls -s example.xml
Como você irá ver, o
onsgmls
irá executar sem
retornar nenhuma mensagem. Isto significa que o seu
documento foi validado com sucesso.
Veja o que acontece quando um elemento
obrigatório é omitido. Tente remover as
tags title
e /title
, e execute novamente a validação.
%
onsgmls -s example.xml
onsgmls:example.xml:5:4:E: character data is not allowed here
onsgmls:example.xml:6:8:E: end tag for "HEAD" which is not finishedAs mensagens de erro emitidas pelo
onsgmls
são organizadas em
grupos separados por dois pontos, ou colunas.
Coluna | Propósito |
---|---|
1 | O nome do programa que está gerando
o erro. Ela será sempre
onsgmls . |
2 | O nome do arquivo que contém o erro. |
3 | Número da linha na qual o erro aparece. |
4 | Número da coluna na qual o erro aparece. |
5 | Um código de uma letra indicando a
natureza da mensagem. I indica
uma mensagem informativa, W
é para um aviso, e E
é para um erro [a], e X é
para uma referência cruzada. Como
você pode ver, estas mensagens são
erros. |
6 | O texto da mensagem. |
[a] Ele não está sempre na
quinta coluna. O
|
A simples omissão das tags
title
gerou 2 erros diferentes.
O primeiro erro indica que o conteúdo (neste caso,
caracteres, ou melhor, a tag de inicio de um elemento)
ocorreu onde o interpretador SGML estava esperando outra
coisa. Neste caso, o interpretador estava esperando
encontrar uma das tags de início para os elementos
que são válidos dentro do
head
(como a title
).
O segundo erro é porque o elemento
head
deve conter
o elemento title
. Por causa disso o
onsgmls
considera que o elemento
não foi corretamente finalizado. Entretanto, a
tag de finalização indica que o elemento
foi fechado antes que estivesse terminado.
Coloque de volta o elemento
title
.
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>.