第03章习题答案
- 格式:doc
- 大小:49.50 KB
- 文档页数:4
第02章XML文件的规则
习题答案
1.什么是有效的XML文件?IE能否检查一个XML文件的有效性?
答案:
符合XML语法规则的XML文件称为规范的XML文件,规范的XML文件再满足其关联的DTD或Schema文件中的约束,这样的XML文件就称为有效的XML文件。
IE不能检查一个XML文件是否是有效的,只能检查XML文件的规范性。
要检查一个XML文件的有效性,需通过DOM或SAX解析器。
2.如何将DTD关联到XML文件?
答案:
通过文档类型声明来关联DTD和XML。
格式为:
<!DOCTYPE 根标记名称SYSTEM “DTD的URI”>
<!DOCTYPE 根标记名称PUBLIC “正式公用标识符”“DTD的URI”>
SYSTEM用于非标准化的外部DTD,PUBLIC用于标准化的外部DTD。
3.下面的声明有什么区别?
(1)<!A TTLIST name height CDA TA “90”weight CDA TA “75” >
(2)<!A TTLIST name height CDA TA #IMPLIED weight CDATA #REQUIRED >
(3)<!ATTLIST name height CDA TA #FIXED “90”weight CDATA #FIXED “75” > 答案:
(1)中“height”属性和“weight”属性为“name”必须有的属性,如果没有明确地指出,属性值为默认值“90”和“75”;(2)中“name”可以不含“height”属性,没有默认值,但必须含有“weight”属性,没有默认值,必须显示地添加。
(3)中“name”可以不含“height”属性和“weight”属性,但如果显示地添加了就必须取其后面的值,不可以改变。
4.什么是普通实体?什么是参数实体?有什么区别?
答案:
普通实体指可以被XML文件在标记内容中通过实体引用使用的实体。
实体内容是文本数据,分为内部实体和外部实体或可解析实体和不可解析实体。
参数实体是指在DTD文件中定义,只能由DTD文件本身通过实体引用来使用的实体,和关联的XML无关。
二者的区别是:使用的对象不同,或者说用途不同。
普通实体是XML文件通过实体引用来使用。
参数实体只能由DTD文件本身通过实体引用来使用,和关联的XML无关。
使用的目的也不同,使用普通实体是为了简化文本数据,使用参数实体是为了简化DTD的编写。
5.下面的文件正确吗?为什么?用IE和本章中的解析器验证你的结论。
mes.dtd
<!ELEMENT message ANY>
<!ELEMENT persion (name,age?,lxfs)>
<!ELEMENT lxfs (#PCDATA,tel|email)*>
<!ELEMENT name (first,last)>
<!ATTLIST name sex (male|female) "male">
<!ELEMENT first %pc; >
<!ELEMENT last %pc;>
<!ELEMENT age %pc;>
<!ELEMENT tel %pc;>
<!ELEMENT email %pc;>
<!ENTITY % pc “(#PCDATA)”>
<!ELEMENT emergency EMPTY>
<!ATTLIST emergency
fire CDATA #FIXED "119"
police CDATA #FIXED "110"
hospital CDATA #FIXED "120"
>
mes.xml
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE SYSTEM "mes.dtd">
<message>
<persion>
<name sex="男">
<first>li</first>
<last>xiao</last>
</name>
<age>25</age>
<lxfs>
<tel>123456</tel>
</lxfs>
</persion>
<persion>
<name>
<first>wang</first>
<last>xiao</last>
</name>
<lxfs></lxfs>
</persion>
<emergency fire="120" police="110" />
</message>
答案:
不正确。
有5处错误,“<!ELEMENT lxfs (#PCDA TA,tel|email)*>”句“#PCDA TA”与“tel”之间应该用“|”,或去掉“#PCDATA”;参数实体应先声明后使用;文档类型声明缺少根元素;“name”的“sex”属性取值错误;“emergency”的“fire”属性取值错误。
正确的文件:mes.dtd
<!ELEMENT message ANY>
<!ELEMENT persion (name,age?,lxfs)>
<!ELEMENT lxfs (#PCDATA|tel|email)*>
<!ELEMENT name (first,last)>
<!ATTLIST name sex (male|female) "male">
<!ENTITY % pc "(#PCDATA)">
<!ELEMENT first %pc; >
<!ELEMENT last %pc;>
<!ELEMENT age %pc;>
<!ELEMENT tel %pc;>
<!ELEMENT email %pc;>
<!ELEMENT emergency EMPTY>
<!ATTLIST emergency
fire CDATA #FIXED "119"
police CDATA #FIXED "110"
hospital CDATA #FIXED "120"
>
mes.xml
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE message SYSTEM "mes.dtd">
<message>
<persion>
<name sex="male">
<first>li</first>
<last>xiao</last>
</name>
<age>25</age>
<lxfs>
<tel>123456</tel>
</lxfs>
</persion>
<persion>
<name>
<first>wang</first>
<last>xiao</last>
</name>
<lxfs></lxfs>
</persion>
<emergency fire="119" police="110" /> </message>。