XML学习第二篇
一、命名冲突
1.XML的元素名是不固定的,当两个不同的文档使用同样的名称描述两个不同类型的元素的时候,就会发生命名冲突。
可以使用前缀解决命名冲突问题。
2.命名空间:
使用命名空间的原因避免元素名冲突。
使用URL作为XML的命名空间(NameSpace),相当于java中的包
命名空间的语法定义:
Xmlns:[prefix] = “URL”
元素和属性都可以用命名空间
总结:
1.一个有效的XML文档必然是结构正规的,结构正规的XML文档不一定是有效的,
DTD包含一套用来描述并限制XML文档结构的语法规则:
1.元素的定义规则
2.元素之间的关系规则
3.属性的定义规则
4.可是用的实体或者符号规则
2.命名空间用于避免命名冲突
3.在XML中使用全球唯一的URL作为NameSpace
二、Schema学习与使用
1.理解Schema的数据类型和元素类型,理解验证与约束
2.什么是Schema?
1.XML Schema是用一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式
2.XML Shemale 规定XML文档的结构和每个元素/属性的数据类型
3.使用Schema的好处
1.由于DTD的局限性
1.DTD不遵守XML语法(写XML文档实例的时候用一种语法,写DTD的时候用另外一种语法)
2.DTD的数据类型有限(与数据库类型不一致)
3.DTD不可扩展
4.不支持命名空间(命名冲突)
2.Schema的新特性
1.Schema基于XML语法,可以用能处理XML文档的工具处理
2.大大扩充了数据类型,可以自定义数据类型
3.Schema支持元素的继承
Schema 的数据类型 ---基本数据类型
数据类型 |
描述 |
String |
表示字符串 |
Boolean |
布尔型 |
Declmal |
代表特定精度的数字 |
Float |
表述单精度32位浮点数 |
double |
表述双精度64位浮点数 |
duration |
表示持续时间 |
dateTime |
代表特定时间 |
time |
代表特定的时间,但是每天重复 |
date |
代表日期 |
hexBinary |
代表十六进制数 |
anyURI |
代表一个URI,用来定位文件 |
NOTATION |
代表NOTATION类型 |
Schema的数据类型的特性
特性 |
描述 |
enumeration |
在指定的数据集中旋转着,限定用户的选值 |
fractionDigits |
限定最大的小数位,用于控制精度 |
length |
指定数据的长度 |
maxExclusive |
指定数据的最大值(小于) |
maxInclusive |
指定数据的最大值(小于等于) |
minExclusive |
指定最小值(大于) |
minInclusive |
指定最小值(大于等于) |
minLength |
指定最小长度 |
Pattern |
指定数据的显示规范 |
5.Schema(模式):其作用与dtd一样,也是验证XML文档的有效性,只不过它提供了比dtd更强大的功能和更细粒度的数据类型,另外,schema还可以自定义数据类型。此外,
Schema也是一个XML,而dtd不是一个XML
6.所有的schema文件,其根元素必须是schema.
Schema的数据类型
1.简单类型:
1.内置的数据类型(built-indata types)
1.基本的数据类型
2.扩展的数据类型
2.复杂类型(通过complex定义)
Schema的扩展数据类型
数据类型 |
描述 |
ID |
用于唯一标示元素 |
IDREF |
参考ID类型的元素或属性 |
ENTITY |
实体类型 |
NMTOKEN |
NMTOKEN类型 |
NMTOKENS |
NMTOKEN类型集 |
long |
表示整形数:大小介于-9223372036854775808和9223372036854775807之间 |
int |
表示整型数,大小介于-2147483648和2147483647之间 |
short |
表示整型数,大小介于-32768和32767之间 |
byte |
表示整型数,大小介于-128和127之间 |
8.Schema的元素类型
1.schema
作用:包含已经定义的schema
用法:<xs:shema>
属性:
Xmlns,targetNames
2.element(choice)
作用:声明一个元素
属性:name,type,ref minOccurs maxOccurs substituionGroup fixed default
3.attribute(list)
作用:声明一个属性
属性: name/type /ref//use
实例:
<xs:comlexType name=”mycomplexType”
<xs:attribute name=”mybaseattribute”type=”xs:string” use=”required” />
</xs:complexType>
4.group(union)
作用:把一组元素声明组合在一起,以便它们能够一起呗符合类型应用
属性:name/ref
实例:
<xs:element name=”thinge1” type=”xs:string” />
<xs:element name=”thing2” type=”xs:stirng” />
<xs:group name=”myGroupOfthiings”>
<sx:sequence>
<xs:element ref=’thing1” />
<xs:element ref=”thing2” />
<xs:sequence/>
<xs:group>
<xs:complexType name=”myConplexType” >
<xs:group ref=”myGroupOfthings” / >
<xs:attribute ref=”myAttribute” />
</xs:complexType>
5attributeGroup(sequence)
作用:把一组属性声明组合在一起,以便可以被符合类型使用,与元素分组类似
属性:name/ ref
实例:
<xs:attributeGroup name=”myAttributeGroup”>
<xs:attribute name=”someattribute1” type=”xs:integer /”>
<xs:attribute name=”someattribute2” type=”xs:string” />
<xs:attributeGroup/>
<xs:complexType name=”myElementType”>
<xs:attributeGroup ref=”myAttributeGroup”/>
<xs:complexType />
6.simpleType(restriction)
作用:定义一个简单类型,它决定了元素和属性值的约束和相关信息
属性:name
内容:应用已经存在的简单类型,三种方式:
Restrict ------>限定一个范围
List------>从列表中选择
Union-------->包含一个值的结合
子元素为<xs:restrction >-------->定义一个约束条件
<xs:simpleType name=”freezebolirangeInteger”>
<xs:restrction base=”xs:integer” >
<xs:minInclusive value=””0 />
<xs:maxInclusive value=”100” />
</xs:restrction >
</xs:simpleType>
子元素为<xs:list>
从一个特定的数据类脑血管的集合中选择定义一个简单类型的元素
<xs:simpleType name=”listOfDates” >
<xs:lsit itemType=”xs:date” />
</xs:simpleType >
子元素为<xsunion>
从一个特定的简单数据类型的集合中选择定义一个简单类型的元素,表示该complexType没有子元素,同时该complexType需要有属性否则就成为了simpleType。
<xs:attributename=”allframesize” >
<xs:simpleType>
<xs:union>
<xs:simpleType >
<xs:restriction base=”roadbikesize” />
</xs:simpleType>
<xs:restriction base=”mountaninbikesize”./>
</xss:simpleType>
</xs:union>
</xs:simpleType>
7.simpleContent
作用:应用于complexType,对它的内容进行约束和扩展
实例:
<xs:element name=”shoeSize” >
<xs:complexType>
<xs:simpleContent>(元素下不包括子元素)
<xs;extension base=”xs:decimal” >
<xsattribute name=”sizing”
<xs:simpleType>
<xs:restrction base”xs:string” >
<xs:enumeration value=”US”>
<xs:enumeration value=”European”>
<xs:enumeration value=”UK” >
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:complexType>
</xs:element>
8.complexType
作用:定义一个符合类型,它决定了一组元素和属性值的约束和相关信息,。
属性:name
实例:
<xs:complexType name=”interationalShoeSize”>
<xs:simpleContent>
,<xs:extension base=”xs:decimal”>
<xs:attribute name=”sizing” type=”xs:stirng”/>
</xs:extension>
</xs:comlexType>
<xs;element name=”myShoeSize” type=”interationalShoeSize”>
complexType 与simpleType的区别(重要)
1.simpleType类型的元素中不能包含元素或者属性
2.当需要声明一个元素的子元素和/或属性时,用complexType;
3.当需要基于内置的基本数据类型定义一个新的数据类型时,用simpleType。
Choice元素
作用:允许唯一的一个元素从一个组中被选择
属性:minOccurs/maxOccurs
实例:
<xs:complexType name=”chadState” >
<xs:choice minOcccurs=”1” maxOccurs=”1” >
<xs:element ref=”selected” >
<xs:element ref=unselected”>
<xs:element ref=”dimpled’ >
<xs:element ref=”perforated” >
</xs:choice>
<xs:attribute name=”candidate” type=”candidateType”>
</xs:complexType>
Sequence元素
作用:给一组元素一个特定的序列
实例:
<xs:element name=”zooAnimals”>
<xs:complexType>
<xs:sequenceminOccurs=”0” maxOccurs=”unabound”.>
<xs:element name=”elephant” />
<xs:element name=”bear” />
<xs:element name=”giraffe” />
</xs:sequence>
</xs:complexType>
</xs:element>
1.用schema的数据及元素类型声明XMl文档的元素和属性
声明元素: <xs:element>
声明属性: <xs:attribute>
2.声明元素的方法
1.使用内置的数据类型
<xs:element name= ”cat” type=”xs:string” />
<xs;element name=”dog”type=”xs:string”/>
<xs:element name=”redDog” type=”xs:string” substitutionGroup=”dog” />表示出现redDog的地方可以用dog替换
<xs:element name=”brownDog” type=”xs:string” substitutionGroup=”dog”/ >
说明:通过DOCTYPE可以明确指定文档的根元素,因为DOCTYPE后面跟的元素就是文档的根元素,通过Schema是没法明确指定目标XML文档的根元素。XMlSpy是通过推断哪个元素包含了其他元素来选择包含其他元素最多的那个元素作为文档的根,
我们可以明确指定文档的根元素而不必按照XMLSpy的生成来做。
总结
1.Schema是另一种文档类型定义,它遵循XML的语言规范
2.Schema是可扩展的,支持命名空间
3.Schema支持更多的数据类型与元素类型
4.Schema用element声明元素,用attribute声明元素的属性。
5.Schema用simpletype定义简单类型,用complexType定义复杂数据类型。