danbka/smev-transform

urn://smev-gov-ru/xmldsig/transform算法的SMEV3实现

1.0 2020-02-11 14:08 UTC

This package is auto-updated.

Last update: 2024-09-09 18:43:57 UTC


README

描述

实现"urn://smev-gov-ru/xmldsig/transform"变换算法的包

为什么

在XMLDSig格式的XML片段签名时,必须使用urn://smev-gov-ru/xmldsig/transform变换。

变换算法

  1. 如果存在,删除XML声明和指令;
  2. 如果文本节点仅包含空白字符(字符代码小于或等于'\u0020'),则删除该文本节点;
  3. 在应用第1点和第2点的规则后,即使元素没有子节点,元素也不能表示为空元素标签(http://www.w3.org/TR/2008/REC-xml-20081126/#sec-starttags,规则[44]),而应转换为start-tag + end-tag对;
  4. 删除未使用的当前级别声明的命名空间前缀;
  5. 检查当前元素的命名空间是否在树上方的某个位置声明或在当前元素中声明。如果没有声明,则在当前元素中声明;
  6. 元素和属性的命名空间前缀应替换为自动生成的。生成的前缀由“ns”和在其处理的XML片段中生成的前缀序号组成,序号从1开始。生成前缀时,应避免重复;
  7. 属性应按字母顺序排序:首先按namespace URI(如果属性为限定形式),然后按local name排序。未限定形式的属性在排序后应放在限定形式属性之后;
  8. 命名空间前缀声明应位于属性之前。前缀声明应按声明顺序排序,即
    • 首先声明元素命名空间的前缀,如果它未在上方声明;
    • 然后声明所需的属性命名空间前缀。这些声明的顺序与已按字母顺序排序的属性顺序相同(参见本列表第7点);

安装

composer require danbka/smev-transform

使用

use Danbka\Smev\Transform;

$transform = new Transform();
$transform->process($xml);