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

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

當我們瀏覽網頁、閱讀電子書或設計文檔時,是否曾好奇這些數字內容背後的運作方式?標記語言作為文件結構和格式的核心技術,從出版業的傳統手稿標記進化而來,不僅改變了資訊表達的方式,更成為現代數位世界的重要基石。本文將深入探討標記語言的定義、類型、發展歷史及其實際應用,幫助你理解這一技術如何在日常生活中無處不在。


摘要:


標記語言是一種文本編碼系統,用於指定文檔的結構、格式以及內容間的關係,既服務於人類讀者,也便於計算機程序處理。以下是標記語言的關鍵內容:

  1. 基本概念
  • 標記語言起源於出版業的手稿標註,最初用於指示排版和印刷規則。
  • 通過規則將文本與標記信息結合,控制文檔顯示或豐富內容。
  1. 分類與特徵
  • 呈現標記:專注於文檔的視覺表現,如早期的 Troff 和 TeX。
  • 程序標記:包含文本處理指令,如 LaTeX。
  • 描述性標記:標記文檔的結構和含義,如現代 XML 和 HTML。
  1. 發展歷程
  • 從 GenCode、TeX 到 Scribe 和 SGML,再到 HTML 和 XML,標記語言經歷了從基於排版到關注結構和語義的轉變。
  • SGML 為 HTML 和 XML 奠定了基礎,成為數位內容的技術標桿。
  1. 現代應用
  • 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 主要用於需要大型文件管理的領域。
  • 網頁與 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 文件。
  • 輕量級標記語言 (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) 的目標尤其強調將文件的結構與其顯示方式分離。這意味著標記主要用於描述文件的各個組成部分(如章節、段落、表格等),而不是指定它們的視覺呈現方式。
  • LaTeXHTML 都是描述型標記的例子,它們鼓勵作者以概念化的方式描述內容,而不是視覺化的方式。

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 中,&lt; 代表 <&gt; 代表 >&amp; 代表 &

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> 標籤用於插入圖片,並包含 srcalt 屬性。

總結

標記語言的語法是其核心組成部分,它定義了如何使用標籤、屬性、元素和其他符號來描述文件的結構和格式。不同的標記語言有不同的語法規則,但它們都旨在提供一種標準化的方式來處理和呈現資訊。了解標記語言的語法是有效使用標記語言的關鍵。

留言

熱門文章