XML Shcema中的简单类型、复杂类型解析

合集下载

XML Schema中的复杂数据类型complexType 的分析

XML Schema中的复杂数据类型complexType  的分析

XML Schema中的复杂数据类型complexType 的分析先来对比:simpleType:定义了一个简单类型它决定了元素和属性值的约束和相关信息(一个type不但要定义元素的类型还要定义这个元素的属性的值的类型和约束的)complexType:定义了一个复合类型决定了一组元素和属性值的约束和相关信息已经知道complexType 里面可以放attruibuteattruibuteGroupgroupsequencesimpleContentcomplexContentchoicesimpleContent1.应用于complexType 对complexType的内容进行约束和扩展注意主要是对内容进行约束和扩展对于属性的定义虽然放在simpleContent里面但其实跟simpleContent没什么关系的该怎么写还是怎么写的2.用了simpleContent 是限定了元素中间的内容的值既然是限定具体内容的那么子元素自然是不会有了所以simpleContect里面是没有子元素的但是一定有属性的不然就是个simpleType了但是属性还是可以有的因为属性不受约束3以前用simpleType 就是没有子元素没有属性用complexType 可以实现没有子元素没属性。

但是complexType对于有属性没有子元素的这种情况值的内容没有办法做约束所以就有了simpleContect看例子:<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="/2001/XMLSchema"elementFormDefault="qualified" attributeFormDefault="unqualified"><xs:complexType><xs:simpleContent><xs:extension base="xs:string"><xs:attribute name="carType"><xs:simpleType><xs:restriction base="xs:string"><xs:enumeration value="B MW 530"/><xs:enumeration value="B MW 740"/><xs:enumeration value="B MW 318i"/><xs:enumeration value="B MW M118"/></xs:restriction></xs:simpleType></xs:attribute></xs:extension></xs:simpleContent></xs:complexType></xs:element></xs:schema>所以为了能够让complexType也用上内置数据类型我们用<xs:extension base="xs:string"></xs:extension>-->choicechoice 允许唯一的一个元素从一个组中被选出具有属性:minOccurs / maxOccurs 表示的是这个choice组整体出现的次数看例子:<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="/2001/XMLSchema"elementFormDefault="qualified"attribute FormDefault="unqualified"><xs:element name="car"><xs:complexType><xs:choice maxOccurs="2"minOccurs="1"><xs:element name="BMW"type="xs:string"></xs:element><xs:element name="VW"><xs:simpleType><xs:restriction base="xs:string"><xs:enumeration value="santana"/><xs:enumeration value="jetta"/><xs:enumeration value="golf"/></xs:restriction></xs:simpleType></xs:element></xs:choice><xs:attribute name="price"><!--attribute 里面只能是内置类型或者simpleType 不可能是复杂类型的--><xs:simpleType><xs:restriction base="xs:decimal"><xs:enumeration value="350.2"/><xs:enumeration value="123.2"/><xs:enumeration value="26.2"/></xs:restriction></xs:simpleType></xs:attribute></xs:complexType></xs:element></xs:schema>XML实例:sequence属性:minOccurs maxOccurs。

XML中Schema实用解析

XML中Schema实用解析
<书本> <名称>书剑恩仇录</名称> <作者>金庸</作者>
</书本>
<!ELEMENT 书本 (名称,作者)> <!ELEMENT 名称 (#PCDATA)> <!ELEMENT 作者 (#PCDATA)>
<element name=“书本” type=“书本类型”/> <complexType name=“书本类型”>
描述 表示字符串 布尔型 代表特定精度的数字 表示单精度32位浮点数 表示双精度64位浮点数 表示持续时间 代表特定的时间 代表特定的时间,但是是每天重复的 代表日期 代表十六进制数 代表一个URI,用来定位文件 代表 NOTATION类型 对数据类型没有限制
Schema的数据类型-扩展的数据类型
Schema的文档结构
<?xml version="1.0"?> <xs:schema xmlns:xs="/2001/XMLSchema"
targetNamespace="http://mynamespace/myschema" elementFormDefault="unqualified"> <!--放入实际内容 --> </xs:schema>
Microsoft参考XML Data和DCD二者的提议设计了二者 的一个组合,形成了Microsoft版本的XML Schema,叫 做XDR
XML Schema的W3C推荐标准叫做XSD(XML Schema Definition Language)。它是一个更广泛的规范,并且具 有非专有的优点

XMLSchema介绍

XMLSchema介绍

XMLSchema介绍XML Schema 是基于 XML 的 DTD 替代者。

XML Schema 描述 XML ⽂档的结构。

XML Schema 语⾔也称作 XML Schema 定义(XML Schema Definition,XSD)。

什么是 XML Schema?XML Schema 的作⽤是定义 XML ⽂档的合法构建模块,类似 DTD。

XML Schema:定义可出现在⽂档中的元素定义可出现在⽂档中的属性定义哪个元素是⼦元素定义⼦元素的次序定义⼦元素的数⽬定义元素是否为空,或者是否可包含⽂本定义元素和属性的数据类型定义元素和属性的默认值以及固定值XML Schema 是 DTD 的继任者我们认为 XML Schema 很快会在⼤部分⽹络应⽤程序中取代 DTD。

理由如下:XML Schema 可针对未来的需求进⾏扩展XML Schema 更完善,功能更强⼤XML Schema 基于 XML 编写XML Schema ⽀持数据类型XML Schema ⽀持命名空间XML Schema ⽀持数据类型XML Schema 最重要的能⼒之⼀就是对数据类型的⽀持。

通过对数据类型的⽀持:可更容易地描述允许的⽂档内容可更容易地验证数据的正确性可更容易地与来⾃数据库的数据⼀并⼯作可更容易地定义数据约束(data facets)可更容易地定义数据模型(或称数据格式)可更容易地在不同的数据类型间转换数据编者注:数据约束,或称 facets,是 XML Schema 原型中的⼀个术语,中⽂可译为“⾯”,⽤来约束数据类型的容许值。

XML Schema 使⽤ XML 语法另⼀个关于 XML Schema 的重要特性是,它们由 XML 编写。

由 XML 编写 XML Schema 有很多好处:不必学习新的语⾔可使⽤ XML 编辑器来编辑 Schema ⽂件可使⽤ XML 解析器来解析 Schema ⽂件可通过 XML DOM 来处理 Schema可通过 XSLT 来转换 Schema简单例⼦:XML ⽂档可对 DTD 或 XML Schema 进⾏引⽤。

5.XML_Schema结构

5.XML_Schema结构

• XML Schema也是Web Services技术中需要使 用的一个基本工具 • 目前主要有两种重要的模式:Microsoft XML Schema和W3C XML Schema,本章主要 讨论W3C XML Schema • 在下面的例子中,使用出现在schema元素 中的名称空间声明xmlns:xsd= “/2001/XMLSchema” • 使得模式文档中的每一个元素都有一个与 XML Schema名称空间相联名称空间前缀xsd 。
• <xsd:element name=“book”> • <xsd:complexType> • <xsd:attribute name=“amount” type=“xsd:integer” default=“100”/> • </xsd:complexType> • </xsd:element>
5.5 Schema的数据类型
• 5.5.1 简单类型 • 1. 简单类型的种类
– 原子类型(不可分割的类型,如string, integer 等系统内建的类型)、列表类型、联合类型合 起来统一称为简单类型。 – 原子类型具有不可分割的值, – 列表类型的值为用空白符隔开的原子值列表,
• 处理publish元素。注意它的基数的定义。 – <xsd:element name="publish" minOccurs="0" maxOccurs="unbounded"> – <xsd:complexType> – <xsd:sequence> • 下面,用同样的方法定义其它的子元素。 – <xsd:element name="publisher" type="xsd:string" /> – <xsd:element name="pubdate" type="xsd:date" ment等元素:

XML的Schema模式

XML的Schema模式
8
XML Schema有关元素的内容 Schema有关元素的内容
element elementType group
9
element的语法 element的语法
<element type="元素类型 元素类型" 元素类型 [minOccurs="{ 0 | 1 }"] [maxOccurs="{ 1 | * }"] >
3
XML Schema规范的组成 Schema规范的组成
XML Schema Part 0: Primer
– 总体介绍,帮助读者快速理解如何利用 总体介绍,
XML Schema语法创建 语法创建XML模式文档 语法创建 模式文档
XML Schema Part 1: Structure
– 描述 描述XML1.0文档的结构和内容约束的定义 文档的结构和内容约束的定义
10
elementType的语法 elementType的语法
<elementType name="元素名 元素名" 元素名 content="{ empty | textOnly | eltOnly | mixed }" dt:type="元素类型 元素类型" 元素类型 order="{ one | seq | many }" model="{ open | closed }" >
15
类型声明示例
<xsd:element name=“person” type=“ttt”> <xsd:complexType name=“ttt”> <xsd:sequence> <xsd:element name=“name” type=“xsd:string”/> <xsd:element name=“address” type=“xsd:string”/> </xsd:sequence> </xsd:complexType>

xml文件解析方法

xml文件解析方法

xml文件解析方法XML文件解析方法引言:XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,它具有良好的可读性和灵活性,被广泛应用于数据交换和配置文件等领域。

在处理XML文件时,解析是必不可少的环节。

本文将介绍几种常用的XML文件解析方法,包括DOM、SAX和StAX。

一、DOM解析方法DOM(文档对象模型)是一种将整个XML文件以树形结构加载到内存中的解析方法。

DOM解析器将XML文件解析为一个树状结构,通过遍历节点来获取和操作XML文件中的数据。

DOM解析方法的优点是易于理解和使用,可以随机访问XML文件中的任意节点,但缺点是占用内存较大,不适用于大型XML文件的解析。

1. 创建DOM解析器对象:使用标准的Java API,可以通过DocumentBuilderFactory类来创建DOM解析器对象。

2. 加载XML文件:通过DOM解析器对象的parse()方法加载XML文件,将其转化为一个树形结构。

3. 遍历节点:使用DOM解析器对象提供的方法,如getElementsByTagName()、getChildNodes()等,可以遍历XML文件中的各个节点,获取节点的名称、属性和文本内容等信息。

4. 获取节点数据:通过节点对象提供的方法,如getNodeName()、getTextContent()等,可以获取节点的名称和文本内容。

二、SAX解析方法SAX(简单API for XML)是一种基于事件驱动的XML解析方法。

在SAX解析过程中,解析器顺序读取XML文件,当遇到节点开始、节点结束或节点文本等事件时,会触发相应的回调方法。

相比于DOM 解析方法,SAX解析方法具有内存占用小、解析速度快的优点,但缺点是无法随机访问XML文件中的节点。

1. 创建SAX解析器对象:使用标准的Java API,可以通过SAXParserFactory类来创建SAX解析器对象。

2. 实现事件处理器:自定义一个事件处理器,实现SAX解析器提供的DefaultHandler类,并重写相应的回调方法,如startElement()、endElement()和characters()等。

XML-Schema学习总结

XML-Schema学习总结

XML Schema学习总结简单类型1、简单元素:指只能包含文本内容,不能够包含子元素,也没有属性的元素。

格式:<xs:element name="xxx" type="yyy"/>例子:<xs:element name="name" type="xs:string"/><xs:element name="age" type="xs:integer"/><xs:element name="gender" type="xs:boolean"/>2、属性:所有的元素属性均被声明为简单类型。

只有复杂类型的元素才可以拥有属性。

格式:<xs:attribute name="xxx" type="yyy"/>例子:<xs:attribute name="lang" type="xs:string"/>所有的属性默认都是可选的,我们可以通过使用use关键字明确的指出是可选或是必需:<xs:attribute name="lang" type="xs:string" use="optional"/><xs:attribute name="lang" type="xs:string" use="required"/>我们可以通过使用default或fixed为简单类型(简单元素、属性)指定默认值或固定值,如下:<xs:element name="color" type="xs:string" default="red"/><xs:attribute name="lang" type="xs:string" fixed="CN"/>对简单类型值的约束约束含义enumeration 定义允许值的枚举fractionDigits 指定最多允许的小数位数(必须大于或等于零)length 精确指定允许的最大字符长度maxExclusive 指定允许的最大数值,必须小于该值maxInclusive 指定允许的最大数值,必须小于或等于该值maxLength 指定允许的最大字符长度(必须大于等于零)minExclusive 指定允许的最小数值,必须大于该值minInclusive 指定允许的最小数值,必须大于或等于该值minLength 指定允许的最小字符长度pattern 指定允许值的模式,类似正则表达式totalDigits 精确指定数字个数whiteSpace 处理空白(保留:preserve;替换:replace;合并:collapse)复杂类型复杂类型指包含其他元素/属性的元素类型。

xmlschema数据类型

xmlschema数据类型

xmlschema数据类型1.简单数据类型(1)内置简单数据类型schema中定义了⼀些简单数据类型,包括primitive原始数据类型和derived派⽣数据类型,这些类型都是schema中使⽤的最基本的数据类型,我们可以⽤他们⾃定义简单数据类型表:primitive原始数据类型数据类型描述string字符串Boolean布尔值decimal⼗进制数字float32位浮点数double64位浮点数timeDuration标识持续时间datetime特定时间timedateanyURI代表URI,⽤来定位⽂件recurring Duration派⽣数据类型数据类型描述integerlong[-263,263-1]nonNegativeInteger⼤于等于零的整数positiveInteger⼤于零的整数int[-231,231-1]time sdate(2)⾃定义简单数据类型<xs:simpleType name="phoneno"> <xs:restriction base="xs:string"> <xs:length value="3"/> <xs:pattern value="\d{4}-\d{3}"/> </xs:restriction></xs:simpleType>simpleType元素常⽤⼦元素⼦元素作⽤enumeration枚举类型,供⽤户选择fractionDigits限定最⼤的⼩数位,⽤户控制精度length⾃定数据的长度maxExclusive指定数据的最⼤值(⼩于)maxInclusive指定数据的最⼤值(⼩于等于)maxLength指定长度的最⼤值minExclusive指定最⼩值(⼤于)minExclusive指定最⼩值(⼤于)minInclusive指定最⼩值(⼩于等于)minLength指定最⼩长度pattern正则e.g.<xs:simpleType name="gender"> <xs:restriction base="xs:string"> <xs:enumeration value="男"/> <xs:enumeration vlaue="⼥"/> </xs:restriction></xs:simpleType>2.复杂数据类型<xs:complexType name=""> <内容模板定义(包括⼦元素和属性的声明)</xs:complexType>e.g.1<xs:complexType name="address">2 <xs:sequence>3 <xs:element name="street" type="xs:string"/>4 <xs:element name="city" type="xs:string"/>5 <xs:element name="state" type="xs:string"/>6 <xs:element name="zip" type="xs:decimal"/>7 </xs:sequence>8</xs:complexType>复杂数据类型。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

XML Shcema中的元素和属性的类型定义
1.<attribute …/>和<element…/>元素一些重要属性
(1) <attribute …/>元素(属性定义元素)
属性定义<xs:attribute 。

>
重要属性:
fixed属性为该元素指定一个固定值
default属性为该元素指定一个默认值
注意:不能再一个<attribute …/>元素中同时出现。

ref属性引用一个全局定义的属性
注意:在全局声明(元素或者属性声明)中不能使用ref属性。

ref属性不能与name、type属性(用于定义)同时出现。

use属性用于指定该复杂类型对改属性的要求
支持如下几个属性值:
optional:指定该属性是可选的,可有可无的。

默认是这种情况。

prohibited:指定该属性是禁止的,表示不能出现。

required:指定该属性是必需的。

<attribute …/>元素指定use属性的情况:(不能再全局属性定义的时候使用)
1.<attribute …/>元素中指定了ref属性。

2.采用<attribute …/>局部定义的时候。

(2)<element…/>(元素定义元素)
fixed属性为该属性指定一个固定值
default属性为该属性指定一个默认值
nillable属性该属性值只能是true和false。

该属性只对元素内容有效,二队元素属性无效。

默认值为false。

(不明白!!!)
ref属性引用一个全局定义的属性
注意:在全局声明(元素或者属性声明)中不能使用ref属性。

ref属性不能与name、type属性(用于定义)同时出现。

use属性用于指定该复杂类型对改属性的要求
支持如下几个属性值:(不明白!!)
optional:指定该属性是可选的,可有可无的。

默认是这种情况。

prohibited:指定该属性是禁止的,表示不能出现。

required:指定该属性是必需的。

<element …/>元素指定use属性的情况:(不能再全局元素定义的时候使用)
1.< element…/>元素中指定了ref属性。

2.采用< element…/>局部定义的时候
minOccurs属性:最少出现次数,大于等于0
maxOccurs属性:最大出现次数,大于等于minOccurs,可以为unbounded 注意:<sequence../>元素、<choice../>元素、<all../>元素也有该属性,注意<all../>属性的区别,其属性只能是1或0。

2.全局声明和局部声明
分为全局元素属性/元素声明和局部属性/元素声明。

全局声明:将<element../>、<attribute../>定义直接放在<schema../ >元素的根元素下。

局部声明:将<element../>定义放在<sequence../>元素、<choice../>元素、<all../>元素下。

将<attribute../>元素定义放在<complexType../>定义中。

注意:
1.全局声明可以通过ref属性来引用。

2.全局声明的元素和属性的名称在模式中必须唯一。

3.全局声明中不能使用ref属性。

4.全局什么的元素在实例文档中可以作为根元素出现。

局部声明具有更好的内聚性,全局声明具有更好的重用性。

如果子元素定义比较简单,而且只在指定类型内使用,那么使用局部定义子元素;反之,使用全局声明定义。

属性通常是附属于元素的,因此将属性声明为全局的意义不大,除非多个元素要使用相同的属性。

3.简单类型和复杂类型的派生
简单类型:既可以作为XML元素的类型,也可以作为XML属性的类型;
复杂类型:只能作为XML元素的类型。

简单类型(simpleType)的派生:
1.限制派生:
<xs:simpleType name=”anyType”>
<xs:restriction base=” any SimpleType”>
//anySimpleType可以是任意简单类型
……面
</xs:restiction>
</xs:simpleType>
简单类型只有限制派生。

准确的说限制派生后的类型依然是简单类型,扩展派生后的类型就可能是复杂类型了。

12种约束(面)。

2.<list../>
必须是同种简单类型。

内置派生类型就是通过list派生的:IDREFS,NMTOKENS,ENTITYS
3.<union../>
可以将多个已有的数据类型(简单类型)联合在一起。

注意:list和union可以嵌套,但是list中不能包含list或者包含list的union类型。

1.含简单内容的复杂类型simpleContent
含简单内容的复杂类型的定义:一般是通过对简单类型扩展派生而来(对简单类型限制派生还是简单类型)。

<complexType>
<simpleContent>
<extension base=”type”>或者<restriction base=”type”>
//base属性必需要有,而且type类型只能是简单类型或者含简单类容的复杂类型。

即不能是含复杂类容的复杂类型。

……
</extension >或者</restriction base=”type”>
</simpleContent>
</complexType>
(1)当base=”简单类型”
扩展派生得到简单类容的复杂类型。

(2)当base=”简单类容的复杂类型”
扩展派生:只能添加属性
限制派生:对元素内容进行约束,对属性进行进一步约束,删除某些属性(use 属性值设为prohibited)
2. 含复杂内容的复杂类型complexContent
一般包括含子元素的类型、空元素、混合内容。

含复杂类容的复杂类型的定义:从anyType通过<sequence../>,<choice../>,<all../>进行限制派生而来。

空元素类型就是anyType中无<sequence../>,<choice../>,<all../>定义的子元素,
即内容为空,但是可以有属性定义。

含混合类容的类型定义就是在含子元素的类型类型定义上加上mixed=”true”;
(1)base=”anyType”时
通过限制派生,生成含复杂内容的复杂类型。

anyType表示任意类型,所以不存在扩展派生。

<complexType>
<complexContent>
<restriction base=”anyType”>
<sequence../> //包含的子元素按顺序出现(次数自定义,默认一次)
<choice../> //包含的子元素只能出现一个
<all../> //包含的子元素随机出现,一个子元素最多只能出现一次</restriction>
</complexContent>
</complexType>
注意:
如上情况中,对anyType进行限制派生时,<complexContent>、<restriction base=”anyType”>可以省略;
<sequence../>,<choice../>可以相互嵌套,但是<all../>不可以。

(这样导致扩展派生时,不能扩展含有<all../>定义的复杂类型);
<sequence../>,<choice../>属性maxOccurs/minOccurs范围从0-unbounded,而<all../>该属性只能是0或1。

(2)base=”含复杂类容的复杂类型”
限制派生:
对指定属性进行进一步约束
对指定元素进行进一步约束
删除指定属性
删除指定元素
注意:
派生类型默认删除基类型中的所有子元素定义,但保留其中所有的属性定义;
对指定属性/元素进一步约束必须在基类型的约束范围之内,不可以超出原约束范围;
删除元素的本质是将该属性的minOccurs和maxOccurs属性值同时设为0,;
删除属性的本质是将use属性的值设为prohibited。

扩展派生:
增加新元素/属性。

相关文档
最新文档