XML Schema (2)

阅读更多

2.2       杂项数据类型

2.4.1 逻辑数据类型

逻辑数据性用于规定 true false 值。

下面是一个关于某个 scheme 中逻辑声明的例子:

文档中的元素看上去应该类似这样:

999

注释:合法的布尔值是 truefalse1(表示 true 以及 0(表示 false)。

2.4.2 二进制数据类型

二进制数据类型用于表达二进制形式的数据。可使用两种二进制数据类型有:

  • base64Binary (Base64 编码的二进制数据)
  • hexBinary (十六进制编码的二进制数据)

下面是一个关于某个 scheme hexBinary 声明的例子:

2.2.3    AnyURI数据类型

anyURI 数据类型用于规定 URI

下面是一个关于某个 scheme anyURI 声明的例子:

文档中的元素看上去应该类似这样:

注释:假如某个 URI 含有空格,请用 %20 替换它们。

3 XSD元素和属性定义

3.1 XSD简易元素定义

简易元素指那些仅包含文本的元素。它不会包含任何其他的元素或属性。不过,仅包含文本这个限定却很容易造成误解。文本有很多类型。它可以是 XML Schema 定义中包括的类型中的一种(布尔、字符串、数据等等),或者它也可以是您自行定义的定制类型。您也可向数据类型添加限定(即 facets),以此来限制它的内容,或者您可以要求数据匹配某种特定的模式。(关于facets的内容稍后介绍)

定义简易元素的语法为:

此处 xxx 指元素的名称,yyy 指元素的数据类型。

简易元素可拥有指定的默认值或固定值。当没有其他的值被规定时,默认值就会自动分配给元素。在下面的例子中,缺省值是 "red"

固定值同样会自动分配给元素,并且您无法规定另外一个值。在下面的例子中,固定值是 "red"

3.2 XSD属性

简易元素无法拥有属性。假如某个元素拥有属性,它就会被当作某种复合类型。但是属性本身总是作为简易类型被声明的。定义属性的语法是:

在此处,xxx 指属性名称,yyy 则规定属性的数据类型。

属性可拥有指定的默认值或固定值。当没有其他的值被规定时,默认值就会自动分配给元素。、在下面的例子中,缺省值是 "EN"

固定值同样会自动分配给元素,并且您无法规定另外的值。在下面的例子中,固定值是 "EN"

在缺省的情况下,属性是可选的。如需规定属性为必选,请使用 "use" 属性:

复合元素指包含其他元素及/或属性的 XML 元素。有四种类型的复合元素:

·         空元素

·         包含其他元素的元素

·         仅包含文本的元素

·         包含元素和文本的元素

注释:上述元素均可包含属性!

我们有两种方式来定义复合元素:

1. 通过命名此元素,可直接对"employee"元素进行声明,就像这样:

  
    
      
      
    
  

假如您使用上面所描述的方法,那么仅有 "employee" 可使用所规定的复合类型。请注意其子元素,"firstname" 以及 "lastname",被包围在指示器 中。这意味着子元素必须以它们被声明的次序出现。

2. "employee" 元素可以使用 type 属性,这个属性的作用是引用要使用的复合类型的名称:

type="personinfo"/>
 
name="personinfo">
  
    
    
  

如果您使用了上面所描述的方法,那么若干元素均可以使用相同的复合类型,比如这样:

 
  
    
    
  

您也可以在已有的复合元素之上以某个复合元素为基础,然后添加一些元素,就像这样:

 
  
    
    
  
 
  
    
      
        
        
        
      
    
  

 

(当只有属性时使用sequence或者其他指示器元素即可,若还有其他内容,则需要先用complexContext元素)

3.3 XSD复合元素

3.3.1 XSD复合空元素

空的复合元素不能包含内容,只能含有属性。例如:

其申明可能为:

  
3.3.2 仅含元素的XSD复合元素

仅含元素的复合类型含有一个仅包含其他元素的元素。例如XML 元素,"person",仅包含其他的元素:

John
Smith

您可在 schema 中这样定义 "person" 元素:

 
  
    
    
  
3.3.3 仅含文本XSD复合元素

仅含文本的复合元素仅包含简易的内容(文本和属性),因此我们要向此内容添加 simpleContent 元素。当使用简易内容时,我们就必须在 simpleContent 元素内定义扩展或限定,就像这样:

某个名称">
  
    
      <xs:extension base="basetype">
        ....
           
    
  

或者:

某个名称">
  
    
      <xs:restriction base="basetype">
        ....
           
    
  

提示:请使用 extension restriction 元素来扩展或限制元素的基本简易类型。

这里有一个 XML 元素的例子,"shoesize",其中仅包含文本:

35

下面这个例子声明了一个复合类型,其内容被定义为整数值,并且 "shoesize" 元素含有名为 "country" 的属性:

 
  
    
      
    
  
3.3.4 带有混合内容的XSD复合元素

         为了申明可以包含子元素、属性和文本的混合复杂元素,需要设置mixed属性为true

mixed="true">
  
    
    
    
  

3.4 XSD复合类型指示器

通过指示器,我们可以控制在文档中使用元素的方式。共有七种指示器:

Order 指示器:

·         All

·         Choice

·         Sequence

Occurrence 指示器:

·         maxOccurs

·         minOccurs

Group 指示器:

·         Group name

·         attributeGroup name

3.4.1 Order指示器

Order 指示器用于定义元素的顺序。

All 指示器

指示器规定子元素可以按照任意顺序出现,且每个子元素必须只出现一次:

  
    
      
      
    
  

注释:当使用 指示器时,你可以把 设置为 0 或者 1,并仅可把 指示器设置为 1(稍后将讲解 以及 )。

Choice 指示器

指示器规定可出现某个子元素或者可出现另外一个子元素(非此即彼):

  
    
      
      
    
  

Sequence 指示器

规定子元素必须按照特定的顺序出现:

  
    
      
      
    
  
3.4.2 Occurrence指示器

Occurrence 指示器用于定义某个元素出现的频率。

maxOccurs 指示器

指示器可规定某个元素可出现的最大次数:

  
    
      
      maxOccurs="10"/>
    
  

上面的例子表明,子元素 "child_name" 可在 "person" 元素中最少出现一次(其中 minOccurs 的默认值是 1),最多出现 10 次。

minOccurs 指示器

指示器可规定某个元素能够出现的最小次数:

  
    
      
      
      maxOccurs="10" minOccurs="0"/>
    
  

上面的例子表明,子元素 "child_name" 可在 "person" 元素中出现最少 0 次,最多出现 10 次。

注释:对于所有的 "Order" "Group" 指示器(anyallchoicesequencegroup namegroup reference),的 maxOccurs minOccurs 的默认值均为 1使用 maxOccurs="unbounded" ,则某个元素的出现次数不受限制。

3.4.3 Group指示器

Group 指示器用于定义相关的数批元素。

元素组

元素组通过 group 声明进行定义:

组名称">
  ...

您必须在 group 声明内部定义一个 allchoice 或者 sequence 元素。下面这个例子定义了名为 "persongroup" group,它定义了必须按照精确的顺序出现的一组元素:

  
    
    
    
  

在您把 group 定义完毕以后,就可以在另一个定义中引用它了:

name="persongroup">
  
    
    
    
  
 
 
  
    
    
  

属性组

属性组通过 attributeGroup 声明来进行定义:

组名称">
  ...
Courier New

  


  

  
  
    
  

  
  

你可能感兴趣的:(XML,Scheme)