仓库源文站点原文

各种标记语言

什么是标记语言

“标志(markup)”这个词来源自传统出版业的“标记”一个手稿, 也就是在原稿的边缘加注一些符号来指示打印上的要求。 长久以来,这个工作都是由专门的人("markup men")以及校对人来进行, 对原稿标志出使用什么样的字体,字体以及字号, 然后再将原稿交给其它人进行手工的排版工作。

根据维基百科对其的解释,“Markup language” 是用标准的标记来解释纯文本文档的内容,从而提供关于文档结构或文档该如何渲染的信息。

标志语言通常可以分为三类:表示性的、过程性的以及描述性的。

标记语言的发展

<!-- 需要插件的丰富性网络应用服务(Plug-in-Based Rich Internet Application,RIA) 例如:Adobe Flash、Microsoft Silverlight与Oracle JavaFX -->

XML 大致的发展关联

               ┌──────────────────────┐
               │                      │
               │          ┌───────────┼─────────┐
               │          │           │         │
               │          │           ▼         ▼
  GML ──────► SGML ────► HTML ─────► XML ────► HTML5
                          │           │         ▲
                          │           │         │
                          │           ▼         │
                          └───────► XHTML ──────┘

虽然现在提及标记语言,通常就是指 XML 和基于 XML 的其它标记语言。 但笔者认为像 JSON Yaml ini 这类基于文本的数据格式也可以归类到标记语言里。

一些常见标记语言的应用

XSL

XSL 指扩展样式表语言(EXtensible Stylesheet Language)。 CSS 是 HTML 样式表,那么 XSL 就是 XML 样式表。 W3C 开始发展 XSL 的原因是:存在着对于基于 XML 的样式表语言的需求。

XSL - 不仅仅是样式表语言, XSL 包括三部分:

Web services

Web services 平台的元素:

SOAP 是交换数据的一种协议规范, 使用在计算机网络Web服务(web service)中,交换带结构的信息。 SOAP为了简化网页服务器(Web Server)从XML数据库中提取数据时, 节省去格式化页面时间,以及不同应用程序之间按照HTTP通信协议, 遵从XML格式执行资料互换,使其抽象于语言实现、平台和硬件。

UDDI 是统一描述、发现和集成(Universal Description, Discovery, and Integration)的缩写。 UDDI 是一种目录服务,通过它,企业可注册并搜索 Web services。 它是一个基于 XML 的跨平台的描述规范,可以使世界范围内的企业在互联网上发布自己所提供的服务。

WSDL 描述Web服务的公共接口。 这是一个基于XML的关于如何与Web服务通讯和使用的服务描述; 也就是描述与目录中列出的Web服务进行交互时需要绑定的协议和信息格式。 通常采用抽象语言描述该服务支持的操作和信息,使用的时候再将实际的网络协议和信息格式绑定给该服务。

<!-- 大多数语境下的 Web services 其实就指 SOAP 。 --> 大多数语境下的 Web Services 平台是 XML + HTTP 。 HTTP 是可以替换成其它协议的。 Web Services 的关键是 XML 。 SOAP , UDDI , WSDL 等部分,本质上的区别是 XML 的格式和内容的区别。 ### RDF 资源描述框架(英语:Resource Description Framework,缩写:RDF), 是万维网联盟(W3C)提出的一组标记语言的技术规范,基于XML语法及XML Schema的资料类型以便更为丰富地描述和表达网络资源的内容与结构。 资源描述框架(RDF)是用于描述网络资源的 W3C 标准, 比如网页的标题、作者、修改日期、内容以及版权信息。 ### 语义网 语义网(英语:Semantic Web)是由万维网联盟的蒂姆·伯纳斯-李(Tim Berners-Lee)在1998年提出的一个概念, 它的核心是:通过给万维网上的文档(如: HTML文档)添加能够被计算机所理解的语义(元数据), 从而使整个互联网成为一个通用的信息交换介质。 语义万维网通过使用标准、置标语言和相关的处理工具来扩展万维网的能力。 不过语意网概念实际上是基于很多已有技术的,也依赖于后来和text-and-markup与知识表现的综合。 ### 基于 XML 的其它标记语言 - DTD - Document Type Definition - 文档类型定义(DTD)可定义合法的XML文档构建模块。 - 它使用一系列合法的元素来定义文档的结构。 - DTD 可被成行地声明于 XML 文档中 ``` <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> ``` - 也可作为一个外部引用。 ``` <!DOCTYPE note SYSTEM "note.dtd"> ``` - HTML 开头的那句 <!DOCTYPE> 也可以算作是 DTD - DTD 已经被 XSD 取代 - XSD - XML Schema Definition - XSD 是基于 XML 的 DTD 替代者。 - SVG - 可缩放矢量图形(英语:Scalable Vector Graphics,缩写:SVG)是一种基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式。SVG由W3C制定,是一个开放标准。 - MathML - 数学标记语言(Mathematical Markup Language,MathML),是一种基于XML的标准,用来描述数学符号和公式。 - 它的目标是把数学公式集成到万维网和其他文档中。从2015年开始,MathML成为了HTML5的一部分和ISO标准。 - 只有 火狐 能直接支持 MathML 。 - Windows 7 自带工具名叫 Math Input Panel 。可以把手写输入转换为 MathML 。 - XLink - XML链接语言,或XLink,是一种通过W3C推荐标准认证的XML标记语言,用于在 XML 文档中创建超链接,以及提供与这些链接相关联的元数据。 - OWL - 网络本体语言(英语:Web Ontology Language,OWL)旨在提供一种可用于描述网络文档和应用之中所固有的那些类及其之间关系的语言。OWL网络本体语言当前已经获得万维网联盟认可的,用于编纂本体的知识表达语言家族。 - 还有很多 https://en.wikipedia.org/wiki/List_of_XML_markup_languages ### 各种文档格式 - 重量级的 - rtf - html - tex - pdf - 轻量级的 - markdown - common markdown - GitHub Flavored Markdown (GFM) - textile - rts - docbook - AsciiDoc - orgmode - 旧时代的 - man - info - 其他 - bbcode - Wiki markup language ## 参考 - https://en.wikipedia.org/wiki/Markup_language - https://en.wikipedia.org/wiki/XML <!-- 当今,XML 是非常重要的技术,并且开发项目正在使用这些基于 XML 的技术: 用 XML Schema 定义 XML 的结构和数据类型 用 XSLT 来转换 XML 数据 用 SOAP 来交换应用程序之间的 XML 数据 用 WSDL 来描述网络服务 用 RDF 来描述网络资源 用 XPath 和 XQuery 来访问 XML 数据 用 SMIL 来定义图形 XSL 指扩展样式表语言(EXtensible Stylesheet Language)。 万维网联盟(W3C)开始发展 XSL 的原因是:存在着对于基于 XML 的样式表语言的需求。 CSS = HTML 样式表 XSL = XML 样式表 XSL - 不仅仅是样式表语言, XSL 包括三部分: XSLT - 一种用于转换 XML 文档的语言。 XPath - 一种用于在 XML 文档中导航的语言。 XSL-FO - 一种用于格式化 XML 文档的语言。 XSLT 指 XSL 转换。 XSLT 将 XML 文档转换为其他文档,比如 XHTML。 XSL-FO 可描述输出到屏幕、纸媒介或者其他媒介的 XML 数据的格式。 XSL-FO 指可扩展样式表语言格式化对象(Extensible Stylesheet Language Formatting Objects) 资源描述框架(RDF)是用于描述网络资源的 W3C 标准, 比如网页的标题、作者、修改日期、内容以及版权信息。 XDR 可延伸标示语言资料缩减(XML-Data Reduced) xsd XML Schema 是基于 XML 的 DTD 替代者。 XML Schema 可描述 XML 文档的结构。 XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。 这个片断: xmlns:xs="http://www.w3.org/2001/XMLSchema" 显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"。 同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema" 的元素和数据类型应该使用前缀 xs: 这个片断: targetNamespace="http://www.w3school.com.cn" 显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: "http://www.w3school.com.cn"。 这个片断: xmlns="http://www.w3school.com.cn" 指出默认的命名空间是 "http://www.w3school.com.cn"。 DTD Document Type Definition 文档类型定义(DTD)可定义合法的XML文档构建模块。 它使用一系列合法的元素来定义文档的结构。 DTD 可被成行地声明于 XML 文档中 <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> 也可作为一个外部引用。 <!DOCTYPE note SYSTEM "note.dtd"> 什么是语义网? semantic(语义的)这个词指有意思的或与之相关的。 语义网是一种使用可以被计算机理解的方式描述事物的网络。 甲壳虫乐队是来自利物浦的著名乐队。 约翰.列农是甲壳虫乐队的成员之一。 唱片 "Hey Jude" 是由甲壳虫乐队录制的。 象这样的句子可以被人类理解。但是如何能够被计算机理解呢? 陈述是由语法规则构建的。一门语言的语法定义了构建该语言的陈述所需的规则。 这就是语义网的本质所在 - 以计算机应用程序可以理解的方式描述事物。 语义网和网页之间的链接没有关系。 语义网描述的是事物之间的关系(比方说 A 是 B 的一部分,而 Y 是 Z 的成员)以及事物的属性(例如尺寸、重量、使用期限和价格等等)。 DOM 是一项 W3C (World Wide Web Consortium) 标准。 DOM 定义了访问文档的标准: “W3C 文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问、更新文档的内容、结构和样式。” W3C DOM 标准被分为 3 个不同的部分: Core DOM - 所有文档类型的标准模型 XML DOM - XML 文档的标准模型 HTML DOM - HTML 文档的标准模型 如何通过SOAP发送二进制数据? 只要web services需要发送/接受二进制数据就会遇到。 解决办法也很直接:或者把二进制数据通过Base64转到文本,或者通过附件的方式发送。 Base64方式比较简单易用,但是生成的文本对应二进制数据体积有三成以上的膨胀。 发送很小二进制数据的时候可以应用,因为简单,数据体积一般也不会超出可接受范围。 SOAP with Attachments是另一种方式,很类似发送email的附件。 这种做法有效而标准,不过它在设计上有个缺陷, 附件并不作为SOAP消息的一部分被发送,类似在SOAP消息里面传个二进制数据的URL,然后通过这URL得到对应的二进制数据。 这可在互操作性上有些问题,比如和WS-Security协作时可能控制不到外部的二进制数据。 MTOM(Message Transmission Optimization Mechanism) 是在SOAP with Attachment之后一种更好的解决方案。 它通过XOP(XML-binary Optimized Packaging)方式来实现二进制数据的传输。 XOP也是将二进制数据放在XML文档外面, 但它通过在XML文档中添加XOP:include元素告诉XML处理器使用二进制数据替换特定的内容, 这样就使得二进制数据的处理方式与文本数据的处理方式一致。 xml 还有很多标准 XLink XPointer SVG MathML XQuery 天生支持 XPath 并将其作为 XQuery 语法的一部分, XQuery 显然能完成 XPath 所能完成的任何任务。 XQuery 是图灵完备的(Turing-complete), 可以被看作是一种通用语言,因而很容易克服 XPath 的诸多局限, 但代价是复杂性略有增加。 OPML是英语Outline Processor Markup Language的首字母缩写, 意思是“大纲处理标记语言”,为一种创建在XML上的文件保存格式。 流行的应用方式为收集博客或播客的RSS来源, 整理成单一可交换的OPML格式的订阅列表,让用户便于转移自己的订阅项目。 DOCTYPE 的作用是什么? IE5.5 引入了文档模式的概念,而这个概念是通过使用文档类型(DOCTYPE)切换实现的。 <!DOCTYPE>声明位于 HTML 文档中的第一行,处于 <html> 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE 不存在或格式不正确会导致浏览器世界以兼容模式呈现。 不过 HTML5 为什么只需要写 <!DOCTYPE HTML>,而不需要引入 DTD? HTML5其实并不基于 SGML,因此不需要对 DTD 进行引用,但是需要 DOCTYPE 来规范浏览器的行为(让浏览器按照它们应该的方式来运 行)。 而 HTML4.01 是基于 SGML ,所以需要对 DTD 进行引用,告知浏览器世界所使用的文档类型,才能让浏览器世界选择正确的渲染模式。 markdown json ini yaml 都算是标记语言 超文本置标语言(HyperText Markup Language,HTML) 可扩展置标语言(eXtensible Markup Language,XML) 标志语言通常可以分为三类: 表示性的 是在编码过程中,标记文档的结构信息。例如,在文本文件中,文件的标题可能需要用特定的格式表示(居中,放大等),这样我们就需要标记文件的标题。 过程性的 大多数情况下,过程性标志语言包含有一个图灵完备编程语言。 过程性标志语言的范例有:nroff, troff, TeX, Lout以及PostScript.过程性标志语言被广泛应用在专业出版领域 描述性的 也称通用标识,所描述的是文件的内容或结构,而不是文件的显示外观或样式, 制定SGML的基本思想就是把文档的内容与样式分开,XML、SGML都是典型的通用标识语言。 rtf tex latex MusicXML Standard Generalized Markup Language Wiki markup PostScript 数据交换格式 标准音乐描述语言(英语:Standard Music Description Language,简称音述言或SMDL)是一个标记语言,这是一个超级媒体/时基结构化语言,标准通用标记语言应用。可以单独用于表示音乐信息,也可以与文本、图形或者其它出版或商业需要的信息(包括多媒体时序信息)结合使用。 超级媒体/时基结构化语言 (Hypermedia/Time-based Structuring Language,简写HyTime)是一个标记语言,这是一个标准通用标记语言应用。它的目的是使人们有可能链接到外部资源,例如视频或便携式文件格式文件。 -->