plinskiy / smev-transform
实现urn://smev-gov-ru/xmldsig/transform算法的СМЭВ3
1.2
2023-06-20 14:54 UTC
Requires
- php: >=7.3
- ext-xmlreader: *
- ext-xmlwriter: *
Requires (Dev)
- phpunit/phpunit: ^8.5
This package is auto-updated.
Last update: 2024-09-20 17:52:58 UTC
README
描述
实现"urn://smev-gov-ru/xmldsig/transform"转换算法的包
为什么
在XMLDSig格式下对XML片段进行电子签名时,必须使用urn://smev-gov-ru/xmldsig/transform转换。
转换算法
- 如果存在,删除XML声明和处理指令;
- 如果文本节点仅包含空白字符(字符代码小于或等于'\u0020'),则删除该文本节点;
- 应用第1和第2点规则后,即使元素没有子节点,也不能用空元素标签表示(见http://www.w3.org/TR/2008/REC-xml-20081126/#sec-starttags,规则[44]),而应该转换为start-tag + end-tag对;
- 删除在当前级别声明但未使用的命名空间前缀;
- 检查当前元素的命名空间是否在树的上层或当前元素中声明。如果没有声明,则在当前元素中声明;
- 元素的命名空间前缀和属性应替换为自动生成的。生成的前缀由“ns”和生成前缀的序号组成,该序号从1开始,并在处理XML片段时生成。在生成前缀时,应避免重复;
- 属性应按字母顺序排序:首先按namespace URI排序(如果属性为qualified形式),然后按local name排序。排序后,未命名的属性将按顺序排列在命名的属性之后;
- 命名空间前缀的声明应位于属性之前。前缀的声明应按声明顺序排序,具体如下
- 首先声明元素命名空间的前缀,如果它尚未在上层声明;
- 然后声明所需的属性命名空间的前缀。这些声明的顺序应与排序后的属性顺序一致(见当前列表的第7点);
安装
composer require danbka/smev-transform
使用
use Danbka\Smev\Transform; $transform = new Transform(); $transform->process($xml);