对于规范化而言,只要用途在于XML文档的签名,验证签名时必须比较签名元素是否相同,因此如果没有一个统一的标准(比如属性如何排序,名字空间怎么处理,特殊字符怎么处理等等问题),因此W3C推出了C14n标准用于XML数据的规范化。
众所周知,XML文档的标准化目前已经有开源实现,比如Apache有一个开源项目XmlSec,其中实现了XML文档的签名,自然就有XML文档的规范化实现。
但是,作为目前性能最优的下一代XML解析模型,VTD已经得到了越来越多的关注和应用,但是目前尚未有基于VTD的XML规范化实现。
通过研读C14n标准,得知XML的规范化包括四种模式:1.Inclusive+Comment;2.Inclusive+NoComment; 3.Exclusive+Comment; 4.Exclusive+NoComment; 其中,Inclusive和Exclusive是指处理名字空间上的区别,Inclusive是指节点中定义的名字空间,如果在父节点定义了,便需要将其除掉,Exclusive则非常复杂,具体方法不便描述(可参考C14n的标准描述,或者如后整理好如何描述的语言后再来补上),Comment和NoComment是指是否将注释也包括经规范化的XML文档中。
而基于VTD实现XML文档的规范化有一个非常大的好处,通过便利VTD-Record变可以非常快捷高效的访问XML文档中的任何Token,因此,实现规范化时变主要基于VTD-Record结构实现,而没有采用VTD-XML原本实现的一个节点遍历函数,而是自己动手实现各种可以方便实现规范化的函数,下面列出了一些需要实现的关键功能函数:
1.基于节点属性,或者节点名字定位节点开始Token在VTD-Record中的index函数;
2.查找所有上层节点中所有名字空间定义的函数;
3.属性排序函数;
4.判断是否需要将某个指定名字空间排除的函数,适用于 Inclusive模式;
等等,基于VTD-Record实现起来非常的方便,当然前提是对于VTD-XML的实现有比较深入的了解,基本已经实现了上述第一和第二两种模式,Exclusive模式则比较复杂,还在实现中!