一.名词解释:
1. XSD是XML Schemas Definition的缩写,也是XML Schema文件的扩展名,与XML Schema、DTD、RELAX NG都是schema的一种。XML是数据的集合。xsd是来规定XML的;xsd验证XML数据是否正确,比如你的XML数据要写进数据库,如果不验证,可能就会有很多问题。当你的XML通过XSD验证后,就可以用XSL进行格式化,生成HTML,矢量图形等。
2. 在写一个xml文档时怎么知道一个元素里应该有几个子元素或者属性呢,每个子元素或者属性都是什么类型呢(如数字或者字符串),而定义这些约束的就需要DTD或者schema,这个过程就是数据建模。
3. schema和DTD就像一个模板一样,xml文档必须符合模板才能算是有效的xml文档,而xsl是负责显示xml文档。
4. XSD是W3C推荐的XML SCHEMA标准,SCHEMA即描述XML的结构和元素关系的规则模式,他规定了一个xml文档可以使用那些元素、元素的类型以及一些限制规则。schema和DTD一样,都是描述xml的,只不过SCHEMA的内容更丰富,更具有扩展性,同时他本身也是一个xml文档,更方便解析。
二.应用
(本段来自网络收集,详见http://blog.csdn.net/ydsakyclguozi/archive/2008/08/06/2774652.aspx)
一个简单的XML Schema文档
<xs:schema xmlns:xs=”http://www.w2.org/2001/XMLSchema”>
<xs:element type=“xs:nonNegativeInteger”>
</xs:element>
</xs:schema>
在这个Schema里面定义了一个元素:quantity,它的类型是nonNegativeInteger(非负整数),xmlns是Schema的命名空间。
正确
|
<quantity>5</quantity>
|
错误
|
<quantity>-4</quantiy>
|
Schema中的类型
Schema中主要包括三种部件:元素(element)、属性(attribute)、注释(notation)。
这三种基本的部件还能组合成以下的部件:
①类型定义部件: 简单类型和复合类型
②组部件
③属性组部件
1.简单类型
⑴简单类型
XML Schema中定义了一些内建的数据类型,这些类型可以用来描述元素的内容和属性值。
一个元素中如果仅仅包含数字、字符串或其他数据,但不包括子元素,这种被称为简单类型。
如同上例中元素quantity就是一个简单类型。它的元素内容必须是非负整数,不包括任何属性和子元素。
所有内建的简单类型
|
原始类型
|
string,boolean,decimal,float,double,duration,datetime,time,date,gYearMonth,gYear,gMonthDay, dDay,gMonth,hexBinary,base64Binary,any URI,Qname,NOTATION。
|
衍生类型(括号中为基类型)
|
normalizedString(string),language(tonken),token(normalizedString),NMTOKEN(token),Name(token),NCName(Name),ID(NCName),IDREF(NCName),IDREFS(list of IDREF),ENTITY(NCName),ENTITIES(list of ENTITY),integer(decimal),nonPositiveInteger(integer),negativeInteger(noPositiveInteger),long(integer),int(long),short(int),byte(short),nonNegativeInteger(integer),unsignedLong(nonNegativeInteger),unsignedInt(unsignedLong),unsignedShort(unsignedInt),unsignedByte(unsignedShort),positiveInteger(nonNegativeInteger)。
|
①简单类型的例子_1
<xsd:schema xmlns:xs=http://www.w3.org/2001/XMLSchema>
<simpleType
<restriction base=’integer’>
<minInclusive value=’2’ />
<maxInclusive value=’5’ />
</restriction>
</simpleType>
<element type=’ quantity Type’ />
</xsd:schema>
实例中我们先创建了一个简单类型:quantityType,它是从integer继承过来的,minInclusive和maxInclusive定义了它的最小值2和最大值5。最后我们定义元素quantity的类型为quantityType。
正确
|
<quantity>3</quantity>
|
错误
|
<quantity>10</quantity>
<qauntity>aaa</quantity>
|
使用restriction我们可以限制只能接受一定数值或者只能接受一定文字。
基本方面
|
equal,ordered,bounded,cardinality,numeric
|
限制方面
|
length,minLength,maxLength,pattern,enumeration, whiteSpace,maxInclusive,maxExclusive,minInclusive,minExclusive,totalDigits,fractionDigits。
|
②简单类型的例子_
2
<xsd:schema xmlns:xs=http://www.w3.org/2001/XMLSchema>
<simpleType
<restriction base=’xsd:string’>
<pattern value=’/\d{3}-[A-Z]{2}/’ />
</restriction>
</simpleType>
<element ourSKU’ type=’ SKUType’ />
</xsd:schema>
这个SKU的类型的取值:3个数字后面根着一个连字号接着跟着两个大写的英文字母。pattern后面跟的是正则表达式。有关正则表达式的语法请参阅其他书籍。
正确
|
<ourSKU>123-AB</ourSKU>
|
错误
|
<ourSKU>abc -AB</ourSKU>
<ourSKU>123-ab</ourSKU>
|
③简单类型的例子_
3
<xsd:simpleType
<xsd:restriction base=”xsd:string”>
<xsd:enumeration value=”AK”/>
<xsd:enumeration value=”AL”/>
<xsd:enumeration value=”AR”/>
<!-- and so on …-->
</xsd:restriction>
</xsd:simpleType>
<element type=”USState”/>
这是一个用来描述美国州名的类型USState,通过enumeration来列出所有州名,取值时就只能取里面列出的州名。
<!-- and so on ...-> 这是一个注释语句。
正确
|
<statename>AK</statename>
|
错误
|
<statename>Alaska</statename>
|
⑵列表类型
<!-- Schema Fragment -->
<xsd:simpleType
<xsd:list itemType=”Integer” />
</xsd:simple>
<element type=”listOfIntType” />
list可以用来定义列表类型,listOfIntType这个类型被定义为一个Integer的列表,元素listOfMyInt的值可以几个整数,他们之间用空格隔开。
正确
|
<listOfMyInt>1 5 15037 95977 95945</listOfMyInt>
|
错误
|
<listOfMyInt>1 3 abc</listOfMyInt>
|
⑶联合类型
<!-- Schema Fragment -->
<xsd:simpleType
<xsd:union memberTypes=”USState listOfMyIntType” />
</xsd:simple>
<element type=”zipUnion” />
实例中用union来定义了一个联合类型,里面的成员类型包括USState和listOfMyIntType,应用了联合类型的元素的值可以是这些原子类型或列表类型中的一个类型的实例,但是一个元素实例不能同时包含两个类型。
正确
|
<zips>CA</zips>
<zips>95630 95977 95945</zips>
<zips>AK</zips>
|
错误
|
<zips>CA 95630</zips>
|
⑷匿名类型
<xsd:element
<xsd:simpleType>
<xsd:restriction base=”xsd:positiveInteger”>
<xsd:maxExclusive value=”100” />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
前面我们在定义元素类型时总是先定义一个数据类型,然后再把元素的type设成新定义的数据类型。如果这个新的数据类型只会用一次,我们就可以直接设置在元素定义里面,而不用另外来设置。
如实例中元素quantity的类型就是一个从1到99的整数。
这种新的类型没有自己的名字的定义方法我们称之为匿名类型定义。
2.复合类型
<xsd:element
<xsd:complexType>
<xsd:simpleContent>
<xsd:extension base=”xsd:decimal”>
<xsd:attribute type=”xsd:string” />
</xsd:simpleContent>
</xsd:complexType>
</xsd:element>
前面我们所讲到的都是属于简单类型,即元素里面只有内容,不再包括属性或者其它元素。接下来我们要让元素里面包含属性和其它元素,称之为复合类型。
实例中我们用complexType表示这是一个复合类型(这里我们是用匿名类型定义的)。simpleContent表示这个元素下面不包括子元素,extension表示这个元素值是decimal的,attribute来设置它的一个属性currency,类型为string.
正确
|
<internationalPrice currency="EUR">423.46</internationalPrice>
|
⑴混合内容
<xsd:element
<xsd:complexType mixed=”true”>
<xsd:sequence>
<xsd:element type=”xsd:string” />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
同样,我们采用了匿名类型方式来定义一个元素salutation。我们注意到在complexType后面多了一个mixed="true",这表明这是一个混合类型:里面既有元素本身的内容,又有其它子元素。name元素就是salutation的子元素。
正确
|
<salutation>Dear Mr.<name>Robert Smith</name>.</salutation>
|
错误
|
<salutation>Dear Mr.</salutation>
|
sequence表示子元素出现的顺序要和schema里面的顺序一样。和sequence对应的有choice和all两种方式。
⑵空内容
<xsd:element
<xsd:complexType>
<xsd:complexContent>
<xsd:restricion base=”xsd:anyType”>
<xsd:attribute type=”xsd:string” />
<xsd:attribute type=”xsd:decimal” />
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
有的时候元素根本没有内容,他的内容模型是空。为了定义内容是空的类型,我们可以通过这样的方式:首先我们定义一个元素,它只能包含子元素而不能包含元素内容,然后我们又不定义任何子元素,依靠这样的方式,我们就能够定义出内容模型为空的元素。
实例中complexConet表示只包含子元素,然后我们定义了两个属性currency和value,但是却不定义任何子元素。
正确
|
<internationalPrice currency="EUR" value="/423.46"/>
|
错误
|
<internationalPrice currency="EUR" value="/423.46">
Here is a mistake!
</interanationPrice>
|
还有更简洁的方法定义:
<xsd:element >
<xsd:complexType>
<xsd:attribute type="xsd:string"/>
<xsd:attribute type="xsd:decimal"/>
</xsd:complexType>
</xsd:element>
因为一个不带有simpleContent 或者complexContent的复合类型定义,会被解释为带有类型定义为anyType的complexContent,这是一个默认的速记方法,所以这个简洁的语法可以在模式处理器中工作。
⑶anyType
<xsd:element type=”xsd:anyType”/>
<xsd:element />
一个anyType类型不以任何形式约束其包含的内容。我们可以象使用其他类型一样使用anyType,如实例中第一个语句,这个方式声明的元素是不受约束的。所以元素的值可以为423.46,也可以为任何其他的字符序列,或者甚至是字符和元素的混合。实际上,anyType是默认类型,所以上面的可以被重写为第二个语句。
如果需要表示不受约束的元素内容,举例来说在元素包含散文,其中可能需要嵌入标签来支持国际化的表示,那么默认的声明(无约束)或者有些微约束的形式会很合适。
⑷注释
<xsd:element
<xsd:annotation>
<xsd:documentation xml:lang=”en”>
Element declared with anonymous type
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:annotation>
margin: 0cm 0cm 0pt
分享到:
相关推荐
XML Schema Definition (XSD) 文件是用于定义XML文档结构和数据类型的规范。XSD1.4、XSD2.0 和 XSD3.0 是XML Schema语言的不同版本,它们为XML文档提供了严谨的验证框架,确保数据的一致性和正确性。 ### XSD1.4 ...
XML Schema Definition (XSD) 是一种用于定义XML文档结构的语言,它规范了XML文档的元素、属性、数据类型以及它们之间的关系。XSD可视化操作是将这些复杂的XSD定义通过图形化界面展示出来,以便于开发者更好地理解和...
### XML生成XSD的方法 #### 一、引言 在处理结构化数据时,XML(可扩展标记语言)因其灵活性而被广泛采用。为了确保XML文档遵循特定的格式和规则,通常会用到XSD(XML Schema Definition)来定义XML文档的结构。...
在开发Java应用,尤其是使用Apache Dubbo作为服务治理框架时,可能会遇到Eclipse IDE报找不到`dubbo.xsd`的问题。`dubbo.xsd`是Dubbo服务配置的XML schema定义文件,它定义了Dubbo配置文件的结构和规则。当Eclipse在...
在IT行业中,XML(eXtensible Markup Language)是一种用于标记数据的标准格式,而XSD(XML Schema Definition)则是用于定义XML文档结构和数据类型的规范。"xsd生成xml工具"是一个实用程序,它允许开发者根据XSD...
在Java开发中,XML(可扩展标记语言)和XSD(XML Schema定义)是常见的数据交换格式和技术。XML用于结构化数据的存储和传输,而XSD则为XML文档提供了语义验证的规则。本教程将详细介绍如何在Java环境中生成XML和XSD...
"dubbo.xsd"文件是Dubbo框架中用于XML配置文件解析的重要组成部分,本文将深入探讨其作用和相关知识点。 首先,xsd(XML Schema Definition)文件是XML的一种规范,用于定义XML文档的结构和数据类型。在Java世界中...
《Dubbo的.xsd文件详解》 Dubbo作为一款高性能、轻量级的Java开源服务框架,其在设计和实现过程中广泛使用了XML Schema(简称XSD)来定义服务接口和配置规范。XSD文件是XML文档的模式定义,它为XML提供了结构约束和...
在IT行业中,XML(eXtensible Markup Language)是一种用于数据交换的标准格式,而XSD(XML Schema Definition)则是用于定义XML文档结构和数据类型的规范。DOM4J是Java环境中一个强大、灵活的XML处理库,它提供了...
在IT行业中,XML Schema Definition(XSD)是一种用于定义XML文档结构和数据类型的规范。它为XML文件提供了严格的语法规则,确保了数据的一致性和有效性。本篇将深入探讨如何利用XSD解析实例来创建数据库表结构。 ...
XSD(XML Schema Definition)则是用来规范和验证XML文档结构的一种语言,确保XML文件的数据符合特定的规则。XSD文件通过定义元素、属性、数据类型等来约束XML文档,确保数据的准确性和一致性。 标题提到的“自动...
在描述中提到的`jaxrs.xsd`、`jaxrs.xsd`和`core.xsd`是XML Schema Definition (XSD)文件,它们定义了CXF中JAX-RS相关元素的结构和约束。这些XSD文件对于理解CXF配置文件的结构至关重要,因为它们包含了所有可用的...
XSD(XML Schema Definition)文件则是一种规范,用于定义XML文档的结构和数据类型,为XML提供了形式化的语法规则。将XML文件转换为XSD文件,主要是为了更好地管理和验证XML文档的结构,确保数据的一致性和准确性,...
根据xsd批量生成java类,觉得很方便也很酷。但是有时候xsd生成的java类中含有汉字,结果总是有些问题。 可是xjc命令参数又没有encoding参数之类的。在网上搜了一通,忽然发现了一个好东东:xjc是由...
在Java开发中,JAXB提供了一种方便的方式,允许开发者通过XML Schema (XSD) 文件来生成对应的Java类,从而简化XML处理的工作流程。 1. **XML Schema (XSD) 文件**: - XML Schema是一种W3C标准,用于定义XML文档的...
在XML Schema(XSD)广泛应用于定义XML数据结构的今天,Castor提供了一个方便的方法,将XSD文件自动转化为Java类,使得开发者能够更轻松地处理XML数据。以下是关于"Castor 1.4 xsd生成java"的相关知识点: 1. **...
该标准主要基于Web服务(Web Services)技术,其中WS-DL(Web Services Description Language)和XSD(XML Schema Definition)文件扮演着核心角色。 **WS-DL(Web Services Description Language)** WS-DL是一种...
《Spring框架中的beans配置文件详解——以spring-beans-3.0.xsd和3.1.xsd为例》 在Spring框架中,`spring-beans`是核心组件之一,它负责管理对象的生命周期和依赖关系。`spring-beans`的配置文件通常以`.xsd`为后缀...
《IEC61131-10 XSD:工业自动化领域的编程标准解析》 IEC 61131-10 Ed1.0 是国际电工委员会(IEC)制定的一项标准,它规范了工业控制系统的编程语言,旨在提高编程的互操作性和可移植性。XSD(XML Schema ...
XSD(XML Schema Definition)文件在Spring框架中扮演着核心角色,它们定义了Spring配置文件的结构和规则,使得XML配置更加规范和易于理解。在这个压缩包中,我们很可能是找到了Spring 3.0版本相关的XSD文件集合,...