XML规范化(1)

原创 2002年10月21日 09:10:00

       XML规范化(1)

       文章的主要目的是说明如何规范化XML文档,为了更好地了解规范化的规则,我在翻译时省略了一些内容(XML数字签名;非对称密钥体系和信息摘要)。
       让我们先来看看下面两份文件(文件1和文件2)
文件1
<?xml version="1.0"?>
<rooms>
   <room type="single" charge="50" currency="USD"/>
   <room type="double" charge="70" currency="USD"/>
   <room type="suite" charge="100" currency="USD"/>
</rooms>
文件2
<?xml version="1.0"?>
<rooms>
   <room type="single" currency="USD" charge="50"/>
   <room type="double" currency="USD" charge="70"/>
   <room type="suite" currency="USD" charge="100"/>
</rooms>
       你肯定会说:这两份文件是一样的。对的,这两份文件表达的是相同的信息,采用了同样的文档结构,它们在逻辑上是一样的。你也许也已经注意到了它们之间的一些小差别:某些内容的顺序不一样(蓝色字体的内容)。
       在这个例子里,两份文件的元素room的属性的顺序是不一样的,所以,它们相应的字节流也是不同的。当然,还有其他很多原因导致在逻辑上相同的XML文档的字符流不同。建立XML文档规范形式的目的是用来判定不同的XML文档在逻辑上是否相同。W3C制定了规范化规则,使用这些规则对两份逻辑上相同的文档进行规范化后,可以得到相同的文档。 当我们需要判断两份XML文档在逻辑上是否相同时,我们可以先将文档规范化,然后转化成字节流进行比较,如果字节流相同,那么我们可以断定这两份文档在逻辑上是相同的。
       XML规范化规则定义了一套规则用来形成规范的XML文档。下面将以一份文件(文件3)为例,逐步说明如何规范化XML文档。

文件3

<?xml version="1.0"?>
<!DOCTYPE product [
<!ATTLIST part approved CDATA "yes">
<!ENTITY testhistory "Part has been tested according to the specified standards.">
]>

         <product xmlns="http://www.myFictitiousCompany.com/product"
         xmlns:sup="http://www.myFictitiousCompany.com/supplier"
         name='rotating disc "Energymeter"'
         id="P  184.435"
         classification = "MeasuringInstruments/Electrical/Energy/">
   <parts>
      <part id="P                      184.675"
            name="bearing">
         <sup:supplier id="S                      1753"/>
         <sup:supplier id="S                      2341"/>
         <sup:supplier id="S                      3276"/>
         <comments>&testhistory;</comments>
      </part>
      <part id="P  184.871"
            name="magnet"
            xmlns="http://www.myFictitiousCompany.com/product">
         <sup:supplier id="S                       3908"/>
         <sup:supplier id="S                       4589"/>
         <sup:supplier id="S                       1098"/>
         <comments>&testhistory;</comments>
      </part>
   </parts>
</product>

1 编码方式
       编码是指按照一定的方式用字节代替字符。很显然,使用了不同的编码方式的同样内容的文档,得到的字节流是不同的。
       XML规范条款规定XML的规范形式使用UTF-8进行编码,如果需要规范化的XML文档使用其他的方式编码,首先要将它转化为UTF-8编码。

2 断行符
       文本文件中断行符一般使用A或D(十六进制)或者两者的组合来表示。XML文档是普通的文档文件,所以它也使用#xA和#xD作为断行符。XML的规范形式要求所有的断行符都用#xA表示。

3 空白符

       XML规范化要求将所有的空白符(比如tab和space)转化成space(#x20),文件4是转化后的文件。注:在文件3中(<sup:supplier id="S                      1753"/>),S与1753之间存在一个制表符

文件4

<?xml version="1.0"?>
<!DOCTYPE product [
<!ATTLIST part approved CDATA "yes">
<!ENTITY testhistory "Part has been tested according to the specified standards.">
]>

         <product xmlns="http://www.myFictitiousCompany.com/product"
         xmlns:sup="http://www.myFictitiousCompany.com/supplier"
         name='rotating disc "Energymeter"'
         id="P  184.435"
         classification = "MeasuringInstruments/Electrical/Energy/">
   <parts>
      <part id="P  184.675"
            name="bearing">
         <sup:supplier id="S  1753"/>
         <sup:supplier id="S  2341"/>
         <sup:supplier id="S  3276"/>
         <comments>&testhistory;</comments>
      </part>
      <part id="P  184.871"
            name="magnet"
            xmlns="http://www.myFictitiousCompany.com/product">
         <sup:supplier id="S  3908"/>
         <sup:supplier id="S  4589"/>
         <sup:supplier id="S  1098"/>
         <comments>&testhistory;</comments>
      </part>
   </parts>
</product>

4 属性值中的双引号     

      XML文档的规范形式中,属性值必须使用双引号括起来。文件4中(红色部分),name的属性值用的是单引号,必须改成双引号。文件5是规范后的文件。

文件5

<?xml version="1.0"?>
<!DOCTYPE product [
<!ATTLIST part approved CDATA "yes">
<!ENTITY testhistory "Part has been tested according to the specified standards.">
]>

         <product xmlns="http://www.myFictitiousCompany.com/product"
         xmlns:sup="http://www.myFictitiousCompany.com/supplier"
         name="rotating disc "Energymeter""
         id="P  184.435"
         classification = "MeasuringInstruments/Electrical/Energy/">
   <parts>
      <part id="P  184.675"
            name="bearing">
         <sup:supplier id="S  1753"/>
         <sup:supplier id="S  2341"/>
         <sup:supplier id="S  3276"/>
         <comments>&testhistory;</comments>
      </part>
      <part id="P  184.871"
            name="magnet"
            xmlns="http://www.myFictitiousCompany.com/product">
         <sup:supplier id="S  3908"/>
         <sup:supplier id="S  4589"/>
         <sup:supplier id="S  1098"/>
         <comments>&testhistory;</comments>
      </part>
   </parts>
</product>

5 属性值中的特殊字符

       文件5有一个问题(红色部分):name 的属性值含有双引号。XML规范化规则规定,属性值中的特殊字符(比如双引号)必须使用相应的转义字符(比如用&quot;代替双引号)代替。

文件6
<?xml version="1.0"?>
<!DOCTYPE product [
<!ATTLIST part approved CDATA "yes">
<!ENTITY testhistory "Part has been tested according to the specified standards.">
]>

         <product xmlns="http://www.myFictitiousCompany.com/product"
         xmlns:sup="http://www.myFictitiousCompany.com/supplier"
         name="rotating disc &quot;Energymeter&quot;"
         id="P  184.435"
         classification = "MeasuringInstruments/Electrical/Energy/">
   <parts>
      <part id="P  184.675"
            name="bearing">
         <sup:supplier id="S  1753"/>
         <sup:supplier id="S  2341"/>
         <sup:supplier id="S  3276"/>
         <comments>&testhistory;</comments>
      </part>
      <part id="P  184.871"
            name="magnet"
            xmlns="http://www.myFictitiousCompany.com/product">
         <sup:supplier id="S  3908"/>
         <sup:supplier id="S  4589"/>
         <sup:supplier id="S  1098"/>
         <comments>&testhistory;</comments>
      </part>
   </parts>
</product>


6 实体引用
       文件6包含了DTD声明,它定义了一个实体:testhistory(红色部分),这个实体被元素comments引用。规范化要求文档中不能存在实体引用,需要用其内容代替引用。文件7是规范化后的文档。
文件7
<?xml version="1.0"?>
<!DOCTYPE product [
<!ATTLIST part approved CDATA "yes">
<!ENTITY testhistory "Part has been tested according to the specified standards.">
]>

         <product xmlns="http://www.myFictitiousCompany.com/product"
         xmlns:sup="http://www.myFictitiousCompany.com/supplier"
         name="rotating disc &quote;Energymeter&quote;"
         id="P  184.435"
         classification = "MeasuringInstruments/Electrical/Energy/">
   <parts>
      <part id="P  184.675"
            name="bearing">
         <sup:supplier id="S  1753"/>
         <sup:supplier id="S  2341"/>
         <sup:supplier id="S  3276"/>
         <comments>Part has been tested according to the specified standards.</comments>
      </part>
      <part id="P  184.871"
            name="magnet"
            xmlns="http://www.myFictitiousCompany.com/product">
         <sup:supplier id="S  3908"/>
         <sup:supplier id="S  4589"/>
         <sup:supplier id="S  1098"/>
         <comments>Part has been tested according to the specified standards.</comments>
      </part>
   </parts>
</product>

7 缺省属性

       文件7为part元素定义了一个缺省属性approved(红色字体),在规范化的文档中,缺省属性必须出现在元素的属性中。文件8时规范化后的文件。
文件8

<?xml version="1.0"?>
<!DOCTYPE product [
<!ATTLIST part approved CDATA "yes">
<!ENTITY testhistory "Part has been tested according to the specified standards.">
]>

         <product xmlns="http://www.myFictitiousCompany.com/product"
         xmlns:sup="http://www.myFictitiousCompany.com/supplier"
         name="rotating disc &quote;Energymeter&quote;"
         id="P  184.435"
         classification = "MeasuringInstruments/Electrical/Energy/">
   <parts>
      <part id="P  184.675"
            name="bearing"
            approved="yes">
         <sup:supplier id="S  1753"/>
         <sup:supplier id="S  2341"/>
         <sup:supplier id="S  3276"/>
         <comments>Part has been tested according to the specified standards.</comments>
      </part>
      <part id="P  184.871"
            name="magnet"
            xmlns="http://www.myFictitiousCompany.com/product"
            approved="yes">
         <sup:supplier id="S  3908"/>
         <sup:supplier id="S  4589"/>
         <sup:supplier id="S  1098"/>
         <comments>Part has been tested according to the specified standards.</comments>
      </part>
   </parts>
</product>

9 XML和DTD声明
       规范化的XML文档不能存在XML或DTD声明,文件9是将XML和DTD声明去除后的文件。

文件9
         <product xmlns="http://www.myFictitiousCompany.com/product"
         xmlns:sup="http://www.myFictitiousCompany.com/supplier"
         name="rotating disc &quote;Energymeter&quote;"
         id="P  184.435"
         classification = "MeasuringInstruments/Electrical/Energy/">
   <parts>
      <part id="P  184.675"
            name="bearing"
            approved="yes">
         <sup:supplier id="S  1753"/>
         <sup:supplier id="S  2341"/>
         <sup:supplier id="S  3276"/>
         <comments>Part has been tested according to the specified standards.</comments>
      </part>
      <part id="P  184.871"
            name="magnet"
            xmlns="http://www.myFictitiousCompany.com/product"
            approved="yes">
         <sup:supplier id="S  3908"/>
         <sup:supplier id="S  4589"/>
         <sup:supplier id="S  1098"/>
         <comments>Part has been tested according to the specified standards.</comments>
      </part>
   </parts>
</product>

10 文档元素外的空格
       规范化的XML文档在文档元素外面不能存在空格,文档以“<”开始,在"<"前面不能有空格。文件10时去掉“<”前面的空格后的文件。

文件10
<product xmlns="http://www.myFictitiousCompany.com/product" xmlns:sup="http://www.myFictitiousCompany.com/supplier"

name="rotating disc &quote;Energymeter&quote;" id="P  184.435"

classification="MeasuringInstruments/Electrical/Energy/">
<parts>
<part id="P  184.675" name="bearing" approved="yes">
<sup:supplier id="S  1753"/>
<sup:supplier id="S  2341"/>
<sup:supplier id="S  3276"/>
<comments>Part has been tested according to the specified standards.</comments>
</part>
<part id="P  184.871" name="magnet" xmlns="http://www.myFictitiousCompany.com/product" approved="yes">
<sup:supplier id="S  3908"/>
<sup:supplier id="S  4589"/>
<sup:supplier id="S  1098"/>
<comments>Part has been tested according to the specified standards.</comments>
</part>
</parts>
</product>

11 开始和结束元素中的空格
1 )  "<"与元素名之间不能存在空格,"</"也一样。
2 )   如果元素包含属性,在元素名和属性之间有且只有一个空格。
3 )   在属性和属性值之间的等号两边不能有空格。
4 )   属性值和相邻属性之间有且只有一个空格。
5 )   在">"之前不能有空格。

12 空元素
       规范化的xml文档中,空元素要以<...></...>的形式出现,将<emptyElement/>转化为<emptyElement></emptyElement>后得到文件11。

文件11
<product xmlns="http://www.myFictitiousCompany.com/product" xmlns:sup="http://www.myFictitiousCompany.com/supplier"

name="rotating disc &quot;Energymeter&quot;" id="P  184.435" classification="MeasuringInstruments/Electrical/Energy/">
<parts>
<part id="P  184.675" name="bearing" approved="yes">
<sup:supplier id="S  1753"></sup:supplier>
<sup:supplier id="S  2341"></sup:supplier>
<sup:supplier id="S  3276"></sup:supplier>
<comments>Part has been tested according to the specified standards.</comments>
</part>
<part id="P  184.871" name="magnet" xmlns="http://www.myFictitiousCompany.com/product" approved="yes">
<sup:supplier id="S  3908"></sup:supplier>
<sup:supplier id="S  4589"></sup:supplier>
<sup:supplier id="S  1098"></sup:supplier>
<comments>Part has been tested according to the specified standards.</comments>
</part>
</parts>
</product>


13 名称空间声明
       XML文档规范化要求文档中除了多余的名称空间外,所有的名称空间都保留。文件11中第二个part元素的名称空间是多余的,将她出去不会影响文档中所有节点的名称空间上下文。

文件12
<product xmlns="http://www.myFictitiousCompany.com/product" xmlns:sup="http://www.myFictitiousCompany.com/supplier"

name="rotating disc &quot;Energymeter&quot;" id="P  184.435" classification="MeasuringInstruments/Electrical/Energy/">
<parts>
<part id="P  184.675" name="bearing" approved="yes">
<sup:supplier id="S  1753"></sup:supplier>
<sup:supplier id="S  2341"></sup:supplier>
<sup:supplier id="S  3276"></sup:supplier>
<comments>Part has been tested according to the specified standards.</comments>
</part>
<part id="P  184.871" name="magnet" approved="yes">
<sup:supplier id="S  3908"></sup:supplier>
<sup:supplier id="S  4589"></sup:supplier>
<sup:supplier id="S  1098"></sup:supplier>
<comments>Part has been tested according to the specified standards.</comments>
</part>
</parts>
</product>

14 元素属性的排序
XML文档规范化要求元素的属性以字母的升序排列,在一个元素中,名称空间首先出现,然后是属性名和属性值,文件13是排列后的文件
文件13
<product xmlns="http://www.myFictitiousCompany.com/product" xmlns:sup="http://www.myFictitiousCompany.com/supplier"

classification="MeasuringInstruments/Electrical/Energy/" id="P  184.435" name="rotating disc &quot;Energymeter&quot;">
<parts>
<part approved="yes" id="P  184.675" name="bearing">
<sup:supplier id="S  1753"></sup:supplier>
<sup:supplier id="S  2341"></sup:supplier>
<sup:supplier id="S  3276"></sup:supplier>
<comments>Part has been tested according to the specified standards.</comments>
</part>
<part approved="yes" id="P  184.871" name="magnet">
<sup:supplier id="S  3908"></sup:supplier>
<sup:supplier id="S  4589"></sup:supplier>
<sup:supplier id="S  1098"></sup:supplier>
<comments>Part has been tested according to the specified standards.</comments>
</part>
</parts>
</product>

      (待续)

XML规范化规则(W3C制定)

介绍几个XML数据库中容易混淆的概念

介绍几个XML数据库中容易混淆的概念,当开发人员谈及XML数据库时,他们往往指的是两个概念:存储XML数据的数据库,利用XML数据库的DBMS。   当开发人员谈及XML数据库时,他们往往指的是...
  • axl19530209
  • axl19530209
  • 2015年02月14日 08:51
  • 439

XML规范化

dy_2000_abc(翻译)http://www.xml.com/pub/a/2002/09/18/c14n.html2002-10-24  文章的主要目的是说明如何规范化XML文档,为了更好地了解...
  • jabby12
  • jabby12
  • 2004年09月12日 21:15
  • 989

XML规范化

http://www.xml.com/pub/a/2002/09/18/c14n.html      XML规范化(1)       文章的主要目的是说明如何规范化XML文档,为了更好地了解规范化的规...
  • ruixj
  • ruixj
  • 2009年10月28日 23:46
  • 852

Unity3d-XML将一个”非”xml的字符串变成规范的xml格式

如何将一个”非”xml的字符串变成规范的xml格式using System; using System.Collections.Generic; using System.Linq; using S...
  • u013108312
  • u013108312
  • 2016年09月30日 12:57
  • 366

从错误中学python(1) —— 规范化英文名字

题目利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:[‘adam’, ‘LISA’, ‘barT’],输出:[‘Adam’, ‘Lisa’, ‘Bart’]...
  • zhzz2012
  • zhzz2012
  • 2015年08月11日 16:41
  • 1568

关系数据库规范化理论

 关系数据库规范化理论一个关系数据库由一组关系模式组成,一个关系由一组属性名组成,关系数据库设计就是如何把已给定的相互关联的一组属性名分组,并把每一组属性名组织成关系的问题。1、关系规范化的作用所谓规...
  • hbrqlpf
  • hbrqlpf
  • 2007年11月15日 17:49
  • 10533

XML规范化(二)

XML规范化(二)       上一篇文章通过一个例子介绍了如何规范化XML文件,这一篇文章主要讲述XML文件子集规范化遇到的一些问题。       我们从一个XML文件提取其中一部分内容时,一般是将...
  • dy_2000_abc
  • dy_2000_abc
  • 2002年12月09日 10:57
  • 865

【数字图像处理】[3]--直方图规范化

【数字图像处理】[3]--直方图规范化   直方图规范化出现的原因是因为直方图均衡只能产生出固定的图像,不满足于需求,有时我们需要让直方图变成特定的直方图,于是有了直方图规范化  ...
  • WMN7Q
  • WMN7Q
  • 2016年10月20日 20:33
  • 1593

关系数据库规范化(例题解析)

关系数据库规范化
  • qq_15809599
  • qq_15809599
  • 2016年10月20日 16:27
  • 1165

Java实例10 - 最小-最大规范化 Min-MaxNormalization

/** 最小最大规范化也叫离差标准化 * 可以对原始数据进行线性变换, * 假定Min和Max是最小值和最大值, * v是该区间中的一个值,将其映射到新的区间[newMin, newMax]中为v *...
  • kindTerry
  • kindTerry
  • 2011年07月03日 08:07
  • 3715
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XML规范化(1)
举报原因:
原因补充:

(最多只允许输入30个字)