`
marb
  • 浏览: 422659 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XML Schema学习笔记

XML 
阅读更多

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 Schema 是一种基于 XML 的语言,用于定义 XML 文档的结构和约束。它可以描述 XML 文档的格式、元素、属性、数据类型、默认值、固定值等信息。XML Schema 的作用类似于 DTD,但它具有更多...

    XML Schema 教程(word版本)

    在此教程中,你将学习如何在应用程序中读取和创建 XML Schema 语言,XML Schema 为何比 DTD 更加强大,以及如何在您的应用程序中使用 XML Schema。 (注,以上文档完全是我整理的难点要点的笔记!)

    Xml高级学习笔记

    【XML 高级学习笔记】 XML(Extensible Markup Language)是一种可扩展标记语言,与HTML类似,但其设计目标是存储和传输数据,而非呈现数据。XML允许用户自定义标签,使得它成为一种自描述的语言,并且是W3C的标准...

    schema学习笔记

    ### Schema学习笔记 #### 关键概念与术语 **Schema**是一种用于定义XML文档结构和约束的语言。它通过一组规则来确保XML文档中的数据遵循特定格式和逻辑规则,从而提高数据的一致性和有效性。 #### 命名约定 - **...

    Schama —— Xml文档约束技术 学习笔记

    **Schama —— XML文档约束技术 学习笔记** XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、Web服务等场景。为了确保XML文档的数据结构正确、完整,避免数据错误,XML...

    XML基础学习笔记指南

    除了DTD,XML还可以使用Schema进行文档定义,XML Schema的优势在于其本身就是XML格式,易于阅读和编写,且支持的数据类型比DTD更为丰富。 在XML的应用中,DOM(Document Object Model)和SAX(Simple API for XML)...

    XML应用开发(软件品牌)-1期 第3单元 单元项目实践-使用XML Schema定义描述网上订单信息的XML标签.doc

    在本单元项目实践中,我们将学习如何使用XML Schema来定义描述网上订单信息的XML标签。这个实践旨在帮助我们掌握XML Schema的使用,包括创建XML Schema文档、定义XML标签、验证XML数据、使用内置简单类型和复杂类型...

    MLDN学习笔记 —— XML学习笔记

    1. **命名空间**:通过引入命名空间,可以避免元素名称的冲突,如`&lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"&gt;`。 2. **DTD(Document Type Definition)**:定义XML文档的结构,用于验证文档是否符合...

    Xml学习笔记.pdf

    由于提供的文件信息中包含了大量的XML学习资料,且内容比较丰富,我们将逐一详细解释这些内容所涵盖的知识点。 **XML简介** XML是Extensible Markup Language(可扩展标记语言)的缩写,它是一种用于标记电子文件...

    XML 学习笔记,课件,实例

    本压缩包包含了关于XML的学习笔记、课件和实例,旨在帮助初学者全面理解和掌握XML的核心概念与应用。 XML的基础知识包括以下几个关键点: 1. **XML的基本结构**:XML文档由一系列元素构成,每个元素由起始标签(如...

    北京圣思园xml学习笔记

    ### 北京圣思园XML学习笔记核心知识点详解 #### XML概述 - **XML全称**:eXtensible Markup Language(可扩展标记语言) - **学习XML的原因**: - 数据交换的需求日益增长,XML成为了电子商务的重要基础之一。 - ...

    XML学习笔记

    ### XML学习笔记 #### 一、XML基础知识 **1. 元素** 在XML文档中,元素是最基本的构成单位,由名称与类型组成。其中类型可以是简单类型(Simple Type)或复合类型(Complex Type)。例如,在下面的示例中,“书本...

    xml学习笔记.docx

    XML的学习不仅仅是理解这些基本概念,还包括命名空间、DTD(文档类型定义)或XML Schema的使用,XPath和XSLT(用于查询和转换XML)等高级主题。掌握XML能帮助开发者更好地理解和处理结构化数据,从而在各种应用场景...

    SOAPUI学习笔记(1-150页)

    对于复杂类型的定义,可以使用XMLSchema来定义包含其他元素的复合元素,以及对元素或属性的内容施加各种限定,如长度限制、枚举值、模式匹配等。 通过这些知识点的介绍,我们可以看到Web服务、SOAP、WSDL、UDDI和...

    XML学习笔记(特别适合初学者)

    XML文档通常需要有文档类型定义(DTD,Document Type Definition)或XML Schema来定义元素的结构和规则。例如,`&lt;!DOCTYPE filelist SYSTEM "filelist.dtd"&gt;`声明了文档类型为`filelist`,并且引用了`filelist.dtd`...

    《用Castor 处理XML文档》学习笔记

    《用Castor处理XML文档》学习笔记 在IT行业中,数据交换和持久化是常见的需求,XML作为一种结构化的数据格式,被广泛用于这些场景。Castor是一个Java库,它提供了强大的XML到Java对象绑定功能,使得处理XML文档变得...

    XML DOM4J学习笔记

    本篇笔记将深入探讨XML DOM4J的学习要点。 一、XML基础知识 1. XML结构:XML文档由元素(Element)、属性(Attribute)、文本内容(Text)、注释(Comment)等组成。每个XML文档都有一个根元素,其他元素嵌套在根...

    XML文件解析学习笔记···

    XML文件解析学习笔记 XML(eXtensible Markup Language)是一种标记语言,常用于存储和传输数据,尤其在Web服务和配置文件中广泛使用。Libxml是一个强大的C语言库,用于处理XML数据,包括解析、创建和修改XML文档。...

Global site tag (gtag.js) - Google Analytics