Język znaczników oparty na SGML-u
[1]
Język znaczników (ang. markup language) – format dokumentu, który obok tekstu zawiera także dodatkowe informacje, które go opisują. Te dodatkowe informacje, dla przykładu na temat wyglądu czy znaczeniu fragmentu dokumentu, są wyrażane poprzez wplecione w tekst znaczniki.
Jednym z najpopularniejszych aktualnie 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 dnia dzisiejszego) 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 zróżnicowane odmiany znakowania są stosowane w danym systemie jednocześnie.
Dla przykładu 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 także element PRE, wyróżniający obszar znakowania prezentacyjnego, którego zawartość ma zostać wyświetlona dokładnie tak, jak była umieszczona w dokumencie (bez specjalnego formatowania oraz bez pomijania tzw. białych znaków).
Znakowanie prezentacyjne
W znakowaniu prezentacyjnym dokument nie wymaga żadnego formatowania, a strukturę dokumentu da się określić zaledwie ze sposobu rozmieszczenia jego zawartości. Dla przykładu tytuł dokumentu może zostać poprzedzony kilkoma znakami nowej linii albo spacji, co ma sugerować marginesy oraz efekt centrowania.
Tytuł dokumentu
Szczegółowy opis dokumentu
przedstawiający jego tematykę
oraz zastosowanie
Pewne procesory tekstu oraz inne programy przetwarzające tekst podejmują próby wywiedzenia struktury dokumentu z podobnych konwencji, jednak wielość stylów oraz wieloznaczność interpretacji znacząco to utrudniają.
Znakowanie proceduralne
Znakowanie proceduralne także wyznacza sposób prezentacji tekstu, lecz jego znaczniki nie są zwykle widoczne dla użytkownika końcowego. Oprogramowanie albo ludzie przetwarzający tekst interpretują znaczniki odpowiednio układając oraz formatując tekst.
Dla przykładu formatowany tytuł dokumentu bywa bezpośrednio poprzedzony przez ciąg dyrektyw, mówiący o konieczności przejście 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 wielokrotnie stosowane ciągi znaczników da się uprościć poprzez zastosowanie makr albo stosu. Można z nich także korzystać do tworzenia znaczników opisowych.
Przeważajaca ilość z języków wykorzystujących ten sposób znakowania jest kompletnych w sensie Turinga. Wśród przykładów da się wymienić nroff, troff, TeX, Lout oraz PostScript. Znakowanie proceduralne jest wielokrotnie 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 także opatruje się znacznikami, jednak znaczniki nie narzucają wprost w jaki sposób posiadają być prezentowane, a raczej (poprzez opis w odpowiednim standardzie albo 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 oraz 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 bywa użytecznych 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 wg określonej specyfikacji, to da się opracować metody przetwarzania całej grupy takich dokumentów do innych formatów. Można także 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.
Dla przykładu odnośniki w języku HTML, początkowo przeznaczone do ręcznego aktywowania przez człowieka, są aktualnie 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 odmienny termin oznaczający znakowanie opisowe. Przeważajaca ilość współczesnych języków opisowych umieszcza dane wewnątrz struktury drzewiastej oraz dopuszcza umieszczanie wewnątrz nich wzajemnych odsyłaczy. Z tego powodu dokumenty bywają 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). Gdyż tego rodzaju bazy danych nie posiadają 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 albo maszynopisie). Ludzie zajmujący się typografią poprzez odpowiednie oznaczanie fragmentów tekstu określi krój, stopień albo 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" (ang. markup languages) 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, także w późnych latach 60., swoje przemyślenia utrzymane w podobnym tonie opublikował projektant Stanley Fish.
Wczesne przykłady języków znaczników wykorzystywanych poza przemysłem wydawniczym potrafią zostać odszukane w narzędziach do składu tekstu dla systemu Unix typu troff oraz nroff. Pomimo zastosowania znakowania proceduralnego, nakłonienie aplikacji do wydania prawidłowo sformatowanego wydruku, mogło być dla amatora długotrwałym oraz 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
-
Osobny artykuł: TeX.
Przykład kodu w języku TeX
TeX, analogicznie jak GenCode, to kolejny standard znakowania przeznaczony do zastosowań związanych z publikacją zbudowany oraz stale udoskonalany przez Donalda Knutha na przełomie lat 70. oraz 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 oraz edycją tekstu. Między innymi dlatego, znajduje on zastosowanie przede wszystkim w środowiskach akademickich, gdzie stał się de facto standardem w wielu dziedzinach nauki.
Na bazie TeX-a oraz opisanego poniżej Scribe'a stworzono LaTeX-a - zestaw makr rozszerzający swój pierwowzór o elementy znakowania opisowego. Aktualnie są także narzędzia pozwalające tworzyć dokumenty w LaTeX-u bez znajomości jego składni z podglądem na żywo (czyli WYSIWYG).
Scribe, GML oraz SGML
-
Osobny artykuł: SGML.
Systemem, który wprowadził wyraźne rozróżnienie pomiędzy strukturą oraz prezentacją dokumentu był język Scribe. Został on opracowany oraz opisany w 1980 przez Briana Reida w ramach jego pracy doktorskiej na Carnegie Mellon University. Scribe jako pierwszy implementował rozliczne przełomowe cechy, pomię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 jedynie struktury dokumentu, z tym że 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 oraz James D. Mason.
Do ukształtowania SGML przyczyniły się pomię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ę wykonywanie 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. przeważajaca ilość powstających języków znaczników wykorzystywała składnię SGML-a. W 1986 SGML stał się 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 stał się dobrze przyjęty oraz 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 oraz 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 poniektórych sytuacjach na pominięcie znaczników otwierających albo zamykających element (lub nawet obu naraz), albowiem uważano, że nadmiernie obciążeni pracownicy pomocy technicznej docenią zmniejszenie ilości wpisywanych znaków.
HTML
-
Osobny artykuł: HTML.
Przykład kodu w języku HTML
Jeszcze w 1991 r. 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, kiedy sir 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. Steven DeRose przekonuje, że wykorzystanie składni SGML oraz nastawienie HTML na znakowanie opisowe (i idąca za nim elastyczność oraz rozszerzalność) stało się znaczącym czynnikiem w sukcesie Światowej Sieci (kolejne elementy to koncepcja URL-i oraz nieograniczona dystrybucja przeglądarek internetowych)potrzebne źródło.
XML
-
Osobny artykuł: 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. Podstawowym celem XML było uproszczenie zasad SGML w kontekście jednego wybranego dylematu - dokumentów sieciowych. XML analogicznie jak SGML jest metajęzykiem oraz dopuszcza użytkownikom na wykonywanie własnych układów znaczników.
Przyjęcie nowego metajęzyka było ułatwione przez fakt, iż każdy dokument XML jest równocześnie dokumentem SGML. Użytkownicy przyzwyczajeni do SGML-a oraz przystosowane do niego oprogramowanie potrafią dzięki temu względnie łatwo przyswoić sobie nową składnię. W języku XML rozwiązane zostały pewne 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 pewne problemy związane z internacjonalizacją dokumentów oraz umożliwiły interpretację oraz analizę (ang. parsing) dokumentu, także bez schematu opisującego jego strukturę.
XML stał się opracowany z reguły na potrzeby semistrukturalnych środowisk w rodzaju dokumentów oraz publikacji. Dzięki swojej elastyczności oraz prostocie staje się jednak coraz częściej wykorzystywany do innych zastosowań, pomiędzy innymi w wielorakich technologiach wymiany danych pomiędzy różnymi aplikacjami (np. SOAP, AJAX, ebXML).
Przypisy
- ↑ 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
- ↑ Przykład w języku TeX
- ↑ Przykład w języku XML/SGML
Sprawdź też
Linki zewnętrzne