`

XML Schema 实例

阅读更多

1.XML Schema是干什么的? 
  XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,还是64位?这些细节对实现互操作性都是很重要的。W3C制定的XML Schema(XSD)和文档类型定义(Document Type Definition,DTD)格式就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。 


2.XML Schema和DTD的区别 
   XML Schema的作用和DTD类似。但不同的是,Schema文件所描述的是引用它的XML文件中的元素和属性的具体类型。另外,由于它是由XML编写的,Schema和DTD相比较还有以下优点: 
  1)XML Schema内容模型是开放的,可以随意扩充,而DTD无法解析扩充的内容。 
  2)DTD只能把内容类型定义为一个字符串,而XML Schema允许把内容类型定义为整型、浮点型、布尔型或者许多其它的简单数据类型。 
  3)XML Schema利用Namespaces将文档中特殊的节点与Schema相联系,一个XML文件可以有多个对应的Schema,而一个XML文件只能有一个DTD。 


3.Schema的基本概念 
  一个Schema文档由注释,声明,类型定义,模型组,属性组五部分组成.我们可以在Schema文档中定义简单类型和复杂类型,也可以声明元素(elment),添加属性(attribute),给出注释,定义模型组和属性组 
3.1声明文档元素 
  元素是通过使用element元素来声明的. 
  比如说声明一个number元素,并指定他的类型为Schema内建的字符串(string)型.通过在类型名称前冠以命名空间前缀来使用,syntax: 
  <xsd:element name="number" type="xsd:string"/> 
3.2添加属性 
  属性则是通过使用attribute元素来声明的。它们只能是简单类型,只能包含文本,且没有子属性。可以应用在attribute元素定义中的属性如下: 
default    初始默认值 
fixed      不能修改和覆盖的属性固定值 
name       属性的名称 
ref        对前一个属性定义的引用 
type       该属性的XSD类型或者简单类型 
use        如何使用属性 
form       确定attributeFormDefault的本地值 
id          模式文档中属性唯一的ID 
3.3类型定义 
  在Schema中,类型(type)可以分为两种形式,一种是简单的类型,被称为simple,一种是复杂的类型,被称为complex。复杂类型和简单类型之间最根本的区别就是:复杂类型的内容中可以包含其他元素,也可以带有属性(Attribute),但简单类型既不能包含子元素,也不能带有任何属性。 
  当需要定义新的复合类型的时候,应当使用complexType元素来定义,这样的典型定义包括元素声明、元素引用和属性声明。 
3.4定义模型组 
分组定义中使用的是group元素。例如: 

Java代码 
  1. <xsd:group name=”CityChoice”>  
  2. <xsd:choice>  
  3.         <xsd:element name=” Beijing ” type=”xsd:string” />  
  4.         <xsd:element name=” Shanghai ” type=”xsd:string” />  
  5.         <xsd:element name=”Xian” type=”xsd:string” />  
  6. </xsd:choice>  
  7. </xsd:group>  
  8. <xsd:element name=”City”>  
  9. <xsd”group ref=”CityChoice” minOccurs=”1” maxOccurs=”1” />  
  10. </xsd:element>  

3.5定义属性组 
对属性的分组,应该使用attributeGroup元素,例如: 
Java代码 
  1. <xsd:attributeGroup name=”contactAttribs”>  
  2. <xsd:attribute name=”city” type=”xsd:string” />  
  3. <xsd:attribute name=”country” type=”xsd:string” />  
  4. <xsd:attribute name=”age” type=”xsd:string” />  
  5. </xsd:attributeGroup>  
  6. <xsd:element name=”contact”>  
  7. <xsd:complexType>  
  8.         <xsd:attributeGroup ref=”contactAttribs” />  
  9. </xsd:complexType>  
  10. </xsd:element>  



4.深入了解复杂类型 
4.1复杂类型的类型 
  复杂类型一般可以分为三类:第一类是包含字符内容和属性但不包含子元素;第二类是包含属性和子元素但不包含字符数据(字符数据包含在子元素中);第三类是即包含属性和字符内容又包含子元素的;那么如何来定义这三类类型呢?针对第一类可以通过simpleContent来实现,第二类可以通过complexContent来做到,第三类只需要将complexType的属性mixed设为true就可以了。 
1)第一种类型(从一个简单类型扩展而来,增加了属性): 
Java代码 
  1. <xsd:element name="internationalPrice">  
  2.   <xsd:complexType>  
  3.    <xsd:simpleContent>  
  4.     <xsd:extension base="xsd:decimal">  
  5.      <xsd:attribute name="currency" type="xsd:string"/>  
  6.     </xsd:extension>  
  7.    </xsd:simpleContent>  
  8.   </xsd:complexType>  
  9. </xsd:element>  

2)第二种类型(有一个element和两个attribute构成): 
Java代码 
  1. <xsd:element name="internationalPrice">  
  2.  <xsd:complexType>  
  3.   <xsd:complexContent>  
  4.     <xsd:element name=”Country”     type=”xsd:string” />  
  5.     <xsd:attribute name="currency" type="xsd:string"/>  
  6.     <xsd:attribute name="value"     type="xsd:decimal"/>  
  7.   </xsd:complexContent>  
  8.  </xsd:complexType>  
  9. </xsd:element>  

3)第三种类型: 
Java代码 
  1. <xsd:element name="letterBody">  
  2.  <xsd:complexType mixed="true">  
  3.   <xsd:sequence>  
  4.    <xsd:element name="salutation">  
  5.     <xsd:complexType mixed="true">  
  6.      <xsd:sequence>  
  7.       <xsd:element name="name" type="xsd:string"/>  
  8.      </xsd:sequence>  
  9.     </xsd:complexType>  
  10.    </xsd:element>  
  11.    <xsd:element name="quantity"    type="xsd:positiveInteger"/>  
  12.    <xsd:element name="productName" type="xsd:string"/>  
  13.    <xsd:element name="shipDate"    type="xsd:date" minOccurs="0"/>  
  14.    </xsd:sequence>  
  15.  </xsd:complexType>  
  16. </xsd:element>  

4.2利用组合器控制结构 
1)sequence组合器 
sequence组合器,定义了一列元素必须按照模式中指定的顺序显示(如果是可选的,也可以不显示)。语法如下: 
Java代码 
  1. <xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>  
  2.     <xsd:element name=”name”>  
  3.         <xsd:complexType>  
  4.             <xsd:sequence>  
  5.                 <xsd:element name=”first” type=”xsd:string” />  
  6.                 <xsd:element name=”middle” type=”xsd:string” />  
  7.                 <xsd:element name=”last” type=”xsd:string” />  
  8.            </xsd:sequence>  
  9.         </xsd:complexType>  
  10.     </xsd:element>  
  11. </xsd:schema>  

2)all组合器 
all组合器,允许所定义的元素可以按照任意顺序显示,all元素的子元素在默认情况下是必须的,而且每次最多显示一次。语法如下: 
Java代码 
  1. <xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>  
  2.     <xsd:element name=”name”>  
  3.         <xsd:complexType>  
  4.             <xsd:all minOccurs=”0”>  
  5.                 <xsd:element name=”first” type=”xsd:string” />  
  6.                 <xsd:element name=”middle” type=”xsd:string” />  
  7.                 <xsd:element name=”last” type=”xsd:string” />  
  8.             </xsd:all>  
  9.         </xsd:complexType>  
  10.     </xsd:element>  
  11. </xsd:schema>  

3)choice组合器 
choice组合器,允许指定多组声明中的一个,用于互斥情况。语法如下: 
Java代码 
  1. <xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>  
  2.     <xsd:element name=”name”>  
  3.         <xsd:complexType>  
  4.             <xsd:choice>  
  5.                 <xsd:element name=”first” type=”xsd:string” />  
  6.                 <xsd:element name=”middle” type=”xsd:string” />  
  7.                 <xsd:element name=”last” type=”xsd:string” />  
  8.             </xsd:choice>  
  9.         </xsd:complexType>  
  10.     </xsd:element>  
  11. </xsd:schema>  

4.3派生新类型 
  派生新类型有两种方式:第一种就是直接从其他类型中扩展(继承)而来,另外一种就是通过对已有类型进行限定性约束而来。如:以下有三种通过限定性约束定义的新类型: 
1)通过值范围限定: 
Java代码 
  1. <xsd:simpleType name="myInteger">  
  2.   <xsd:restriction base="xsd:integer">  
  3.     <xsd:minInclusive value="10000"/>  
  4.     <xsd:maxInclusive value="99999"/>  
  5.   </xsd:restriction>  
  6. </xsd:simpleType>  


2)使用模式匹配限定: 
Java代码 
  1. <xsd:simpleType name="SKU">  
  2.   <xsd:restriction base="xsd:string">  
  3.     <xsd:pattern value="\d{3}-[A-Z]{2}"/>  
  4.   </xsd:restriction>  
  5. </xsd:simpleType>  


3)使用枚举方式限定: 
Java代码 
  1. <xsd:simpleType name="CNCity">  
  2.   <xsd:restriction base="xsd:string">  
  3.     <xsd:enumeration value="BeiJing"/>  
  4.     <xsd:enumeration value="NanChang"/>  
  5.     <xsd:enumeration value="ShangHai"/>  
  6.   </xsd:restriction>  
  7. </xsd:simpleType>  




5.工具 
  XML Schema的语法并不简单。虽然可以用简单的文本编辑器手工创建schema,但是复杂的应用,这样做也许会很难。为了更好地利用它,你可以采用若干种XML工具,最近出现的一些工具甚至提供了创建XML Schema的图形界面。XML Spy和Cape Clear Studio都是具有XML Schema创建功能的全方位XML综合开发环境。dtd2xs是一种DTD-to-XML的Schema转换工具,它有两种形式:单独运行的应用程序和Java类。同DTD一样,标准的XML Schema定义非常多,你可以根据自己的需要在应用程序的开发中采用。 

分享到:
评论

相关推荐

    xml schema实例

    总结来说,XML Schema实例通过使用简单类型、复合类型、元素定义和属性定义,为XML文档提供了强大的结构化规范。这不仅有助于确保文档的一致性,还使得数据交换和验证变得更加方便。在实际应用中,开发者可以根据...

    理解XML Schema XML Schema进阶

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

    xmlschema-core-2.0.3的jar

    `xmlschema-core-2.0.3.jar` 是一个Java库,专门用于解析和操作XML Schema文档,它支持XML Schema 1.1标准。 在Spring Web服务中,XML Schema Core库扮演着关键角色。Spring Web Service框架是基于合同优先...

    XML Schema教程

    - **XSD 实例**:具体的应用实例,展示如何在实际场景中使用 XML Schema。 - **数据类型**:XML Schema 定义了大量的预定义数据类型,包括但不限于: - **XSD 字符串**:用于表示文本字符串。 - **XSD 日期**:...

    XML schema结构快速参考

    - **http://www.w3.org/2001/XMLSchema**:这是XML Schema实例文档的标准名称空间。 - **http://www.w3.org/2001/XMLSchema-instance**:这个名称空间用于表示XML Schema实例文档中的特殊属性,如`xsi:type`。 ####...

    XMLSchema经典例题

    在“XMLSchema例子”文件中,你将看到这些概念如何实际应用于具体的XML Schema定义和XML文档实例。通过学习和理解这些例子,你将能够更好地掌握XML Schema的使用,从而更有效地设计和验证XML文档的结构。

    XML应用开发(软件品牌)-1期 3.1 案例分析-认识XML Schema文档结构.doc

    这里,XML文档使用`xsi`命名空间(`xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"`)引入了XML Schema实例的属性`noNamespaceSchemaLocation`。这个属性指定了XML Schema文档(3.1 -greeting.xsd)的位置...

    XML基础实例 Schema

    以下是一些关于XML基础实例和Schema的知识点: 1. **XML文档结构**:一个XML文档由元素、属性、文本内容等构成。元素是XML文档的基本构建块,可以包含其他元素或文本。每个XML文档必须有一个根元素,所有其他元素都...

    xml Schema学习

    3. **实例解析**:通过具体例子展示如何编写XML Schema,以及如何使用XML Schema来验证XML文档。 4. **工具支持**:介绍一些常用的XML Schema编辑器和验证工具,如XMLSpy、 Oxygen XML Editor等,以及如何利用这些...

    xml Schema 例子(C#写的验证程序)

    1. **XmlSchema**: 这是XML Schema的根对象,用于表示整个XML Schema文档。 2. **XmlSchemaSet**: 用于存储和加载多个XML Schema,并进行验证。可以使用Add方法添加新的XML Schema。 3. **XmlSchemaValidator**: ...

    XMLSchema 参考手册

    XML Schema,全称为eXtensible Markup Language Schema,是用于定义XML文档结构...通过阅读《XMLSchema参考手册》,你可以深入了解其内部机制,提升XML文档的管理和验证能力,从而在开发过程中保证数据的质量和一致性。

    AUTOSAR_MMOD_XMLSchema.zip

    标题中的"AUTOSAR_MMOD_XMLSchema.zip"指的是一个与AUTOSAR(AUTomotive Open System ARchitecture)相关的压缩包文件,它包含了MMOD(Model-based Modeling and Development)的XML Schema定义。AUTOSAR是一种全球...

    xml schema complete reference

    《Addison Wesley - The XML Schema Complete Reference (2002)》这本书详细讲解了这些概念,并提供了实例帮助读者理解如何实际应用XML Schema。学习并熟练掌握XML Schema对于任何处理XML数据的开发者来说都是至关...

    XML - 实验(2) -- Schema

    如何将XML Schema文档关联到XML实例数据文档,并完成文档的有效性验证。 3、掌握如何准确定义数据之间的参照完整性约束,如何在模式中使用多态性支持,如何在文档中定义空值等等。 [提交内容] 提交book.xsd、book....

    xml中的xmlns:、xmlns:xsi和xsi:schemaLocation.doc

    "XML中的xmlns、xmlns:xsi和xsi:...在上面的代码中,xmlns="http://maven.apache.org/POM/4.0.0"定义了命名空间,xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"定义了XML schema实例,xsi:schemaLocation=...

    《XML》实验(2) -- Schema

    如何将XML Schema文档关联到XML实例数据文档,并完成文档的有效性验证。 3、掌握如何准确定义数据之间的参照完整性约束,如何在模式中使用多态性支持,如何在文档中定义空值等等。 某软件学院XML课程答案

Global site tag (gtag.js) - Google Analytics