xml规范_XML规范形式介绍

本文介绍了XML规范形式,强调了在文档处理、测试和数字签名中遇到的问题,如词汇灵活性导致的比较难题。XML规范形式(c14n)通过一系列规则解决了这些问题,包括标准化空白、字符数据和属性顺序等。同时,文中提供了Python代码示例展示如何规范化XML文档。
摘要由CSDN通过智能技术生成

xml规范

XML的传统在于文档领域,这在其语法规则中得到了体现。 它的语法比与数据库记录有关的数据格式的语法宽松。 XML解析器将XML文档的编码形式(在XML声明中指定了编码)转换为表示XML文档中信息的抽象模型。 W3C将此抽象模型形式化为XML Infoset(请参阅参考资料 ),但是许多XML处理必须着重于编码的源形式,这允许大量的词汇差异:属性可以以任何顺序出现; 空格规则在元素名称及其属性之间的位置很灵活; 可以使用几种方法来表示字符,并转义特殊字符,等等。 命名空间引入了更多的词法灵活性(例如前缀选择)。 结果是,您可以拥有许多与XML 1.0规则完全等效的文档,而在按编码源进行逐字节比较时却有很大不同。

这种词汇上的灵活性在诸如回归测试和数字签名之类的领域中引起了问题。 假设您创建了一个测试套件,其中包括一个案例,该案例希望清单1中的文档为正确的输出。

清单1.示例XML文档
<doc>
  <a a1="1" a2="2">123</a>
</doc>

如果进行适当的XML测试,您将希望将清单2中的文档识别为正确的输出。

清单2.清单1中的XML文档的等效形式
<?xml version="1.0" encoding="UTF-8"?>
<doc>
  <a
     a2="2"   a1="1"
  >123</a>
</doc>

标签内的空白不同,属性的顺序不同,并且字符实体已替换为等效的文字字符-但是信息集仍然相同。 通过逐字节比较很难建立这种相同性。 对于数字签名,您可能要确保通过邮件系统发送文档时,该文档在此过程中没有被损坏或篡改。 为此,您需要具有加密散列或完整的文档数字签名。 但是,如果您通过消息传递系统发送清单1 ,则可以通过正常处理看起来像清单2那样 。 如果是这样,即使文档没有实质性更改,简单的哈希或数字签名也将不匹配。

W3C对此的解决方案是XML数字签名规范的一部分。 W3C定义了规范的XML (请参阅

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值