xmlspy教程文档格式.docx
《xmlspy教程文档格式.docx》由会员分享,可在线阅读,更多相关《xmlspy教程文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
110<
/Phone>
Email>
小陈@<
/Email>
/Person>
女"
小林<
/Name>
112<
小林@<
/Contacts>
XML文档就这么简单,你应该树立起信心。
如果你仔细看一下上面的XML文件你会发现有个错误:
结束标记与开始标记不匹配
小菜想看看XML文档是否真的严谨。
使用IE浏览器打开它。
看来不错,XML设计的很严谨。
2、使用XMLSpy创建上面的XML文档(通讯录)Contacts.xml
上面使用记事本+浏览器,构成了我们的开发平台。
不仅麻烦,而且视觉效果很差。
接下来我们来使用一下XMLSpy。
点击Browser会自动提示错误,并且定位到Nane结点。
确实方便不是吗?
(XMLSpy应该给我颁个奖,这么卖力的帮它宣传)
3、XML也需要约束
XML太方便了,以至于所有人都能打开XML文档修改一番。
这也就产生了一个问题,怎么保证XML文档结构良好。
如果阿扁(也就是欠扁的人)想恶作剧一下,修改了XML文档。
把小陈的Sex修改为<
Person
Sex="
不男不女"
添加了结点<
傻瓜>
你是傻瓜吗?
/傻瓜>
在Browser中正常显示出了<
和<
,由于你并没有对该XML文档进行相应的约束,所以根本没有错误可言。
看来真是糟糕透了,如果被小陈发现了,一定会来个人肉搜索把那该死的阿扁找出来。
可见我们需要对XML文档进行约束,所谓无规矩不成方圆。
约束XML文档的方式主要有两种:
DTD(DocumentTypeDefinition)文档类型定义
XSD(XMLSchemaDefinition)XML模式定义
(二)、DTD(DocumentTypeDefinition)文档类型定义
1、DTD包含在XML中:
Contacts.xml
?
xmlversion="
1.0"
encoding="
UTF-8"
!
DOCTYPEContacts[
ELEMENTContacts(Person*)>
ELEMENTPerson(Name,Address,Phone,Email)>
ATTLISTPersonSex(男|女)"
ELEMENTName(#PCDATA)>
ELEMENTAddress(Country,Province,City)>
ELEMENTCountry(#PCDATA)>
ELEMENTProvince(#PCDATA)>
ELEMENTCity(#PCDATA)>
ELEMENTPhone(#PCDATA)>
ELEMENTEmail(#PCDATA)>
]>
你是傻瓜吗?
使用XMLSpy点击Browser会提示错误:
定位到出错位置:
在我们的DTD代码中有:
ATTLIST
Sex
(男|女)
"
说明了:
Sex为Person元素的属性,为枚举类型,值只能为“男”或“女”,默认值为“男”
改正:
将其修改为男。
点击Revalidate重新验证。
在我们的DTD代码中没有声明该元素,所以提示错误,将其删除。
现在没有错误了。
接下来就来说说DTD中的基本语法:
DOCTYPE
Contacts
[]>
表示根结点为Contacts。
注意这是当DTD包含在XML中使用的。
如果XML是引用外部的DTD文件,就不是这样了,下面会说道。
ELEMENT
(Person*)>
ELEMENTContacts 表示声明元素Contacts,这样就允许XML文档中出现<
Contacts(Person) 表示元素Contacts包含子元素Person,这样就允许XML文档中出现<
Person>
Person* 表示Person可以出现 0次 到 多次
Person+ 表示元素Person可以出现1次 到 多次
Person?
表示元素Person可以出现 0次 到 1次
(Name,
Address,
Phone,
Email)>
ELEMENTPerson 表示声明元素Person
Person(Name,Address,Phone,Email) 表示Person包含元素Name,Address,Phone,Email而且顺序也固定了。
ATTLISTPersonSex 表示为Person元素声明属性Sex,为枚举类型,值为:
男或者女,默认值为 “男”
Name
(#PCDATA)>
声明元素Name,#PCDATA表示:
Name元素不包含其他子元素而只包含字符数据的元素。
Address
(Country,
Province,
City)>
Country
Province
City
Phone
Email
和上面的差不多。
还有一些常用的也附带说下:
比如有个XML文档中有个结点:
image
id="
image1"
src="
image1.jpg"
width="
200"
height="
300"
/image>
要求就省了,直接看对应的dtd代码吧。
EMPTY>
声明元素image,EMPTY表示元素不含有字符数据或子元素,只有属性。
如果出现<
image>
xxx<
提示错误
id
ID
#IMPLIED
为image元素声明属性id,ID表示属性id为在DTD指定的XML文档中唯一,#IMPLIED表示可以有属性id也可以不出现。
imageid="
出错。
src
CDATA
#REQUIRED
为image元素声明属性src,CDATA表示src属性的类型为字符数据,#REQUIRED表示src属性是必须的,必须出现。
width
height
常用的差不多都说了,XMLSpy中也带了几个例子,大家有时间也可以看看。
了解了上面的内容后,阅读XMLSpy中的例子代码应该不存在问题。
大家可以使用XMLSpy,建个XML文档和DTD,试一下,就都明白了,实践是理解事物最好的途径。
2、XML文档引用外部DTD文件
创建Contacts.dtd文件
创建Contacts.xml文件
DOCTYPEContactsSYSTEM"
Contacts.dtd"
只需使用:
SYSTEM
就搞定了,DOCTYPE
Contacts表示根结点Contacts SYSTEM后跟dtd文件的路径。
(三)、XSD(XMLSchemaDefinition)XML模式定义
XMLSchema所起的作用与DTD相同,都是用来约束XML文档的,不过XMLSchema有如下三个优势。
1、DTD是用一种与XML不同的语法编写,而XMLSchema是使用一种类XML的语言。
2、DTD中的所有声明都是全局声明,而XMLSchema既有全局声明也有局部声明。
3、DTD不能对给定的元素或属性的数据类型进行定义,而XMLSchema具有一套完整的数据类型系统,它允许对数据类型如整型,时间型或字符串型等进行详细定义。
看了上面的三个优点后,或许你要郁闷了,上面看了DTD原来是浪费时间啊。
虽然DTD可以完全被XMLSchema替代,不过了解下DTD也不是什么坏事啊,而且你也没发多少时间,不是吗。
废话不多说了,我们同样为之前的Contacts.xml文档编写Contacts.xsd,做好心理准备噢。
xs:
schema
xmlns:
xs="
http:
//www.w3.org/2001/XMLSchema"
elementFormDefault="
qualified"
attributeFormDefault="
annotation>
documentation>
ThisXMLSchemaisfortheContacts.xml<
/xs:
elementname="
Contacts"
complexType>
choiceminOccurs="
0"
maxOccurs="
unbounded"
elementref="
Person"
/>
choice>
element>
sequence>
Name"
type="
string"
Address"
Phone"
simpleType>
restrictionbase="
patternvalue="
[0-9/-]*"
restriction>
Email"
/w+([-+.'
]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*"
attributename="
Sex"
default="
enumerationvalue="
attribute>
Country"
Province"
City"
schema>
在XMLSpy中点击Schema/WSDL可以看到下图:
结构很清晰吧,这样我们可以很清晰的看到结构。
使用XMLSpy编写XSD,你可以不用手写代码(其实在XMLSpy中手写代码很方便,有智能提示),你可以在上面的视图中进行添加或者删除操作,那属于XMLSpy软件的使用不属于小菜讲的范围,如果感兴趣可以看一下:
XMLSPY教程:
该教程将带领您经历一遍XMLSchema的创建、XML文件的创建、编辑和转换、在XML与数据库间进行导入导出以及如何把相关文件组织为一个XMLSPY工程的过程。
在Contacts.xml文档中使用
Contacts
xsi="
//www.w3.org/2001/XMLSchema-instance"
xsi:
noNamespaceSchemaLocation="
Contacts.xsd"
接下来,我们就来分析下Contacts.xsd文件。
1、
schema
xmlns:
xs=“http:
//www.w3.org/2001/XMLSchema”
elementFormDefault="
attributeFormDefault="
/schema>
是所有XMLSchema文件的根结点。
xmlns:
//www.w3.org/2001/XMLSchema”
表示:
XMLSchema中使用的元素和数据类型来自于“http:
命名空间,它也指定了来自于“http:
//www.w3.org/2001/XMLSchema”命名空间的元素和数据类型必须附带前缀“xs:
”。
所以也就有了<
。
elementFormDefault="
使用该XMLSchema的XML文档所使用的所有元素都必须来自指定的命名空间。
attributeFormDefault="
同上,把元素换成属性,如果文档中没有用到属性,就无需指定该参数了,默认为unqualified。
Contacts.xml文档使用了Sex属性,所以指定。
2、
<
提供注释的功能。
3、
element
name="
<
choice
minOccurs="
maxOccurs="
<
ref="
声明一个元素:
名称为Contacts,它是复合类型。
元素Contacts由子元素Person构成,Person可以出现 0 到 多次
声明一个元素名称为Contacts
compleyType>
Contacts元素为复合类型,即由其它元素组成,这里为由元素Person组成。
minOccurs="
表示Person至少出现0次,maxOccurs="
表示Person出现次数无上限。
/>
表示引用Person元素。
4、
<
<
type="
Adress"
<
<
restriction
base="
<
pattern
value="
<
attribute
default="
restriction