作业:xml练习2-写.xml的外部约束文件(dtd文件)

写外部DTD:

步骤:

1.在srd目录下新建DTD文件,并命名为:scores.dtd

2.在练习1的基础上,剪切练习1的DTD内部声明。粘贴到一个新建的DTD文件中。剪切之后的地方换上:包含外部DTD的声明语句:<!DOCTYPE scores SYSTEM "scores.dtd">,新建的引入外部DTD文件的xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入外部DTD文件 -->
<!DOCTYPE scores SYSTEM "scores.dtd">
<scores>
    <student id="1">
        <name>王同</name>
        <course>java</course>
        <score>89</score>
    </student>
    <student id="2">
        <name>李佳</name>
        <course>sql</course>
        <score>58</score>
    </student>
    <student id="3">
    <name>王二狗</name>
    <course>经济学原理</course>
    <score>88</score>
    </student>
    <student id="4">
        <name>刘德华</name>
        <course>怎样做一个好演员</course>
        <score>100</score>
    </student>
</scores>

3.其中,scores.dtd文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT scores (student+)>
<!ELEMENT student (name,course,score)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT course (#PCDATA)>
<!ELEMENT score (#PCDATA)>

 4.一个可能要注意的地方是,当引入外部约束文件DTD文件之后,.xml文件就要包含元素name,course,score 了,如果在.xml文件中删去<score>100</score> 这一行,会报错(必须匹配name,course,score),如果没报错,把文件保存一下就行了。


 

下面是来自韩顺平老师上课的例子1(xml文件及其对应的约束文件):

1.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!--文件名:学生信息管理 -->
<!--关键字'SYSTEM'代表.DTD文件来源于当前系统,而不是来源于网络 -->
<!DOCTYPE 班级 SYSTEM "学生信息管理.dtd">
<班级>
    <学生 地址="香港" 
         学号="tj1710008" 
         大哥="tj1710009 tj1710008" 
         性别="男"
    >
        <姓名>刘德华</姓名>
        <年龄>23</年龄>
        <简单介绍>学习刻苦!</简单介绍>
    </学生>
    <学生 地址="台湾" 
         学号="tj1710009" 
         大哥="tj1710008 tj1710009"
         性别="女"
    >
        <姓名>林志玲</姓名>
        <年龄>22</年龄>
        <简单介绍>学习刻苦!认真听讲!</简单介绍>
    </学生>
</班级>

2.对应的dtd约束文件:

<?xml version="1.0" encoding="UTF-8"?>
<!--文件名:学生信息管理 -->
<!ENTITY % myname "姓名"> <!--对于文件中多次出现的长字串,可以定义参数实体去替换 -->
<!ELEMENT 班级 (学生+)>
<!ELEMENT 学生 (%myname;,年龄,简单介绍)> <!--对于文件中多次出现的长字串,可以定义参数实体去替换 -->
<!--"#REQUIRED"代表属性值是"必须"的 -->
<!--"地址"这两个字是属性名字,是可以自定义的 -->
<!--"ID"代表学号的属性值惟一,不可重复 -->
<!--"DREFS"代表大哥的属性值是参考其他属性(学号)的属性值,DREF加个"S"代表可以有多个参考 -->
<!--"(男|女)"代表是枚举,性别的属性值只能从括号中的值里面选择-->
<!ATTLIST 学生 
    地址 CDATA #REQUIRED
    学号 ID #REQUIRED
    大哥 IDREFS #REQUIRED
    性别 (男|女) #REQUIRED
>
<!--(#PCDATA)代表简单介绍可以是任何文本 -->
<!ELEMENT %myname; (#PCDATA)> <!--对于文件中多次出现的长字串,可以定义参数实体去替换 -->
<!ELEMENT 年龄 (#PCDATA)>
<!ELEMENT 简单介绍 (#PCDATA)>
<!--引用实体在dtd文件里面定义,在xml文件中使用,最好定义在最后面,目的是给一串字符串起个别名-->
<!ENTITY mycopy "我的公司版权">
<!--此时"我的公司版权"这一个长字符串在xml文件里面可以用"mycopy"代替,如果需要引用这个长字串的话-->

 例子2:

1.dtd文件:

<!--   the filename is catalog.dtd  -->
<!--   A Sample Product Catalog DTD  -->

<!--    This sample file is provided by Vervet Logic,
    for tutorial use with XML Pro. Questions should
    be addressed to "support@vervet.com" or visit our
    web site at http://www.vervet.com
-->

<!ENTITY AUTHOR "John Doe">
<!ENTITY COMPANY "JD Power Tools, Inc.">
<!ENTITY EMAIL "jd@jd-tools.com">

<!ELEMENT CATALOG (PRODUCT+)>

<!ELEMENT PRODUCT (SPECIFICATIONS+, OPTIONS?, PRICE+, NOTES?)>
<!ATTLIST PRODUCT NAME CDATA #IMPLIED
      CATEGORY (HandTool | Table | Shop-Professional) "HandTool"
      PARTNUM CDATA #IMPLIED
          PLANT (Pittsburgh | Milwaukee | Chicago) "Chicago"
          INVENTORY (InStock | Backordered | Discontinued) "InStock">

<!ELEMENT SPECIFICATIONS (#PCDATA)>
<!ATTLIST SPECIFICATIONS WEIGHT CDATA #IMPLIED
          POWER CDATA #IMPLIED>

<!ELEMENT OPTIONS (#PCDATA)>
<!ATTLIST OPTIONS FINISH (Metal | Polished | Matte) "Matte" 
          ADAPTER (Included | Optional | NotApplicable) "Included"
          CASE (HardShell | Soft | NotApplicable) "HardShell">

<!ELEMENT PRICE (#PCDATA)>
<!ATTLIST PRICE MSRP CDATA #IMPLIED
          WHOLESALE CDATA #IMPLIED
          STREET CDATA #IMPLIED
          SHIPPING CDATA #IMPLIED>

<!ELEMENT NOTES (#PCDATA)>

2.对应的xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!--the filename is 产品.dtd -->
<!DOCTYPE CATALOG SYSTEM "catalog.dtd">
<CATALOG>
  <PRODUCT CATEGORY="HandTool" INVENTORY="InStock" NAME="得胜" PARTNUM="abc" PLANT="Chicago">
    <SPECIFICATIONS WEIGHT="150KG" POWER="3000瓦">这里放说明书。</SPECIFICATIONS>
    <OPTIONS FINISH="Matte" ADAPTER="Included" CASE="HardShell">这里是操作说明。</OPTIONS>
    <PRICE>整机价格:RMB12000</PRICE>
    <NOTES>这里写注意事项!</NOTES>
  </PRODUCT>
</CATALOG>

 

posted on 2018-11-15 08:55  一杯明月  阅读(1341)  评论(0编辑  收藏  举报