动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
  
   Xml → 阅读文章

 XML Schema学习笔记 (一)

作者来源: 
阅读 1378 人次 , 2006-3-29 3:14:00 

1、复杂类型和简单类型之间最根本的区别就是:复杂类型的内容中可以包含其他元素,也可以带有属性(Attribute),但简单类型既不能包含子元素,也不能带有任何属性。

<xsd:complexType name="CNAddress" >

<xsd:sequence>

<xsd:element name="name"type="xsd:string"/>

<xsd:element name="street" type="xsd:string"/>

<xsd:element name="city"type="xsd:string"/>

<xsd:element name="zip"type="xsd:decimal"/>

</xsd:sequence>

<xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>

</xsd:complexType>

?

2element存在约束:element可以通过其minOccursmaxOccurs两个属性来约束元素实例存在的个数,这两个属性的缺省值都是1,表示默认情况下此元素在XML实例文档中必须出现一次。

3attribute存在约束:元素属性也可以通过attributeuse属性来约束出现一次或根本不出现;use属性的取值可以是required,optional,prohibited三个值,缺省(默认)值是optional.

4elementattribute都有一个defaultfixed属性,针对element来书,只有当element实例为空时才采用此default值,而attribute是当实例不提供此attribute时才采用此default值,因此对attribute而言,只有其use值是optionaldefault值才有意义,而且对elementattribute来说fixeddefault两个属性不能同时存在,否则会出现错误。

5、直接定义在schema元素下,即schema元素的顶级子元素的elementattribute都是全局的,称之为全局元素和全局属性,你在其他类型定义中可以直接引用。

6、派生新类型有两种方式:第一种就是直接从其他类型中扩展(继承)而来,另外一种就是通过对已有类型进行限定性约束而来。

如:以下有三种通过限定性约束定义的新类型:

通过值范围限定:

<xsd:simpleType name="myInteger">

<xsd:restriction base="xsd:integer">

<xsd:minInclusive value="10000"/>

<xsd:maxInclusive value="99999"/>

</xsd:restriction>

</xsd:simpleType>

使用模式匹配限定:

<xsd:simpleType name="SKU">

<xsd:restriction base="xsd:string">

<xsd:pattern value="\d{3}-[A-Z]{2}"/>

</xsd:restriction>

</xsd:simpleType>

使用枚举方式限定:

<xsd:simpleType name="CNCity">

<xsd:restriction base="xsd:string">

<xsd:enumeration value="BeiJing"/>

<xsd:enumeration value="NanChang"/>

<xsd:enumeration value="ShangHai"/>

</xsd:restriction>

</xsd:simpleType>

7、原子类型(不可分割的类型,象string,integer等系统内建的类型)、列表类型、联合类型合起来统一称为简单类型。在Schema中有NMTOKENSIDREFSENTITIES三种内建的列表类型,你也可以从已有的简单类型来创建list(列表)类型,但你不能从已有的list类型和复杂类型来创建列表(list)类型。

如:

<xsd:simpleType name="listOfMyIntType">

<xsd:list itemType="myInteger"/>

</xsd:simpleType>

XML实例文档中列表类型的值是通过空格来进行分隔的,如果声明了一个listOfMyIntType元素,其值可能是:

<listOfMyInt>20003 15037 95977 95945</listOfMyInt>

8、有几个方面的元素可以应用于list类型来进行约束,它们是:lengthminLengthmaxLengthenumeration,如:

<xsd:simpleType name="USStateList">

<xsd:list itemType="USState"/>

</xsd:simpleType>

<xsd:simpleType name="SixUSStates">

<xsd:restriction base="USStateList">

<xsd:length value="6"/>

</xsd:restriction>

</xsd:simpleType>

注:针对列表类型要千万注意成员是string类型的,因为string类型中的空格和列表类型的分割符空格会造成部分混淆。

9、对元素的定义可以采用通过指定其type属性为已定义的属性的方式,也可一采用匿名定义类型的方式,如:

采用类型定义:

<xsd:element name=”comment” type=”xsd:string”>

采用匿名定义:

<xsd:element name=”quantity”>

<xsd:simpleType>

<xsd:restriction base=”xsd:positiveInteger”>

<xsd:maxExclusive value=”100” />

</xsd:restriction>

</xsd:simpleType>

</xsd:element>

10union(联合)类型表示在XML实例文档中的元素实例符合union类型定义的成员类型中的一种就可以了(合法),这一点和C++中的联合类型有类似的概念,如:

<xsd:simpleType name="addrUnion">

<xsd:union memberTypes="xsd:string integer"/>

</xsd:simpleType>

11、复杂类型一般可以分为三类:第一类是包含字符内容和属性但不包含子元素;第二类是包含属性和子元素但不包含字符数据(字符数据包含在子元素中);第三类是即包含属性和字符内容又包含子元素的;那么如何来定义这三类类型呢?针对第一类可以通过simpleContent来实现,第二类可以通过complexContent来做到,第三类只需要将complexType的属性mixed设为true就可以了。具体的例子如下:

第一种类型(从一个简单类型扩展而来,增加了属性):

<xsd:element name="internationalPrice">

<xsd:complexType>

<xsd:simpleContent>

<xsd:extension base="xsd:decimal">

<xsd:attribute name="currency" type="xsd:string"/>

</xsd:extension>

</xsd:simpleContent>

</xsd:complexType>

</xsd:element>

第二种类型(有一个element和两个attribute构成):

<xsd:element name="internationalPrice">

<xsd:complexType>

<xsd:complexContent>

<xsd:element name=”Country” ?type=”xsd:string” />

<xsd:attribute name="currency" type="xsd:string"/>

<xsd:attribute name="value"?type="xsd:decimal"/>

</xsd:complexContent>

</xsd:complexType>

</xsd:element>

注意:在这里由于默认情况下缺省是complexContent,所以在这里简略的写法是:

<xsd:element name="internationalPrice">

<xsd:complexType>

<xsd:element name=”Country”type=”xsd:string” />

 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:XML Schema学习笔记 (二)
· 下一篇:通过xalan实现关系型数据库到XML的数据交换
· 远程获取内容并将内容存在本地电脑上包括任何文件
· 用XML和XSL来生成动态页面
· 在.NET Framework中轻松处理XML数据(4-4)
· XML轻松学习手册(5)XML语法之三
· 大话XML(3)XML的语法1


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077