XML DTD Activity



嗨,我是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>

您的DTD在语法上是合法的,文档对DTD是有效的,但Phone元素上type属性的三重声明可能并不意味着您想要它的意思。给定属性的第一个声明具有优先权,因此您所拥有的相当于

<!ATTLIST Phone type CDATA "mobile">

这意味着Phone可以采用type属性,该属性的值可以是任何字符数据(so:任何可在XML中表达的字符串),其默认值为"mobile"。以下两个具有不同默认值的同一属性的重新声明将被忽略。

如果您想说属性可以取值"mobile"、"work"或"fax",而不能取其他值,那么您想要使用的是枚举类型:

<!ATTLIST Phone type (mobile | work | fax) "mobile">

如果你想说的是属性可以取任何值,但值"mobile"、"work"one_answers"fax"是众所周知的值,软件应该为它们做好准备,那么你需要用散文来表达;在DTD表示法中没有办法这么说。通过给Phone两个属性(typeothertype),您可以说一些类似的话,规则是type可以取练习中的三个值,以及值"other",而othertype

<!ATTLIST Phone type (mobile | work | fax | other) #REQUIRED
othertype CDATA #IMPLIED >

最新更新