快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

XML Schema帮你建模(3)

     命名冲突
  
  
  我们现在已经讨论了如何定义新的复合类型(比如PurchaseOrderType)、声明元素(比如purchaseOrder)和声明属性(如orderDate)。在这些定义行为中,一般都包含着命名,假如我们给两个对象赋予同样的名称会有何种结果? 答案取决于问题中的两个对象,一般来说这两个对象越相近,它们越有可能引起冲突。
  
  下面,我们给出一些例子来说明什么时候同样的名称会导致问题。假如两个对象都是类型,而且定义了一个复合类型为USStates,同时又定义了一个简朴类型为USStates,此时就出现了冲突。假如两个对象是类型和元素或者是类型和属性,当定义了一个复合类型叫USAddress时,同时又定义了一个元素称为USAddress,此时是没有冲突发生的。假如两个对象是不同类型的元素(一般地、并非是全局元素),当我们声明了一个元素名字作为USAddress类型的一部分,并且第二个元素名字作为item类型的一部分,此时就没有冲突(类似的元素有时候称为局部元素声明)。最后,假如两个对象都是类型,你自己定义了其中的一个,而XML Schema规范内置定义了另外的一个,比如定义了一个简朴类型称为decimal,那么此时没有冲突发生。这里之所以没有命名冲突发生的,因为它们属于不同的命名空间。
  
  
  使用简朴类型
  
  
  在购买订单模式文档po.xsd中,有几个元素和属性被声明为简朴类型。其中一些简朴类型如 string 和decimal是XML Schema中内置的,其它的一些则是源于(假如使用对象技术的语言就是继续)内置的类型。举例来说,partNum属性的类型称为SKU(Stock Keeping Unit),它是源于string的。内置的简朴类型和它们的后继版本都能够用在所有的元素和属性声明中。
  
  新的简朴类型通过从现有的简朴类型(内置的简朴类型以及源于内置简朴类型的简朴类型)引出定义。通常,我们通过重新约束一个现存的简朴类型来引出一个新的简朴类型。换句话说,新类型的合法值范围是现有类型的值范围的子集。我们使用simpleType元素来定义和命名新的简朴类型,使用restriction元素来指出现有的基类型,并且用它来标识约束值范围的细节。
  
  假设希望建立一个新的整数类型称为myInteger,它的值范围为10000到99999。那么定义应当基于简朴类型integer,然后定义它的值范围为10000到99999。为了定义myInteger,这样来约束integer的范围,参见代码6:
  
  
  
  
  
  
  

  

  
  
  
  代码6的例子显示了由一个基本类型定义和两个值域区间方面描述的组合,通过这三个要素对myInteger实施定义。
  
  先前的购买订单模式文档包含了其它更具体的定义简朴类型的例子。一个叫SKU的新简朴类型(参见代码7)是从(通过约束)简朴类型string引出的。此外,我们使用一个称为pattern的描述,以及pattern的正则表达式值“d{3}-[A-Z]{2}”来约束SKU的值。其中,该正则表达式值的语义为3个数字后面跟着一个连字号,接着跟着两个大写的英文字母。
  
  
  
  
  
  

  

  
  
  
  XML Schema定义了15个用于简朴类型定义描述的元素。在这些元素中,enumeration特殊有用,它能够被用于约束除boolean类型之外的几乎每一个简朴类型。enumeration限制简朴类型的值为一系列不同的枚举值。举例来说,我们可以使用enumeration来定义一个新类型称为USState(参见代码8),USState是从string类型引出的,同时它的值必须为美国州名的缩写。
  
  
  
  
  
  
  
  
  

  

  
  
  
  USState将会在现用的state元素声明中成为string类型的一个异常好的替换品。通过使用这个替换品可以使state元素具有合法值的校验能力。举例来说,billTo和shipTo元素的子元素state,将会被限制在AK、AL和AR等中。注重对于特定类型的列举值必须是惟一的。
  
  
  匿名类型定义
  
  
  使用XML Schema,我们能够通过定义一系列具著名称的类型,如PurchaseOrderType类型。然后声明一个元素,比如purchaseOrder,通过使用“type=”这样的构造方式来应用类型。这种类型的模式构造异常直截了当,但有些不实用。特殊是假如定义了许多只应用一次而且包含异常少约束的类型,在这种情况下,一个类型应该能够被更简朴的定义。这样的简朴定义通常的形式是一个节省了名称和外部引用开销的匿名类型。
  
  在po.xsd(参见代码9)中类型Items的定义中,有两个元素声明使用了匿名类型定义,它们是item和quantity。一般的来说,你通过元素中是否包含“type=”这个属性可以判定匿名元素定义(或者是匿名属性定义)。假如出现无名称的类型定义,也可以认为是匿名元素(属性)定义。
  
  
  
  
  
  
  
  
  
  
  
  
  

  

  

  
  
  
  

  
  

  

  

  

  
  
  
  在item元素中,它被定义为一个复合匿名类型。该复杂类型是由productName、quantity、USPrice、comment、shipDate元素和一个称为partNum的属性组成的。在quantity元素中,它有一个简朴匿名类型从integer类型中引出,它的值范围为1到99。


返回类别: 教程
上一教程: 用XMLHTTP读取网页源代码
下一教程: 也谈JSP与XML的交互

您可以阅读与"XML Schema帮你建模(3)"相关的教程:
· XML Schema帮你建模(4)
· XML Schema用法(1)
· XML-Schema的DTD描述
· XML Schema用法(2)
· 一个简朴的XML Schema的例子
    微笑服务 优质保证 索取样品