第三章 有效的XML文件pptConvertorWord文档下载推荐.docx
《第三章 有效的XML文件pptConvertorWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第三章 有效的XML文件pptConvertorWord文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
T28>
开车时间:
20点58分
/T28>
/火车时刻表>
例2:
Time2.xml
开车时间
<
hour>
20点<
/hour>
minute>
58分<
/minute>
对于上述的两个文件我们都会知道T28的开车时间.但是对于解析器,两个文件的数据结构是不同的.第一个文件中标记“T28”的内容只有文本数据”开车时间:
20点58分”,而第二个文件中标记“T28”不仅有文本数据”开车时间
”还有子标记”hour”和”minute”解析器只有解析出子标记中的文本数据后,才能知道T28的开车时间.
注:
这里对空白区进行忽略.
规范的XML文件+对怎样组织数据进行具体的限制=
有效的XML文件.
对XML的数据结构的限制有两种方式:
文档类型定义(DocumentTypeDefinition)DTD
XMLSchema模式
两者区别
DTD文件
XMLSchema模式
具有独自语法结构的文件
是一个特殊的XML文件,
简单
比DTD更复杂
早于XMLSchema
晚
针对一些问题,有时可能需要对XML文件中数据的组织(即数据结构)进行必要的限制,这样才能使解析器更好的解析其中的数据。
比如某个标记必须有两个子标记,某个标记不允许有子标记等等。
DTD与XMLSchema的区别:
DTD的语法与XML不同,而XMLSchema是一种特殊的XML文件。
DTD使用要早于XMLSchema,XMLSchema更复杂。
第八章还要介绍XMLSchema。
什么是有效的XML文件?
一个规范的XML文件如果和某个DTD文件相关联,并遵守该DTD文件规定的限制条件就称为有效的XML文件。
FORMOREINFO...
DTD文件的编码必须与相关联的XML文件一致。
当你保存文件时如果系统总是给你加上”.txt”,那你就要在文件名上加上双引号
DTD文件的编码必须和其关联的XML文件一致,也就是说,如果XML文件的编码为UTF-8,那么XML关联的DTD文件业必须依照UTF-8保存.
如我们这里给的例子:
XML文件保存为Time.xml名字的XML文件,编码方式为UTF-8;
而与Time.xml关联的DTD文件a.dtd我们也要用UTF-8编码方式保存.
注意:
在保存文件的时候,系统会给你的文件名尾部加上”.txt”,你在保存为别的名称的时候,可以将你保存的文件名及扩展名用双引号扩起.
XML文件与DTD的关联
关联的形式有如下两种
SYSTEM关联
SYSTEM关联表明所关联的DTD文件由个人或工作小组所定义且认可
PUBLIC关联
PUBLIC关联表明所关联的DTD文件已经得到某一领域的认可,是经过许多人讨论得到认可的DTD文件
我们在第一章的上机课的时候作一XML文件与CSS文件相关联的例子。
那么XML文件如何与DTD文件关联呢?
在XML中也用文档类型声明与一个DTD相关联。
XML文件与DTD的关联-SYSTEM关联型
SYSTEM关联型的文档类型声明格式
!
DOCTYPE根标记的名称SYSTEM“DTD文件的URI”>
例子:
DOCTYPE火车时刻表SYSTEM“a.dtd”>
DOCTYPE火车时刻表SYSTEM“../a.dtd”>
DOCTYPE火车时刻表SYSTEM“/file/a.dtd”>
统一资源标识符(UniformResourceIdentifier).URI必须是有效的资源.如果URI是一个文件的名字,该文件必须和当前的XML文件在同一目录下,如果不在同一目录下就要写清路径.如果是一个链接地址那么这个链接地址必须是可以访问的
dtd文件的URI必须是一个有效的资源,
如果URI是一个文件的名字,该文件必须和当前XML文件在同一目录中;
如果URI是一个链接地址,该地址必须是可以访问的,
使用URL可以使许多组织组织的XML文件共享同一个DTD文件.
XML文件与DTD的关联-PUBLIC关联型
PUBLIC关联型文档类型声明格式
DOCTYPE根标记的名称PUBLIC“正式公用标识符”“DTD文件的URI”>
正式公用标识符(FormalPublicIdentifier,FPI)格式:
“-//ISO认证//单位名称//DTD说明//所用语言”
DOCTYPEemployeePUBLIC
“-//ISO123456//ccutsoft//ForXML//EN”
“
FPI中不可以有非ASII码字符
FPI中不可以含有非ASII码字符
DTD–初识DTD
A.dtd
ELEMENT学生(小张,李四)>
ELEMENT小张(入学时间,毕业时间)>
ELEMENT李四(入学时间,毕业时间)>
ELEMENT入学时间(#PCDATA)>
ELEMENT毕业时间(#PCDATA)>
下面我们来看一个简单的例子
约束XML文件中的根标记”学生”只可以有且必须两个子标记”小张”和”李四”
约束XML文件中的标记”小张”只可以有且必须两个子标记”入学时间”和”毕业时间”
约束标记”入学时间”和”毕业时间”只能有文本数据,不可以有子标记,”#PCDATA”表示已解析的文本数据(是指不含有左尖括号、右尖括号、与符号、单引号和双引号的字符序列或者是CDATA)
A.dtd文件是对XML文件数据结构进行必要的的约束。
其中XML文件根标记“学生”只可以有且必须有两个子标记“小张”和“李四”。
关键字“#PCDATA”表示已解析的文本数据,所谓已解析的文本数据是指不含有左尖括号,右尖括号、与符号,单引号,双引号的字符序列或者是CDATA段的内容。
再讲第36页的例子。
ELEMENT列车时刻表(T28次,T226次)>
ELEMENTT28次(开车时间,终到时间)>
ELEMENTT2226(开车时间,终到时间)>
ELEMENT开车时间(hour,minute)>
ELEMENT终到时间(hour,minute)>
ELEMENThour(#PCDATA)>
ELEMENTminute(#PCDATA)>
?
xmlversion="
1.0"
encoding="
UTF-8"
?
>
DOCTYPE列车时刻表PUBLIC"
-//ISO88/china/xml/CH"
"
dtdFile.dtd"
>
列车时刻表>
T28次>
开车时间>
<
13点<
12分<
/开车时间>
终到时间>
23点<
/终到时间>
/T28次>
T226次>
08点<
45分<
19点<
36分<
/T226次>
/列车时刻表>
检查有效性
浏览器的XML解析器
仅仅检查XML文件关联的DTD文件是否有语法错误,并不检查XML文件是否遵守该DTD规定的约束条件。
DOM解析器
检查XML文件的规范,DTD文件的语法,
XML文件的引用,XML文件或DTD文件不存在等.
简单说一下37页的JAVA类
DTD–DTD中的元素
ELEMENT
用来约束XML文件中的标记.
在DTD中使用元素声明来定义一个元素。
其格式为:
ELEMENT标记名称标记的约束条件>
ELEMENT列车时刻表(T28,T29)>
声明开始
元素名称
声明结束
元素声明开始,“<
“、“!
”和“ELEMENT”中间不能有空格
注:
DTD文件中元素的作用与其在DTD文件中的书写位置无关。
在DTD文件中不能使用多个元素约束同一个标记,即使它们的约束条件相同
通过学习上面的学习我们知道了DTD的作用,接下来我们就深入的学习一下DTD
例子中列车时刻表有且必须有两个子标记T28和T29
这里要注意的一点,DTD文件中元素的作用与其在DTD文件中的书写位置无关。
在DTD文件中不能使用多个元素约束同一个标记,即使它们的的约束条件相同
DTD–ELEMENT作用
规定标记的子标记
限制标记只有文本数据
规定标记的混合内容
EMPTY和ANY
ELEMENT作用–规定标记的子标记
约束的内容
规定有那些子标记
子标记是否允许重复出现
子标记出现的顺序
这些约束内容出现在DTD中元素声明的“标记的约束条件”部分。
格式如下:
格式
ELEMENT标记名称(子标记列表)>
例子
ELEMENT开车时间(hour,minute)>
另外我们还可以在子标记列表中的子标记后加限定符号,限定符号如下:
子标记列表标记符
+限定符号的标记必须出现一次或多次
*限定符号的子标记可出现零次或多次
限定符号的子标记可出现零次或一次
ELEMENT开车时间(hour?
minute+)>
使用这种约束条件的元素将约束XML文件中相应的标记只可以有子标记,不可以含有能显示的文本数据。
看到上面元素的例子,进一步学习一下如何使用元素约束标记
Element中可以在这几个方面使用
子标记列表的分项也可以是几个标记的
“或运算”,他们必须用小括号扩起.
ELEMENT应聘者(姓名,(本科|硕士|博士),(男|女))>
约束标记“应聘者”顺序地有三个标记:
一个“姓名”标记,一个“本科”、“硕士”或“博士”标记,一个“男”或“女”标记
必须顺序有三个标记,姓名,本科或硕士或博士,男或女
ELEM