DTD的规范问题

 1、编写dtd
  DTD的目的:
验证该xml文档是否是有效的xml文档
如果一个良构的xml文档满足了DTD的声明就是一个有效的xml文档。
注意:良构 不一定  有效,但是有效一定良构
  DTD对xml文件中元素的约束:
格式:<!ELEMENT  元素名 (内容模式)>


<!ELEMENT students (stu*)>
   <!ELEMENT stu (#PCDATA|id|name|age)*>


内容模式:
empty
(1).EMPTY:元素不能包含子元素和文本(空元素)
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu EMPTY>
xml文件:
<students>
<!--这个stu元素中的内容必须为空-->
<stu></stu>
</students>


(2).(#PCDATA):可以包含任何字符数据,但是不能在其中包含任何子元素
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu (#PCDATA)>
xml文件:
<students>
<stu>mary</stu>
</students>


(3).ANY:元素内容为任意的,主要是使用在元素内容不确定的情况下
例如:
dtd文件:
<!ELEMENT students (stu)>
<!ELEMENT stu ANY>
xml文件:
<students>
<stu>mary</stu>
</students>
或者
<students>
<stu>
<name>mary</name>
</stu>
</students>

(4). 修饰符:() | + * ? ,

() 用来给元素分用组

| 在列出的元素中选择一个

+表示该元素最少出现一次,可以出现多次 (1或n次)

*表示该元素允许出现零次到任意多次(0到n次)

?表示该元素可以出现,但只能出现一次 (0到1次)

,对象必须按指定的顺序出现


属性约束:
<!ATTLIST 元素名称
属性名称    值类型    属性特点
属性名称    值类型    属性特点
>
   <!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id   CDATA #REQUIRED
   name CDATA #REQUIRED
>


1、值类型:
(1).CDATA:属性值可以是任何字符(包括数字和中文)
(2).ID:属性值必须唯一,属性值必须满足xml命名规则
(3).IDREF/IDREFS
IDREF属性的值指向文档中其它地方声明的ID类型的值。
IDREFS同IDREF,但是可以具有由空格分开的多个引用。
(4).enumerated:(枚举值1|枚举值2|枚举值3...),属性值必须在枚举值中
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
id     ID     #REQUIRED
name   CDATA #REQUIRED
gender (male|sex) #REQUIRED
>


  2、属性特点:
 (1).#REQUIRED:元素的所有实例都必须有该属性
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name   CDATA   #REQUIRED
>
xml文件:
<students>
<stu name=""></stu>
<stu name="mary"></stu>
</students>
注意:
1. name属性必须出现
2. name属性的值可以为空也可以不为空


(2).#IMPLIED :属性可以不出现
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name   CDATA   #IMPLIED
>
xml文件:
<students>
<stu name=""></stu>
<stu name="tom"></stu>
<stu></stu>
</students>
注意:
1. name属性可以出现也可以不出现
2. name属性的值可以为空也可以不为空


(3).default-value:属性可以不出现,并且当它不出现的时候是有默认值的,而该属性的默认值就是atttibute-value
例如:
dtd文件:
<!ELEMENT students (stu*)>
<!ELEMENT stu (#PCDATA)>
<!ATTLIST stu
name   CDATA   "mary"
>
xml文件:
<students>
<stu name="哈士奇"></stu>
<stu></stu>
</students>
注意:
1. name属性可以出现也可以不出现
2. name属性如果不出现则默认值为mary


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

dtd文件:
<!ELEMENT students (stus*)>
<!ELEMENT stus (#PCDATA)>
<!ATTLIST stus
year   CDATA   #IMPLIED
company CDATA   #FIXED "briup"
>
xml文件:
<students>
<stus school="briup"></stus>
<stus></stus>
</students>
注意:
1. year/company属性可以出现也可以不出现
2. company属性如果出现那么值一定要是briup

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值