嗨,我是xml和DTD的新手.我刚从两个小时前的课上学到这个.我用DTD制作了一个XML。我只想知道我的XML代码的DTD是否正确?
DTD:
< !DOCTYPE BusinessCard[
<!ELEMENT BusinessCard (Name?,Phone+,Email?)>
<!ELEMENT Name (#PCDATA)>
<!ELEMENT Phone (#PCDATA)>
<!ATTLIST Phone type CDATA "mobile">
<!ATTLIST Phone type CDATA "work">
<!ATTLIST Phone type CDATA "fax">
<!ELEMENT Email (#PCDATA)>
]>XML:
< BusinessCard>
<Name >Jose P. Rizal</Name>
<Phone type="mobile">(415)555-4567</Phone>
<Phone type="work">(800)555-9876</Phone>
<Phone type="fax">(515)555-1234</Phone>
<Email>joserizal@email.com</Email>
</BusinessCard>发布于 2012-10-01 23:53:34
您的DTD在语法上是合法的,文档对DTD是有效的,但是Phone元素上的type属性的三重声明可能并不意味着您想要它的意思。给定属性的第一个声明优先,因此您拥有的内容相当于
<!ATTLIST Phone type CDATA "mobile">这意味着Phone可能具有一个类型属性,其值可以是任何字符-数据(所以:任何可以用XML表示的字符串),其默认值是"mobile“。忽略具有不同默认值的相同属性的以下两个重声明。
如果您试图说属性可以接受"mobile“、"work”或"fax“等值,那么要使用的是枚举类型:
<!ATTLIST Phone type (mobile | work | fax) "mobile">如果您想要说的是属性可以接受任何值,但是值“可移动”、“工作”和“传真”是众所周知的值,并且应该为它们准备软件,那么您需要用散文来说明这一点;在DTD符号中是不可能这样说的。您可以通过给Phone提供两个属性(类型和其他类型)来表示类似的内容,按照这样的规则,类型可以接受练习中的三个值,以及值"other",而另一个类型属性接受任何字符串作为值,并且只有在type="other"时才有意义。因此,家庭电话号码可以标记为<Phone type="other" othertype="home">...</Phone>。
<!ATTLIST Phone type (mobile | work | fax | other) #REQUIRED
othertype CDATA #IMPLIED >https://stackoverflow.com/questions/12676626
复制相似问题