因为对yaml不是很了解,就搜索了相关的知识用来了解一些常见的标记语言
居然是手动复制到csdn, 感觉缝都缝了,不发怪可惜的
再考虑要不要抄一个转发到csdn,又怀疑自己是否真的需要(
最近在试图学习用思维导图总结学习的知识,这里也试试总结下吧
标记语言|Markup Language
首先看标记语言的概念
标记语言,是一种将文本以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。与文本相关的其他信息(包括文本的结构和表示信息等)与原来的文本结合在一起,但是使用标记(markup)进行表示。
标记语言不仅仅是一种语言,就像许多语言一样,它需要一个运行时环境,使其有用。提供运行时环境的元素称为用户代理
我这里理解为标记语言就是将数据用一种规范的格式呈现的方式,常用于格式化和链接
常见的标记语言介绍
所以这里就可以引出常见的几种标记语言了
xml,html,xhtml(xml和html的合体)
json,yaml
比较常见用于承载数据的应该就是json,xml和yaml了

html属于是上网冲浪天天见了,网页都是html编写的
当然包括这篇博客,用f12或者右键检查都能看到网页的html代码
html用于格式化并显示数据
XML | 可拓展标记语言
XML(eXtensible Markup Language)是独立于软件和硬件的信息传输工具
以前写Android的时候经常见到.xml
文件,但没怎么了解过多写几个例子也能领悟怎么用(至少是自己需要的部分直到该怎么做)
这里就放一个XML的实例吧
<!-- 首先进行一个例子的引,首先这个是注释 -->
<!-- 第一行是XML的声明,它定义了XML的版本(1.0)和所使用的编码(UTF-8:万国码,可显示各种语言) -->
<?xml version="1.0" encoding="UTF-8"?>
<!-- 必须要有根元素 此处是msg -->
<msg>
<!-- 可以嵌套标签 -->
<receiver>Xqh</receiver>
<sender>Hsy</sender>
<title>A xml example</title>
<!-- 标签大小写敏感 -->
<Time>2022-4-30 22:06:30</Time>
<content>
This is msg content.
And next is a attach file.
<!-- 标签可以添加属性提供有关元素的额外信息,但属性值必须加引号 -->
<file type="gif">emoji.gif</file>
</content>
</msg>
上面就是一个XML的实例,它包含了发送者和接收者的信息,同时具有标题以及内容。
更多的使用方法和定义描述或许以后会写一篇博客记录,想了解更多可以参考
Json | Js对象标记
Json指的是JavaScript对象表示法(JavaScript Object Notation)
是比较简单的键值对形式的语言,直接看一个实例
{
"code":200,
"msg":"success",
"content":{
"receiver":["Xqh","Hsy"],
"files":[
{
"name":"emoji.gif",
"url":"http://www.xxx.yyy/zzz.gif"
}
]
}
}
可以通过对象,数组,键值对三种方式存储数据,可以放在js文件内,也可以存放在.json
文件内
一些网页的api返回通常也是json格式
YAML | YAML 不是一种标记语言
YAML 是 “YAML Ain’t a Markup Language”(YAML 不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:“Yet Another Markup Language”(仍是一种标记语言)。
主要是依赖空白符号缩进,适合用于表达配置,数据结构等,例如这篇博客上传时就在开头使用了YAML编写了FrontMatter,文件后缀名通常是.yml
(虽然开发者建议使用.yaml
)
#为上传的md文件声明的一些参数
---
title: 从YAML了解标记语言
date: 2022-04-29 14:55:12
updated: 2022-05-01 02:22:37
tags:
- 标记语言
categories:
- 基本概念
---
基本语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab, 只允许空格
- 缩进的空格数不重要, 只要相同层级的元素左对齐即可
- ‘#’ 表示注释
数据类型有三种
-
对象: 键值对的集合,也称为映射(mapping)/哈希(hashes)/字典(dictionary)
-
数组: 一组依次序排列的值,又称为序列(sequence)/列表(list)
-
纯量(scalars): 单个的,不可再分的值
实例
title: 这里是标题捏
array: [这,是,一,个,多,维,数,组]
#这一行是注释捏
list:
- 这样
- 也是数组,同级缩进要对齐
- 记得冒号和-后面都要加上一个空格
- '这也算纯量吧,可以用引号包裹特殊字符'
#大小写true false都可以
- FALSE
- TRUE
compound:
YAML: 就是现在写的格式
JSON: 这是数组和对象的符合结构
XML: 如果用xml和json写会比较复杂
value:
float:
- 3.14
- 1e+5
null:
des: 使用~表示null
exp: ~
date:
#只能使用ISO 8601格式 即yyyy-MM-dd 虽然开头的yaml直接写成yyyy-MM-dd hh:mm:ss了
- 2022-05-01
datetime:
#时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
- 2022-05-01T01:30:54+08:00
#引用和锚点 注意锚点间不要加上引用
simple: 一个简单的量
def: &def
name: '格式化后可以看到使用锚点引用之后的结果'
desc: '&用于建立锚点,<<表示合并到当前数据,*用来引用锚点'
reuse: 或许是一些通用的玩意会用
useDef:
- attr: '一用到& 和 * 就想起c语言的指针了'
- &anchor 第二个锚点
- ac: *anchor
- <<: *def
可以自己编写后使用YAML在线验证 (verytoolz.com)验证一下
为了这醋包了好久的饺子,最后加上三种标记语言的对比吧
三种信息标记形式的比较
- XML: 最早的通用信息标记语言, 可拓展性好, 但繁琐
- JSON: 适合程序处理,比XML简洁
- YAML: 文本信息比例最高,可读性好, 强调以数据作为重心
基于技术栈,使用JavaScript时json是相对适合的序列化语言,对于java则更多使用xml,因为都是用空格缩进,使用python时使用yaml或许更加友好
虽然python与yaml更搭配,但原作者在Python项目中却选择了json