XML之DTD Schema总结

首先强烈推荐使用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>








   

你可能感兴趣的:(xml,schema,String,正则表达式,文档,encoding)