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:
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:
É 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.
Um documento HTML é um conjunto (mais precisamente uma hierarquia) de
elementos :
Um elemento é demarcado (usualmente) por 2 tags:
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:
< > & "
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:
É 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.
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.
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.
<!-- isto é um comentário -->
<?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"?>
<![CDATA[ texto qualquer finalizado por: ]]>
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").
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/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>
Elementos descontinuados do padrão XHTML: