XML,schema,dtd文件结构

开头不用说,这是固定个格式:

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

这说明xml的版本是1.0 ,用的是UTF-8的编码格式,版本我们一直都是用1.0版的,这个编码格式你应该根据具体情况改。

我们知道xml是可以定义自己的标签的,那摩我们在写框架时使用标签为什么会有限制呢?那是因为文件中引入了约束文件,基本上都是引入.dtd文件和schema文件

dtd约束文件

引入dtd文件有三种方式:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 约束文件引入的三种方式 -->
<!-- 1 通过本地文件引入 -->
<!DOCTYPE person SYSTEM "day.dtd">
<!-- 2 通过文件内部定义约束 -->
<!DOCTYPE person [
	<!ELEMENT person (name,age)>
	<!ELEMENT name (#PCDATA)>
	<!ELEMENT age (#PCDATA)>
]>
<!-- 3 通过网络文件引入 -->
<!DOCTYPE 根元素 public "文件名" "文件的URL路径">
<!DOCTYPE struts PUBLIC   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"    
 "http://struts.apache.org/dtds/struts-2.0.dtd">
好了有了约束文件我们只能按照他们限定的标准来写了,如果不符合其标准会报错的额。

让我们来看看这个dtd文件的书写方法吧!

元素定义

在DTD文档中使用ELEMENT关键字来声明一个XML元素。


语法:<!ELEMENT 元素名称 使用规则>


使用规则:
(#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)
EMPTY:用于指示元素的主体为空。比如<br/>
ANY:用于指示元素的主体内容为任意类型。
(子元素):指示元素中包含的子元素


定义子元素及描述它们的关系:
如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。
如: <!ELEMENT FILE (TITLE,AUTHOR,EMAIL)
如果子元素用“|”分开,说明任选其一。
如:<!ELEMENT FILE (TITLE|AUTHOR|EMAIL)


用+、*、?来表示元素出现的次数
+:表示至少出现一次,一次或多次
*:表示可有可无,零次、一次或多次
?:表示可以有也可以无,有的话只能有一次。零次或一次

属性定义

在DTD文档中使用ATTLIST关键字来声明属性

语法:<!ATTLIST 元素名称
属性名  属性类型  约束
属性名  属性类型  约束
..........
>


属性值类型:


CDATA:表示属性的取值为普通的文本字符串
ENUMERATED (DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)
ID:表示属性的取值不能重复,属性的值只能由字母,下划线开始,不能出现空白字符


属性约束设置说明


#REQUIRED:表示该属性必须出现
#IMPLIED:表示该属性可有可无
#FIXED:表示属性的取值为一个固定值。语法:#FIXED "固定值"
直接值:表示属性的取值为该默认值

<?xml version = "1.0" encoding="GB2312" standalone="yes"?>
<!DOCTYPE 购物篮 [
	<!ELEMENT 肉 EMPTY>
	<!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">
]> 
<购物篮>
	<肉 品种="鱼肉"/>
	<肉 品种="牛肉"/>
	<肉/>
</购物篮>


实体定义

这个不常用我就不提了,主要是懒得打字了!

XML Schema约束文件

第二种约束XML Schema是用一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式。 XML Schema规定XML文档实例的结构和每个元素/属性的数据类型方式叫做Schema约束,XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性。

XML Schema 文件自身就是一个XML文件,但它的扩展名通常为.xsd
和XML文件一样,一个XML Schema文档也必须有一个根结点,但这个根结点的名称为Schema

好了,我们就来看看schema是如何在xml中是用的吧!

 schema文档如何编写

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.self.com/20170309"
elementFormDefault="qualified"
>
</schema>

第一行的代码不用说了,我们都知道了,既然schema本身就是一个xml文件所以也就遵循xml文件的约束喽!

第二行用来声明该文件是一个schema约束文件

第三行是用来被引用时作为命名空间来使用的

第四行声明这个schema约束是格式良好的


好了,我们现在声明了一个schema约束文件,那么如何在一个xml中引入约束文件呢?

xml中引入约束文件

<class xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.self.com/20170309"
xsi:schemaLocation="http://www.self.com/20170309 day.xsd"
>
注意class可不是别的而是我定义的根标签,第一行代码声明这是一个schema实例,注意xmlns:xsi是为了和下面xmlns起冲突而进行的别名命名,

第二行代码是引入我们的targetNamespace

第三行代码的格式为xsi:schemaLocation="{namespace} {location} namespace填写targetNamespace 空格 location填写文件路径

好了我们已经会如何声明和引入schema约束文件了,在让我们来学习一下如何进行schema文件具体内容的编写吧!

简易元素:指那些仅包含文本的元素。它不会包含任何其他的元素或属性。 

<element name="" type=""></element

复杂元素:复杂类型元素是包含子元素或者属性的元素


<element name="" type="">
      <complexType>
      </complexType>
</element>
好了那摩我们需要怎么来确定父子元素的关系呢?

这就得用到XMLSchema复杂元素指示器了

All:表示只能出现一次 
Choice: 只能出现其中的一个
Sequence:元素按照顺序出现 
maxOccurs=“unbounded” 表示出现次数没限制  <element name="name" type="double" maxOccurs="unbounded"/>
定义属性(必须是复杂元素):<attribute name="p1" type="string" use="required"></attribute>
<annotation></annotation>:表示任意元素

好了让我们来看一个案例吧

<?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE person SYSTEM "day.dtd"> -->
<class xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.self.com/20170309"
xsi:schemaLocation="http://www.self.com/20170309 day.xsd"
num="12" <!-- 添加标签属性num -->
>
	<student id=138896> <!-- class子标签,添加标签属性id -->
		<name>王五</name>		<!-- student子标签 -->
		<age>16</age>	<!-- student子标签 -->
	</student>
</class>

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.self.com/20170309"
elementFormDefault="qualified"
>
	<element name="class">   <!-- class是一个复杂标签 -->
		<complexType>			
			<sequence>		<!-- 定义这个标签是有序的 -->
				<element name="student"> <!-- student标签也是一个复杂标签 -->
					<complexType>
						<annotation>	<!-- 可以是任何 -->
							<element name="name" type="string" ></element>  <!-- name是简单标签 -->
							<element name="age" type="int" ></element>   <!-- age是简单标签 -->
						</</annotation>
						<attribute name="id" type="ID" use="required"></attribute> <!-- 定义student标签的属性id -->
					</complexType>
				</element>
			</sequence>
			<attribute name="num" type="int" use="required"></attribute>	<!-- 定义class标签的属性num -->
		</complexType>
	</element>
</schema>







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值