xsd配置解析

  今天看CAB相关的技术资料,看到CAB的示例中用到了XSD文件来配置对象的序列化和反序列化,觉得这个定义XML数据类型描述有点复杂,静下心来看了下,觉得配置还是比较方便的。

     下面是自己的一点学习笔记。

  XML Schema 支持数据类型

  XML Schema 最重要的能力之一就是对数据类型的支持。

  通过对数据类型的支持:

  • 可更容易地描述允许的文档内容
  • 可更容易地验证数据的正确性
  • 可更容易地与来自数据库的数据一并工作
  • 可更容易地定义数据约束(data facets)
  • 可更容易地定义数据模型(或称数据格式)
  • 可更容易地在不同的数据类型间转换数据

     在XSD中首先要了解XML文档中命名空间的概念,其实也就与我们C#代码中的命名空间概念完全显示,主要是为了避免命名空间的重复。如下面示例代码:

 

ExpandedBlockStart.gif 代码
1  < xs:schema id = " CommandMap "  targetNamespace = " http://schemas.microsoft.com/pag/cab-command-map "
2             elementFormDefault = " qualified "  xmlns = " http://schemas.microsoft.com/pag/cab-command-map "
3             xmlns:mstns = " http://schemas.microsoft.com/pag/cab-command-map "
4             xmlns:xs = " http://www.w3.org/2001/XMLSchema " >

 

  如上所示是我代码中的XSD中的配置文件的头,其中id说明主键了,这个没什么好说的; targetNamespace说明目标命名空间名称,后面的这个字符串其实就是个别名,没什么;xmlns 就是XML的命名空间名称;xmlns:xs给命名空间定义一个别名;

 

ExpandedBlockStart.gif 代码
 1  < xs:complexType name = " CommandMap " >
 2       < xs:sequence >
 3         < xs:element name = " Mapping "  type = " Mapping "  minOccurs = " 0 "  maxOccurs = " unbounded "   />
 4       </ xs:sequence >
 5     </ xs:complexType >
 6     < xs:complexType name = " Mapping " >
 7       < xs:attribute name = " Site "  type = " xs:string "   />
 8       < xs:attribute name = " CommandName "  type = " xs:string "   />
 9       < xs:attribute name = " Label "  type = " xs:string "   />
10     </ xs:complexType >
11     < xs:element name = " CommandMap "  type = " CommandMap "   />

 

  在下面定义了两种复合数据类型,CommandMap 与 Mapping两种数据类型,前一种数据类型中sequence 说明这个数据类中对象的先后顺序,下面定义用到了属性和元素的概念,在最后我们把此类型兑现中定义了一个CommandMap数据成员,说明对应的XML实体对象对应有个CommandMap成员,其它的关于XML属性和元素相关定义和说明可以查看对应的帮助文档http://www.w3school.com.cn/schema/schema_schema.asp

  下面应用对应的XDS文档类实体对象成员和对应XML标记文档实现,如下代码所示:

 

 1    ///   <remarks/>
 2      [System.SerializableAttribute()]
 3      [System.Xml.Serialization.XmlTypeAttribute(Namespace  =   " http://schemas.microsoft.com/pag/cab-command-map " )]
 4      [System.Xml.Serialization.XmlRootAttribute(Namespace  =   " http://schemas.microsoft.com/pag/cab-command-map " , IsNullable  =   false )]
 5       public   partial   class  CommandMap
 6      {
 7 
 8           private  Mapping[] mappingField;
 9 
10           ///   <remarks/>
11          [System.Xml.Serialization.XmlElementAttribute( " Mapping " )]
12           public  Mapping[] Mapping
13          {
14               get
15              {
16                   return   this .mappingField;
17              }
18               set
19              {
20                   this .mappingField  =  value;
21              }
22          }
23      }
24 
25       ///   <remarks/>
26      [System.SerializableAttribute()]
27      [System.Xml.Serialization.XmlTypeAttribute(Namespace  =   " http://schemas.microsoft.com/pag/cab-command-map " )]
28       public   partial   class  Mapping
29      {
30 
31           private   string  siteField;
32 
33           private   string  commandNameField;
34 
35           private   string  labelField;
36 
37           ///   <remarks/>
38          [System.Xml.Serialization.XmlAttributeAttribute()]
39           public   string  Site
40          {
41               get
42              {
43                   return   this .siteField;
44              }
45               set
46              {
47                   this .siteField  =  value;
48              }
49          }
50 
51           ///   <remarks/>
52          [System.Xml.Serialization.XmlAttributeAttribute()]
53           public   string  CommandName
54          {
55               get
56              {
57                   return   this .commandNameField;
58              }
59               set
60              {
61                   this .commandNameField  =  value;
62              }
63          }
64 
65           ///   <remarks/>
66          [System.Xml.Serialization.XmlAttributeAttribute()]
67           public   string  Label
68          {
69               get
70              {
71                   return   this .labelField;
72              }
73               set
74              {
75                   this .labelField  =  value;
76              }
77          }
78      }

 

  上面的类实体定义中用到了XML标签说明,说明了对象在序列化和反序列化具体序列化的对象和类型;

 

1  <? xml version = " 1.0 "  encoding = " utf-8 "   ?>
2  < CommandMap xmlns = " http://schemas.microsoft.com/pag/cab-command-map " >
3     < Mapping Site = " File "   Label = " Show Customer "  CommandName = " ShowCustomer "   />
4     < Mapping Site = " File "  Label = " Disable Show Customer "  CommandName = " DisableShowCustomer "   />
5     < Mapping Site = " File "  Label = " Enable Show Customer "  CommandName = " EnableShowCustomer "   />
6     < Mapping Site = " File "  Label = " Hide Show Customer "  CommandName = " HideShowCustomer "   />
7  </ CommandMap >

 

  定义XDS的消费方式和类型,下面是具体的调用方式:

 

ExpandedBlockStart.gif 代码
  CommandMap map;
            
using  (Stream stream  =   new  FileStream( " SampleCommandMap.xml " , FileMode.Open, FileAccess.Read))
            {
                XmlSerializer serializer 
=   new  XmlSerializer( typeof (CommandMap));
                map 
=  (CommandMap)serializer.Deserialize(stream);
            }

 

  写的比较匆忙,希望各位看客多提宝贵意见,对XSD文件的使用范围和方式在不同领域的应用大家都可以讨论下。 

转载于:https://www.cnblogs.com/549504182/archive/2010/05/24/1743088.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值