XML Schema帮你建模(4)

2016-02-19 14:50 3 1 收藏

图老师小编精心整理的XML Schema帮你建模(4)希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~

【 tulaoshi.com - Web开发 】

列表类型


  除了使用简单类型中描述的原子类型(这些原子类型可用于组合成绝大多数的其它类型,包括其它的简单类型和复合类型)外,XML Schema中在简单类型范畴中还有列表类型(List Type)的概念。原子类型、列表类型以及联合类型,总称为简单类型。一个原子类型的值在XML Schema中是不可分割的。举例来说,NMTOKEN值US是不可分割的,US的任何部分,如字母S本身都是没有意义的。与之相比较,列表类型则是由一组原子类型组成,因此它的每一个部分(原子)本身都是有意义的。举例来说NMTOKENS是个列表类型。这个类型的元素将是NMTOKEN的列表,不同的NMTOKEN值间使用空格分隔,如“US UK FR”。XML Schema有三个内置的列表类型,它们是NMTOKENS、IDREFS和ENTITIES。

  除了使用内置的列表类型之外,还可以通过引用现有的原子类型建立新的列表类型(不可以使用现有的列表类型来建立新的列表类型,也不能使用复合类型来建立新的列表类型)。举例来说,我们可以建立一个名为myInteger的列表类型,并在实例文档中使用它(参见代码10)。其中代码10中的后半部分即为实例文档中与列表类型listOfMyIntType相一致的实例元素。

  !--代码 0-10 myInteger列表类型的模式定义以及实例应用--
  !-- Schema Fragment --
  xsd:simpleType name="listOfMyIntType"
  xsd:list itemType="myInteger"/
  /xsd:simpleType
  !-- Instance Fragment --
  listOfMyInt20003 15037 95977 95945/listOfMyInt

 

  一些用于描述的参数能够被应用到列表类型的定义中,它们是length、minLength、maxLength和enumeration。举例来说,如果我们想定义一个列表,这个列表正好包含了六个美国的州名(SixUSStates)。首先从USState定义一个新的列表类型,称为USStateList,然后通过限制USStateList只有六个项来导出SixUSStates。具体的定义可参见代码11。

  !--代码11 列表类型USStateList及其导出的列表类型SixUSStates--
  !-- Schema Fragment --
  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
  !-- Instance Fragment --
  sixStatesPA NY CA NY LA AK/sixStates

 

  类型为SixUSStates的元素必须有六个项,它们中的每一个项必须是一个枚举类型USState的原子类型,在代码11后半部分的实例文档中就是一个具体的应用例子。

  我们需要注意的是,从原子类型string可以导出一个列表类型,然而,在一个string中也许会带有空格,而空格在一个列表类型实例中是作为分隔符使用的。所以当在使用基类型为string的列表类型时,应当格外小心。举例来说,假设我们定义了一个length取值为3的列表类型,同时这个列表类型是基于类型string。下面由三个元素组成的列表是合法的:“Asie Europe Afrique”;而由三个元素这样组成的列表是不合法的:“Asie Europe Amérique Latine”。即使“Amérique Latine”在列表外可以作为单独的一个字符串存在,但当它包含在列表中,在Amérique和Latine之间的空格使得第四个项被有效地生成了,因此后面的那个例子不符合只有三个项的列表类型定义。


  联合类型


  应用原子类型和列表类型,一个元素或者属性的值可以为一个或者多个原子类型(列表类型)的实例。与之相比较,一个应用联合类型(Union Type)包含了多个原子类型或者列表类型,而应用了联合类型的元素或是属性的值可以是这些原子类型或列表类型中的一个类型实例。为了显示这一点,我们建立一个用于表示美国州的、为两个字母缩写或者数字列表的联合类型。zipUnion联合类型由一个原子类型和一个列表类型构成的(参见代码12)。

  !--代码 12 联合类型zipUnion及其实例--
  !-- Schema Fragment --
  xsd:simpleType name="zipUnion"
  xsd:union memberTypes="USState listOfMyIntType"/
  /xsd:simpleType
  !-- Instance Fragment --
  zipsCA/zips
  zips95630 95977 95945/zips
  zipsAK/zips

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

 

  当我们在定义一个联合类型时,元素union的memberTypes属性的值包含了联合类型中所有类型的列表。现在,假定我们声明了一

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)个zipUnion类型的元素,称为zips,zips元素有效的实例可参见代码12。

  此外,对于联合类型而言,还有两个描述性质的参数pattern和enumeration也可以应需要使用。

来源:http://www.tulaoshi.com/n/20160219/1608085.html

延伸阅读
标签: Web开发
我们可以看到,DTD的语法相当复杂,并且它不符合XML文件的标准,自成一个体系。也就是说DTD文档本身并不是一个良好形式的XML文档,上面的关于DTD的介绍也仅仅是作了一个简介,目的是帮助大家能读懂DTD文件以及在必要时创建简单的DTD文件,因为现在很多的XML应用是建立在DTD之上的。   另外一个代替DTD的就是W3...
对于名称空间,理解了OO思想的人应该是比较简单的了,特别是对学过C++的人来说更是 如此;但很多看了我前面文章的朋友,在和我的交流中,好像对名称空间都不怎么清楚, 下面我们就来说说怎么样在 XML Schema和WSDL中使用名称空间. 先看看一段JAVA代码: package com.hongsoft.test.pkg1; import com.hongsoft.test.pkg2.Test1; import com.hongsof...
标签: Web开发
Preface:本文是W3CSchools上《Schema指南》的学习笔记。其中大部分内容是对指南的翻译总结。由于原文的例子更详尽生动,如果各位想阅读原文可以到这个网址http://www.w3schools.com/schema/default.asp。 同时,W3CSchools提供了测试,大家可以测试一下自己的理解程度。 首先简单的说一下,Schema中的简单类型(SimpleType)有三种:SimpleE...
标签: Web开发
在ASP下使用XML DOM    要生成前面例子中的XML文档,我们可以用ASP来生成。我们将创建一个简单的ASP页,让你只需点击按钮,就可创建XML文档。为了完成这件事情,我们用了带有Windows脚本构件的ASP网页,由它来生成XML。我们将用Windows Script Component Wizard来生成初始代码。(如果你没有wizard,可到微软的脚本栏目中去寻找。) ...
标签: Web开发
XML元素是可以扩展的,它们之间有关联。 XML元素有简单的命名规则。 XML元素是可以扩展的 XML文档可以被扩展一边携带更多的信息。 请看下面的XML便条例子: note toLin/to fromOrdm/from bodyDon't forget me this weekend!/body /note 让我们来设想一个能够读取此XML文档的并能解读其中XML元素(to, from, 和bod...

经验教程

949

收藏

13
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部