xml dtd 定义元素

时间:2023-03-09 18:18:25
xml dtd 定义元素

ANY

如果需要定义某个元素的值可以是任意类型,可采用如下语法

<!ELEMENT 元素名 ANY>

DTD必须定义XML文档中允许出现的所有元素,所以下面这样是不行的,因为<hellotag>没有在dtd中定义过

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE messages[
<!ELEMENT messages ANY>
]> <messages>
<message>
<hellotag>hello</hellotag>
</message>
</messages>

#PCDATA

定义元素内容为字符串,不能包含子元素

实例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE messages[
<!ELEMENT messages (message)>
<!ELEMENT message (content)>
<!ELEMENT content (#PCDATA)>
]> <messages>
<message>
<content>hello</content>
</message>
</messages>

混合元素,即既可以包含字符串也可以包含子元素

格式:

(注意 1:#PCDATA只能出现在子元素的最前面

2:*表示这些子元素可出现0次或多次,如果没有*,则各个子元素互斥,只能出现一个

3:使用 | 分隔子元素,则子元素的出现是无序的,如果使用逗号","则子元素的出现顺序是严格按照书写顺序 )

<!ELEMENT 父元素名 (#PCDATA | 子元素1 | 子元素2 |子元素n)*>

实例:略

定义元素属性

格式:

<!ATTLIST 属性所属的元素 属性名 属性类型 [元素对属性的约束] [默认值]>

其中,元素对属性的约束 和 默认值 是可选的,但如果没有指定前者,则必须指定后者,

当元素对属性的约束 是 "#REQUIRED"时,不能指定默认值,

当元素对属性的约束 是 "#IMPLIED"时,不能指定默认值,

当元素对属性的约束 是 "#FIXED",时,必须指定默认值

#REQUIRED:即必需的属性,意味着必须为该元素提供属性

#IMPLIED:意即该属性是可有可无的

#FIXED:即该属性是固定的,定义时必须指定固定值。使用该元素时无须为其分配该属性,XML处理器会自动为该属性增加固定值

实例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE messages[
<!ELEMENT messages (message | shortcut)*>
<!ELEMENT message (content)>
<!ELEMENT shortcut (#PCDATA)>
<!ELEMENT content (#PCDATA)>
<!ATTLIST messages hashcode CDATA #REQUIRED>
]> <messages hashcode="dfsfdsfsdf">
<message>
<content>hello</content>
</message>
<shortcut>
hello,world
</shortcut>
<shortcut>
hello,world
</shortcut>
</messages>

DTD支持的属性列表:

xml dtd 定义元素

--