Język znaczników

Język znaczników oparty na SGML-u[1]

Język znaczników (ang. markup language) – format dokumentu zawierający obok tekstu także dodatkowe informacje, które go opisują. Te informacje, na przykład na temat wyglądu czy znaczenia fragmentu dokumentu, są wyrażane poprzez wplecione w tekst znaczniki.

Jednym z najpopularniejszych obecnie języków znaczników jest HTML, jedna z technologii leżących u podstaw WWW. Pierwotnie jednak języki znaczników były (i są do dziś) wykorzystywane przede wszystkim w przemyśle wydawniczym.

Odmiany języków znaczników

Języki znaczników zwyczajowo dzielone są na trzy klasy: prezentacyjne, proceduralne oraz opisowe. W praktyce jednak różne odmiany znakowania są stosowane w danym systemie jednocześnie.

Przykładowo język HTML zawiera elementy czysto proceduralne (np. B określający, że tekst ma być wytłuszczony) oraz czysto opisowe (np. STRONG oznaczający ważny fragment tekstu). Zawiera również element PRE, wyróżniający obszar znakowania prezentacyjnego, którego zawartość ma zostać wyświetlona dokładnie tak, jak została umieszczona w dokumencie (bez specjalnego formatowania i bez pomijania znaków niedrukowalnych).

Znakowanie prezentacyjne

W znakowaniu prezentacyjnym dokument nie wymaga żadnego formatowania, a strukturę dokumentu można określić jedynie ze sposobu rozmieszczenia jego zawartości. Przykładowo tytuł dokumentu może zostać poprzedzony kilkoma znakami nowej linii lub spacji, co ma sugerować marginesy oraz efekt centrowania.

       Tytuł dokumentu

 Szczegółowy opis dokumentu
przedstawiający jego tematykę
      oraz zastosowanie

Niektóre procesory tekstu i inne programy przetwarzające tekst podejmują próby wywiedzenia struktury dokumentu z podobnych konwencji, jednak wielość stylów i wieloznaczność interpretacji znacząco to utrudniają.

Znakowanie proceduralne

Znakowanie proceduralne także określa sposób prezentacji tekstu, lecz jego znaczniki nie są zwykle widoczne dla użytkownika końcowego. Oprogramowanie lub ludzie przetwarzający tekst interpretują znaczniki odpowiednio układając i formatując tekst.

Przykładowo formatowany tytuł dokumentu może być bezpośrednio poprzedzony przez ciąg dyrektyw mówiących o konieczności przejścia w tryb centrowania, powiększenia oraz wytłuszczenia czcionki. Po tytule natomiast następowałaby kolejna seria rozkazów usuwających zastosowane efekty.

\begin{center}
\huge{Tytuł dokumentu}
\large{Szczegółowy opis dokumentu przedstawiający jego tematykę oraz zastosowanie}
\end{center}[2]

W bardziej zaawansowanych systemach często stosowane ciągi znaczników można uprościć poprzez zastosowanie makr lub stosu. Można z nich również korzystać do tworzenia znaczników opisowych.

Większość z języków wykorzystujących ten sposób znakowania jest kompletnych w sensie Turinga. Wśród przykładów można wymienić nroff, troff, TeX, Lout oraz PostScript. Znakowanie proceduralne jest często używane w profesjonalnych systemach publikacji, gdzie od specjalistów w dziedzinie typografii oczekiwana jest znajomość odpowiednich języków.

Znakowanie opisowe

W znakowaniu opisowym (inaczej semantycznym) fragmenty tekstu również opatruje się znacznikami, jednak znaczniki nie narzucają wprost w jaki sposób mają być prezentowane, a raczej (poprzez opis w odpowiednim standardzie lub samą nazwę) określają jakie jest znaczenie danego fragmentu tekstu.

<tytuł>Tytuł dokumentu</tytuł>
<opis>Szczegółowy opis dokumentu przedstawiający jego tematykę oraz zastosowanie</opis>[3]

Główną zaletą znakowania opisowego jest jego elastyczność. Wynika to z tego, że to w jaki sposób i czy w ogóle wyświetlany jest fragment o określonej funkcji (np. tytuł, data wydania itp.) określane jest przez program przetwarzający dokument. Dzięki temu tekst oznaczony opisowo może być użyteczny na wiele sposobów, które nie muszą być zaplanowane przez projektantów języka, czy nawet twórcę danego dokumentu.

Dodatkowo jeśli dokumenty są formatowane według określonej specyfikacji, to można opracować metody przetwarzania całej grupy takich dokumentów do innych formatów. Można również w prosty sposób przetwarzać wiele dokumentów naraz tworząc podsumowania, czy ogólniej - uzyskując informacje, które nie są zawarte w żadnym z poszczególnych dokumentów.

Przykładowo odnośniki w języku HTML, początkowo przeznaczone do ręcznego aktywowania przez człowieka, są obecnie szeroko używane przez wyszukiwarki internetowe, które na ich podstawie odkrywają nowy materiał do zindeksowania oraz oceniają popularność zasobów sieciowych.

Znakowanie ogólne (ang. generic markup) to inny termin oznaczający znakowanie opisowe. Większość współczesnych języków opisowych umieszcza dane wewnątrz struktury drzewiastej i umożliwia umieszczanie wewnątrz nich wzajemnych odsyłaczy. Z tego powodu dokumenty mogą być traktowane jako bazy danych, których struktury jest świadomy sam system bazy danych (przeciwnie do elementów typu binary large object w przeszłości). Ponieważ tego rodzaju bazy danych nie mają tak rygorystycznych schematów struktury jak relacyjne bazy danych, są one powszechnie nazywane semistrukturalnymi bazami danych.

Historia

Koncepcje oznaczania tekstu od początku towarzyszyły przemysłowi wydawniczemu, jednak dawniej wszystko odbywało się przede wszystkim na papierze (na rękopisie lub maszynopisie). Ludzie zajmujący się typografią poprzez odpowiednie oznaczanie fragmentów tekstu określi krój, stopień lub odmianę pisma. Wraz z rozwojem komputerów zaczęły się pojawiać możliwości przeniesienia części procesu publikacji dokumentów na programy, dzięki którym nie trzeba było przynajmniej przepisywać ponownie tych samych tekstów.

Najprawdopodobniej koncepcję języków znaczników wysnuł po raz pierwszy William Tunnicliffe na konferencji w 1967. Preferował on jednak termin „kodowanie ogólne” (generic coding). Tunnicliffe rozwinął następnie na potrzeby środowisk związanych z publikacją osobny standard zwany GenCode. Równolegle jednak, również w późnych latach sześćdziesiątych, swoje przemyślenia utrzymane w podobnym tonie opublikował projektant Stanley Fish.

Wczesne przykłady języków znaczników wykorzystywanych poza przemysłem wydawniczym mogą zostać odszukane w narzędziach do składu tekstu dla systemu Unix typu troff i nroff. Pomimo zastosowania znakowania proceduralnego, nakłonienie aplikacji do wydania prawidłowo sformatowanego wydruku, mogło być dla amatora długotrwałym i nużącym zajęciem (ze względu na to, że efekt nie był widoczny od razu). Dostępność aplikacji typu WYSIWYG zmniejszyła popularność tego rodzaju języków wśród przeciętnych użytkowników.

TeX

Przykład kodu w języku TeX

TeX, podobnie jak GenCode, to kolejny standard znakowania przeznaczony do zastosowań związanych z publikacją stworzony oraz stale udoskonalany przez Donalda Knutha na przełomie lat 70. i 80. XX wieku. Do głównych zadań TeX-a należało szczegółowe przedstawienie układu tekstu oraz opisu czcionki, w celu uzyskania wysokiej jakości składu opracowań matematycznych.

Aby spełnić swoje założenia Knuth musiał spędzić wiele godzin na nauce zasad typografii. Stąd też TeX wymaga od użytkownika znacznego zasobu wiedzy nie tylko na temat specyficznej składni języka, ale także umiejętności związanych zarówno ze składem jak i edycją tekstu. Między innymi dlatego, znajduje on zastosowanie przede wszystkim w środowiskach akademickich, gdzie stał się de facto w wielu dziedzinach nauki.

Na bazie TeX-a i opisanego poniżej Scribe'a stworzono LaTeX-a – zestaw makr rozszerzający swój pierwowzór o elementy znakowania opisowego. Obecnie istnieją również narzędzia pozwalające tworzyć dokumenty w LaTeX-u bez znajomości jego składni z podglądem na żywo (czyli WYSIWYG).

Scribe, GML i SGML

Systemem, który wprowadził wyraźne rozróżnienie pomiędzy strukturą oraz prezentacją dokumentu był język Scribe. Został on opracowany i opisany w 1980 przez Briana Reida w ramach jego pracy doktorskiej na Carnegie Mellon University. Scribe jako pierwszy implementował liczne przełomowe cechy, między innymi gramatykę zakładającą istnienie elementów opisowych oraz koncepcję stylów odseparowanych od znakowanego dokumentu.

We wczesnych latach 80. tendencja do znakowania wyłącznie struktury dokumentu, podczas gdy aspektem wizualnym zajmować się miał oddzielny interpreter języka, nasilała się. Badacz z firmy IBM Charles Goldfarb, uznawany dzisiaj za jednego ojca języków znaczników, opracował wówczas GML. Język ten stał się podstawą dla opracowania przez komitet ISO, szeroko rozpowszechnionego do dzisiaj standardu SGML. Na czele komitetu opracowującego SGML stał Goldfarb, członkami komitetu byli także Sharon Adler, Anders Berglund i James D. Mason.

Do ukształtowania SGML przyczyniły się między innymi rozwiązania z projektu GenCode autorstwa Tuncliffe'a, a także rozwiązania Reida. Obok sposobu umieszczania znaczników wewnątrz dokumentu standard SGML określał także składnię meta dokumentów (DTD) do definiowania dozwolonych nazwy znaczników oraz relacji pomiędzy tymi elementami. Dzięki standaryzacji definiowania typów dokumentów możliwe stało się tworzenie języków znaczników, których struktura była ściśle określona przez DTD, co z kolei ułatwia opracowanie narzędzi do automatycznego przetwarzania takich tekstów. Dzięki tej właściwości SGML formalnie stał się metajęzykiem. Począwszy od późnych lat 80. większość powstających języków znaczników wykorzystywała składnię SGML-a. W 1986 SGML został ogłoszony Międzynarodowym Standardem pod nazwą ISO 8879.

Istotną rolę w propagowaniu SGML-a odegrał Jon Bosak (późniejszy założyciel grupy W3C), który pracował wówczas dla Sun Microsystems. Zdecydował się on na zastosowanie tego języka do celów przygotowywania dokumentacji dla wielu grup docelowych jednocześnie, co wiązało się ze znaczną redukcją kosztów. Między innymi dzięki temu SGML został dobrze przyjęty i cieszył się popularnością we wszystkich dziedzinach, które wykazywały znaczne zapotrzebowanie w dziedzinie dokumentacji.

Składnia SGML-a wykazywała szereg cech, które miały ułatwić oraz usprawnić pracę. Zbyt duża swoboda w określaniu znaczników i struktury przyczyniła się jednak do krytyki SGML-a, uważanego przez to za język nieintuicyjny oraz trudny w nauce. Dla przykładu SGML zezwalał w niektórych sytuacjach na pominięcie znaczników otwierających lub zamykających element (lub nawet obydwu naraz), gdyż uważano, że nadmiernie obciążeni pracownicy wsparcia technicznego docenią zmniejszenie ilości wpisywanych znaków.

HTML

Przykład kodu w języku HTML

Jeszcze w 1991 zdawało się, że zastosowanie SGML-a nie wykroczy poza aplikacje komercyjne oraz dziedzinę przechowywania danych. Uważano, że narzędzia WYSIWYG, które zapisywały dokumenty w zamkniętych formatach binarnych, oferowały funkcjonalność wystarczającą do wszystkich innych zastosowań związanych z przetwarzaniem tekstu.

Sytuacja uległa zmianie, gdy Tim Berners-Lee, poznawszy SGML dzięki Andersowi Berglundowi oraz reszcie swoich współpracowników z CERN, opracował na jego podstawie język HTML. Przypomina on inne języki znaczników oparte na SGML-u, jednak pierwsza, uproszona wersja nie posiadała własnego DTD.

XML

Język znaczników oparty na XML-u

Kolejny szeroko rozpowszechniony język znaczników to XML, opracowany wewnątrz W3C przez komitet pod przewodnictwem Jona Bosaka. Głównym celem XML było uproszczenie zasad SGML w kontekście jednego wybranego problemu - dokumentów sieciowych. XML podobnie jak SGML jest metajęzykiem i pozwala użytkownikom na tworzenie własnych układów znaczników.

Przyjęcie nowego metajęzyka zostało ułatwione przez fakt, iż każdy dokument XML jest jednocześnie dokumentem SGML. Użytkownicy przyzwyczajeni do SGML-a oraz przystosowane do niego oprogramowanie mogą dzięki temu względnie łatwo przyswoić sobie nową składnię. W języku XML rozwiązane zostały niektóre problemy związane ze złożonością SGML co wraz ze wzrostem czytelności, uprościło proces jego nauki oraz implementacji, wydłużając jednak składnię. Kolejne unowocześnienia usunęły niektóre problemy związane z internacjonalizacją dokumentów oraz umożliwiły interpretację i analizę (ang. parsing) dokumentu, również bez schematu opisującego jego strukturę.

XML został opracowany głównie na potrzeby semistrukturalnych środowisk w rodzaju dokumentów oraz publikacji. Dzięki swojej elastyczności i prostocie staje się jednak coraz częściej wykorzystywany do innych zastosowań, między innymi w różnych technologiach wymiany danych pomiędzy różnymi aplikacjami (np. SOAP, AJAX, ebXML).

Zobacz też

Przypisy

  1. Wykorzystywany podczas redagowania elektronicznej wersji Oxford English Dictionary. Umożliwia on wykonywanie złożonych zapytań przy wyszukiwaniu danych oraz łatwą transformację dokumentu do formatu HTML
  2. Przykład w języku TeX
  3. Przykład w języku XML/SGML

Linki zewnętrzne

Media użyte na tej stronie

Languages xml.png
Autor: unknown, Licencja: CC BY-SA 1.0
OED-LEXX-Bungler.jpg
Autor: unknown, Licencja: CC-BY-SA-3.0
Html-source-code2.png

source code HTML.

Image by Derek Jensen (Tysto), 2006-January-15
Texniccenter.png
Autor: TeXnicCenter developers, Licencja: GPL
Screenshot of the free open-source editor TeXnicCenter