`
yangke_love
  • 浏览: 17328 次
  • 性别: 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>

2element存在约束:element可以通过其minOccursmaxOccurs两个属性来约束元素实例存在的个数,这两个属性的缺省值都是1,表示默认情况下此元素在XML实例文档中必须出现一次。

3attribute存在约束:元素属性也可以通过attributeuse属性来约束出现一次或根本不出现;use属性的取值可以是required,optional,prohibited三个值,缺省(默认)值是optional.

4elementattribute都有一个defaultfixed属性,针对element来书,只有当element实例为空时才采用此default值,而attribute是当实例不提供此attribute时才采用此default值,因此对attribute而言,只有其use值是optionaldefault值才有意义,而且对elementattribute来说fixeddefault两个属性不能同时存在,否则会出现错误。

5、直接定义在schema元素下,即schema元素的顶级子元素的elementattribute都是全局的,称之为全局元素和全局属性,你在其他类型定义中可以直接引用。

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中有NMTOKENSIDREFSENTITIES三种内建的列表类型,你也可以从已有的简单类型来创建list(列表)类型,但你不能从已有的list类型和复杂类型来创建列表(list)类型。

如:

<xsd:simpleType name="listOfMyIntType">

 <xsd:list itemType="myInteger"/>

</xsd:simpleType>

XML实例文档中列表类型的值是通过空格来进行分隔的,如果声明了一个listOfMyIntType元素,其值可能是:

<listOfMyInt>20003 15037 95977 95945</listOfMyInt>

8、有几个方面的元素可以应用于list类型来进行约束,它们是:lengthminLengthmaxLengthenumeration,如:

<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>

10union(联合)类型表示在XML实例文档中的元素实例符合union类型定义的成员类型中的一种就可以了(合法),这一点和C++中的联合类型有类似的概念,如:

<xsd:simpleType name="addrUnion">

  <xsd:union memberTypes="xsd:string integer"/>

</xsd:simpleType>

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>

13anyType是所有Schema类型的基类型,和Java中的Object类似。因此,以下定义:

<xsd:element name="anything" type="xsd:anyType"/>

 可以写成:

 <xsd:element name="anything"/>

14Schema中用annotationdocumentappInfo三个元素来进行注释,其中appIdocument都是作为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>

15choice仅允许在实例文档中使用其中一个子元素;在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

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于数据交换、配置文件、文档存储等领域。...因此,学习和理解XML Schema及其在生成XML文档中的应用,对于IT从业者来说是非常有价值的。

    xml Schema学习

    压缩包中的“XML Schema学习总结.pdf”很可能是一个详细的教程,包含了XML Schema的各个方面;而“xml.pptx”可能是配合讲解的PPT,可能包含图表、示例和关键点总结。 学习XML Schema对于理解和处理XML文档至关重要...

    XmlSchema-1.4.6.jar

    XML Schema,简称XSD,是一种用于定义XML文档结构和数据类型的规范。`XmlSchema-1.4.6.jar` 是一个包含Java绑定的XML Schema API的库,它为处理XML Schema文档提供了支持。在开发Web服务客户端时,尤其是与基于SOAP...

    XmlSchema-1.2.jar,xmlschema-1.2.jar,xml.jar

    XmlSchema-1.2.jar,xmlschema-1.2.jar,xml.jar

    XML Schema教程

    #### 五、学习 XML Schema 的前提条件 - **HTML/XHTML**:了解基本的 HTML 或 XHTML 结构对于理解 XML 和 XML Schema 有帮助。 - **XML 以及 XML 命名空间**:熟悉 XML 的基本概念和命名空间的使用。 - **DTD 的基本...

    XML与XMLSchema

    【XML与XMLSchema】 XML,全称可扩展标记语言(eXtensible Markup Language),是一种基于标准通用标记语言SGML的简化版本,由万维网联盟(W3C)于1996年开始制定,并在1998年2月10日发布了XML 1.0规范。它的设计...

    理解XML Schema XML Schema进阶

    XML Schema是目前国际标准的XML建模工具,本文将对XML Schema进行详细的介绍,帮助读者初步掌握XML Schema的使用方法和XML Schema文档实例的具体语义。 1. 命名空间的使用 XML Schema中命名空间的使用是非常重要的...

    XML文件XML Schema.docXML Schema.doc

    "XML Schema知识点" XML Schema是XML语言为基础的,它用于可替代DTD。它用于描述XML文档的结构。XML Schema语言也被称为XML Schema Definition(XSD)。XML Schema的作用是定义一份XML文档的合法组件群,就像DTD的...

    XmlSchema-1.4.7.jar

    总结起来,XmlSchema-1.4.7.jar是用于处理XML Schema的Java库,它提供了XML文档验证、类型转换等功能,并可能在Web服务框架中得到应用。了解并熟练使用这个库,对于Java开发者来说,能够提高他们在处理XML数据时的...

    xmlschema-core-2.0.3的jar

    XML Schema(通常缩写为XSD)是W3C组织定义的一种XML语言,用于描述XML文档的结构和数据类型。它是XML文档验证的重要工具,确保数据遵循特定的规则和格式。在Java编程环境中,XML Schema Core库是处理XSD相关的操作...

    XML Schema学习总结_重要.pdf

    ### XML Schema 学习总结 #### 一、概述 XML Schema 是一种用于描述 XML 文档结构的语言,它定义了 XML 文档中所包含的数据类型、元素以及属性等规则。通过 XML Schema,我们可以确保 XML 文件符合预设的标准和...

    西工大服务计算实验2-1_XML Schema

    总结来说,这个实验要求你深入理解XML Schema的概念和应用,掌握生成XML文档的编程技巧,以及与SOA相关的数据交换知识。在实践中,你需要解析XML Schema,生成符合Schema的XML文档,这将涉及到编程、XML处理和数据...

    XmlSchema-1.1.jar

    XmlSchema-1.1.jar XmlSchema-1.1.jar

    XMLSchema.chm

    这个“XMLSchema.chm”文件很可能是一个帮助文档,旨在为学习XML Schema的用户提供详细的指导和参考资料。下面我们将深入探讨XML Schema的相关知识点。 1. **XML Schema的作用**:XML Schema的主要功能是规范XML...

    xml schema 学习笔记

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

    XML Schema简明教程-W3C.rar

    在此教程中,你将学习如何在应用程序中读取和创建 XML Schema 语言,XML Schema 为何比 DTD 更加强大,以及如何在您的应用程序中使用 XML Schema。 什么是 XML Schema? XML Schema 的作用是定义 XML 文档的合法构建...

    XMLSchema经典例题

    XML Schema,全称为XML Schema Definition (XSD),是一种用于描述XML文档结构和数据类型的规范,它是W3C...通过学习和理解这些例子,你将能够更好地掌握XML Schema的使用,从而更有效地设计和验证XML文档的结构。

    XmlSchema-1.4.7 jar包

    好不容易找到的XmlSchema-1.4.7 jar包,需要的同学速度下载吧。不黑心,只要1分~~~

Global site tag (gtag.js) - Google Analytics