Specyfikacja#
Wstęp#
Ostatni uzupełniający rozdział zostanie całkowicie poświęcony specyfikacji HTML 4.01 (z 1999 roku). Zamieszczę tu wszystkie ciekawe zagadnienia, które ciężko jednoznacznie przyporządkować do poprzednich działów. Oczywiście przy tworzeniu stron aż tak szczegółowa wiedza niezbędna nie jest, aczkolwiek warto poświęcić jeden wieczór i przeczytać całość. Pozwoli to zrozumieć pewne założenia i mechanizmy, które rządzą przy tworzeniu i opisie języków znacznikowych (takich jak HTML czy XHTML).
Pisząc samo słowo "specyfikacja" będę zawsze miał na myśli wersję dokumentu 4.01, chyba że będzie inaczej, to podam bardziej precyzyjny numer.
Status dokumentu#
Specyfikacja definiuje język HTML (HyperText Markup Language), który jest podstawowym językiem publikowania treści w ogólnoświatowej sieci WWW (World Wide Web). Opisywaną wersją języka jest HTML 4.01, będący poprawioną wersją HTML 4.0. Oprócz tekstu, multimediów i funkcji hiperłączy z poprzednich wersji HTML (HTML 3.2 i HTML 2.0 [RFC1866]), HTML 4 obsługuje więcej multimedialnych opcji, języków skryptowych, arkusze stylów, lepsze możliwości druku oraz pomaga tworzyć dokumenty, które są bardziej dostępne dla użytkowników niepełnosprawnych.
HTML 4 jest aplikacją SGML (Standard Generalized Markup Language). SGML jest nadrzędnym językiem (tzw. metajęzyk, międzynarodowa norma ISO 8879) służącym do definiowania dowolnych znaczników i ustalania zasad ich poprawnego użytkowania.
Różnice między HTML 4.01 a HTML 4 umieszczono na specjalnej stronie (Dodatek A: Zmiany).
Specyfikacja jako całość stanowi tylko zalecenia (recommendations) organizacji W3C, nie ma żadnej mocy prawnej. Rolą W3C jest przyciągnięcie uwagi do specyfikacji oraz promowanie jej w różnych zastosowaniach. To, w jakim stopniu zalecenia zostaną zaimplementowane zależy od twórców oprogramowania.
Lista bieżących rekomendacji W3C oraz innych dokumentów technicznych znajduje się na specjalnej stronie "All Standards and Drafts".
Budowa specyfikacji#
Specyfikację podzielono na kilka podstawowych sekcji:
- Sekcja 2 i 3: Wprowadzenie do HTML 4
- Wprowadzenie opisujące miejsce i przeznaczenie HTML-a w światowej sieci World Wide Web. Zawiera krótką historię języka, jego przeznaczenie oraz wskazówki dla autorów.
Zawiera także krótki poradnik SGML-a w celu wyjaśnienia relacji między HTML-em a SGML-em, oraz prezentuje podstawowe informacje na temat sposobu czytania definicji typu dokumentu HTML (DTD).
- Sekcja 4 - 24: manualna referencja HTML 4
- Większa część dokumentu zawierająca opisy zagadnień języka HTML 4 (definicje wszystkich elementów oraz atrybutów).
Dokument został odpowiednio zorganizowany ze względu na składnię HTML-a. Tematy zgrupowano w trzech głównych kategoriach: struktura, prezentacja oraz interaktywność.
Referencja języka zawiera następujące informacje:
- Jakie znaki mogą pojawić się w dokumencie HTML
- Podstawowe typy danych w dokumencie HTML
- Elementy tworzące strukturę dokumentu HTML, w tym: tekst, listy, tabele, odsyłacze, oraz obejmujące obiekty, zdjęcia, i aplety.
- Elementy regulujące sposób prezentacji dokumentu HTML, w tym: arkusze stylów, fonty, kolory, linie poziome, i inne, a także ramki do prezentacji wielu dokumentów w jednym oknie.
- Elementy wprowadzające interaktywność, w tym formularze oraz skrypty.
Formalna definicja HTML-a za pomocą SGML-a:
- SGML definiujący HTML
- Trzy rodzaje DTD: strict, transitional, i frameset.
- Lista referencji znakowych
- Załączniki
- Pierwszy zawiera listę zmian między aktualnym (HTML 4.01) a ostatnimi wydaniami języka (HTML 3.2 oraz HTML4). Drugi zawiera wiele uwag i wskazówek dla twórców oprogramowania zdolnego do przetwarzania dokumentów HTML.
- Referencje
- Odwołania do różnych dokumentów (normatywnych - kolor czerwony oraz nienormatywnych - kolor zielony).
- Indeksy
- Trzy wykazy dające czytelnikom szybki dostęp do podstawowych pojęć, elementów i atrybutów.
Nazwy elementów zostały zapisane wielkimi literami (np. BODY
). Nazwy atrybutów wyrażono za pomocą małych liter (np. lang
, onsubmit
). W języku HTML nazwy elementów i atrybutów nie są czułe na wielkość znaków, ale przyjęta konwencja zapewnia lepszą czytelność specyfikacji.
Każda definicja atrybutu określa typ jego wartości. Jeśli typ pozwala na niewielki zestaw możliwych wartości, definicja zawiera listę wartości rozdzielonych znakiem ("|").
Po określeniu typu wartości, każda definicja atrybutu zawiera informację na temat wielkości znaków dla wartości ("[]"). Można zobaczyć szczegóły dla kilku przypadków.
Wszystkie uwagi zostały odpowiednio wyszczególnione, by mogły wyróżniać się na tle otaczającego je tekstu.
Wszystkie przykłady ilustrujące użycie przestarzałych poleceń zostały oznaczone przez ""DEPRECATED EXAMPLE". Każdy przestarzały przykład zawiera także alternatywne rozwiązanie, uważane za poprawne. Wszystkie przykłady, które prezentują niepoprawne stosowanie zostały oznaczone przez "ILLEGAL EXAMPLE".
Podstawowe zagadnienia#
Z językiem HTML wiąże się kilka ważnych terminologii, z którymi należy się zapoznać.
WWW (World Wide Web lub Web) to sieć zasobów informacyjnych. Web opiera się na trzech mechanizmach, aby uczynić te zasoby dostępnymi dla jak największego grona odbiorców:
- Jednolity schemat nazewnictwa dla lokowanych zasobów w sieci WWW (np. URI).
- Protokoły, zapewniające dostęp do nazwanych zasobów w całej sieci Web (np. HTTP).
- Hipertekst, dla łatwiejszej organizacji i nawigacji wśród wielu zasobów (np. HTML).
Więzi między powyższymi trzema mechanizmami zostały opisane w specyfikacji.
Każdy zasób dostępny w sieci Web - dokument HTML, obraz, klip wideo, program itp. - ma adres, który można wyrazić za pomocą URI (Universal Resource Identifier). URI zwykle składa się z trzech części:
- Nazwy mechanizmu schematu (protokołu) wykorzystywanego do uzyskania dostępu do zasobu.
- Nazwy maszyny, która udostępnia zasób (nazwa domeny).
- Nazwy samego zasobu, podanej jako ścieżka dostępu.
Niektóre URI odnoszą się do konkretnego miejsca w danym zasobie. Ten rodzaj URI kończy się symbolem ("#"), po którym występuje identyfikator kotwicy (zwany identyfikatorem cząstkowym lub etykietą).
Względne URI nie zawierają żadnej nazwy schematu. Ich ścieżka dostępu generalnie odnosi się do zasobu na tej samej maszynie, co bieżący dokument. Adresy względne można budować na wiele ciekawych sposobów (przemieszczanie między poziomami ścieżki), mogą także zawierać etykiety. Względne URI zostaną automatycznie rozwinięte do pełnej postaci za pomocą bazowego URI (który można zmieniać).
W HTML-u adresy URI stosujemy przy:
- Odsyłaczach do innych dokumentów lub zasobów (elementy
<a>
i<link>
). - Odwołaniach do zewnętrznych stylów lub skryptów (elementy
<link>
i<script>
). - Wstawianiu zdjęć, obiektów oraz apletów (elementy
<img>
,<object>
,<applet>
,<input>
). - Tworzeniu mapy odsyłaczy (elementy
<map>
i<area>
). - Wysyłaniu formularzy (element
<form>
). - Tworzeniu dokumentu opartego o ramki (elementy
<frame>
i<iframe>
). - Odwołaniu do zewnętrznych źródeł dla niektórych znaczników (elementy
<q>
,<blockquote>
,<ins>
,<del>
). - Odwołaniach do profili dla metadanych.
Przy tworzeniu HTML-a dużo uwagi poświęcono dostępności. Język został tak zaprojektowany, aby uczynić strony internetowe bardziej dostępnymi dla osób z fizycznymi ograniczeniami. Osiągnięto to poprzez:
- Lepsze rozróżnienie pomiędzy strukturą dokumentu a jego prezentacją, a tym samym zachęcenie do korzystania z arkuszy stylów, zamiast prezentacyjnych elementów i atrybutów HTML-a.
- Lepsze formularze, z możliwością stosowania skrótu klawiszowych, tworzenia semantycznych grup kontrolek, oraz tworzenia aktywnych etykiet.
- Możliwość umieszczenia opisu tekstowego wewnątrz elementu
object
. - Nowy mechanizm tworzenia mapy odsyłaczy po stronie klienta, pozwalający autorom zintegrować obrazy i tekstowe odsyłacze.
- Wymóg stosowania tekstu alternatywnego dla wszystkich zdjęć dołączanych przez element
img
(także w mapach odsyłaczy). - Obsługa atrybutu
title
orazlang
dla każdego elementu. - Obsługa elementów
abbr
orazacronym
. - Szerszy zakres mediów docelowych (np.
tty
,braile
) stosowanych razem z arkuszami stylów. - Lepsze tabele, zawierające podpisy, grupowanie kolumn.
- Długie opisy tabel (atrybut
summary
), zdjęć i ramek (atrybutlongdesc
) itd.
Dokumenty HTML są wysyłane w obrębie Internetu jako sekwencje bajtów, którym towarzyszy informacja o kodowaniu. Rodzaj danego zasobu określony zostaje przez typ MIME. Dla dokumentów HTML właściwym typem MIME jest text/html
.
Podstawowe definicje#
W specyfikacji określono kilka definicji, które często pojawiają się w całym dokumencie.
- Dokument HTML (HTML document)
- Dokument HTML jest dokumentem SGML, który spełnia ograniczenia dotyczącej tej specyfikacji.
- Autor (Author)
- Autorem jest osoba lub program, który zapisuje lub generuje dokumenty HTML. Narzędzie autorskie (authoring tool) jest szczególnym przypadkiem autora - jest to program do generowania HTML-a.
- Użytkownik (User)
- Użytkownikiem jest osoba, która korzysta z aplikacji klienckiej, aby zobaczyć, usłyszeć, lub w inny sposób wykorzystać dokument HTML.
- Aplikacja kliencka HTML (HTML user agent)
- Klientem HTML jest każde urządzenie zdolne do interpretacji dokumentów HTML. Aplikacje klienckie obejmują wizualne przeglądarki (tekstowe lub graficzne), niewizualne przeglądarki (audio, braila), roboty przeszukujące, proxy itd.
- Obsługa błędów (Error conditions)
- Specyfikacja nie definiuje sposobu obsługi ogólnych błędów przez aplikacje klienckie, włączając w to zachowanie przy napotkaniu elementów, atrybutów, wartości atrybutów oraz encji, które nie zostały opisane w tym dokumencie. Jednakże, dla spójnego zachowania między różnymi programami i wersjami języka HTML, umieszczono kilka uwag dotyczących błędnych dokumentów (są to tylko zalecenia).
- Przestarzały (Deprecated)
- Przestarzały element lub atrybut to ten, który został uznany za zbędny i zastąpiony innym, równoważnym rozwiązaniem. Przestarzałe elementy i atrybuty opisano w odpowiednich miejscach specyfikacji, ale zostały wyraźnie oznaczone jako przestarzałe. Mogą zostać całkowicie zarzucone w kolejnych wersjach HTML.
Aplikacje klienckie powinny wspierać przestarzałe elementy ze względu na kompatybilność wsteczną.
Specyfikacja zawiera wiele przykładów, które ilustrują, jak unikać używania przestarzałych elementów. W większości przypadków zależą one od obsługi stylów CSS przez aplikację kliencką. Ogólnie rzecz biorąc, autorzy powinni stosować arkusze stylów w celu osiągnięcia efektów stylistycznych i formatujących, zamiast przestarzałych elementów i atrybutów HTML.
- Zarzucony (Obsolete)
- Zarzucony element lub atrybut to taki, dla którego nie ma gwarancji wsparcia przez aplikacje klienckie. Zarzucone elementy (np.
listing
,plaintext
czyxmp
) nie zostały zdefiniowane w specyfikacji, ale ze względów historycznych są wymienione w sekcji zmian.
Standardy#
W specyfikacji pojawia się wiele odwołań do plików/specyfikacji/standardów, wypadałoby napisać małą wzmiankę na temat różnych standardów.
W branży informatycznej przetacza się cała masa różnych standardów. Dobrą rzeczą w standardach jest to, że można sobie zawsze wybrać taki, który nam pasuje. Oczywiście, ironia polega na tym, że standard powinien ograniczyć wybór, a nie zwiększać go. Przykładowo, do zapisywania dokumentów mamy HTML, RTF, PDF oraz wiele innych (różne wersje Worda).
Będąc programistami WWW mamy to szczęście, że przy tworzeniu treści internetowej właściwie nie ma konkurujących ze sobą standardów. Mogą jedynie mieć nowe wersje (np. HTML 3.2, HTML 4), co przyprawia o ból głowy, ale na ogól nie mamy dwóch lub więcej standardów dotyczących tej samej rzeczy. To znaczy, że nie ma większego podziału w społeczności programistów sieciowych.
Tworząc strony internetowe faktycznie mamy do czynienia z ogromną liczbą standardów z różnych dziedzin - przypomina to istne zoo. Gdy mówimy o standardach, musimy pamiętać, że mamy do czynienia z wieloma ich typami.
Standardem nieformalnym staje się ten, który jest popularny. Standardem formalnym jest standard ustalony na spotkaniu. Prawa nadane przez rząd są standardem formalnym. RTF jest standardem formalnym. Sam język HTML był początkowo standardem nieformalnym, dopiero od wersji 4.0 stał się formalny. Innym przykładem formalnym może być ESMAScript (standard dla JavaScript).
Standardy w dokumentach RFC (Request for Comments) są standardami internetowymi stworzonymi przez IETF (Internet Engineering Task Force). Grupa zainteresowanych osób sprawdza standard w poszukiwaniu błędów i jeśli po jakimś czasie staje się popularny, zostaje standardem nieformalnym. Proces RFC może być również formalny, więc może też zmierzać w kierunku prawnego standardu.
Istnieją także drapieżne standardy, które powstają z powodów politycznych. Przykładowo, na przyjęciach takim standardem jest kosztowne ubranie. XSL (Extensible Stylesheet Language) był początkowo podobnym standardem, stworzonym (przez Microsoft) po to, by programiści WWW odeszli od prostszego i mniej zależnego od poszczególnych producentów CSS. Dziś XSL jest rozwijany przez W3C, stał się ogólnym językiem transformacji XML-a.
Standardy naprawdę nie mają końca. Możemy znaleźć również rekomendacje dotyczące standardowych rozmiarów bannerów reklamowych. Bardzo dobrze, że takie standardy powstają, ponieważ możemy skorzystać z tej informacji i napisać standardowy arkusz stylów CSS, który będzie wyłączać reklamy.
Niezależnie od tego ile się nauczymy, jakie technologie (formalne i nieformalne) będziemy stosować, należy pamiętać o jednej najważniejszej rzeczy - użytkownicy nie są standardowi. Stworzenie czegoś idealnego, działającego i wyglądającego identycznie u wszystkich użytkowników Internetu jest w praktyce niemożliwe.
Narzucanie standardów#
Skąd czerpać pewność, że standardy, na których opieramy się przy tworzeniu stron są należycie zaimplementowane w przeglądarce?
Jedyny nacisk, jaki możemy wywrzeć, ma charakter społeczny. Jeśli nie można wierzyć w idealizm lub dobrze pojęty własny interes producenta trzeba go publicznie ośmieszyć albo w ostateczność zrezygnować z danego oprogramowania. Aby przekonać się, że nawet najbardziej idealistyczny projekt wymaga nacisku ze strony opinii publicznej lub konsumentów, zajrzyj na stronę bugzilla.mozilla.org - jest to baza danych o błędach znalezionych w Mozilli. Jeśli wyszukasz wszystkie błędy w obsłudze HTML-a, które czekają na usunięcie, zobaczysz długą listę, mimo że program jest prawie doskonały. Tak jest z każdym programem. Opinia publiczna widocznie ma nadzieję, że programiści uporają się z tą listą zanim stracą zapał albo możliwości pracy na obecnych zasadach.
Oczywiście inną kwestią jest używanie lub nieużywanie standardów przez nas samych. Nasz kod powinien być napisany przejrzyście i przechodzić przez przynajmniej jeden rodzaj sprawdzania składni. Jeśli zależy nam na stosowaniu się do standardów, powinniśmy oprzeć się pokusie używania niestandardowych własności czy funkcji, promowanych przez różnych producentów.