XML中的DTD约束


约束直接写在xml文档中!

<?xml version="1.0" encoding="UTF-8"?>
<!--
DTD约束
-->
<!DOCTYPE students [
	<!ELEMENT students (student)>
	<!ELEMENT student (#PCDATA)>
]>

<students>
<student>你好!</student>
</students>

格式良好xml文档必须且仅有一个根元素!

元素属性

 

l  属性由属性名与属性值构成,中间用等号连接;

l  属性值必须使用引号括起来,单引或双引;

l  定义属性必须遵循与标签名相同的命名规范;

l  属性必须定义在元素的开始标签中;

一个元素中不能包含相同的属性名;


DTD定义元素

 

1 定义元素的语法

使用ELEMENT声明元素:<!ELEMENT元素名 内容类型内容>

例如:<!ELEMENT name (#PCDATA)>

表示name元素的内容为文本数据

 

2 元素类型

元素类型可以是ANY或EMPTY

EMPTY

<?xml version="1.0" encoding="UTF-8"?>
<!--
DTD约束
-->
<!DOCTYPE students [
	<!ELEMENT students (student)>
	<!ELEMENT student EMPTY>
]>

<students>
<student></student>
</students>

ANY

<?xml version="1.0" encoding="UTF-8"?>
<!--
DTD约束
-->
<!DOCTYPE students [
	<!ELEMENT students (student)>
	<!ELEMENT student ANY>
]>

<students>
<student>如果约束中是ANY的时候,元素中可以为任何内容!</student>
</students>

<!ELEMENTstu ANY>:表示stu元素的内容可以是任意元素,也可以是文本数据,也可以是文本数据+子元素,反正就是任意。

<!ELEMENTstu EMPTY>:表示stu不能有任何内容,即空元素。例如:<stu/>。

 

3 元素内容

元素内容可以是文本数据,也可以是子元素

<!ELEMENT stu (#PCDATA)>表示stu元素内容为文本,例如:<stu>hello</stu>

  <!ELEMENT stu(name)>表示stu元素内容为name子元素,例如<stu><name></name><stu>,但要注意,如果<name>元素没有声明,那么就会出错。

 

4 子元素出现次数

可以使用“?”、“*”、“+”来指定子元素的出现次数

<!ELEMENTstu (name?)>表示stu元素可以有0~1个name子元素,即name子元素可有可无。

<!ELEMENTstu(name*)>表示stu元素可以有0~n个name子元素;

<!ELEMENTstu(name+)>表示stu元素可以有1~n个name子元素。

 

5 多个子元素

  <!ELEMENT stu (name,age,sex)>表示stu必须有三个子元素,分别是name、age、sex,并且子元素出现的顺序也要与声明的顺序一致。

 

6 枚举子元素

  <!ELEMENT stu (name| age | sex)表示stu只有一个子元素,可以是name、age、sex中的任意一个。

 

7 复合声明1

<!ELEMENT stu(name | age | sex)?>表示stu元素可以有0~1个(name | age | sex),而(name | age | sex)表示name、age、sex其中的一个。

<stu></stu>

<stu><name/></stu>

<stu><age/></stu>

<stu><sex/></stu>

 

8 复合声明2

  <!ELEMENT stu (name| age | sex)*>表示stu元素可以有0~n个(name | age | sex),而(name | age | sex)表示name、age、sex其中的一个。

<stu></stu>

<stu><name/><name/></stu>

<stu><name/><age/><age/></stu>

<stu><name/><age/><name/><sex/><sex/></stu>

 

9 复合声明3

<!ELEMENT stu(name | age | sex)+>表示stu元素可以有1~n个(name | age | sex),而(name | age | sex)表示name、age、sex其中的一个。

<stu><age/></stu>

<stu><name/><name/></stu>

<stu><name/><age/><age/></stu>

<stu><name/><age/><name/><sex/><sex/></stu>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值