首先强烈推荐使用XMLSpy这款专业工具:
下载地址:http://download.csdn.net/detail/jiangtongcn/4091853
DTD总结
DTD文档结构
内部DTD文档语法结构
外部DTD文档语法结构
内外部DTD文档语法结构【当外部DTD不满足要求的时候可以考虑添加内部DTD】
DTD元素
空元素定义 建议<元素名称/>
#PCDATA 限定元素包含文档内容
纯元素符号的用法(?、+、*)
DTD属性类型
CDATA 表示属性值是文本类型
ID 表示属性值是唯一的
IDREF/IDREFS 表示外键的引用,在属性值里面出现的值一定是之前定义好的ID类型的值。
Enumerated 枚举类型,并非使用这个单词而是自定的枚举值如男或女
属性特点
#REQUIRED 表示属性值是必须的。
#IMPLIED 表示属性可以省略
#FIEXD 表示属性在出现的时候有个固定值
Default 表示缺省值,并非使用这个单词,而是预定好的一些值。
DTD实体
实体是在DTD里面去定义,在XML文件里使用。好比在DTD里面定义了一个变量,在XML里面使用这个变量。
Schema总结
Schema文档结构
Schema文档是一个XML文档,因此是需要声明和根元素的。
Schema常用元素类型
element元素 元素名称、出现次数、
group元素 将几个元素捆绑到一起以组的形势出现
attribute元素 定义属性名称、默认值
attributeGroup元素将几个属性捆绑出现
simpleType元素 要对数据类型进行扩充的时候要使用自定简单数据类型
restriction 定义一个约束[常用]
list 列表,可以定义数据类型
complexType元素 限制包含元素的元素和元素的属性
sequence XML文档的子元素按照什么顺序出现
choice 表示定义的一组当中可以选择哪一个。
------------------------------------------------------------DTD使用示范---------------------------------------
DTD元素示范
Movie.dtd
<?xml version="1.0" encoding="GB2312"?> <!ELEMENT CCTV-6 (电影+)> <!ELEMENT 电影 (名称, 主演+, 类型?, 片长)> <!ELEMENT 名称 (#PCDATA)> <!ELEMENT 主演 (#PCDATA)> <!ELEMENT 类型 (#PCDATA)> <!ELEMENT 片长 (#PCDATA)>
Movie.xml<?xml version="1.0" encoding="gb2312"?> <!--为下面的xml编写一个外部的DTD文档 类型:最多出现1次 主演:至少是一个人 --> <!DOCTYPE CCTV-6 SYSTEM "验证元素测试.dtd"> <CCTV-6> <电影> <名称>霍元甲</名称> <主演>李连杰</主演> <类型>动作</类型> <片长>1小时35分</片长> </电影> <电影> <名称>宝贝计划</名称> <主演>成龙</主演> <主演>古天乐</主演> <片长>1小时40分</片长> </电影> </CCTV-6>
------------------------------------------------------------------------------------
DTD属性示范
Family.dtd
<!ELEMENT 家庭 (人+, 家电*)> <!ELEMENT 人 EMPTY> <!ELEMENT 家电 EMPTY> <!ATTLIST 人 名字 CDATA #REQUIRED 年龄 CDATA #REQUIRED 性别 (男 | 女) "女" 住址 CDATA #FIXED "北京" 爱好 CDATA #IMPLIED > <!ATTLIST 家电 名称 CDATA #REQUIRED 数量 CDATA #REQUIRED >
Family.xml
<?xml version="1.0"?> <!DOCTYPE 家庭 SYSTEM "Family.dtd"> <!--要求如下: 1、子元素都为空元素 2、家庭必须有一个人,可以没有家电 3、名字和年龄是必须填写的 4、性别男或女 默认为女 5、住址固定为北京 --> <家庭> <人 名字="郭大路" 性别="男" 年龄="25" 住址="北京"/> <人 名字="杨柳" 年龄="38" 爱好="作个教育家和伟人"/> <家电 名称="彩电" 数量="3"/> </家庭>
------------------------------------------------------------------------------------
DTD实体示范
book.dtd
<!ELEMENT book (details+)> <!ELEMENT details (name, author, publication, price)> <!ELEMENT name (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT publication (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ATTLIST price type (支票 | 现金) "现金" > <!ENTITY country "中国"> <!ENTITY count "印度"> <!ENTITY rights "版权所有"> <!ENTITY pricenotation "{1}quot;>
book.xml
<?xml version="1.0" encoding="UTF-8"?> <!--country 中国 count 印度 rights 版权所有 pricenotation $ type 支票或现金 默认为现金 --> <book> <details> <name>xml 使用详解</name> <author>成龙来自&country;</author> <publication>Mac &rights;</publication> <price type="支票">&pricenotation;50</price> </details> <details> <name>xml 揭密</name> <author>Raghu 来自&count;</author> <publication>Mac &rights;</publication> <price>&pricenotation;45</price> </details> </book>
--------------------------------------Schema使用示范--------------------------
Schema元素定义:
students.xsd
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="students"> <xs:complexType> <xs:sequence> <xs:element name="student" type="xs:string" minOccurs="1" maxOccurs="2"></xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
students.xml
<?xml version="1.0" encoding="UTF-8"?> <students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="students.xsd"> <student>pbdevn</student> </students>
------------------------------------------------------------------------------------
Schema元素组定义:
students.xsd
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:group name="studentGroup"> <xs:sequence> <xs:element name="student" type="xs:string"></xs:element> <xs:element name="class" type="xs:string"></xs:element> </xs:sequence> </xs:group> <xs:element name="students"> <xs:complexType> <xs:sequence> <xs:group ref="studentGroup" maxOccurs="2"> </xs:group> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
students.xml
<?xml version="1.0" encoding="UTF-8"?> <students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="students.xsd"> <student>jack</student> <class>1班</class> <student>tony</student> <class>2班</class> </students>
------------------------------------------------------------------------------------
Schema属性定义
student.xsd
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="student"> <xs:complexType> <xs:attribute name="id" type="xs:string" use="optional" fixed="T"></xs:attribute> </xs:complexType> </xs:element> </xs:schema>
student.xml
<?xml version="1.0" encoding="UTF-8"?> <student id="S101"></student>
------------------------------------------------------------------------------------
Schema属性组定义
student.xsd
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:attributeGroup name="message"> <xs:attribute name="id" type="xs:string"/> <xs:attribute name="name" type="xs:string"/> </xs:attributeGroup> <xs:element name="school"> <xs:complexType> <xs:sequence> <xs:element name="student"> <xs:complexType> <xs:attributeGroup ref="message"/> </xs:complexType> </xs:element> <xs:element name="teacher"> <xs:complexType> <xs:attributeGroup ref="message"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
student.xml
<?xml version="1.0" encoding="UTF-8"?> <school xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="E:\XML案例\student.xsd"> <student id="S101" name="jack"/> <teacher id="T101" name="tony"/> </school>------------------------------------------------------------------------------------
Schema简单类型约束
student.xsd
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:simpleType name="stuAge"> <xs:restriction base="xs:int"> <xs:minExclusive value="18"></xs:minExclusive > <xs:maxInclusive value="50"></xs:maxInclusive> </xs:restriction> </xs:simpleType> <xs:simpleType name="stuName"> <xs:restriction base="xs:string"> <xs:maxLength value="5"></xs:maxLength> </xs:restriction> </xs:simpleType> <xs:element name="student"> <xs:complexType> <xs:sequence> <xs:element name="name" type="stuName"></xs:element> <xs:element name="age" type="stuAge"></xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
student.xml
<?xml version="1.0" encoding="UTF-8"?> <student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="student.xsd"> <name>tony</name> <age>19</age> </student>
------------------------------------------------------------------------------------
Schema简单类型列表
student.xsd
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:simpleType name="stuScore"> <xs:list itemType="stuScoreItem"></xs:list> </xs:simpleType> <xs:simpleType name="stuScoreItem"> <xs:restriction base="xs:int"> <xs:minInclusive value="0"></xs:minInclusive> <xs:maxExclusive value="100"></xs:maxExclusive> </xs:restriction> </xs:simpleType> <xs:element name="student"> <xs:complexType> <xs:sequence> <xs:element name="scores" type="stuScore"></xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
student.xml
<?xml version="1.0" encoding="UTF-8"?> <student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="student.xsd"> <scores>80 90 89</scores> </student>
------------------------------------------------------------------------------------
Schema复合类型序列
student.xsd
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:complexType name="studentType"> <xs:sequence> <xs:element name="id" type="xs:string"></xs:element> <xs:element name="name" type="xs:string"></xs:element> </xs:sequence> </xs:complexType> <xs:element name="students"> <xs:complexType> <xs:sequence> <xs:element name="student" maxOccurs="5" type="studentType"> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
student.xml
<?xml version="1.0" encoding="UTF-8"?> <students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="student.xsd"> <student> <id>S101</id> <name>jack</name> </student> <student> <id>S102</id> <name>tony</name> </student> </students>
------------------------------------------------------------------------------------
Schema复合类型单选项
student.xsd
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="交通工具"> <xs:complexType> <xs:choice> <xs:element name="自行车" type="xs:string"></xs:element> <xs:element name="公交车" type="xs:string"></xs:element> <xs:element name="小汽车" type="xs:string"></xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema>
student.xml
<?xml version="1.0" encoding="UTF-8"?> <交通工具 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="student.xsd"> <自行车>捷安特</自行车> </交通工具>
------------------------------------------------------------------------------------
Schema综合练习
student.xsd
<?xml version="1.0" encoding="UTF-8"?> <!-- edited with XMLSpy v2010 rel. 3 (http://www.altova.com) by jiang (tong) --> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:simpleType name="AgeInt"> <xs:restriction base="xs:integer"> <xs:minInclusive value="18"/> <xs:maxInclusive value="40"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="SexEnum"> <xs:restriction base="xs:string"> <xs:enumeration value="男"/> <xs:enumeration value="女"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="NameType"> <xs:restriction base="xs:string"> <xs:minLength value="2"/> <xs:maxLength value="4"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="StuNumType"> <xs:restriction base="xs:string"><!--正则表达式--> <xs:pattern value="T[0-9][1-9]"/> </xs:restriction> </xs:simpleType> <xs:element name="Students"> <xs:complexType> <xs:sequence> <xs:element name="Student" minOccurs="0" maxOccurs="3"> <xs:complexType> <xs:sequence> <xs:element name="Name" type="NameType"/> <xs:element name="Sex" type="SexEnum"/> <xs:element name="Age" type="AgeInt"/> </xs:sequence> <xs:attribute name="StuNum" type="StuNumType" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
student.xml
<?xml version="1.0" encoding="UTF-8"?> <Students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Students.xsd"> <Student StuNum="T01"> <Name>张三</Name> <Sex>男</Sex> <Age>40</Age> </Student> <Student StuNum="T09"> <Name>李四</Name> <Sex>男</Sex> <Age>22</Age> </Student> <Student StuNum="T03"> <Name>王二</Name> <Sex>男</Sex> <Age>18</Age> </Student> </Students>