XML(三):两种约束规则

3 篇文章 0 订阅

DTD

DTD : 对xml约束的规则

1,约束元素
1.1:元素出现的个数
1.2:元素出现的频率
1.3:元素出现的顺序
2,约束属性
2.1,什么属性可以出现必须出现
2.2,属性的值 可能是什么 |
2.3,能否文本

就是一套关于元素、属性以及其他杂项在xml文档中使用规则的声明。

DTD:可以限定:

标签,文本域,属性

DTD:Document Type Definition

1.定义一个xml文档的结构和顺序
2.用来限定验证xml文档的内容
3.强制xml文档的内容是一个合法的文档。----> 其实就是2的另一个说法。
4.可以包含在xml文档内部或者在一个独立的文件
5.DTD不描述允许出现在元素内部的数据
6.DTD不是基于xml的
7.可以被xml schema 覆盖
schema:也是一种xml约束

DTD的定义:

描述元素、属性和其他杂项在xml文档中
的使用规则的说明

DTD的分类:

1).外部的DTD:DTD和xml文档不在同一个文件中
怎么从外部引入
2).内部的DTD:DTD和xml文档在同一个文件中
在文件中又是写在哪,怎么写
3).混合的DTD:既有外部DTD,又有内部DTD

DTD的目的:

验证该xml文档是否是有效的xml文档
如果一个良构的xml文档满足了DTD的声明就是一个有效的xml文档。
注意:良构 不一定 有效,但是有效一定良构

引入DTD:语法:
内部嵌套:<!DOCTYPE 根元素 [dtd验证规则]>
引入外部:<!DOCTYPE 根元素 PUBLIC "公有id" "(网络)路径">

DTD在元素中的声明:

对元素限定:<!ELEMENT 元素名 内容模式>
对属性限定:

<!ATTLIST 元素名  属性名  属性类型 属性默认值
                  属性名  属性类型 属性默认值>
 
<!ELEMENT student (#PCDATA)>
:对student标签进行约束,student元素内容只能是字符或者为空
<!ELEMENT student (name,age)>
:对student标签进行约束,student元素中子标签只能是 按顺序出现 name标签和 age标签

约束标签:
格式:<!ELEMENT 元素名 内容模式>
内容模式:
1). (#PCDATA):元素内容为字符或者为空
2). EMPTY:元素内容为空
3). ANY:元素内容为任意的,主要是使用在元素内容不确定的情况下对子标签进行约束
4). (Child Elements): , | + * ?
,:表示元素必须顺序出现
|:表示多个元素中选一个
元素名上无符号:表示元素必须要出现1次
量词
+:表示元素可以出现1次到多次
*:表示元素可以出现0次到多次
?:表示元素可以出现0次到1次
5).混合元素

eg:<!ELEMENT root (#PCDATA|name|age)*>
      	<root>
      		<name></name>
      		<age></age>
      	</root>

子元素可以是name,也可以是age,顺序没有关系,频率也没有关系
注意:浏览器是非验证的解析器,不会验证xml的有效性

属性的DTD声明:attribute

格式:

<!ATTLIST 元素名  属性名  属性类型 属性默认值 
   			  .........
   			      属性名  属性类型 属性默认值
   	>

属性类型:
1). ID :属性值必须唯一,属性值必须满足命名规则 —> 属性默认值:1 2 可以使用
2). (枚举值1|枚举值2|枚举值3…):属性值必须在枚举值中 —> 属性默认值:1 2 3 4 可以使用 -->但是要注意:属性的默认值如果现在3 4 ,值就只能是枚举值123… 中出现
3). CDATA:属性值为字符 —> 属性默认值:1 2 3 4 可以使用.

属性默认值:
1). #REQUIRED 属性必须出现在元素的开始标签中。

<!ATTLIST b name ID #REQUIRED>

2). #IMPLIED 属性可以不出现,并且当它不出现的时候没有默认值

<!ATTLIST b address (city|number|all) #IMPLIED>

3). “字符串” 属性可以不出现,并且当它不出现的时候是有默认值的,而该属性的默认值就是该字符串

<!ATTLIST b add (city|number|all)  'city'>

4). #FIXED 属性可以不出现,但是如果出现的话必须是指定的属性值,不出现的话也是指定的默认值

<!ATTLIST c number CDATA #FIXED 'asdf'>

schema:

1.命名空间

nameSpace:命名空间,元素、属性名称的集合,解决命名冲突问题

        <s:student></s:student>
		<h:student></h:student>

这里的两个student标签是不同的两个student标签,通过使用前缀,我们创建了两种不同类型的 <student> 元素。

2.命名空间使用注意

1)定义命名空间前缀,并应用在元素上,那么该元素下所有的子元素和属性都在该命名空间

<h:student xmlns:h="http://briup.com/h">
		</h:student>

2)可以用xmlns定义默认命名空间,默认命名空间只作用于元素,不作用于属性
3)在根标签中可以定义命名空间前缀
多个命名空间前缀不能重名
多个命名空间前缀可以指向同一URI

<root xmlns:h="http://briup.com/h"
	  xmlns:s="http://briup.com/s" >
		<h:student></h:student>
		<s:student></s:student>
</root>

4)判断元素、属性是否相同,除了要看命名空间前缀和元素名/属性名外,还要看命名空间前缀所指向的URI是否相同

3.XML Schema简介

XML Shema和DTD一样,用来对XML文件的内容进行限制。
XML Schema中提供了一些内置数据类型,而且还允许用户自己定义Simple Type(简单类型),Complex Type(复杂类型)。
schema文件的格式是.xsd(xml schema document的缩写xsd)

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	   xmlns="briup.bean" 
    	   xsi:schemaLocation="briup.bean bean.xsd">
</beans>

注:xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
表示遵守w3的xml schema规范,xml解析器解析xml文件时,就明白按照什么规范解析了。 当使用自定义的schema就需要添加改句。

<schema xmlns="http://www.w3.org/2001/XMLSchema" 
	targetNamespace="http://www.example.org/test2" 
	xmlns:tns="http://www.example.org/test2" 
	elementFormDefault="qualified">
</schema>

根元素包括模式的约束, xml模式空间命名的定义, 其他命名空间的定义, 版本信息, 语言信息和其他的信息.

xmlns="http://www.w3.org/2001/XMLSchema" : 使用默认的名称空间
targetNamespace="http://www.example.org/test2": 指定schema文档中声明的元素属于哪个命名空间
elementFormaDefault="qualified": 指定shema文档中声明的跟元素和所有子元素都属于targetnamespace锁指定的名称空间
xmlns:tns="http://www.example.org/test2"  :target Name Space 指向  targetNamespace="http://www.example.org/test2"

对标签限定:

<element name="标签名" type="string" minOccurs="1" maxOccurs="1">
	</element>

minOccus:限定元素最少出现次数
maxOccus:限定元素最多出现次数
对属性限定:

<attribute name="attName" type="string" use="" default="" fixed="">
	</attribute>

name 属性名
type 属性值类型
use取值:
1)optional:表示属性可有可无
2)required:表示属性必须要有
3)prohibited:禁止的

4 XML Schema语法

4.1 SimpleType:定义一个 对 文本 的约束: 可以约束文本的 取值范围,和只能取什么值。
语法:

<simpleType name="num">
		<restriction base="int"><!-- 基本类型为int   -->
			<minInclusive value="1"></minInclusive>
			<maxInclusive value="10"></maxInclusive>
		</restriction>
	</simpleType>

文本/属性值:只能取值 1-10
使用 : <element name="b" type="tns:num"></element>
表示该标签的文本域值 只能是1-10之间

<simpleType name="gender">
	<restriction base="string"><!-- 基本类型为string   -->
		<enumeration value="男"></enumeration>
		<enumeration value="女"></enumeration>
	</restriction>
</simpleType>

文本/属性值:只能取值 男 或 女
使用 : <attribute name="name" type="tns:gender"></attribute>表示该属性只能取值男 或 女

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值