Atualizado em 06-Jun-05.
O objetivo deste resumo é apresentar alguns conceitos básicos e
a terminologia comum usados na descrição dessas quatro importantes
linguagens de marcação , a fim de facilitar ao leitor o estudo mais detalhado
dos ótimos tutoriais que existem na Internet e incluídos na página da disciplina.
HTML (Hypertext Markup Language) é uma Linguagem de Marcação ("Markup Language") voltada para:
- estruturação de documentos,
- apresentação visual de documentos em um navegador ("browser")
HTML é derivada da linguagem pioneira de marcação
SGML
(Standard Generalized Markup Language) e foi criada por Tim Berners Lee
(o idealizador da WWW) específicamente para a composição e apresentação de
documentos na Web. A evolução cronológica dessas linguagens foi a seguinte:
SGML → HTML 1.0 → HTML xx → XML → HTML 4.01 → XHTML.
Um documento estruturado é composto por conteúdo
(texto, figuras, etc) e informação sobre o papel do conteúdo
no documento, ou seja, como êle está estruturado.
Por exemplo: um artigo técnico
é usualmente composto por um "título", "autores", "resumo", diversas "seções"
e uma "bibliografia", nesta ordem. Cada um dos componentes (ou "elementos")
indicados entre aspas acima, representa uma parte estrutural do documento.
Um documento estruturado pode ser apresentado ao usuário
de diferentes formas, por exemplo, numa impressão em papel,
na tela de um navegador com janelas gráficas (Windows, XWindows, etc),
na tela simplificada de um notebook ou de um telefone celular
ou até em algum equipamento multimídia.
Pode também ser enviado
para processamento por algum software especializado como um Gerenciador de
Banco de Dados.
Os requisitos para estruturação de um documento
são ortogonais aos requisitos necessários para sua apresentação.
Este é um dos principais problemas da linguagem HTML onde ambos estão
misturados e que recentemente foi atacado em duas frentes:
- introdução de "Folhas de Estilo"
("Cascading Style Sheets")
permitindo especificar a apresentação desejada
para cada elemento de um documento, separadamente da sua marcação HTML,
- especificação da linguagem XHTML,
sucessora de HTML 4.01,
seguindo o padrão da nova meta-linguagem de marcação XML da www.org.
XML é voltada para o intercâmbio de documentos via Web de forma independente
da sua apresentação final e é um subconjunto restrito da linguagem pioneira de
marcação, SGML.
É importante lembrar que HTML, XHTML, XML e SGML são padrões internacionais
originados na www.org, sancionados pelas organizações ANSI e ISO, e, portanto,
independentes de fabricantes de hardware ou software.
Estrutura de documentos HTML
Um documento HTML é um conjunto (mais precisamente uma hierarquia) de
elementos :
Um elemento é demarcado (usualmente) por 2 tags:
- "tag inicial", no formato:
<nome-do-elemento atributos(opcional) >
- "tag final", no formato: </nome-do-elemento>
Conteúdo de um elemento:
- usualmente texto entre o tag inicial e o tag final,
- também pode conter outros elementos, de forma que a hierarquia dos
elementos é uma árvore
- a raiz do documento é sempre o elemento <html>
Elementos sem conteúdo e sem tag final são ditos
"elementos vazios".
Por exemplo:
<br>, <hr>, <img>
Tais elementos tornam complexa a análise sintática de um documento HTML
por parte do browser. Por esta razão em XHTML êles devem conter o tag final
seja na forma compacta:
<br /> ou explícitamente:
<br></br>.
Atributo: um
atributo define uma característica
ou propriedade de um elemento; é sempre incluído no tag inicial de um elemento,
usando a sintaxe:
nome_do_ atributo="valor".
Um elemento pode ter vários atributos,
separados por espaço(s) em branco. Ao contrário de HTML, em XHTML todo
atributo deve ter um valor, mesmo que seja vazio ("") e o valor deve ser sempre
delimitado por aspas duplas. Por exemplo:
<img src="sun.jpg" alt="sunburst graphic" width="32" height="21" align="left">
Entidade: uma
entidade é um
nome associado a alguma parte
do documento (ou de um outro documento).
Uma entidade tem papel semelhante a uma
macro que quando
"referenciada" tem o seu nome substituído pelo texto que a define.
A "referência a uma entidade" ("entity reference")
obedece à notação:
&nome-da-entidade;
Entidades podem ser "internas" ou "externas" ao documento.
HTML só suporta entidades internas
predefinidas. Elas servem para nomear caracteres especiais, geralmente
usados para marcação no texto HTML como:
"<", ">", "&", "
e que são inseridos como conteúdo respectivamente, pelas referências:
< > & "
Há várias outras
entidades em HTML.
As adaptações necessárias para transformar um documento em HTML 4.01 para
um documento XHTML são pequenas e podem ser vistas neste
guia sucinto para XHTML.
Histórico da linguagem SGML
SGML foi criada no final da década de 60 pelos pesquisadores da IBM
C. Goldfarb, E. Mosher e R. Lorie, com o objetivo de construir um sistema
portável (i.é, independente de sistema operacional, formatos de arquivos, etc)
para o
intercâmbio e manipulação de documentos.
Eles optaram por um sistema de
"Marcação Generalizada"
(Generalized Markup), com dois objetivos básicos:
- a marcação de um documento deve descrever a estrutura do documento e outros
atributos do mesmo, em vez de especificar o processamento a ser feito no
mesmo,
- a marcação deve ser definida rigorosamente, de forma que sistemas
formais como programas possam ser usados para processar o documento
Em outras palavras,
"marcação generalizada não restringe documentos a uma
única aplicação, estilo de formatação ou sistema de processamento".
Esta quotação foi retirada diretamente da citada referência,
"Introduction to
Generalized Markup".
Desde a sua concepção, portanto, SGML foi uma evolução sobre os sistemas
vigentes de editoração eletrônica com funções de processamento complexas
embutidas na marcação do documento (e que foram denominados por
Goldfarb de sistemas de
marcação procedural; o exemplo clássico
de um sistema desse tipo é o sistema de preparação de textos matemáticos TeX,
desenvolvido por D. Knuth no final da década de 70).
É interessante observar que SGML surgiu aproximadamente na mesma época
da Internet e do sistema Unix, e, portanto, muito antes do uso generalizado
dessas duas tecnologias.
Goldfarb provou em 1974 que um analisador sintático (
parser) é
capaz de
validar um documento SGML sem realmente processá-lo. Em 1986
SGML tornou-se um padrão internacional e foi adotada por várias empresas
de porte como padrão para intercâmbio e armazenamento de documentos.
Duas linguagens de marcação baseadas em SGML e largamente utilizadas são:
DocBook (projetada para marcação de documentação técnica) e TEI - Text Encoding
Initiative (projetada para marcação de textos literários).
Como SGML não possui um conjunto pre-definido de tags e de elementos,
ela é na verdade uma
meta-linguagem para descrever (mais
precisamente especificar) linguagens de marcação. Ela não possui uma semântica
pre-definida.
A sintaxe de uma linguagem específica de marcação
definida através de SGML é especificada através de construções coletadas
num documento denominado DTD (
Document Type Definition)(ou incluídas
diretamente no documento SGML),
onde aparecem "
declarações de elementos", que especificam para cada elemento
da linguagem todas as possiveis marcações válidas para o elemento,
como por exemplo, a ordem e obrigatoriedade de elementos num documento,
quantidade,etc, e
declarações de atributos, que especificam, por exemplo,
tipos de valores de atributos, valores default, etc.
O DTD define, portanto, uma
gramática para a linguagem de marcação
do documento. A declaração de um elemento e de seus atributos no DTD utiliza a
notação gramatical EBNF
(Extended Backus-Naur Form) que é bastante críptica
para não especialistas em linguagens de programação e compiladores.
Uma curiosidade histórica:
Embora a definição de um documento usando tags iniciais e finais para
cada elemento seja uma forma rigorosa e direta de compor um documento como
uma herarquia de elementos (árvore), no trabalho citado,Goldfarb comenta:
"
caso o usuário tenha que digitar todos os tags, o preço seria totalmente
inaceitável, pois, conhecendo a estrutura do documento (formalmente definida
através do DTD), é possivel eliminar um grande número de tags finais".
"Ele (usuário) relutaria em incorrer no trabalho e custo de entrar um tag
final explícito para cada elemento, simplesmente para compartilhar
seu conhecimento com o sistema"
O trabalho cita como exemplo, a descrição de um elemento
figura,
composto dos elementos
corpo da figura e
título (caption) da figura
que poderia ser expressa em SGML assim:
<fig id=angelfig>
<figbody>
<artwork depth=24p>
</artwork>
</figbody>
<figcap>Three Angels Dancing
</figcap>
</fig>
Após a apresentação do DTD para este documento, o trabalho propõe a seguinte
descrição para o elemento
figura, "
com 40% de redução na marcação":
<fig id=angelfig>
<figbody>
<artwork depth=24p>
<figcap>Three Angels Dancing
</fig>
Não é de estranhar portanto, que HTML, diretamente inspirada em SGML, tenha
excluído tags finais de um número razoável de seus elementos.
Todo documento SGML deve possuir um DTD (que define a sua gramática) de
forma que o documento possa ser validado por um analisador sintático
(parser). Um documento SGML é dito "válido" quando obedece às regras do
seu DTD (esta definição se estendeu posteriormente para XML). DTDs serão
exemplificados a seguir quando descrevermos XML.
XML - origem, objetivos, conceitos básicos
XML (
Extensible Markup Language) é uma meta-linguagem de marcação criada a
partir de SGML (é uma forma restrita de SGML), com os seguintes objetivos básicos:
- prover o intercâmbio de documentos através da Web de forma independente de
sistemas operacionais ou formatos de arquivos,
- suportar uma grande gama de aplicações, permitindo a definição de
elementos pelo usuário (ou aplicação) para estruturar o documento,
- facilitar a análise de documentos XML por programas,
- documentos XML devem ser legíveis por humanos,
- economia de tags de marcação não é importante,
- ter uma especificação formal para a marcação de documentos
XML não possui um conjunto pre-definido de tags ou elementos. Por isto, como SGML,
XML é uma
meta-linguagem para descrição de linguagens de marcação:
num documento XML, tags (mais precisamente elementos), para definir o significado
dos dados, podem ser
definidos livremente de acordo com o domínio dos dados e da aplicação.
XML não provê mecanismos para apresentação de dados nem para ligação entre
documentos. Tais recursos são disponibilizados por outras especificações de
linguagens como, por exemplo, XSL (Extensible Style Language) para estilos,
e Xlink para especificação de links entre documentos.
XML tornou-se um
padrão internacional em 1998. Desde então várias linguagens de marcação seguindo
o padrão XML foram criadas e estão sendo padronizadas no âmbito da w3.org.
Recentemente, pequenas
adaptações a HTML 4.01
para seguir os requisitos de XML, deram origem à linguagem XHTML.
Ao contrário de SGML, XML não requer um DTD para cada documento (embora
seja altamente desejável, já que o DTD define uma gramática para os
elementos e atributos do documento).
A análise sintática para validação de documentos
SGML pode ser muito complexa e foi uma das principais razões para XML
adotar e exigir a forma mais simples e verbosa de aninhamento completo e explícito
de todos os elementos de um documento XML, além de requisitos rígidos
para definição de valores de atributos, etc. Nesse caso o documento é dito
"
bem formado" (
well formed) e requisitos para isto estão detalhados
na
especificação XML 1.0
e um resumo pode ser visto no documento anexo sobre
XHTML.
Se o documento XML possui um DTD associado (ou incluído no próprio
documento, conforme veremos) e segue a
gramática
especificada pelo DTD, então êle é dito
válido. A validação de
um documento garante que os dados esejam completos, colocados na ordem correta no
documento e com os valores apropriados dos atributos.
Vários pacotes de software livres estão sendo disponibilizados para verificar a
boa formação e a
"validação" de documentos XML.
Composição de um documento XML
Um documento XML é composto pelos seguintes
tipos de marcação (a maioria
deles também é suportada por HTML e XHTML):
- elementos,
- atributos,
- Comentários, no mesmo formato de HTML e XHTML:
<!-- isto é um comentário -->
- Entidades: em XML são utilizadas para representar caracteres especiais de
marcação (<, &, >, " ),
para texto usado com freqüencia no
documento e também para incluir conteúdo proveniente de arquivos externos.
HTML, como vimos, só suporta o primeiro tipo de entidade. Entidades são
declaradas no DTD.
- Instruções para processamento (Processing Instructions, ou PI)
com o formato:
<?nome dados ?>
.
As informações em dados devem ser passadas
a uma aplicação identificada por nome.
A primeira marcação de um documento XML é justamente uma PI
que identifica a versão de XML e o conjunto de caracteres do documento
como em :
<?xml version="1.0" encoding="iso-8859-1"?>
- Seções CDATA: delimitam conteúdo que deve ser ignorado pelo analisador
sintático do documento (caracteres especiais de marcação não são interpretados
como tais).A sintaxe é:
<![CDATA[ texto qualquer finalizado por: ]]>
Exceto pela seqüencia ]]> quaisquer caracteres podem aparecer
em texto.
Um exemplo de documento XML com seu DTD embutido
Este exemplo foi adaptado deste
tutorial XML
da IBM e descreve um documento para um "livro
de endereços" (AddressBook) que contém um ou mais elementos "pessoa" (person),
onde cada pessoa possui um nome (name) e um endereço de correio eletrônico
(email). Por sua vez o nome da pessoa é composto do sobrenome (family) e do
pre-nome (given).
Observe que o DTD do documento começa com a marcação
<!DOCTYPE e termina com a marcação
]>. Este DTD poderia
estar num arquivo externo, digamos,"ab.dtd" (pode inclusive ser
referenciado através de uma URL) e neste caso o DOCTYPE seria
incluído logo após a primeira linha com o formato:
<!DOCTYPE addressBook SYSTEM "ab.dtd" > ou, por exemplo:
<!DOCTYPE addressBook SYSTEM "http://www.networking.ibm.com/xml/ab.dtd">
A raiz do documento é o elemento:
<addressBook>
As linhas iniciais estão numeradas apenas para facilitar a explicação a seguir.
1.<?xml version="1.0" encoding="iso-8859-1"?>
2.<!DOCTYPE addressBook [
3.<!ELEMENT addressBook (person)+>
4.<!ELEMENT person (name,email*)>
5.<!ATTLIST person gender (male|female) #IMPLIED>
6.<!ELEMENT name (family,given)>
7.<!ELEMENT family (#PCDATA)>
8.<!ELEMENT given (#PCDATA)>
9.<!ELEMENT email (#PCDATA)>
10.]>
<addressBook>
<person gender="male">
<name>
<family>Wallace</family> <given>Bob</given>
</name>
<email>bwallace@megacorp.com</email>
</person>
<person gender="female">
<name>
<family>Tuttle</family> <given>Claire</given>
</name>
<email>ctuttle@megacorp.com</email>
</person>
</addressBook>
A parte XML do documento é auto-explicativa e mostra o aninhamento apropriado
dos elementos. Observe que a indentação aumenta a legibilidade do documento.
Vamos explicar agora o DTD correspondente (maiores detalhes podem
ser vistos no
tutorial
recomendado. V. pode inclusive validar seus documentos XML nesse "site").
- linha 2:
- o nome após DOCTYPE deve ser o nome do elemento raiz, no caso,
addressBook.
- linha 3:
- o elemento addressBook deve conter um ou mais
sublementos person (indicado pelo símbolo +)
- linha 4:
- o elemento person deve ter um subelemento name e zero
ou mais subelementos email (indicado pelo *), nesta ordem.
- linha 5:
- o atributo gender do elemento person deve ter um dos
dois valores
male ou female. #IMPLIED significa que o atributo é opcional.
Se fosse obrigatório deveriamos colocar: #REQUIRED. É possivel especificar
também que o atributo tem um valor fixo: #FIXED 'valor' ou um valor default.
- linha 6:
- o elemento name deve ter os dois atributos family
e given, nesta ordem;
- linhas 7,8 e 9:
- os elementos family, given e email são cadeias de
caracteres do conjunto de caracteres especificados para o documento.
- linha 10:
- marcação para fim do DTD.
Observe que entre as linhas 2 e 10
não é seguida a sintaxe de elementos XML mas sim a de documentos DTD, que
estão no formato EBNF (
Extended Backus Naur Form)
Guia sucinto para escrever documentos em XHTML
Abaixo um exemplo de documento minimal seguindo o padrão XHTML. Observe
que o elemento raiz html contém os elementos head e body
e o elemento head deve obrigatoriamente conter um elemento title:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Virtual Library</title>
</head>
<body>
<p>Moved to <a href="http://vlib.org/">vlib.org</a>.</p>
</body>
</html>
As três classes de documentos XHTML
- Strict: segue completamente a sintaxe de documentos XHTML, não permitindo
o uso de elementos descontinuados (deprecated) ou de frames.
- Transitional: permite o uso de elementos descontinuados
mas não o de frames
- Frameset: permite o uso de elementos descontinuados e o de frames
Elementos descontinuados do padrão XHTML:
- applet
- basefont
- center
- dir
- font
- isindex
- menu
- s
- strike
- u