TeX, PostScript, SGML, HTML, XML, XHTML……它们都是标记语言。
计算机语言的分类
计算机语言表示数据或计算,大概分几类。通用语言General Purpose Languages(Java、Python...)
特定于域的语言Domain Specific Languages(XML、HTML、TeX、后脚本、SQL)
数据语言Data Languages(JSON、YAML)
Rule of Least Power:
对于已知的特定目的,语言能力贵在够用而不是功能强大。
语言的表达能力
理论(图灵完整性)
实用(简洁、详细)
表达数据:
可以自我描述(元数据作为数据的一部分)
非自我描述格式。例如 XDR
根据包含的数据特点,分以下两类。
结构化数据,如JSON、 YAML 、 XML。
非结构化/半结构化数据,即标记语言(在文档中传达元数据的方法)。
标记语言(Markup)类型
表示Presentational/标点Punctuational Markup:使用标点符号、缩进、空格等内容来表示文档。
过程Procedural Markup:在文档中包含一些说明,这些说明用于向程序解释如何打印/显示文档。
描述性Descriptive Markup:与文档的逻辑结构相关,不一定与表示/显示相关。
SGML (Standard Generalized Markup Language, 标准通用标记语言)
有“用尖括号包起来的标签Angular tags”
树形结构
元素具有开始/关闭标签和内容(例如HTML里的
Content
)在tag中可以包含“属性名称/值”组成的配置对
文档类型定义(Document Type Definition, DTD)定义SGML应用程序的有效元素和属性,这对文档验证的应用/使能的标准化有所帮助。DTD样例:
超文本标记语言
Hypertext Markup Language, HTML
SGML的一个应用,用于Web的标记语言,属于Domain Specific Language(DSL),有预定的tag集,用于表示外观和结构。能容忍类似大写、缺少开始或结束tag的错误。
eXtensible Markup Language, XML 可扩展的标记语言
20世纪90年代的浏览器战争导致HTML需要进一步标准化,XML应运而生。
注意XML大小写敏感,所有的Tag必须有开始有结束
注意<>和&这些符号是保留字,需要用转义字符。
XML可以作为软件的配置和数据文件,如Maven项目里的pom.xml,用DOM API解析XML,但DOM API是先把数据在内存里复现出来,所以如果XML文件很大,可以换用SAX分析器。
Markdown
一种轻量级的标记语言。
JSON
语法格式:
AttributeName{
"Course" : "Software Engineering", "Year" : [2020, 2021], "Offered" : true
}
解析方法:
String course = JSON.parse("Course"); // In Java
YAML
JSON的一个超集。语法有点像Python:
Name: Four_Bit_Dec_Adder
Notes:
- LaTex
- Software Engineering
更多关于各类标记语言的教程在网上可以随手找到一堆,在此不做赘述。