首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML DTD活动

XML DTD活动
EN

Stack Overflow用户
提问于 2012-10-01 15:48:03
回答 1查看 208关注 0票数 0

嗨,我是xml和DTD的新手.我刚从两个小时前的课上学到这个.我用DTD制作了一个XML。我只想知道我的XML代码的DTD是否正确?

DTD:

代码语言:javascript
复制
< !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:

代码语言:javascript
复制
< 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>
EN

回答 1

Stack Overflow用户

发布于 2012-10-01 23:53:34

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

代码语言:javascript
复制
<!ATTLIST Phone type CDATA "mobile">

这意味着Phone可能具有一个类型属性,其值可以是任何字符-数据(所以:任何可以用XML表示的字符串),其默认值是"mobile“。忽略具有不同默认值的相同属性的以下两个重声明。

如果您试图说属性可以接受"mobile“、"work”或"fax“等值,那么要使用的是枚举类型:

代码语言:javascript
复制
<!ATTLIST Phone type (mobile | work | fax) "mobile">

如果您想要说的是属性可以接受任何值,但是值“可移动”、“工作”和“传真”是众所周知的值,并且应该为它们准备软件,那么您需要用散文来说明这一点;在DTD符号中是不可能这样说的。您可以通过给Phone提供两个属性(类型和其他类型)来表示类似的内容,按照这样的规则,类型可以接受练习中的三个值,以及值"other",而另一个类型属性接受任何字符串作为值,并且只有在type="other"时才有意义。因此,家庭电话号码可以标记为<Phone type="other" othertype="home">...</Phone>

代码语言:javascript
复制
<!ATTLIST Phone type (mobile | work | fax | other) #REQUIRED
                othertype CDATA #IMPLIED >
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12676626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档