Esta sección do documento introduce a SGML e trata a sua relación coa HTML. O tratamento completo da SGML deixa-se-lle ao padrón (ver [ISO8879] ).
A SGML é un sistema para definir linguaxes de etiquetaxe . Os autores etiquetan os seus documentos representado información estrutural, representacional e semántica xunto co conteúdo. A HTML é un exemplo de linguaxe de etiquetaxe. Velaqui un exemplo dun documento HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>O meu primeiro documento HTML</TITLE>
</HEAD>
<BODY>
<P>Olá, Mundo
</BODY>
</HTML>
Un documento HTML divide-se nunha sección cabezallo (aqui, entre <HEAD> e </HEAD>) e un corpo (aqui, entre <BODY> e </BODY>). O título do documento aparece no cabezallo (xunto con outra información sobre o documento), e o conteúdo do documento aparece no corpo. O corpo deste exemplo contén simplesmente un parágrafo, etiquetado con <P>.
Cada linguaxe de etiquetaxe definida na SGML chama-se aplicación SGML. Unha aplicación SGML caracteriza-se normalmente por:
Esta especificación inclui unha declaración SGML , tres definicións do tipo de documento (ver a sección sobre información da versión de HTML para unha descrición dos tres) e unha lista de referéncias a caracteres .
As seccións que seguen apresentan os construtos SGML que se usan en HTML.
O apéndice lista alguns rasgos SGML que as ferramentas de HTML e os axentes de usuário non aceitan moito e que haberia que evitar.
Unha declaración de definición do tipo de documento SGML declara tipos de elementos que representan estruturas ou comportamento desexado. A HTML inclui tipos de elementos que representan parágrafos, vínculos de hipertexto, listas, tabelas, imaxes, etc.
Cada declaración de tipo de documento normalmente descrebe tres partes: unha etiqueta inicial, conteúdo e unha etiqueta final.
O nome do elemento aparece na etiqueta inicial (esxrito<nome-do-elemento>) e a etiqueta final (escrito</nome-do-elemento>);fixe-se na barra que vai antes do nome do elemento na etiqueta final. Por exemplo, as etiquetas inicial e final do tipo de elemento UL delimitan os elementos dunha lista:
<UL>
<LI><P>...elemento da lista 1... <LI><P>...elemento da lista 2... </UL>
Alguns tipos de elementos HTML permiten que os autores omitan as etiquetas finais (p.ex., os tipos de elemento P e LI ). Uns poucos tipos de elementos tamén permiten que se omitan as etiquetas iniciais ; por exemplo, HEAD e BODY . A DTD de HTML indica para cada tipo de elemento se se requiren a etiqueta inicial e a final.
Alguns tipos de elemento HTML non teñen conteúdo. Por exemplo, o elemento de salto de liña BR non ten conteúdo; o seu papel é rematar unha liña de texto. Estes elementos baleiros nunca teñen etiquetas finais. A definición do tipo de documento e o texto da especificación indican se un tipo de elemento é baleiro (non ten conteúdo) ou, se pode ter conteúdo, que é o que se considera conteúdo legal.
Os nomes dos elementos nunca diferenzan entre maiúsculas e minúsculas.
Consulte-se o padrón da SGML para información sobre as regras que regulan os elementos (p.ex., deben estar añiñados adecuadamente, unha etiqueta final fecha -até a etiqueta inicial correspondente para trás- todas as etiquetas inicials intermeias sen fechar con etiquetas finais omitidas (sección 7.5.1), etc.).
por exemplo, o parágrafo seguinte:
<P>Este é o primeiro parágrafo.</P>
...un elemento de bloco...
pode ser reescrito sen a sua etiqueta final:
<P>Este é o primeiro parágrafo.
...un elemento de bloco...
dado que a etiqueta inicial <P> encerra-se co seguinte elemento de bloco. De maneira semellante, se un parágrafo aparece encerrado por un elemento de bloco, como en:
<DIV>
<P>Este é o parágrafo.
</DIV>
a etiqueta final do elemento de bloco que encerra (aqui </DIV>) implica a etiqueta final da etiqueta inicial <P> aberta.
Os elementos non son etiquetas. Algunha xente refere-se aos elementos como etiquetas (p.ex., "A etiqueta P"). Lembre que o elemento é unha cousa e a etiqueta (sexa inicial ou final) é outra. Por exemplo, o elemento HEAD sempre está presente, mesmo se faltan no código tanto a etiqueta inicial como a final de HEAD.
Todos os tipos de elementos que se declaran nesta especificación aparecen listados no índice de elementos .
Os elementos poden ter propriedades asociadadas, chamadas atributos , que poden ter valores (por omisión ou asignados polos autores ou por scripts). Os pares atributo/valor aparecen antes do ">" final dunha etiqueta inicial. Na etiqueta inicial dun elemento pode aparecer calquer cantidade de pares de valores de atributos (legais), separados por espazos. Poden aparecer en calquer orde.
Neste exemplo asigna-se o atributo id dun elemento H1 :
<H1 id="seccion1">
Este é un título identificado grácias ao atributo id
</H1>
Por omisión, a SGML require que se delimiten todos os valores de atributos usando tanto as aspas dobres ( decimal 34 en ASCII) como as aspas simples (decimal 39 en ASCII). As aspas simples poden-se usar dentro do valor do atributo cando o valor se delimita con aspas dobres e viceversa. Os autores poden usar tamén referéncias numéricas a caracteres para representar aspas dobres (") e aspas simples ('). Para as aspas dobres os autores poden usar tamén a referéncia à entidade-carácter ".
En determinados casos, os autores poden especificar o valor dun atributo sen aspas. O atributo só pode conter letras (a-z e A-Z), díxitos (0-9), hífens (decimal 45 en ASCII), pontos (decimal 46 en ASCII), subliñados baixos (decimal 95 en ASCII) e pontos e vírgulas (decimal 58 en ASCII). Recomendamos o uso de aspas mesmo cando sexa posíbel eliminá-las.
Os nomes de atributos non diferenzan nunca entre maiúsculas e minúsculas.
Os valores dos atributos normalmente non diferenzan entre maiúsculas e minúsculas. A definición de cada atributo no manual de referéncia indica se o seu valor distingue entre maiúsculas e minúsculas.
Todos os atributos que se definen nesta especificación listan-se no índice de atributos .
As referéncias a caracteres son nomes numéricos ou simbólicos de caracteres que se poden incluir nun documento HTML. Son úteis para referir-se a caracteres pouco usados ou que as ferramentas de deseño fan difícil ou imposíbel introduci-los. Verán-se referéncias a caracteres neste documento; comezan cun signo "&" e rematan cun ponto e vírgula (;). Alguns exemplos frecuentes incluen:
Tratamos as referéncias a caracteres HTML en detalle máis adiante na sección sobre o conxunto de caracteres do documento . A especificación tamén contén unha lista de referéncias a caracteres que poden aparecer no documento en HTML 4.
Os comentários en HTML teñen a sintaxe seguinte:
<!-- isto é un comentário -->
<!-- e isto tamén,
que ocupa máis dunha liña -->
Non se permiten espazos en branco entre o delimitador inicial de declaración de código ("<!") e o delimitador inicial do comentário ("--"), mais si se permiten entre o delimitador final do comentário ("--") e o delimitador final de declaración de código (">"). Un erro frecuente consiste en incluir unha secuéncia de hífens dentro dun comentário. Os autores deberian evitar colocar dous ou máis hífens contíguos dentro dos comentários.
A información que aparece entre os comentários non ten un significado especial (p.ex., as referéncias a caracteres non se interpretan como tais).
Observe-se que os comentários son código.
Cada declaración de elemento e de atributo desta especificación van acompañadas do seu fragmento de definición do tipo de documento . Escollimos incluir os fragmentos de DTD na especificación en vez de procurar un meio máis abarcábel mais máis longo e menos preciso de descreber as propriedades dun elemento. O seguinte tutorial deberia permitir-lles aos leitores non familiarizados coa SGML a leitura da DTD e a comprensión dos detalles técnicos da especificación da HTML.
<!ELEMENT PARAM - O EMPTY -- valor da propriedade con nome -->Aqui, o comentário "valor da propriedade con nome" explica o uso do tipo de elemento PARAM . Os comentários na DTD son só informativos.
A DTD da HTML comeza cunha série de definicións de entidades paramétricas. Unha definición de entidade paramétrica define un tipo de macro que pode ser referenciada e expandida noutro lugar da DTD. Estas macros poden non aparecer nos documentos HTML, só na DTD. Outros tipos de macros, chamadas referéncias a caracteres , poden-se usar no texto dun documento HTML ou dentro dos valores dos atributos.
Cando se fai referéncia polo nome à entidade paramétrica na DTD, expande-se nunha cadea.
Unha definición de entidade paramétrica comeza coa palabra chave <!ENTITY % seguida do nome da entidade, a cadea entre aspas na que se expande a entidade e finalmente un > que fecha. Os exemplos de entidades paramétricas nunha DTD comezan con "%", depóis o nome da entidade paramétrica e rematan cun ";" opcional.
O exemplo seguinte define a cadea na que se expanderá a entidade "%fontstyle;".
<!ENTITY % fontstyle "TT | I | B | BIG | SMALL">
A cadea na que se expande a entidade paramétrica pode conter outros nomes de entidades paramétricas. Estes nomes expanden-se recursivamente. No exemplo seguinte, a entidade paramétrica "%inline;" define-se de maneira que inclua as entidades paramétricas "%fontstyle;", "%phrase;", "%special;" e "%formctrl;".
<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">
Verán-se duas entidades DTD frecuentemente na DTD da HTML : "%block;" "%inline;". Usan-se cando o modelo de conteúdo inclui elementos de nível de bloco e en liña , respectivamente (definidos na sección sobre a estrutura global dun documento HTML ).
A maior parte da DTD da HTML consiste nas declaracións de tipos de elementos e os seus atributos. A palabra clave <!ELEMENT comeza unha declaración e o carácter > encerra-a. Entre estas especifican-se:
Neste exemplo:
<!ELEMENT UL - - (LI)+>
Este exemplo ilustra a declaración dun tipo de elemento baleiro:
<!ELEMENT IMG - O EMPTY>
O modelo de ocnteúdo descrebe o que pode conter unha aparición dun tipo de elemento. As definicóns de modelo de conteúdo poden incluir:
O modelo de conteúdo dun elemento especifica-se coa sintaxe seguinte. Observe-se que a lista que segue é unha simplificación das regras de sintaxe SGML completas e non trata, por exemplo, precedéncias.
Velaqui alguns exemplos da DTD da HTML:
<!ELEMENT UL - - (LI)+>
O elemento UL debe conter un ou máis elementos LI .
<!ELEMENT DL - - (DT|DD)+>
O elemento DL debe contar un ou máis elementos DT ou DD en calquer orde.
<!ELEMENT OPTION - O (#PCDATA)>
O elemento OPTION só pode contar texto e entidades, tais como & -- isto ven indicado polo tipo de dados de SGML #PCDATA.
Alguns tipos de elementos da HTML utilizan unha característica adicional da SGML para excluir elementos do seu modelo de conteúdo. Os elementos excluídos van precedidos dun trazo. As exclusións explícitas anulan os elementos permitidos.
Neste exemplo, o -(A) significa que o elemento A non pode aparecer noutro elemento A (isto é, non se poden aniñar áncoras).
<!ELEMENT A - - (%inline;)* -(A)>
Observe-se que o tipo de elemento A é parte da entidade paramétrica DTD "%inline;", mais está excluída explicitamente debido a -(A).
Da mesma maneira, a seguinte declaración de tipo de elemento de FORM proíbe os formulários aniñados:
<!ELEMENT FORM - - (%block;|SCRIPT)+ -(FORM)>
A palabra chave <!ATTLIST comeza coa declaración de atributos que pode tomar un elemento. Vai seguida do nome do elemento en questión, unha lista de definicións de atributo e un > de encerramento. Cada definición de atributo é unha terna que define:
Neste exemplo, o atributo name define-se para o elemento MAP . O atributo é opcional para este elemento.
<!ATTLIST MAP
name CDATA #IMPLIED
>
O tipo de valores permitidos para o atributo dá-se como CDATA, un tipo de dados da SGML. CDATA é texto que pode conter referéncias a caracteres .
Para máis información sobre "CDATA", "NAME", "ID", e outros tipos de dados, consulte a sección sobre tipos de dados HTML .
Os exemplos seguintes ilustran várias definicións de atributos:
rowspan NUMBER 1 -- número de filas polas que se extende a cela --
http-equiv NAME #IMPLIED -- nome do cabezallo de resposta HTTP --
id ID #IMPLIED -- identificación única para todo o documento --
valign (top|middle|bottom|baseline) #IMPLIED
O atributo rowspan require valores do tipo NUMBER ("número"). O valor que se dá explicitamente por omisión é "1". O atributo opcional http-equiv require valores de tipo NAME ("nome"). O atributo opcional id require valores do tipo ID ("identificación"). O atributo opcional valign limita-se a tomar valores do conxunto {top, middle, bottom, baseline}.
As definicións de atributos poden tamén conter referéncias a entidades paramétricas.
Neste exemplo vemos que a lista de definicións de atributo para o elemento LINK comeza coa entidade paramétrica "%attrs;".
<!ELEMENT LINK - O EMPTY -- un vínculo independente do meio -->
<!ATTLIST LINK
%attrs; -- %coreattrs, %i18n, %events --
charset %Charset; #IMPLIED -- codificación de caracteres ou recurso vinculado --
href %URI; #IMPLIED -- URI dun recurso vinculado --
hreflang %LanguageCode; #IMPLIED -- código de idioma --
type %ContentType; #IMPLIED -- tipo de conteúdo anunciado --
rel %LinkTypes; #IMPLIED -- tipos de vínculos directos --
rev %LinkTypes; #IMPLIED -- tipos de vínculos inversos --
media %MediaDesc; #IMPLIED -- para mostrar nestes meios --
>
Etiqueta inicial: requerida, Etiqueta final: proibida
A entidade paramétrica "%attrs;" define-se como segue:
<!ENTITY % attrs "%coreattrs; %i18n; %events;">
A entidade paramétrica "%coreattrs;" na definición "%attrs;" expande-se como segue:
A entidade paramétrica "%attrs;" definiu-se por comodidade, xa que estes atributos están definidos para a maioria dos tipos de elemento HTML.
Da mesma maneira, a DTD define a entidade paramétrica "%URI;" como que se expande na cadea "CDATA".
Como se ilustra neste exemplo, a entidade paramétrica "%URI;" fornece-lles aos leitores da DTD máis información relacionada co tipo de dados que se esperan para o atributo. Definiron-se entidades semellantes para "%Color;", "%Charset;", "%Length;", "%Pixels;", etc.
Alguns atributos fan o papel de variábeis booleanas (p.ex., o atributo selected para o elemento OPTION ). A sua aparición na etiqueta inicial dun elemento implica que o valor do atributo é "verdadeiro". A sua auséncia implica o valor "falso".
Os valores booleanos poden tomar legalmente un só valor: o nome mesmo do atributo (p.ex., selected="selected" ).
Este exemplo define que o atributo selected sexa un atributo booleano.
selected (selected) #IMPLIED -- a opción está pré-seleccionada --
O atributo designa-se como "verdadeiro" por aparecer na etiqueta inicial do elemento:
<OPTION selected="selected">
...conteúdos... </OPTION>
Na HTML, os atributos booleanos poden aparecer de forma minimizada --o valor do atributo aparece el só na etiqueta inicial do elemento. Deste xeito, pode-se asignar selected con escreber:
<OPTION selected>
en vez de:
<OPTION selected="selected">
Os autores deben ter en conta que moitos axentes de usuário só recoñecen a forma minimizada dos atributos booleanos e non a forma plena.