1 XML约束
1.1 DTD语法自称一派,可读性较差
1.2DTD引入的方式
<?xml version="1.0" encoding="UTF-8" ?> <!--引入dtd来约束这个xml--> <!--方式一--> <!--文档类型 跟标签名字 网络上的dtd dtd的名称 dtd的路径--> <!--<!DOCTYPE stus PUBLIC "//unknown/" "unknown.dtd">--> <!--方式二--> <!--引入本地的DTD :跟标签名称 引入本地的DTD dtd的位置--> <!--<!DOCTYPE stus SYSTEM "stus_copy.dtd">--> <!--方式三--> <!DOCTYPE stus [ <!ELEMENT stus (stu)> <!ELEMENT stu (name,age,address)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT address (#PCDATA)> ]> <stus> <stu > <name>张三</name> <age>23</age> <address>北京</address> </stu> <stu> <name>李四</name> <age>24</age> <address>上海</address> </stu> </stus>
stus_copy.dtd
<!ELEMENT stus (stu)> <!ELEMENT stu (name,age,address)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT address (#PCDATA)>
1.2Schema其实就是一个xml,使用xml的语法规则,xml解析器 解析起来比较方便,Schema约束文本内容比DTD内容还要多,没有真正意义替代DTD
约束文档: <!-- xmlns : xml namespace : 名称空间 / 命名空间 targetNamespace : 目标名称空间 。 下面定义的那些元素都与这个名称空间绑定上。 elementFormDefault : 元素的格式化情况。 --> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.baidu.com/teacher" elementFormDefault="qualified"> <element name="teachers"> <complexType> <sequence maxOccurs="unbounded"> <!-- 这是一个复杂元素 --> <element name="teacher"> <complexType> <sequence> <!-- 以下两个是简单元素 --> <element name="name" type="string"></element> <element name="age" type="int"></element> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema> 实例文档: <?xml version="1.0" encoding="UTF-8"?> <!-- xmlns:xsi : 这里必须是这样的写法,也就是这个值已经固定了。 xmlns : 这里是名称空间,也固定了,写的是schema里面的顶部目标名称空间 xsi:schemaLocation : 有两段: 前半段是名称空间,也是目标空间的值 , 后面是约束文档的路径。 --> <teachers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.baidu.com/teacher" xsi:schemaLocation="http://www.itheima.com/teacher teacher.xsd" > <teacher> <name>zhangsan</name> <age>19</age> </teacher> <teacher> <name>lisi</name> <age>29</age> </teacher> <teacher> <name>lisi</name> <age>29</age> </teacher> </teachers>
1.2.1命名空间的作用
一个xml如果想指定它的约束规则, 假设使用的是DTD ,那么这个xml只能指定一个DTD , 不能指定多个DTD 。 但是如果一个xml的约束是定义在schema里面,并且是多个schema,那么是可以的。简单的说: 一个xml 可以引用多个schema约束。 但是只能引用一个DTD约束。
名称空间的作用就是在 写元素的时候,可以指定该元素使用的是哪一套约束规则。 默认情况下 ,如果只有一套规则,那么都可以这么写
<name>张三</name>
<aa:name></aa:name>
<bb:name></bb:name>