1、在xml文件中引入DTD约束
<!DOCTYPE ROOT[]>

2、DTD文件中添加元素定义
<!ELEMENT element-name EMPTY> (空元素)

<!ELEMENT element-name (#PCDATA)> (文本元素)

<!ELEMENT element-name (e1,e2)> (混合元素)

3、DTD文件中添加元素限制

(1).与(,)非(|)

( 2).次数 ①0或1:? ②0~N:* ③1~N:+

第一种引入方式:本地文件引入

<!-- student*,这个星号是表示可以写0-N个student标签 -->
<!ELEMENT students (student*)>
<!ELEMENT student (name,age,height)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT height (#PCDATA)>
<!ATTLIST student id CDATA #REQUIRED>
<?xml version="1.0" encoding="UTF-8" ?>
<!-- DOCTYPE中是引入xml的约束,有了这个约束,xml就不能随意编写标签了,必须按照约束中的规则编写标签 -->
<!-- DOCTYPE后面写的是这个xml的根标签,SYSTEM表示约束的文件为本地文件,后面是文件的路径 -->
<!DOCTYPE students SYSTEM 'studentdtd.dtd'>
<students>
    <student id="1">
        <name>张三</name>
        <age>20</age>
        <height>180</height>
    </student>
    <student id="2">
        <name>李四</name>
        <age>21</age>
        <height>178</height>
    </student>
</students>

 第二种引入方式:xml文件中引入

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 第二种引入约束的方式就是在xml文件中引入约束 -->
<!DOCTYPE students [<!ELEMENT students (student*)>
                    <!ELEMENT student (name,age,height)>
                    <!ELEMENT name (#PCDATA)>
                    <!ELEMENT age (#PCDATA)>
                    <!ELEMENT height (#PCDATA)>
                    <!ATTLIST student id CDATA #REQUIRED>]>
<students>
    <student id="1">
        <name>张三</name>
        <age>20</age>
        <height>180</height>
    </student>
    <student id="2">
        <name>李四</name>
        <age>21</age>
        <height>178</height>
    </student>
</students>

第三种引入方式:网络引入

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 第三种引入约束的方式就是用网络中的dtd文件引入约束 -->
<!DOCTYPE students PUBLIC "dtd文件的名称" "dtd文档的URL">
<students>
    <student id="1">
        <name>张三</name>
        <age>20</age>
        <height>180</height>
    </student>
    <student id="2">
        <name>李四</name>
        <age>21</age>
        <height>178</height>
    </student>
</students>