DTD中的#FIXED值VS(值)#IMPLIED

时间:2013-11-28 09:44:17

标签: xml dtd xml-dtd

这两个陈述在DTD中有何不同 -

<!ATTLIST element-name attribute-name (value) #IMPLIED>
&
<!ATTLIST element-name attribute-name #FIXED value)

我尝试了以下两个例子,两者的工作方式相同 -

示例1:

<?xml version ='1.0' encoding = 'UTF-8'?>

<!DOCTYPE ContactBook[
<!ELEMENT ContactBook (Contact, Contact)>
<!ELEMENT Contact (Name, Phone)>
<!ELEMENT Name (#PCDATA|text)* >
<!ELEMENT text (#PCDATA) >
<!ELEMENT Phone (#PCDATA) >
<!ATTLIST Phone  type (Mobile) #IMPLIED>
]>


<ContactBook>
    <Contact>
        <Name><text>ABC</text></Name>
        <Phone>123</Phone>
    </Contact>
    <Contact>
        <Name>DEF<![CDATA[junk!]]></Name>
        <Phone type='Mobile'>456</Phone>
    </Contact>
</ContactBook>

示例2:

<?xml version ='1.0' encoding = 'UTF-8'?>

<!DOCTYPE ContactBook[
<!ELEMENT ContactBook (Contact, Contact)>
<!ELEMENT Contact (Name, Phone)>
<!ELEMENT Name (#PCDATA|text)* >
<!ELEMENT text (#PCDATA) >
<!ELEMENT Phone (#PCDATA) >
<!ATTLIST Phone  type CDATA #FIXED "Mobile">
]>


<ContactBook>
    <Contact>
        <Name><text>ABC</text></Name>
        <Phone>123</Phone>
    </Contact>
    <Contact>
        <Name>DEF<![CDATA[junk!]]></Name>
        <Phone type='Mobile'>456</Phone>
    </Contact>
</ContactBook>

1 个答案:

答案 0 :(得分:0)

据我所知,区别在于省略属性。在这两种情况下,您都可以这样做,但在#IMPLIED中它不会获得任何内容,因此处理它的应用程序可以选择一个,如果有的话。在#FIXED中,该属性将始终获得DTD中定义的值。