Perl开发者需要了解的YAML模块
2014-04-25 15:55:15 阿炯

本站赞助商链接,请多关照。 Perl对YAML有非常好的支持,两者的关系也比较密切,本文就目前Perl下使用的yaml的途径做一些总结。

YAML的语法要求

在yaml.org上可以找到轻巧而好用的小抄(亦是用YAML表示)及格式说明。下面的内容,是关于基本组件的摘要。

YAML使用可打印的Unicode字符,可使用UTF-8或UTF-16。
使用空白字符为文件缩排来表示结构;不过不能使用跳格字符(TAB)。
注解由井字号( # )开始,可以出现在一行中的任何位置,而且范围只有一行(也就是一般所谓的单行注解)
每个清单成员以单行表示,并用短杠+空白( -   )起始。或使用方括号( [ ] ),并用逗号+空白( ,   )分开成员。
每个杂凑表的成员用冒号+空白( :   )分开键值和内容。或使用大括号( {  } ),并用逗号+空白( ,   )分开。
杂凑表的键值可以用问号 ( ? )起始,用来明确的表示多个词汇组成的键值。
字串平常并不使用引号,但必要的时候可以用双引号 ( “ )或单引号 ( ‘ )框住。
使用双引号表示字串时,可用倒斜线( \ )开始的跳脱字符(这跟C语言类似)表示特殊字符。
区块的字串用缩排和修饰词(非必要)来和其他资料分隔,有新行保留(preserve)(使用符号 | )或新行折叠(flod)(使用符号 > )两种方式。
在单一档案中,可用连续三个连字号(---)区分多个档案。
另外,还有选择性的连续三个点号( … )用来表示档案结尾。
重复的内容可使从参考标记星号 ( * )复制到锚点标记( & )。
指定格式可以使用两个惊叹号 ( !! ),后面接上名称。
档案中的单一文件可以使用指导指令,使用方法是百分比符号( % )。有两个指导指令在YAML1.1版中被定义:
%YAML 指导指令,用来识别文件的YAML版本。
%TAG 指导指令,被用在URI的字首标记。这个方法在标记节点的型态时相当有用。

YAML再使用逗号及冒号时,后面都必须接一个空白字符,所以可以再字串或数值中自由加入分隔符号而不需要使用引号。另外还有两个特殊符号在YAML中被保留,有可能在未来的版本被使用–( @ )和( ` )。

在Perl 程序中使用YAML,并不必编写一个解析器。CPAN中收集大量有用的Perl模块及其相关文件,下面就列出对YAML开发最有用的模块包。

1、YAML

此模块提供一个面向对象接口,用于Perl对象和YAML之间的串并转换。它包含一个加载装置和卸载装置,可以把一串YAML文档载入到Perl脚本中,或把Perl数据结构转换成YAML文档。当需要对YAML和Perl数据结构进行串并转换时使用此模块,这是个纯Perl的实现,速度慢,但可以跨平台运行。如果想得到更高的性能的话,可以考虑使用YAML::XS模块来代替它。

2、IO::YAML

此模块对于使用面向对象方法处理YAML文档流问题十分有用,特别是在单一脚本中处理并发读写YAML文档时效果更明显。当你需要读取或写入YAML文档流时使用此模块。

3、Inline::YAML

此模块让你在Perl脚本中直接指定YAML标签,使用过滤方法将该标签转化成Perl数据结构。使用此模块可以很容易描述YAML中的大型静态Perl数据。

4、YAML::Tiny

此模块提供一个极小的YAML完整说明书,便于编写效率极高的、基于YAML的、低消耗和低存储量的应用程序。当需要一个无需实现YAML全部功能的小应用程序时使用此模块。

5、Config::YAML

此模块为Perl的管理配置文件提供一个面向对象的接口。它使用YAML表示配置命令,而且支持目录文件和全局配置文件,当Perl需要创建或使用配置文件时使用此模块。

6、YAML::Yaml2Html

此模块提供用来把YAML文档转换成HTML页面,及用YAML 标签动态创建和编写HTML文档的功能。当需要一个快捷方式来把YAML转换成HTML时使用此模块。

7、CGI::Session::Serialize::yaml

此模块允许在YAML容器中存储CGI会话数据,并提供使用Perl和其他语言的非串行转换方式访问它。当需要为基于会话的应用程序创建一个自定义的数据存储器时使用此模块。

8、Cache::YAMLBackend

此模块为一个Web站点提供一个简单的高速缓存框架。它允许高速缓存脚本输出及方法调用,并通过提供高速缓存页面机制来缩短反应时间。如果站点负载较大,使用此模块可以减少服务器负载和页面处理时间。

9、YAML::Active

此模块提供了一个通过给隐藏结构和逻辑结构提供框架来联合Perl应用程序和YAML结构的简单程序的唯一方法。当你想把逻辑事物嵌入到数据结构和创建可复用的能被移植到应用程序中的对象时使用此模块。

10、Test::YAML

此模块提供一个用于测试YAML类执行的框架。它十分适用于创建可复用数据驱动类型。当你需要为基于YAML的Perl应用程序构造一个测试框架时使用此模块。
 
11、YAML::XS
Perl YAML Serialization using XS and libyaml

libyaml可以说是最好的YAML的实现。YAML的C库编写, 是1.1规范精确实现,它最初绑定到Python和Ruby。这个模块是一个Perl XS绑定libyaml,它提供Perl迄今为止最好的YAML的支持。这个模块导出的功能有,Dump, Load, DumpFile, LoadFile。这些函数也具有YAML相应功能。

12、YAML::Syck
Fast, lightweight YAML loader and dumper

这个模块提供了一个libsyck数据序列化库Perl接口。Dump、Load功能函数将Perl数据结构转换为YAML字符串,和其它的方法,是个轻量级的快速处理模块。

json与yaml之间的关系

JSON的语法是YAML1.2版的子集,同时非常接近YAML1.0与1.1版的子集,因此大部分的JSON文件都可以被YAML的剖析器剖析。这是因为JSON的语法结构和YAML的内置格式相同。虽然大范围的分层也可以使用类似JSON的内置格式,不过这并YAML标准并不建议这样使用,除非这样编写能让文件可读性增加。YAML的许多扩展在JSON是找不到的,如:进阶资料形态、关系锚点、字串不需要双引号、映射资料形态会储存键值的顺序。

该文章最后由 阿炯 于 2015-10-16 16:22:39 更新,目前是第 2 版。