内部dtd约束
<?xml version="1.0" encoding="UTF-8" ?> <!-- 声明xml文档头 -->
<!-- 内部DTD约束 -->
<!--
!DOCTYPE: 固定语法 文档类型
students: 自定义根标签名字
[]: 存放子标签
ELEMENT: 元素(标签)
#PCDATA:元素是字符串类型#PCDATA(不能再有子元素,也不能为空)
DTD中标签的顺序就是日后使用的顺序, 不允许改变
-->
<!DOCTYPE students[
<!-- 标签 -->
<!--
(student): 只能有一对student标签
(student?): 0~1次
(student+): 至少1次
(student*): 0~多次
-->
<!ELEMENT students (student*)>
<!ELEMENT student (name, age, sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!-- 属性 -->
<!--
ATTLIST: 属性
student: 哪个标签指定属性
id: 指定的属性名
CDATA: 属性控制
#REQUIRED: 必须有
#FIXED "值": 固定值
#IMPLIED: 可有可无
-->
<!ATTLIST student id CDATA #REQUIRED>
<!ATTLIST name class CDATA #FIXED "qwe">
<!ATTLIST age test CDATA #IMPLIED>
]>
<students>
<student id="aa">
<name class="qwe">张三</name>
<age test="aaa">18</age>
<sex>男</sex>
</student>
</students>
外部dtd
外部DTD是我们自己编写的DTD文件。通过引入方式引入DTD。
在外部创建一个xxx.dtd文件,文件内容和内部dtd [ ] 中的内容相同。
<!ELEMENT students (student*)>
<!ELEMENT student (name, age, sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student id CDATA #REQUIRED>
<!ATTLIST name class CDATA #FIXED "qwe">
<!ATTLIST age test CDATA #IMPLIED>```
==xml引入外部dtd文件==
```java
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students SYSTEM "aa.dtd">
<students>
<student id="aa" >
<name class="qwe">张三</name>
<age test="aaa">18</age>
<sex>男</sex>
</student>
</students>
xsd约束
<!--
声明xsd约束
aa: 自定义名称(随意)
schema: 约束(固定)
-->
<aa:schema xmlns:aa="http://www.w3.org/2001/XMLSchema">
<!--
aa:element: 标签
name: 标签名
-->
<aa:element name="students">
<!-- 必须设置为复杂类型 -->
<aa:complexType>
<!-- 在此标签中规范了 标签的顺序 -->
<aa:sequence>
<!-- 引用其他标签 --