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元素。例如:
<xsd:group name=”CityChoice”>
<xsd:choice>
<xsd:element name=” Beijing ” type=”xsd:string” />
<xsd:element name=” Shanghai ” type=”xsd:string” />
<xsd:element name=”Xian” type=”xsd:string” />
</xsd:choice>
</xsd:group>
<xsd:element name=”City”>
<xsd”group ref=”CityChoice” minOccurs=”1” maxOccurs=”1” />
</xsd:element>
3.5定义属性组
对属性的分组,应该使用attributeGroup元素,例如:
<xsd:attributeGroup name=”contactAttribs”>
<xsd:attribute name=”city” type=”xsd:string” />
<xsd:attribute name=”country” type=”xsd:string” />
<xsd:attribute name=”age” type=”xsd:string” />
</xsd:attributeGroup>
<xsd:element name=”contact”>
<xsd:complexType>
<xsd:attributeGroup ref=”contactAttribs” />
</xsd:complexType>
</xsd:element>
4.深入了解复杂类型
4.1复杂类型的类型
复杂类型一般可以分为三类:第一类是包含字符内容和属性但不包含子元素;第二类是包含属性和子元素但不包含字符数据(字符数据包含在子元素中);第三类是即包含属性和字符内容又包含子元素的;那么如何来定义这三类类型呢?针对第一类可以通过simpleContent来实现,第二类可以通过complexContent来做到,第三类只需要将complexType的属性mixed设为true就可以了。
1)第一种类型(从一个简单类型扩展而来,增加了属性):
<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>
2)第二种类型(有一个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>
3)第三种类型:
<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>
4.2利用组合器控制结构
1)sequence组合器
sequence组合器,定义了一列元素必须按照模式中指定的顺序显示(如果是可选的,也可以不显示)。语法如下:
<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
<xsd:element name=”name”>
<xsd:complexType>
<xsd:sequence>
<xsd:element name=”first” type=”xsd:string” />
<xsd:element name=”middle” type=”xsd:string” />
<xsd:element name=”last” type=”xsd:string” />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
2)all组合器
all组合器,允许所定义的元素可以按照任意顺序显示,all元素的子元素在默认情况下是必须的,而且每次最多显示一次。语法如下:
<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
<xsd:element name=”name”>
<xsd:complexType>
<xsd:all minOccurs=”0”>
<xsd:element name=”first” type=”xsd:string” />
<xsd:element name=”middle” type=”xsd:string” />
<xsd:element name=”last” type=”xsd:string” />
</xsd:all>
</xsd:complexType>
</xsd:element>
</xsd:schema>
3)choice组合器
choice组合器,允许指定多组声明中的一个,用于互斥情况。语法如下:
<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
<xsd:element name=”name”>
<xsd:complexType>
<xsd:choice>
<xsd:element name=”first” type=”xsd:string” />
<xsd:element name=”middle” type=”xsd:string” />
<xsd:element name=”last” type=”xsd:string” />
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
4.3派生新类型
派生新类型有两种方式:第一种就是直接从其他类型中扩展(继承)而来,另外一种就是通过对已有类型进行限定性约束而来。如:以下有三种通过限定性约束定义的新类型:
1)通过值范围限定:
<xsd:simpleType name="myInteger">
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="10000"/>
<xsd:maxInclusive value="99999"/>
</xsd:restriction>
</xsd:simpleType>
2)使用模式匹配限定:
<xsd:simpleType name="SKU">
<xsd:restriction base="xsd:string">
<xsd:pattern value="\d{3}-[A-Z]{2}"/>
</xsd:restriction>
</xsd:simpleType>
3)使用枚举方式限定:
<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>
5.工具
XML Schema的语法并不简单。虽然可以用简单的文本编辑器手工创建schema,但是复杂的应用,这样做也许会很难。为了更好地利用它,你可以采用若干种XML工具,最近出现的一些工具甚至提供了创建XML Schema的图形界面。XML Spy和Cape Clear Studio都是具有XML Schema创建功能的全方位XML综合开发环境。dtd2xs是一种DTD-to-XML的Schema转换工具,它有两种形式:单独运行的应用程序和Java类。同DTD一样,标准的XML Schema定义非常多,你可以根据自己的需要在应用程序的开发中采用。
分享到:
相关推荐
《使用dotnet-XmlSchemaClassGenerator从XMLSchema文件生成C#类》 在.NET开发过程中,处理XML数据是一项常见的任务。XML Schema(XSD)文件是定义XML文档结构和数据类型的规范,它允许我们对XML数据进行严格的约束...
在“省会城市的XML文档及Schema大纲设计”这个主题中,我们将深入探讨如何利用XML来描述和组织关于中国各省级行政区省会城市的详细信息。 首先,XML文档(城市.xml)会包含一系列按照特定结构组织的元素,这些元素...
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> </xs:schema> ``` #### XSD 字符串数据类型 XML Schema 定义了一系列字符串相关的数据类型,如 `xs:string`、`xs:normalizedString`、...
生成的JavaBean不仅包含了数据封装,还包含了反序列化和序列化的能力,使得我们可以轻松地将XML文档映射到Java对象,反之亦然。这对于基于XML的数据交换非常有用,特别是在服务端和客户端之间进行数据传输时。 总的...
XML,全称Extensible Markup ...总的来说,“轻松搞定XML”这个资源可能涵盖了XML的基础概念、语法、验证、解析、查询以及在实际开发中的应用。通过学习,你可以掌握XML的核心知识,从而在配置开发的世界中游刃有余。
### IBM XML培训资料:深入解析XML Schema #### 引言 在IBM的内部培训资料中,XML Schema...通过掌握XML Schema的设计与应用,开发者能够构建更加健壮、灵活且兼容性强的应用程序,为数据交换和处理奠定坚实的基础。
这增加了XML Schema的可读性和可扩展性,开发者可以通过XML工具轻松地创建、编辑和理解Schema。 XML Schema中的组件设计ators是用于标识和引用Schema组件的关键概念,如元素、属性、类型和模式。这些组件可以被重用...
本资料旨在帮助你轻松掌握XML的基础知识和应用技巧。 XML的基本结构: XML文档由一系列的元素构成,每个元素都有开始标签和结束标签,如`<element>`和`</element>`。元素可以包含文本、子元素或其他元素。元素可以...
- XMLSchema:XMLBean基于XML Schema(XSD)来生成Java类,这些类可以直接与符合该模式的XML文档进行交互。 - 编译XML Schema:使用XMLBean工具,可以将XSD文件转换为Java源代码,这样就可以在Java程序中直接操作...
本文将深入探讨如何利用XML轻松开发Web网站,包括XML的基本概念、XML文档结构、XML Schema、DOM解析以及XML在Web服务中的应用。 首先,XML的基本概念是关键。XML是一种元标记语言,允许用户自定义标记来描述数据。...
对于网页设计师和网络程序员来说,掌握XML能够提升他们在数据处理和集成方面的技能,适应不断发展的技术趋势。XML的深入学习涉及XML命名空间、DTD(Document Type Definition)或XML Schema用于定义文档结构、XPath...
本实验报告将深入探讨如何在.NET环境中进行XML程序设计,包括创建XML文档、解析XML、验证XML以及使用DTD(Document Type Definition)和XSD(XML Schema Definition)进行数据验证。 首先,让我们理解XML的基本概念...
**cXML - Ariba Schema详解** cXML,全称为Commerce XML,是一种基于XML(可扩展标记语言)的商业数据交换标准。...理解和掌握cXML对于任何希望在数字供应链领域取得成功的企业来说都是至关重要的。
通过《XML轻松学习手册.chm》的学习,你将能够理解XML的基本原理,掌握创建、验证和解析XML文档的技能,并具备利用XML进行数据交换和存储的实际能力。无论你是网页开发者、数据分析师还是软件工程师,XML都是你不可...
总结来说,"用xml轻松开发web网站"意味着通过学习和掌握XML,开发者可以创建出更结构化、更易于维护的Web应用程序。这涉及到理解XML的基本概念、解析和操作XML的方法,以及相关的数据交换和转换技术。通过实践,...
from xmlschema import XMLSchema schema = XMLSchema('schema.xsd') is_valid = schema.validate('document.xml') if is_valid: print("文档有效") else: print("文档无效") ``` 总结,Python提供了强大的工具...
对于网页设计师和网络程序员来说,掌握XML至关重要,因为它能够帮助他们更好地管理和处理结构化的数据,尤其是在大数据、Web服务和移动应用程序等领域。 学习XML并不一定困难,尽管它有严谨的语法规则。例如,XML...
XML(eXtensible Markup Language)是一种用于标记数据的语言,它的设计目的是传输和存储数据,而非显示数据。在Web开发中,XML起到了重要的作用,它为数据提供了结构化表示,使得数据可以被不同系统和应用程序理解...
通过学习这个实例,开发者能够掌握PowerBuilder中处理XML的基本技巧,进一步提升其在应用程序开发中的能力。在实际项目中,结合PB11.5的XML功能,可以实现更高效的数据交换和存储,增强应用的灵活性和扩展性。