Sgml、 HTML 和 XML 都是標記語言。 「標記」一詞起源於編輯對做者手稿進行修改。 編輯「標記」手稿,以突出某些領域。 在計算機技術中,標記語言是一組單詞和符號,它們突出顯示文本以定義網頁文檔。 例如,網頁設計師使用標記語言來分隔段落並用黑體字表示字母。 一旦理解了 SGML、 HTML 和 XML 在 web 設計中的做用,就會看到這些不一樣語言之間的相互關係。 簡而言之,SGML、 HTML 和 XML 是一系列有助於使網站功能化和網頁設計動態化的語言。html
SGMLweb
在這個標記語言家族中,SGML 標記語言(SGML)是父語言。 Sgml 提供了一種定義標記語言併爲其表單設置標準的方法。 換句話說,SGML 規定了某些語言能夠或不能夠作什麼,必須包含哪些元素(如標記) ,以及語言的基本結構。 當父代將遺傳特徵傳遞給子代時,SGML 將結構和格式規則傳遞給標記語言。瀏覽器
HTMLbash
超文本標記語言是 SGML 的一個子程序,或者說應用程序。 正是 HTML 爲瀏覽器構建了頁面。 使用 HTML,您能夠嵌入圖像,建立頁面部分,創建字體,並指導頁面的流程。 此外,使用 HTML,你能夠經過腳本語言,如 JavaScript,爲網站添加其餘功能。 Html 是網站設計的主要語言。字體
XML網站
XML 標記語言是 HTML 的近親和 SGML 的侄子。 儘管 XML 是一種標記語言,所以也是家族的一部分,但它具備與 HTML 不一樣的功能。 Xml 是 SGML 的一個子集,它賦予它應用程序(如 HTML)所沒有的權利。 Xml 能夠定義本身的應用程序。 資源描述格式(RDF)是 XML 的一個應用。 Html 僅限於設計,沒有子集或應用程序。 Xml 是 SGML 的精簡版本,設計用於在有限的帶寬下工做。 Xml 繼承了 SGML 的遺傳特徵,可是建立它本身的家庭。 Xml 的子集包括 XSL 和 XSLT。ui
HTML語法組成spa
SGML(通用標記性語言),SGML是IBM公司1996年所使用的技術,在HTML5在前,HTML(超文本標記語言)和XML能夠說是SGML中規定的一種格式,HTML做爲SGML的子集.設計
它遵循着SGML基本語法和DTD(文檔類型定義),SGML用DTD來定義每一種文檔類型類型,在H5出現以前HTML都是使用符合SGML的DTD,能夠把他當作是事先定義好的HTML和XML模板。code
常見的HTML舉例子:
<table border="1">
<tr>
<td>這裏能夠放表格內容</td>
</tr>
</table>
複製代碼
瀏覽器已經不用SGML引擎去解析上述HTML結構,而是SGML精簡版XML去解析,其實XML也沒法去直接解析,它不知道<table>...</table>
是什麼而是透過DTD事先定義好咱們自定義的模板去解析的。以下:
<?xml version="1.0" ?>
<!DOCTYPE table[
<!ELEMENT table (tr)>
<!ELEMENT tr (#PCDATA)>
<!ELEMENT tr (td)>
<!ELEMENT td (#PCDATA)>
] >
<table border="1">
<tr>
<td>這裏能夠放表格內容</td>
</tr>
</table>
複製代碼
在HTML5以前HTML有三種格式DTD,分別是嚴格模式,過渡模式和framest模式(如下HTML4.01 又規定了 XHTML 語法版本)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
複製代碼
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
複製代碼
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
複製代碼
在HTML5以後,因爲這些DTD過於複雜的寫法沒啥實際用途,加之瀏覽器也不會使用SGML去解析他們,乾脆放棄了SGML子集的 的支持,規定了一個簡單易記住的DTD
<!DOCTYPE html>
複製代碼
DTD的重要組成部分
<!ELEMENT element-name category>
or
<!ELEMENT element-name (element-content)>
複製代碼
1.空元素
空元素用類別關鍵字EMPTY聲明:
<!ELEMENT element-name EMPTY>
Example:
<!ELEMENT br EMPTY>
XML example:
<br />
複製代碼
2.具備已解析字符數據的元素
僅具備解析字符數據的元素在括號內用#PCDATA聲明:
<!ELEMENT element-name (#PCDATA)>
Example:
<!ELEMENT tr (#PCDATA)>
複製代碼
3.具備任何內容的元素
使用類別關鍵字ANY聲明的元素能夠包含可分析數據的任意組合:
<!ELEMENT element-name ANY>
Example:
<!ELEMENT note ANY>
複製代碼
屬性顧名思義就是要來輔助元素,幫元素宣告它的屬性定義。
<!ATTLIST element-name attribute-name attribute-type attribute-value>
DTD example:
<!ATTLIST payment type CDATA "check">
XML example:
<payment type="check" />
複製代碼
<!ENTITY entity-name "entity-value">
//例子
DTD Example:
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright W3Schools.">
XML example:
<author>&writer;©right;</author>
//注意:實體分爲三部分:「&」號,實體名稱和分號(;)。
複製代碼
實體是用來定義普通文本的變量。實體引用是對實體的引用。 大多數朋友都瞭解這個 HTML 實體引用:" "。
這個"無折行空格"實體在 HTML 中被用於在某個文檔中插入一個額外的空格。
當文檔被 XML 解析器解析時,實體就會被展開。
外部聲名實體:
<!ENTITY entity-name SYSTEM "URI/URL">
//例子
DTD Example:
<!ENTITY writer SYSTEM "https://www.w3schools.com/entities.dtd">
<!ENTITY copyright SYSTEM "https://www.w3schools.com/entities.dtd">
XML example:
<author>&writer;©right;</author>
複製代碼
經常使用實體:
PCDATA 的意思是被解析的字符數據(parsed character data)。
可把字符數據想象爲 XML 元素的開始標籤與結束標籤之間的文本。
PCDATA 是會被解析器解析的文本。這些文本將被解析器檢查實體以及標記。
文本中的標籤會被看成標記來處理,而實體會被展開。
不過,被解析的字符數據不該當包含任何 &、< 或者 > 字符;須要使用 &、< 以及 > 實體來分 別替換它們。
複製代碼
CDATA 的意思是字符數據(character data)。
CDATA 是不會被解析器解析的文本。在這些文本中的標籤不會被看成標記來對待,其中的實體也不會被展開。
DTD的有哪些優點
使用DTD,獨立的人羣能夠就交換數據的標準DTD達成共識。
應用程序可使用DTD來驗證XML數據是否有效。
本文使用 mdnice 排版