上一讲我们讲解了XML中DTD的一些基本内容,现在我们继续上一讲的内容。
1. 元素的定义_1
在其中ANY属性用的非常少,因为如果写上ANY,那DTD就没有起到约束的作用了。
2. 元素的定义_2
3. 元素的定义_3
4. 元素的定义_4
第二个写法是错误的,因为PCDATA不允许嵌套子元素。
5. 元素的定义_5
+ 与 * 符号与正则表达式有一些关系,这个我们我们要先明白。
6.下面我们具体讲一下XML中的修饰符号的定义【重要】
<!ELEMENT poem ((古龙|金庸|梁羽生), (王朔|余杰), 毛毛)>
表示:poem 里面的三组信息必须是按照以上顺序进行的。第一个元素必须是 古龙|金庸|梁羽生 中的一个,它们之间是互斥的,出来一个另外一个就不能再出现了,同样第二元素可以是 王朔|余杰中的一个,第三元素必须是毛毛
写一个合法的例子如下:
<poem>
<古龙></古龙>
<余杰></余杰>
<毛毛></毛毛>
</poem>
7. 属性的定义
属性有一个特点,元素可以单独出现,而属性不能单独出现,属性必须依附于一个元素,表示谁的属性。所以定义属性的时候属性的名字,属性的类型,属性有什么特点(是必须要有的,还是可有可无的),这个属性属于哪一元素,这些都要告诉DTD,DTD才能去校验XML文档。
(1) 属性特点:
#REQUIRED 属性必须要出现
#IMPLIED 属性可以出现,也可以不出现,可有可无的
#FIXED value 属性是否有确定的值,
Default value 属性是否有默认的值(2) 属性定义的例子
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE poem [ <!ELEMENT poem (author+, title*, content?)> <!ELEMENT author (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT content (#PCDATA)> <!ATTLIST title name CDATA #REQUIRED> ]> <poem> <author>王维</author> <author>李白</author> <title name = "zhangsan">鹿柴</title> <content>空山不见人,但闻人语声。 返景入深林,复照青苔上。</content> </poem>
(3)属性类型---CDATA
[注意]CDATA 与 CDATA节的区别:CDATA是用来定义属性的,表示是字符串类型,CDATA节表示里面的数据不被XML所解析
CDATA 与 #PCDATA 的区别:#PCDATA 是用来定义元素的。
(4) 属性类型---NMTOKEN/NMTOKENS
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE poem [ <!ELEMENT poem (author+, title*, content?)> <!ELEMENT author (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT content (#PCDATA)> <!ATTLIST title name CDATA #REQUIRED> <!ATTLIST content name NMTOKEN #REQUIRED> ]> <poem> <author>王维</author> <author>李白</author> <title name = "zhangsan">鹿柴</title> <content name = "lisi">空山不见人,但闻人语声。 返景入深林,复照青苔上。</content> </poem>
(5) 属性类型 ---ID (比较常用的)
这个表示学号,身份证号是比较常用的
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE poem [ <!ELEMENT poem (author+, title*, content?)> <!ELEMENT author (#PCDATA)> <!ELEMENT title (#PCDATA)> <!ELEMENT content (#PCDATA)> <!ATTLIST author name ID #REQUIRED> <!ATTLIST title name CDATA #REQUIRED> <!ATTLIST content name NMTOKEN #REQUIRED> ]> <poem> <author name="wangwu">王维</author> <author name="xiaoliu">李白</author> <title name = "zhangsan">鹿柴</title> <content name = "lisi">空山不见人,但闻人语声。 返景入深林,复照青苔上。</content> </poem>
属性类型----IDREF/IDREFS
属性类型 -- Enumerated(类似枚举)
8. 属性的特点 --- #REQUIRED
表示:属性的值是必须要有的
属性的特点 ----#IMPLIED
表示:这个属性的值是可有可无的
属性的特点 ---#FIXED value (用的比较少)
属性的特点 --- Default value
表示:如果不提供属性的值,则为默认的值,如果提供了属性的值,则使用提供的这个值,同时覆盖了这个默认值。这个跟以前学习的注解是类似的。