1
、复杂类型和简单类型之间最根本的区别就是:复杂类型的内容中可以包含其他元素,也可以带有属性(
Attribute
)
,
但简单类型既不能包含子元素,也不能带有任何属性。
<xsd:complexType name="CNAddress" >
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="zip" type="xsd:decimal"/>
</xsd:sequence>
<xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
</xsd:complexType>
2
、
element
存在约束:
element
可以通过其
minOccurs
和
maxOccurs
两个属性来约束元素实例存在的个数,这两个属性的缺省值都是
1
,表示默认情况下此元素在
XML
实例文档中必须出现一次。
3
、
attribute
存在约束:元素属性也可以通过
attribute
的
use
属性来约束出现一次或根本不出现;
use
属性的取值可以是
required,optional,prohibited
三个值,缺省(默认)值是
optional.
4
、
element
和
attribute
都有一个
default
和
fixed
属性,针对
element
来书,只有当
element
实例为空时才采用此
default
值,而
attribute
是当实例不提供此
attribute
时才采用此
default
值,因此对
attribute
而言,只有其
use
值是
optional
时
default
值才有意义,而且对
element
和
attribute
来说
fixed
和
default
两个属性不能同时存在,否则会出现错误。
5
、直接定义在
schema
元素下,即
schema
元素的顶级子元素的
element
和
attribute
都是全局的,称之为全局元素和全局属性,你在其他类型定义中可以直接引用。
6
、派生新类型有两种方式:第一种就是直接从其他类型中扩展(继承)而来,另外一种就是通过对已有类型进行限定性约束而来。
如:以下有三种通过限定性约束定义的新类型:
通过值范围限定:
<xsd:simpleType name="myInteger">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="10000"/>
<xsd:maxInclusive value="99999"/>
</xsd:restriction>
</xsd:simpleType>
使用模式匹配限定:
<xsd:simpleType name="SKU">
<xsd:restriction base="xsd:string">
<xsd:pattern value=""d{3}-[A-Z]{2}"/>
</xsd:restriction>
</xsd:simpleType>
使用枚举方式限定:
<xsd:simpleType name="CNCity">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="BeiJing"/>
<xsd:enumeration value="NanChang"/>
<xsd:enumeration value="ShangHai"/>
</xsd:restriction>
</xsd:simpleType>
7
、原子类型(不可分割的类型,象
string,integer
等系统内建的类型)、列表类型、联合类型合起来统一称为简单类型。在
Schema
中有
NMTOKENS
、
IDREFS
、
ENTITIES
三种内建的列表类型,你也可以从已有的简单类型来创建
list(
列表
)
类型,但你不能从已有的
list
类型和复杂类型来创建列表(
list
)类型。
如:
<xsd:simpleType name="listOfMyIntType">
<xsd:list itemType="myInteger"/>
</xsd:simpleType>
在
XML
实例文档中列表类型的值是通过空格来进行分隔的,如果声明了一个
listOfMyIntType
元素,其值可能是:
<listOfMyInt>20003 15037 95977 95945</listOfMyInt>
8
、有几个方面的元素可以应用于
list
类型来进行约束,它们是:
length
、
minLength
、
maxLength
和
enumeration
,如:
<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>
注:针对列表类型要千万注意成员是
string
类型的,因为
string
类型中的空格和列表类型的分割符空格会造成部分混淆。
9
、对元素的定义可以采用通过指定其
type
属性为已定义的属性的方式,也可一采用匿名定义类型的方式,如:
采用类型定义:
<xsd:element name=”comment” type=”xsd:string”>
采用匿名定义:
<xsd:element name=”quantity”>
<xsd:simpleType>
<xsd:restriction base=”xsd:positiveInteger”>
<xsd:maxExclusive value=”100” />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
10
、
union
(联合)类型表示在
XML
实例文档中的元素实例符合
union
类型定义的成员类型中的一种就可以了(合法),这一点和
C++
中的联合类型有类似的概念,如:
11
、复杂类型一般可以分为三类:第一类是包含字符内容和属性但不包含子元素;第二类是包含属性和子元素但不包含字符数据(字符数据包含在子元素中);第三类是即包含属性和字符内容又包含子元素的;那么如何来定义这三类类型呢?针对第一类可以通过
simpleContent
来实现,第二类可以通过
complexContent
来做到,第三类只需要将
complexType
的属性
mixed
设为
true
就可以了。具体的例子如下:
第一种类型(从一个简单类型扩展而来,增加了属性):
<xsd:element name="internationalPrice">
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base="xsd:decimal">
<xsd:attribute name="currency" type="xsd:string"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
第二种类型(有一个
element
和两个
attribute
构成):
<xsd:element name="internationalPrice">
<xsd:complexType>
<xsd:complexContent>
<xsd:element name=”Country” type=”xsd:string” />
<xsd:attribute name="currency" type="xsd:string"/>
<xsd:attribute name="value" type="xsd:decimal"/>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
注意:在这里由于默认情况下缺省是
complexContent
,所以在这里简略的写法是:
<xsd:element name="internationalPrice">
<xsd:complexType>
<xsd:element name=”Country” type=”xsd:string” />
<xsd:attribute name="currency" type="xsd:string"/>
<xsd:attribute name="value" type="xsd:decimal"/>
</xsd:complexContent>
</xsd:element>
第三种类型:
<xsd:element name="letterBody">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="salutation">
<xsd:complexType mixed="true">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="quantity" type="xsd:positiveInteger"/>
<xsd:element name="productName" type="xsd:string"/>
<xsd:element name="shipDate" type="xsd:date" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
第三种类型的实例可能如下:
<letterBody>
<salutation>Dear Mr.<name>Robert Smith</name>.</salutation>
Your order of <quantity>1</quantity> <productName>Baby
Monitor</productName> shipped from our warehouse on
<shipDate>1999-05-21</shipDate>
</letterBody>
12
、根据
11
的描述那么要定义一个空内容的元素,也就是说定义一个只包含属性的元素,只要在
complexContent
中不包含任何子元素,就可以了,如:
<xsd:element name="internationalPrice">
<xsd:complexType>
<xsd:attribute name="currency" type="xsd:string"/>
<xsd:attribute name="value" type="xsd:decimal"/>
</xsd:complexType>
</xsd:element>
13
、
anyType
是所有
Schema
类型的基类型,和
Java
中的
Object
类似。因此,以下定义:
<xsd:element name="anything" type="xsd:anyType"/>
可以写成:
<xsd:element name="anything"/>
14
、
Schema
中用
annotation
、
document
、
appInfo
三个元素来进行注释,其中
appI
和
document
都是作为
annotation
的子元素来处理的。并且
annotation
一般是作为
schema
的顶层子元素、
element
的构造、类型定义的顶层子元素的。
如:
<xsd:element name="internationalPrice">
<xsd:annotation>
<xsd:documentation xml:lang="en">
element declared with anonymous type
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:annotation>
<xsd:documentation xml:lang="en">
empty anonymous type with 2 attributes
</xsd:documentation>
</xsd:annotation>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:attribute name="currency" type="xsd:string"/>
<xsd:attribute name="value" type="xsd:decimal"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
15
、
choice
仅允许在实例文档中使用其中一个子元素;在
all
中的所有元素都可以出现一次或一次都不出现,并且其中元素实例是没有顺序约束的,而且
all
必须放在任何内容模型的最顶层,为了说明这个问题,下面先列出一个合法的,然后列出一个不合法的以供对照说明:
<xsd:complexType name="PurchaseOrderType">
<xsd:all>
<xsd:element name="shipTo" type="USAddress"/>
<xsd:element name="billTo" type="USAddress"/>
<xsd:element ref="comment" minOccurs="0"/>
<xsd:element name="items" type="Items"/>
</xsd:all>
<xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>
下面是一个不合法的:
<xsd:complexType name="PurchaseOrderType">
<xsd:sequence>
<xsd:all>
<xsd:element name="shipTo" type="USAddress"/>
<xsd:element name="billTo" type="USAddress"/>
<xsd:element name="items" type="Items"/>
</xsd:all>
<xsd:sequence>
<xsd:element ref="comment" />
</xsd:sequence>
</xsd:sequence>
<xsd:attribute name="orderDate" type="xsd:date"/>
</xsd:complexType>
16
、在存在很多类型中都有几个相同的类型的情况,可以采用属性组的方式来进行重用,属性组定义的格式是:
<xsd:attributeGroup name=”attrGroupName”>
<xsd:attribute name=”attrName1” type=”xsd:string” />
<xsd:attribute name=”attrName2” type=”xsd:string” />
…
</xsd:attributeGroup>
使用可以采用以下方式:
<xsd:element name=”testAttrGroup”>
<xsd:comlexType>
<xsd:element name=”element1” type=”xsd:string” />
<xsd:attributeGroup ref=”attrGroupName” />
</xsd:complexType>
</xsd:element>
分享到:
相关推荐
"XML Schema 学习笔记" XML Schema 是一种基于 XML 的语言,用于定义 XML 文档的结构和约束。它可以描述 XML 文档的格式、元素、属性、数据类型、默认值、固定值等信息。XML Schema 的作用类似于 DTD,但它具有更多...
在此教程中,你将学习如何在应用程序中读取和创建 XML Schema 语言,XML Schema 为何比 DTD 更加强大,以及如何在您的应用程序中使用 XML Schema。 (注,以上文档完全是我整理的难点要点的笔记!)
【XML 高级学习笔记】 XML(Extensible Markup Language)是一种可扩展标记语言,与HTML类似,但其设计目标是存储和传输数据,而非呈现数据。XML允许用户自定义标签,使得它成为一种自描述的语言,并且是W3C的标准...
### Schema学习笔记 #### 关键概念与术语 **Schema**是一种用于定义XML文档结构和约束的语言。它通过一组规则来确保XML文档中的数据遵循特定格式和逻辑规则,从而提高数据的一致性和有效性。 #### 命名约定 - **...
**Schama —— XML文档约束技术 学习笔记** XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、Web服务等场景。为了确保XML文档的数据结构正确、完整,避免数据错误,XML...
除了DTD,XML还可以使用Schema进行文档定义,XML Schema的优势在于其本身就是XML格式,易于阅读和编写,且支持的数据类型比DTD更为丰富。 在XML的应用中,DOM(Document Object Model)和SAX(Simple API for XML)...
在本单元项目实践中,我们将学习如何使用XML Schema来定义描述网上订单信息的XML标签。这个实践旨在帮助我们掌握XML Schema的使用,包括创建XML Schema文档、定义XML标签、验证XML数据、使用内置简单类型和复杂类型...
1. **命名空间**:通过引入命名空间,可以避免元素名称的冲突,如`<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">`。 2. **DTD(Document Type Definition)**:定义XML文档的结构,用于验证文档是否符合...
由于提供的文件信息中包含了大量的XML学习资料,且内容比较丰富,我们将逐一详细解释这些内容所涵盖的知识点。 **XML简介** XML是Extensible Markup Language(可扩展标记语言)的缩写,它是一种用于标记电子文件...
本压缩包包含了关于XML的学习笔记、课件和实例,旨在帮助初学者全面理解和掌握XML的核心概念与应用。 XML的基础知识包括以下几个关键点: 1. **XML的基本结构**:XML文档由一系列元素构成,每个元素由起始标签(如...
### 北京圣思园XML学习笔记核心知识点详解 #### XML概述 - **XML全称**:eXtensible Markup Language(可扩展标记语言) - **学习XML的原因**: - 数据交换的需求日益增长,XML成为了电子商务的重要基础之一。 - ...
### XML学习笔记 #### 一、XML基础知识 **1. 元素** 在XML文档中,元素是最基本的构成单位,由名称与类型组成。其中类型可以是简单类型(Simple Type)或复合类型(Complex Type)。例如,在下面的示例中,“书本...
XML的学习不仅仅是理解这些基本概念,还包括命名空间、DTD(文档类型定义)或XML Schema的使用,XPath和XSLT(用于查询和转换XML)等高级主题。掌握XML能帮助开发者更好地理解和处理结构化数据,从而在各种应用场景...
对于复杂类型的定义,可以使用XMLSchema来定义包含其他元素的复合元素,以及对元素或属性的内容施加各种限定,如长度限制、枚举值、模式匹配等。 通过这些知识点的介绍,我们可以看到Web服务、SOAP、WSDL、UDDI和...
XML文档通常需要有文档类型定义(DTD,Document Type Definition)或XML Schema来定义元素的结构和规则。例如,`<!DOCTYPE filelist SYSTEM "filelist.dtd">`声明了文档类型为`filelist`,并且引用了`filelist.dtd`...
《用Castor处理XML文档》学习笔记 在IT行业中,数据交换和持久化是常见的需求,XML作为一种结构化的数据格式,被广泛用于这些场景。Castor是一个Java库,它提供了强大的XML到Java对象绑定功能,使得处理XML文档变得...
本篇笔记将深入探讨XML DOM4J的学习要点。 一、XML基础知识 1. XML结构:XML文档由元素(Element)、属性(Attribute)、文本内容(Text)、注释(Comment)等组成。每个XML文档都有一个根元素,其他元素嵌套在根...
XML文件解析学习笔记 XML(eXtensible Markup Language)是一种标记语言,常用于存储和传输数据,尤其在Web服务和配置文件中广泛使用。Libxml是一个强大的C语言库,用于处理XML数据,包括解析、创建和修改XML文档。...