您的位置:首页 > 编程语言 > ASP

Java开源报表JasperReport、iReport4.5.1使用详解(一)

2013-05-21 13:41 495 查看
2.2      
杂项数据类型

2.4.1 逻辑数据类型

逻辑数据性用于规定 true 或 false 值。
下面是一个关于某个 scheme 中逻辑声明的例子:

<xs:attribute name="disabled" type="xs:boolean"/>


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

<prize disabled="true">999</prize>


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

2.4.2 二进制数据类型

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

base64Binary (Base64 编码的二进制数据)

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

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

<xs:element name="blobsrc" type="xs:hexBinary"/>

<!--[if !supportLists]-->2.2.3   
<!--[endif]-->AnyURI数据类型

anyURI 数据类型用于规定 URI。
下面是一个关于某个 scheme 中 anyURI 声明的例子:

<xs:attribute name="src" type="xs:anyURI"/>


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

<pic src="http://www.w3school.com.cn/images/smiley.gif" />


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


3 XSD元素和属性定义


3.1 XSD简易元素定义

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

<xs:element name="xxx" type="yyy"/>


此处 xxx 指元素的名称,yyy 指元素的数据类型。
简易元素可拥有指定的默认值或固定值。当没有其他的值被规定时,默认值就会自动分配给元素。在下面的例子中,缺省值是 "red":

<xs:element name="color" type="xs:string" default="red"/>


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

<xs:element name="color" type="xs:string" fixed="red"/>



3.2 XSD属性

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

<xs:attribute name="xxx" type="yyy"/>


在此处,xxx 指属性名称,yyy 则规定属性的数据类型。
属性可拥有指定的默认值或固定值。当没有其他的值被规定时,默认值就会自动分配给元素。、在下面的例子中,缺省值是 "EN":

<xs:attribute name="lang" type="xs:string" default="EN"/>


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

<xs:attribute name="lang" type="xs:string" fixed="EN"/>


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

<xs:attribute name="lang" type="xs:string" use="required"/>


复合元素指包含其他元素及/或属性的 XML 元素。有四种类型的复合元素:
<!--[if !supportLists]-->·        
<!--[endif]-->空元素
<!--[if !supportLists]-->·        
<!--[endif]-->包含其他元素的元素
<!--[if !supportLists]-->·        
<!--[endif]-->仅包含文本的元素
<!--[if !supportLists]-->·        
<!--[endif]-->包含元素和文本的元素
注释:上述元素均可包含属性!
我们有两种方式来定义复合元素:
1. 通过命名此元素,可直接对"employee"元素进行声明,就像这样:

<xs:element name="employee">

  <xs:complexType>

    <xs:sequence>

      <xs:element name="firstname" type="xs:string"/>

      <xs:element name="lastname" type="xs:string"/>

    </xs:sequence>

  </xs:complexType>

</xs:element>


假如您使用上面所描述的方法,那么仅有 "employee" 可使用所规定的复合类型。请注意其子元素,"firstname" 以及 "lastname",被包围在指示器 <sequence>中。这意味着子元素必须以它们被声明的次序出现。
2. "employee" 元素可以使用 type 属性,这个属性的作用是引用要使用的复合类型的名称:

<xs:element name="employee" [code]type="personinfo"
/>[/code]
 

<xs:complexType [code]name="personinfo"
>[/code]
  <xs:sequence>

    <xs:element name="firstname" type="xs:string"/>

    <xs:element name="lastname" type="xs:string"/>

  </xs:sequence>

</xs:complexType>


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

<xs:element name="employee" type="personinfo"/>

<xs:element name="student" type="personinfo"/>

<xs:element name="member" type="personinfo"/>

 

<xs:complexType name="personinfo">

  <xs:sequence>

    <xs:element name="firstname" type="xs:string"/>

    <xs:element name="lastname" type="xs:string"/>

  </xs:sequence>

</xs:complexType>


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

<xs:element name="employee" type="fullpersoninfo"/>

 

<xs:complexType name="personinfo">

  <xs:sequence>

    <xs:element name="firstname" type="xs:string"/>

    <xs:element name="lastname" type="xs:string"/>

  </xs:sequence>

</xs:complexType>

 

<xs:complexType name="fullpersoninfo">

  <xs:complexContent>

    [code]<xs:extension base="personinfo">

      <xs:sequence>

        <xs:element name="address" type="xs:string"/>

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

        <xs:element name="country" type="xs:string"/>

      </xs:sequence>

    </xs:extension>

  </xs:complexContent>

</xs:complexType>


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


3.3 XSD复合元素


3.3.1 XSD复合空元素

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

<product prodid="1345" />


其申明可能为:

<xs:element name="product" type="prodtype"/>

<xs:complexType name="prodtype">

  <xs:attribute name="prodid" type="xs:positiveInteger"/>

</xs:complexType>



3.3.2 仅含元素的XSD复合元素

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

<person>

<firstname>John</firstname>

<lastname>Smith</lastname>

</person>


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

<xs:element name="person" type="persontype"/>

 

<xs:complexType name="persontype">

  <xs:sequence>

    <xs:element name="firstname" type="xs:string"/>

    <xs:element name="lastname" type="xs:string"/>

  </xs:sequence>

</xs:complexType>



3.3.3 仅含文本XSD复合元素

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

<xs:element name="某个名称">

  <xs:complexType>

    <xs:simpleContent>

      <xs:extension base="basetype">

        ....

      </xs:extension>    

    </xs:simpleContent>

  </xs:complexType>

</xs:element>


或者:

<xs:element name="某个名称">

  <xs:complexType>

    <xs:simpleContent>

      <xs:restriction base="basetype">

        ....

      </xs:restriction>    

    </xs:simpleContent>

  </xs:complexType>

</xs:element>


提示:请使用 extension
或 restriction 元素来扩展或限制元素的基本简易类型。
这里有一个 XML 元素的例子,"shoesize",其中仅包含文本:

<shoesize country="france">35</shoesize>


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

<xs:element name="shoesize" type="shoetype"/>

 

<xs:complexType name="shoetype">

  <xs:simpleContent>

    <xs:extension base="xs:integer">

      <xs:attribute name="country" type="xs:string" />

    </xs:extension>

  </xs:simpleContent>

</xs:complexType>



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

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

<xs:element name="letter" type="lettertype"/>

<xs:complexType name="lettertype" mixed="true">

  <xs:sequence>

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

    <xs:element name="orderid" type="xs:positiveInteger"/>

    <xs:element name="shipdate" type="xs:date"/>

  </xs:sequence>

</xs:complexType>



3.4 XSD复合类型指示器

通过指示器,我们可以控制在文档中使用元素的方式。共有七种指示器:
Order 指示器:
<!--[if !supportLists]-->·        
<!--[endif]-->All
<!--[if !supportLists]-->·        
<!--[endif]-->Choice
<!--[if !supportLists]-->·        
<!--[endif]-->Sequence
Occurrence 指示器:
<!--[if !supportLists]-->·        
<!--[endif]-->maxOccurs
<!--[if !supportLists]-->·        
<!--[endif]-->minOccurs
Group 指示器:
<!--[if !supportLists]-->·        
<!--[endif]-->Group name
<!--[if !supportLists]-->·        
<!--[endif]-->attributeGroup name

3.4.1 Order指示器

Order 指示器用于定义元素的顺序。
All 指示器
<all> 指示器规定子元素可以按照任意顺序出现,且每个子元素必须只出现一次:

<xs:element name="person">

  <xs:complexType>

    [code]<xs:all>

      <xs:element name="firstname" type="xs:string"/>

      <xs:element name="lastname" type="xs:string"/>

    [code]</xs:all>

  </xs:complexType>

</xs:element>


注释:当使用
<all> 指示器时,你可以把
<minOccurs> 设置为 0 或者 1,并仅可把 <maxOccurs> 指示器设置为 1(稍后将讲解 <minOccurs> 以及 <maxOccurs>)。
Choice
指示器
<choice> 指示器规定可出现某个子元素或者可出现另外一个子元素(非此即彼):

<xs:element name="person">

  <xs:complexType>

    [code]<xs:choice>

      <xs:element name="employee" type="employee"/>

      <xs:element name="member" type="member"/>

    [code]</xs:choice>

  </xs:complexType>

</xs:element>


Sequence
指示器
<sequence> 规定子元素必须按照特定的顺序出现:

<xs:element name="person">

  <xs:complexType>

    [code]<xs:sequence>

      <xs:element name="firstname" type="xs:string"/>

      <xs:element name="lastname" type="xs:string"/>

    [code]</xs:sequence>

  </xs:complexType>

</xs:element>



3.4.2 Occurrence指示器

Occurrence 指示器用于定义某个元素出现的频率。
maxOccurs
指示器
<maxOccurs> 指示器可规定某个元素可出现的最大次数:

<xs:element name="person">

  <xs:complexType>

    <xs:sequence>

      <xs:element name="full_name" type="xs:string"/>

      <xs:element name="child_name" type="xs:string" [code]maxOccurs="10"
/>[/code]
    </xs:sequence>

  </xs:complexType>

</xs:element>


上面的例子表明,子元素 "child_name" 可在 "person" 元素中最少出现一次(其中 minOccurs 的默认值是 1),最多出现 10 次。
minOccurs
指示器
<minOccurs> 指示器可规定某个元素能够出现的最小次数:

<xs:element name="person">

  <xs:complexType>

    <xs:sequence>

      <xs:element name="full_name" type="xs:string"/>

      <xs:element name="child_name" type="xs:string"

      maxOccurs="10" [code]minOccurs="0"
/>[/code]
    </xs:sequence>

  </xs:complexType>

</xs:element>


上面的例子表明,子元素 "child_name" 可在 "person" 元素中出现最少 0 次,最多出现 10 次。
注释:对于所有的 "Order" 和
"Group" 指示器(any、all、choice、sequence、group name和group reference),的 maxOccurs 和 minOccurs 的默认值均为 1。使用 maxOccurs="unbounded" ,则某个元素的出现次数不受限制。

3.4.3 Group指示器

Group 指示器用于定义相关的数批元素。
元素组
元素组通过 group 声明进行定义:

<xs:group name="组名称">

  ...

</xs:group>


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

<xs:group name="persongroup">

  <xs:sequence>

    <xs:element name="firstname" type="xs:string"/>

    <xs:element name="lastname" type="xs:string"/>

    <xs:element name="birthday" type="xs:date"/>

  </xs:sequence>

</xs:group>


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

<xs:group [code]name="persongroup"
>[/code]
  <xs:sequence>

    <xs:element name="firstname" type="xs:string"/>

    <xs:element name="lastname" type="xs:string"/>

    <xs:element name="birthday" type="xs:date"/>

  </xs:sequence>

</xs:group>

 

<xs:element name="person" type="personinfo"/>

 

<xs:complexType name="personinfo">

  <xs:sequence>

    [code]<xs:group ref="persongroup"/>

    <xs:element name="country" type="xs:string"/>

  </xs:sequence>

</xs:complexType>


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

<xs:attributeGroup name="组名称">

  ...

Courier New
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: