简介:DTD文件对当前XML文档中的节点进行了定义,这样我们加载配置文件之前,可通过指定的DTD对当前XML中的节点进行检查,确定XML结构和数据类型是否合法。
DTD的声明:<! DOCTYPE root[]>
元素定义的语法(根标签也要定义)
<!ELEMENT element-name (type)>元素的分类
<!ELEMENT element-name EMPTY>//空元素 <!ELEMENT element-name (#PCDATA)>//文本元素 <!ELEMENT element-name (e1,e2)>//混合元素元素的限制 , 拼接同级标签 | 或者 出现次数: +:1~n *: 0~n ?: 0或1
属性定义的语法
<!ATTLIST element-name att_name type >案例
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE persons [ <!ELEMENT persons (person*) > <!ELEMENT person (name,age,contact,br?) > <!ELEMENT name (#PCDATA) > <!ELEMENT age (#PCDATA) > <!ELEMENT contact (phone|email) > <!ELEMENT phone (#PCDATA) > <!ELEMENT br EMPTY > <!ATTLIST person pid ID #REQUIRED<!-- 唯一id,必填的 --> sex (男|女) '男'<!-- 选择类别,默认值男 --> qq CDATA #IMPLIED<!-- 文本类别,不是必须的 --> parent IDREF #IMPLIED<!-- 依赖关系,不是必须的 --> > ]> <persons> <person pid="p1" sex="男" qq="aaa" parent="p2"> <name>张小明</name> <age>10</age> <contact> <phone>1234567</phone> </contact> <br/> </person> <person pid="p2"> <name>张大明</name> <age>35</age> <contact> <email>123@qq.com</email> </contact> </person> </persons>XML Schema 是基于 XML 的 DTD 替代者,XML Schema 的作用是定义 XML 文档的合法构建模块,类似 DTD
最常用的元素类型有: xs:string xs:decimal xs:integer xs:boolean xs:date xs:time
XML Schema 文件自身就是一个XML文件,但它的扩展名通常为.xsd。 在Xml文件中书写标签时,可以通过名称空间声明(xmlns),来声明当前编写的标签来自哪个Schema约束文档 我们在案例总讲解它的语法
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"<!-- <schema>元素是每一个XML Schema的根元素--> targetNamespace="http://www.w3school.com.cn"<!-- 实际的命名空间 --> xmlns="http://www.w3school.com.cn"<!-- 默认的命名空间 --> elementFormDefault="qualified"><!-- 所有元素都会被命名空间限定 --> <xs:element name="persons"> <xs:complexType><!-- 混合内容主要构造就是complexType和sequence来完成限定的 --> <xs:sequence maxOccurs='unbounded'><!-- 这个标签里的元素必须按照指定顺序出现 --> <xs:element name="person" > <xs:complexType> <xs:sequence> <xs:element name="name" type="xs:string"></xs:element><!-- 限定它的名称和元素类型 --> <xs:element name="age" type="xs:integer"></xs:element> <xs:element name="contact"> <xs:complexType> <xs:sequence> <xs:element name="phone" type="xs:string"></xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> <persons> <person pid="p1" sex="男" qq="aaa" parent="p2"> <name>张小明</name> <age>10</age> <contact> <phone>1234567</phone> </contact> <br/> </person> <person pid="p2"> <name>张大明</name> <age>35</age> <contact> <email>123@qq.com</email> </contact> </person> </persons>