schema

发布时间:2011-11-07 20:15:00   来源:文档文库   
字号:

XML学习笔记三:XML Schema

06 26th, 2006 by 城市刀客

尽管XML1.0提供了一种机制,即文档类型定义(DTD)来规范XML的格式规则。但是它天生存在一些缺点,比如,它采用了非XML的语法规则、不支持更多的数据类型、扩展性差等,为了克服这些缺点,XML Schema 出现了。W3C推荐在XML中使用XML Schema来代替DTD

什么是XML Schema

XML Schema(模式) DTD一样,也用于定义 XML 文档的约束。但它与DTD明显不同的是,XML Schema遵循XML语法规则,更好地支持数据类型以及命名空间。W3C称:XML Schema is an XML based alternative to DTD

模式在单独的文件中定义,通常扩展名为 .xsd。每个模式定义都有一个根元素 schema,该元素属于名称空间http://www.w3.org/2001/XMLSchemaschema 元素可以包含可选的属性。比如:


    elementFormDefault="qualified" attributeFormDefault="unqualified">
这表示模式中使用的元素来自http://www.w3.org/2001/XMLSchema名称空间。

XML 文件使用 schema 名称空间中的 schemaLocation 属性链接到对应的模式。使用 schemaLocation 属性必须定义 schema 名称空间。所有这些定义都出现在 XML 文档的根元素中。语法如下:

下面是一个例子:

 xs:schemaLocation="http://www.example.com Books.xsd">

先来看看一个XML文件示例(message.xml),分别用DTDXML Schema 描述这个文件,看看它们之间的区别:

1、使用DTD
yes"?>

 
 
 
 
]>

  rose
  alex
  Hi,My Girl!

2、使用XML Schema

message.xml:

no"? >

  xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
  xsi:schemaLocation="http://www.example.com message.xsd">
   Rose
   Alex
   Hi,My Girl!

message.xsd:



targetNamespace=http://www.example.com
xmlns="http://www.example.com" elementFormDefault="qualified">
 
  
   
   
   
   
   
  
 

XML Schema语法

从上面的简单的例子我们可以看出一个XML Schema的大概的结构。先解释一下上面的message.xsd

元素是一个XML Schema的根元素,它可以包含一些属性通常情况下看起来是这个样子:

  targetNamespace="http://www.example.com"
  xmlns="http://www.example.com"
  elementFormDefault="qualified">

xmlns:xs="http://www.w3.org/2001/XMLSchema"
这句表明元素和数据类型的定义(schema, element, complexType, sequence, string, boolean,etc.)来自命名空间:http://www.w3.org/2001/XMLSchema
所有来自该命名空间的元素和类型定义均使用前缀xs

targetNamespace="http://www.example.com"
这句表明元素message,to,from,body属于命名空间:http://www.example.com

xmlns="http://www.example.com"

elementFormDefault="qualified"
这句表明引用这个Schemaxml文件中的元素都有命名空间限制。

XML Schema的元素类型分为简单类型和复杂类型两种:

简单类型

1简单元素:指只能包含文本内容,不能够包含子元素,也没有属性的元素。
格式:
例子:


 

2属性:所有的元素属性均被声明为简单类型。只有复杂类型的元素才可以拥有属性。
格式:
例子:

所有的属性默认都是可选的,我们可以通过使用use关键字明确的指出是可选或是必需:

我们可以通过使用defaultfixed为简单类型(简单元素、属性)指定默认值或固定值,
如下:

补充:对简单类型值的约束

 

复杂类型

复杂类型指包含其他元素/属性的元素类型。

未完,待续。。。

昨天写得太晚了,今天继续完成这一部分^_^

在上面的例子中,元素message就是一个复杂类型的元素,我们在Schema中这样描述:
 
  
   
   
   
   
   
  
 
注意元素to,from,body包含在中,表明这些元素必须按照定义的顺序出现在你的XML文件中。

当然,message元素也可以包含一个type属性,指向我们定义的复杂类型,象这样:
 type="msg"/>
  name="msg">
   
   
   
   
   
  

下面通过几个实例学习XML Schema的语法:

1、如何描述空元素,比如:

因为是空元素,所以不包含子元素,也就没有elment标记,同时由于包含属性,用attribute定义,象这样:

 
   
 

也可以这样:

 
   
 

2、如何描述只含有简单内容(文本/属性)的元素,比如:
Hi,My Girl!

由于只包含简单内容,所以我们在元素内容定义的外面用simpleContent 指出,当描述简单内容的时候,我们需要在简单内容里使用extension或者restriction来描述内容的数据类型。象这样:


 
   
     
       
     
   
 

其中message的属性date的数据类型为日期(xs:date)。顺便提一下:XML Schema中常用的数据类型有:
xs:string xs:decimal xs:integer xs:boolean xs:date xs:time 等。

3、如何定义混合类型,比如:

  This message comes from Alex

这跟最开始的message.xml的例子不同的是,message元素除了包含子元素from之外,还直接包含文本This message comes from”。对于这种情况,我们需要在complexType中使用属性mixed="true"指出。以下是Schema:


 
      
 
 

当然,如果包含更多的子元素,我们可以需要使用来限定那些子元素的顺序。

XML Schema中,有3类共7种指示器(Indicator):

一、定义元素如何出现:包括all,sequence,choice 这三个。

1all:默认值。不限制子元素的出现顺序,每个子元素必须出现且只能出现一次。例如:


 
   
     
     
   
 

2sequence:子元素在XML文件中按照XML Schema定义的顺序出现。前面已经提过。

3choice:两个子元素中仅出现一个。例如:


 
   
     
     
   
 

二、次数限定类,包括minOccursmaxOccurs,前者指定最少出现次数,后者指定最多出现次数。例如:


 
   
     
     
   
 

如果元素出现的最大次数无限制,可以使用maxOccurs="unbounded"

三、组限定:包括GroupattributeGroup,用来定义一组相关的元素。比如:


 
   
   
   
 

——————————————————————-


 
 
 

补充 ,在XML Schema中使用这两个元素可以放宽SchemaXML文件内容的限制。容许我们在XML文件中使用没有在Schema中定义的元素和属性。

元素属性substitutionGroup可以让元素b替换元素aXML文件中出现。比如:


这种情形类似choice:


   
   

本文来源:https://www.2haoxitong.net/k/doc/73a8b71bfc4ffe473368abc2.html

《schema.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式