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支持的属性列表:

                                                              

--

原文地址:https://www.cnblogs.com/heben/p/6080993.html