解密標記語言:從手稿標註到數位文本的核心技術

解密標記語言:從手稿標註到數位文本的核心技術
當我們瀏覽網頁、閱讀電子書或設計文檔時,是否曾好奇這些數字內容背後的運作方式?標記語言作為文件結構和格式的核心技術,從出版業的傳統手稿標記進化而來,不僅改變了資訊表達的方式,更成為現代數位世界的重要基石。本文將深入探討標記語言的定義、類型、發展歷史及其實際應用,幫助你理解這一技術如何在日常生活中無處不在。
摘要:
標記語言是一種文本編碼系統,用於指定文檔的結構、格式以及內容間的關係,既服務於人類讀者,也便於計算機程序處理。以下是標記語言的關鍵內容:
- 基本概念
- 標記語言起源於出版業的手稿標註,最初用於指示排版和印刷規則。
- 通過規則將文本與標記信息結合,控制文檔顯示或豐富內容。
- 分類與特徵
- 呈現標記:專注於文檔的視覺表現,如早期的 Troff 和 TeX。
- 程序標記:包含文本處理指令,如 LaTeX。
- 描述性標記:標記文檔的結構和含義,如現代 XML 和 HTML。
- 發展歷程
- 從 GenCode、TeX 到 Scribe 和 SGML,再到 HTML 和 XML,標記語言經歷了從基於排版到關注結構和語義的轉變。
- SGML 為 HTML 和 XML 奠定了基礎,成為數位內容的技術標桿。
- 現代應用
- HTML:廣泛用於網頁設計,結合結構標記與預設的呈現語義。
- XML:靈活定義自訂標記,支持強大的數據結構和驗證功能。
- XHTML:遵循 XML 規範的 HTML 版本,適用於需要高精度的應用場景。
標記語言不僅是數字內容的建構基石,更為我們提供了一種語言,橋接技術與人類需求。無論是用於設計視覺呈現,還是管理複雜結構,它都在日常生活中發揮著不可或缺的作用。
標記語言種類
標記語言 (markup language) 是一種文字編碼系統,用於指定文件的結構和格式,並可能包含文件各部分之間的關係。標記語言可以控制文件的顯示方式,或豐富其內容以方便自動處理。標記語言的規則定義了哪些標記資訊可以包含在文件中,以及如何將這些資訊與文件內容結合,以方便人類和電腦程式使用。
根據標記的目的和方式,標記語言可以分為以下幾種主要類型:
- 展示型標記 (Presentational markup):
- 這種類型的標記主要用於控制文字的排版和外觀,類似傳統的文書處理系統。
- 展示型標記通常以二進制代碼的形式嵌入在文字中,以達到「所見即所得」(WYSIWYG) 的效果。
- 這種標記通常對使用者是隱藏的,系統會在底層使用程序型或描述型標記,然後將其轉換為可見的排版效果。
- 例如,HTML 中
<i>
標籤在 HTML 4 中表示斜體文字,但在 HTML 5 中則有更多語義上的含義。
- 程序型標記 (Procedural markup):
- 這種類型的標記將指令嵌入在文字中,用於指示程式如何處理文字。
- 程式會依序處理文字,並執行遇到的指令。
- 程序型標記通常會包含程式設計的結構,如巨集 (macros),可以透過簡單的名稱調用複雜的指令集。
- 著名的例子包括 troff, TeX 和 Markdown。
- Markdown 是一種輕量級標記語言,它的設計目標是讓使用者能夠以易讀易寫的純文字格式撰寫內容。
- 描述型標記 (Descriptive markup):
- 這種類型的標記主要用於標記文件的組成部分,而非指定如何處理。
- 描述型標記的目標是將文件的結構與其顯示方式分離,讓文件的結構具有語義上的意義。
- 例如,HTML 中的
<cite>
標籤用於標記引文。 - LaTeX, HTML 和 XML 是著名的描述型標記語言。
- 描述型標記鼓勵作者以概念化的方式描述內容,而不是視覺化的方式。
- HTML 的成功很大程度上歸功於其使用描述性標記,這賦予了其彈性和擴展性。
除了以上三種主要類型,還有一些其他的標記語言分類方式:
- 輕量級標記語言 (Lightweight markup languages):
- 這類標記語言的主要目標是易於使用,通常是在沒有標準組織參與的情況下開發的。
- 輕量級標記語言旨在讓作者能夠透過瀏覽器建立格式化文字,例如在維基 (wikis) 和網路論壇中。
- Markdown, BBCode 和維基百科使用的標記語言 都是輕量級標記語言的例子。
- 元標記語言 (Meta-markup languages):
- SGML 和 XML 屬於元標記語言,它們允許設計者指定特定的模式,以決定允許哪些元素、屬性和其他功能。
- 使用者可以根據需要建立任何標籤,並描述這些標籤及其允許的用法。
- HTML 和許多其他語言都基於 SGML 或 XML。
總而言之,標記語言有多種類型,每種都有其特定的用途和設計哲學。展示型標記側重於文件的外觀,程序型標記側重於指令的執行,而描述型標記側重於文件的結構和語義。此外,輕量級標記語言旨在簡化使用,而元標記語言則提供建立其他標記語言的框架。
標記語言歷史
標記語言的歷史發展可以追溯到多個階段,從早期的排版需求到現代的網頁和資料交換,其演變過程如下:
- 早期排版與標記 (Early Typesetting and Markup)
- 在電腦出現之前,出版行業就已經有「標記 (marking up)」的傳統做法,也就是在手稿上添加註解,指示排版人員使用哪種字體、樣式和大小。這些註解通常是手寫的,由排版師或編輯人員完成。
- 這種手動標記的做法是標記語言概念的起源。
- 電腦時代的早期標記語言 (Early Computer Markup Languages)
- 1960年代:
- William W. Tunnicliffe 提出了「通用編碼 (generic coding)」的概念,旨在解決不同排版程式使用不同控制符號的問題。
- 1970年代:
- Stanley Rice 在 1970 年提出了類似的想法,認為應該將文件結構與格式控制分開。
- troff 和 nroff 是 Unix 系統中早期的排版工具,它們使用指令嵌入在文字中來控制格式。這些工具需要反覆試驗才能正確排版文件。
- Donald Knuth 開發了 TeX,專注於文字的詳細排版和字體描述,主要用於學術領域,尤其在數學書籍排版方面成為事實上的標準。
- 1980年代:
- Brian Reid 在 1980 年開發了 Scribe,這是第一個明確區分結構和呈現的標記語言。Scribe 引入了樣式與標記文件分離的概念,並影響了後來的標記語言。
- Charles Goldfarb 認為是標記語言之父,他開發了 IBM GML,並在 1978 年商業化。
- 基於 GML 和 GenCode 的 SGML (Standard Generalized Markup Language) 在 1986 年成為 ISO 標準。SGML 是一種元語言 (meta-language),允許使用者建立自己的標籤和定義標籤的使用方式。SGML 主要用於需要大型文件管理的領域。
- 1960年代:
- 網頁與 XML 的興起 (The Rise of the Web and XML)
- 1990年代初期:
- Tim Berners-Lee 在 1989 年提出了網際網路超文本系統的構想,並在 1990 年底制定了 HTML,這是基於 SGML 的應用。HTML 成為建立網頁的主要標記語言,並在網際網路的發展中扮演了關鍵角色。
- 1990年代末期:
- XML (Extensible Markup Language) 由 World Wide Web Consortium 開發,旨在簡化 SGML,並專注於網際網路上的文件。XML 也是一種元語言,允許使用者建立和描述自己的標籤。
- XML 由於其靈活性和強大的模式定義和驗證工具而迅速被採用,不僅用於文件,也用於應用程式之間的資料交換,以及其他領域。
- 2000 年代初期:
- 從 2000 年 1 月到 HTML5 發布之前,所有 W3C 的 HTML 建議都基於 XML,使用縮寫 XHTML,要求 XHTML 網頁文件必須是符合格式的 XML 文件。
- 1990年代初期:
- 輕量級標記語言 (Lightweight Markup Languages)
- 近年來,為了方便使用者在網頁瀏覽器上創建格式化文字,出現了許多輕量級標記語言,如 Markdown、BBCode 和維基百科使用的標記語言。這些語言的設計目標是易於使用,並讓作者專注於內容而不是格式。
- 現代標記語言的應用 (Modern Applications of Markup Languages)
- 除了文字文件,標記語言也開始應用於其他類型資訊的呈現,例如播放列表、向量圖形、網頁服務、內容聯合和使用者介面等。
- XML 的應用促成了多種標記語言的組合,例如 XHTML+SMIL 和 XHTML+MathML+SVG。
總結來說,標記語言的歷史是一個不斷演變的過程,從早期手動排版標記到電腦時代的自動化排版,再到網頁和資料交換的廣泛應用,標記語言在不同的技術發展階段都扮演了關鍵角色。從 troff, TeX, SGML 到 HTML, XML 和 Markdown,每一種標記語言的出現都解決了特定的問題,並推動了資訊技術的發展。SGML 是一種重要的元語言,它奠定了許多現代標記語言的基礎。
標記語言類型
標記語言是一種用於指定文件結構和格式的文字編碼系統。 根據不同的分類標準,標記語言可以分為多種不同的類型。以下將詳細討論這些類型,並引用來源資訊加以說明:
1. 依據標記的目的和方式分類
- 展示型標記 (Presentational Markup):
- 這種標記主要用於控制文字的排版和外觀。
- 展示型標記通常以二進制代碼的形式嵌入在文字中,以達到「所見即所得」(WYSIWYG)的效果。
- 這種類型的標記對使用者通常是隱藏的,系統會在底層使用程序型或描述型標記,然後將其轉換為可見的排版效果。
- HTML 中
<i>
標籤在 HTML 4 中是一個展示型標記,表示斜體文字,但在 HTML 5 中則具有更多語義上的含義。
- 程序型標記 (Procedural Markup):
- 這種標記將指令嵌入在文字中,指示程式如何處理文字。
- 程式會依序處理文字,並執行遇到的指令。
- 程序型標記通常包含程式設計的結構,例如巨集 (macros),可以通過簡單的名稱調用複雜的指令集。
- troff, TeX 和 Markdown 都是程序型標記的例子。
- Markdown 是一種輕量級標記語言,其設計目標是讓使用者能夠以易讀易寫的純文字格式撰寫內容。
- 描述型標記 (Descriptive Markup):
- 這種標記主要用於標記文件的組成部分,而不是指定如何處理它們。
- 描述型標記的目標是將文件的結構與其顯示方式分離,使文件的結構具有語義上的意義。
- 例如,HTML 中的
<cite>
標籤用於標記引文。 - LaTeX, HTML 和 XML 是描述型標記的著名例子。
- 描述型標記鼓勵作者以概念化的方式描述內容,而不是視覺化的方式。
- HTML 的成功很大程度上歸功於其使用描述性標記,這賦予了其彈性和擴展性。
2. 依據應用情境和設計目標分類
- 輕量級標記語言 (Lightweight Markup Languages)
- 這類標記語言的主要目標是易於使用,通常是在沒有標準組織參與的情況下開發的。
- 它們旨在讓作者能夠透過瀏覽器創建格式化文字,例如在維基 (wikis) 和網路論壇中。
- Markdown, BBCode 和維基百科使用的標記語言 都是輕量級標記語言的例子。
- 元標記語言 (Meta-markup languages)
- SGML 和 XML 屬於元標記語言,它們允許設計者指定特定的模式,以決定允許哪些元素、屬性和其他功能。
- 使用者可以根據需要建立任何標籤,並描述這些標籤及其允許的用法。
- HTML 和許多其他語言都基於 SGML 或 XML。
3. 其他分類方式
- 依照用途: 標記語言還可以根據其用途進行分類,例如用於數學公式的 MathML、用於向量圖形的 SVG 等。
- 依據所基於的標準: 例如,基於 SGML 的 HTML,基於 XML 的 XHTML,以及基於 CommonMark 的 GitHub Flavored Markdown (GFM)。
小結
標記語言有多種類型,每種都有其特定的用途和設計哲學。展示型標記側重於文件的外觀,程序型標記側重於指令的執行,而描述型標記側重於文件的結構和語義。此外,輕量級標記語言旨在簡化使用,而元標記語言則提供建立其他標記語言的框架。
從歷史上看,標記語言的演變反映了人們對文件處理和資訊呈現的不同需求,從早期的排版需求到現代的網頁和資料交換,標記語言在不同領域都有著廣泛的應用。
標記語言特徵
標記語言是一種文字編碼系統,用於指定文件的結構和格式,並可能包含文件各部分之間的關係。標記語言的特徵可以從多個方面來探討,以下將詳細說明:
1. 結構與內容分離 (Separation of Structure and Content)
- 許多標記語言的一個關鍵特徵是允許將標記指令 (markup instructions) 與文件內容 (document content) 混合在同一個數據流或檔案中。例如,HTML 文件中,標籤
<p>
和<h1>
等標記指令與實際的文字內容穿插在一起。 - 這種方式使得標記指令可以嵌入在文字中,從而描述文字的結構和含義。
- 然而,並非所有標記語言都必須將標記與內容混合。有些系統會將標記與內容分離,使用指針、偏移量、ID 或其他方法來協調兩者。這種「分離標記 (standoff markup)」通常用於程式內部表示,以處理標記文件。
- 描述型標記 (Descriptive Markup) 的目標尤其強調將文件的結構與其顯示方式分離。這意味著標記主要用於描述文件的各個組成部分(如章節、段落、表格等),而不是指定它們的視覺呈現方式。
- LaTeX 和 HTML 都是描述型標記的例子,它們鼓勵作者以概念化的方式描述內容,而不是視覺化的方式。
2. 標記指令 (Markup Instructions)
- 標記語言使用標籤 (tags) 或其他標記符號來指示文件的結構和格式。這些標記符號通常由角括號
< >
包圍。 - 例如,在 HTML 中,
<h1>
表示第一級標題,<p>
表示段落,<em>
表示強調的文字。這些標籤具有語義 (semantic) 意義,描述了文本的用途或含義。 - 有些標記指令,如 HTML4 中的
<i>
標籤,最初是展示型 (presentational) 的,用於指定文字的特定外觀(如斜體)。但在 HTML5 中,<i>
的語義有所改變,表示「不同語氣或情緒的文字」。 - 標記語言的設計允許使用者使用自定義的標籤和屬性,例如 XML。
3. 標記與文字混合 (Intermingling Markup with Text)
- 大多數標記語言允許將標記與文字和圖片等內容混合在一起。
- 這種混合方式使得標記可以精確地應用於文本的特定部分,例如強調句子中的幾個詞或將其識別為專有名詞。
- 例如,HTML 中可以用
<strong>
標籤來強調某個詞語。
4. 呈現方式控制 (Control of Presentation)
- 標記語言可以控制文件的顯示方式 (display) 或豐富其內容,以方便自動處理。
- 一些標記語言,如 HTML,具有預定義的呈現語義 (pre-defined presentation semantics),也就是說,它們的規範規定了如何在特定媒體上呈現結構化資料。
- 程序型標記語言,如 troff, TeX 和 Markdown,將指令嵌入在文字中,指示程式如何處理文字,進而影響文件的呈現。
5. 擴展性 (Extensibility)
- 標記語言可以通過使用底層的巨集語言 (macro language) 來進行擴展,以開發新的環境和命令。
- 這些巨集通常會收集到套件 (packages) 中,以解決特定的排版需求,例如格式化複雜的數學表達式或圖形。
- 例如,LaTeX 提供了許多現成的命令,用於章節標題、腳註、交叉引用和參考文獻等。
- XML 由於其允許使用者建立任何所需的標籤(因此具有「可擴展性」),並且可以描述這些標籤及其允許的用法,所以也是一種可擴展的標記語言。
6. 多樣化的應用 (Diverse Applications)
- 標記語言最初用於文字文件,但現在也越來越多地應用於其他類型資訊的呈現,包括播放列表、向量圖形、網頁服務、內容聯合和使用者介面。
- XML 在這些應用中非常常見,因為它是一種定義良好且可擴展的語言。
7. 易用性 (Ease of Use)
- 許多輕量級標記語言,如 Markdown,旨在讓使用者能夠以易讀易寫的純文字格式撰寫內容,並透過網頁瀏覽器創建格式化文字。
- Markdown 的設計強調可讀性 (readability),即 Markdown 格式化的文件應當可以直接作為純文字發布,而不會看起來被標籤或格式指令標記。
總結來說,標記語言的主要特徵包括結構與內容分離、使用標記指令、標記與內容混合、控制呈現方式、擴展性、多樣化的應用以及易用性。這些特徵使得標記語言能夠有效地處理和呈現各種資訊,並在不同的應用領域中發揮重要作用。
標記語言語法
標記語言的語法是指標記指令的規則和結構,這些指令用於指定文件的結構和格式。不同的標記語言有不同的語法規則,但它們通常共享一些共同的特徵。以下將詳細討論標記語言的語法,並引用來源資訊加以說明:
1. 標籤 (Tags)
- 角括號: 許多標記語言使用角括號
< >
來包圍標籤,例如 HTML 中的<p>
和<h1>
。這些標籤指示文件的結構元素。 - 起始標籤和結束標籤: 大多數標籤都有一個起始標籤 (start tag) 和一個結束標籤 (end tag)。例如,在 HTML 中,
<p>
是起始標籤,</p>
是結束標籤,它們之間包含了段落的內容。 - 空標籤: 有些標籤沒有內容,被稱為空標籤 (empty tag)。在 XML 和 XHTML 中,空標籤必須明確關閉,例如
<br />
。在 HTML 中,空標籤可以寫成<br>
。 - 標籤名稱: 標籤名稱通常是預定義的關鍵字,例如 HTML 中的
<h1>
(第一級標題)和<em>
(強調文字)。 - 大小寫: HTML 標籤通常不區分大小寫,但 XHTML 標籤必須是小寫。
2. 屬性 (Attributes)
- 屬性值: 標籤可以包含屬性,用於提供有關元素的附加信息。屬性通常以名稱-值對 (name-value pairs) 的形式存在,例如 HTML 中的
<img src="image.jpg" alt="描述文字">
。 - 引號: 在 XHTML 中,屬性值必須用引號括起來。在 HTML 中,引號是可選的,但建議使用。
3. 元素 (Elements)
- 元素: 標籤和內容的組合構成一個元素 (element)。例如,
<p>這是一個段落。</p>
是一個段落元素。 - 嵌套: 元素可以嵌套 (nest) 在其他元素內,形成層次結構,例如列表和表格。
4. 特殊字元和跳脫字元 (Special Characters and Escape Characters)
- 特殊字元: 某些字元在標記語言中有特殊含義,例如
<
、>
和&
。這些字元需要使用跳脫字元或實體編碼來表示,以避免被解析器誤解。 - 實體編碼: 在 HTML 中,
<
代表<
,>
代表>
,&
代表&
。
5. 語法規則的差異
- 不同標記語言 有不同的語法規則。例如,Markdown 使用不同的符號來表示標題、列表和強調文字,如
#
表示標題,*
和_
表示斜體。 - 輕量級標記語言 的語法通常較簡單,旨在易於閱讀和編寫。
- 描述型標記語言 的語法通常更注重結構和語義,例如 XML 的嚴格語法規則。
- 程序型標記語言,如 TeX 和 LaTeX,具有更複雜的語法,包括宏和命令。
6. 可擴展性 (Extensibility)
- 元標記語言,如 XML 和 SGML,允許使用者自訂標籤和屬性,並描述它們的用法。這使得標記語言可以根據需要進行擴展。
- LaTeX 使用巨集 (macros) 來擴展其功能,包括建立新的環境和指令。
7. 語法驗證 (Syntax Validation)
- 嚴格的語法: 一些標記語言,例如 XML 和 XHTML,有非常嚴格的語法規則,要求標籤必須正確關閉,屬性值必須用引號括起來。
- 語法錯誤: 標記語言的處理器通常會檢查語法錯誤,並在發現錯誤時產生警告或錯誤訊息。這有助於確保文件的結構正確。
範例說明
以下是一個使用 HTML 語法的範例:
<!DOCTYPE html>
<html>
<head>
<title>我的網頁</title>
</head>
<body>
<h1>這是一個標題</h1>
<p>這是一個段落,其中包含 <em>強調</em> 的文字。</p>
<img src="image.jpg" alt="圖片描述">
</body>
</html>
在這個範例中:
-
<!DOCTYPE html>
是一個宣告,指示文件類型為 HTML。 -
<html>
、<head>
、<body>
等是 HTML 文件的基本結構元素。 -
<h1>
和<p>
是用於定義標題和段落的標籤。 -
<em>
標籤用於表示強調的文字。 -
<img>
標籤用於插入圖片,並包含src
和alt
屬性。
總結
標記語言的語法是其核心組成部分,它定義了如何使用標籤、屬性、元素和其他符號來描述文件的結構和格式。不同的標記語言有不同的語法規則,但它們都旨在提供一種標準化的方式來處理和呈現資訊。了解標記語言的語法是有效使用標記語言的關鍵。
留言