XML二:XML语义约束DTD简介;DTD示例;XML Schema;

XML语义约束:即XML文件不能瞎写,不能随便想写什么标签就写什么标签,也不能想写几个子标签就写几个子标签,标签的值不能想写啥就写啥?一个有具体的实际用途的XML,势必要满足一定的条件(逻辑条件,当前业务需求条件等),而如果仅仅靠人的注意和认真来满足这些条件,显然是不行的,必须要加一些强制的、明文规定的约束,这些约束也是正确编写出满足本业务的XML的强力工具。

XML语义约束实现有两种方式:DTD,XML Schema;本文的核心是XML Schema

目录

一,DTD简介

1.DTD使用方法:

2.DTD文件写好后,怎么和XML文件关联在一起?

二:DTD示例

示例1:节点数量不对

示例2: 子标签不匹配,dtd中定义的是ag,而xml中写的是age

示例三:子标签顺序不对

示例四:标签属性的设置

 上述过程完整示例代码:(这些代码相对简单,可以选择性地看)

三:XML Schema简介

示例程序:hr-schema.xsd:schema示例约束,十分重要!!!本篇博客最核心的地方!!!!!!!!!!!!!!!!!!!!


一,DTD简介

1.DTD使用方法:

 注:下面节点和()之间需要有空格!!!!!

注:下面hr和(employee)之间需要有空格!!!!!

2.DTD文件写好后,怎么和XML文件关联在一起?

SYSTEM:代表本地加载dtd文件;


二:DTD示例

Eclipse中新建DTD文件:src→new→other…→XML下有个DTD File:DTD文件的名字,建议和对应的XML文件同名。

示例1:节点数量不对

示例2: 子标签不匹配,dtd中定义的是ag,而xml中写的是age

示例三:子标签顺序不对

示例四:标签属性的设置

解决办法:

 上述过程完整示例代码:(这些代码相对简单,可以选择性地看)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hr SYSTEM "hr.dtd">
<!-- 人力资源管理系统-->
<hr>
	<employee no="3306">   <!-- 标签和属性尽量起的有意义,做到见名知意-->
		<name>张三</name>
		<age>31</age>
		<salary>4000</salary>
		<department>    <!-- 标签可以嵌套-->
			<dName>会计</dName>
			<dAddress>4楼103室</dAddress>
		</department>
	</employee>
	<employee>
		<name>李四</name>
		<age>29</age>
		<salary>5000</salary>
		<department>
			<dName>工程部门</dName>
			<dAddress>4楼105室</dAddress>
		</department>
	</employee>

</hr>

DTD文件

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT hr (employee+)>    <!--实测发现,必须要加个空格,否则dtd不起作用-->
<!ELEMENT employee (name,age,salary,department)>
<!ATTLIST employee no CDATA "">   

<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT salary (#PCDATA)>
<!ELEMENT department (dName,dAddress)>  
<!ELEMENT dName (#PCDATA)>
<!ELEMENT dAddress (#PCDATA)>

三:XML Schema简介

早期XML约束多使用DTD,但目前功能强大的XML Schema更常用;框架就需要XML Schema技术的支持;

XML Schema文件扩展名xsd;在Eclipse中创建方式,new→other→XML Schema File;

示例程序:hr-schema.xsd:schema示例约束,十分重要!!!本篇博客最核心的地方!!!!!!!!!!!!!!!!!!!!

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">

	<element name="hr">    <!-- 声明根节点 -->
		<complexType>       <!-- complexType标签的意思是复杂节点,包含子节点时,必须使用这个标签 -->
			<sequence>     <!-- sequence是序列的意思,代表里面的子节点必须按照顺序书写 -->
			 <!-- minOccurs="1":employee节点最少出现一次;maxOccurs="9999":employee节点最多出现9999次-->
				<element name="employee" minOccurs="1" maxOccurs="9999">  
					<complexType>
						<sequence>
							<element name="name" type="string"></element> <!-- type="string":name节点的值只能是字符串; -->
							<element name="age">
								<simpleType><!-- 如年龄,要求在18-60之间; <simpleType>标签可以设置数值范围-->
									<restriction base="integer"><!-- 这儿的base="integer"表示我们要限定范围的数据是整数-->
										<minInclusive value="18"></minInclusive>
										<maxInclusive value="60"></maxInclusive>
									</restriction> 
								</simpleType>
							</element> <!-- Schema高级的地方就是有了数据类型 -->
							<element name="salary" type="integer"></element>
							<element name="department">
								<complexType>
									<sequence> 
										<element name="dName" type="string"></element>
										<element name="dAddress" type="string"></element>
									</sequence>
								</complexType>
							</element>
						</sequence>
						 <!--在employee标签中有一个no属性,那么就在employee标签的那个 </complexType>标签位置上面设置attribute标签-->
						  <!-- “required”代表必须的,即任何employee标签如果不写no属性,会报错 -->
						<attribute name="no" type="string" use="required"></attribute>
					</complexType>
				</element>
				
			</sequence>
		</complexType>    
	</element>  
	
</schema>

hr-schema.xml: 注意在xml中引入xsd的方式;

<?xml version="1.0" encoding="UTF-8"?>

<!-- 人力资源管理系统-->
 <!--xmlns:xsi的意思是告诉XML文档,我们的约束是使用Schema;xsi:noNamespaceSchemaLocation:指向xsd文件-->
<hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="hr-schema.xsd" >  
	<employee no="3306">   <!-- 标签和属性尽量起的有意义,做到见名知意-->
		<name>张三</name>
		<age>31</age>
		<salary>4000</salary>
		<department>    <!-- 标签可以嵌套-->
			<dName>会计</dName>
			<dAddress>4楼103室</dAddress>
		</department>
	</employee>
	<employee no="3377">
		<name>李四</name>
		<age>29</age>
		<salary>5000</salary>
		<department>
			<dName>工程部门</dName>
			<dAddress>4楼105室</dAddress>
		</department>
	</employee>

</hr>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值