XML定义和使用DTD

Posted 我永远信仰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML定义和使用DTD相关的知识,希望对你有一定的参考价值。

如果加入了DTD那么在写xml的时候就会有提示、有模板了,非常的友好!

一、实验目的:

1.定义内部DTD
2.定义外部DTD

三、实验内容:

分别使用内部外部DTD完成如图表格的xml
使用xml描述表中学生的成绩信息。
在这里插入图片描述

1、内部DTD

完整代码:格式良好,有效的xml

<?xml version="1.0" encoding="UTF-8" ?>
<!--声明内部DTD-->
<!DOCTYPE scores[
        <!ELEMENT scores (student+)>
        <!ELEMENT student (name,course,score)>
        <!ATTLIST student id CDATA #REQUIRED>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT course (#PCDATA)>
        <!ELEMENT score (#PCDATA)>
        ]>
<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>
</scores>

代码解释:

1)内部DTD定义:

<!DOCTYPE scores [
...
...
]>
语法如下
<!DOCTYPE 根元素 [元素声明]>

2)元素声明语法:

<!ELEMENT 元素名 (子元素[,子元素…])
文中代码:
<!ELEMENT scores (student+)>
声明了根标签下的一个student元素,该元素必须出现

3)数量词

<!ELEMENT scores (student+)>
(student+)
表示student标签必须要出现至少一次
  • +:表示出现1~n次,至少1次
  • ?:表示出现0次或一次
  • *:表示出现任意次

  • 4)属性声明语法

    <!ATTLIST 元素名称 属性名称 属性类型 默认值>
    <!ATTLIST student id CDATA #REQUIRED>
    定义了 student 标签 的一个名为id的属性,且必须要有
    
  • 属性类型:CDATA,表示字符数据(character data)
  • 默认值:

  • - #REQUIRED,表示必须出现的
  • - #IMPLIED,表示不是必须的
  • <!ELEMENT course (#PCDATA)>
    # PCDATA表示元素的内容只能是可解析的文本,不能再出现标签了。 
    比如
    <course>
    <abc></abc>
    </course>
    会报错
    

    注意:在这里插入图片描述

    2、外部DTD

    完整代码:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!--引入外部 DTD-->
    <!DOCTYPE scores SYSTEM "dtd/score.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>
    </scores>
    

    1)在同级文件夹dtd目录下创建一个独立的score文件,后缀名为.dtd。
    2)在里面编写DTD内容,和在xml内部写的完全一样,只是不需要DOUTYPE标签了,因为DOUTYPE标签属于是xml里的标签。

    score.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)>
    

    代码解释:
    引用外部的DTD文件
    在xml的序言区添加,格式为:

    <!DOCTYPE 根元素 SYSTEM "文件名">
    

    如果dtd文件和xml文件不在同级目录下,需要用上相对路径,比如我的score.dtd是在dtd目录下

    <!DOCTYPE scores SYSTEM "dtd/score.dtd">
    

以上是关于XML定义和使用DTD的主要内容,如果未能解决你的问题,请参考以下文章

XML之外部DTD和内部DTD

XML--- XML文档类型定义(DTD)

XML的验证模式DTD与XSD的区别

DTD和Schema的区别

XML——XML文件约束之DTD详解

XML文档类型定义---DTD文档