以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML基础 』  (http://bbs.xml.org.cn/list.asp?boardid=1)
----  求助:有关DTD的一个简单问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=1&rootid=&id=7795)


--  作者:goldyard
--  发布时间:5/22/2004 3:40:00 PM

--  求助:有关DTD的一个简单问题
请教一个有关DTD的简单问题
我在《XML从入门到精通》书上看到在DTD中如果定义一个没有顺序要求的元素,可以直接用空格间隔就行了,比如
<!ELEMENT E-Mail (#PCDATA)>
<!ELEMENT 地址 (#PCDATA)>
<!ELEMENT 姓名 (#PCDATA)>
<!ELEMENT 联系人 (姓名 E-Mai 地址)>
但是我在xmlspy下面说这个是错误的,请问怎样定义一个没有顺序要求的元素啊
有顺序的我知道,是用逗号分隔<!ELEMENT 联系人 (姓名, E-Mai ,地址)>像这样

--  作者:windMark
--  发布时间:5/23/2004 2:00:00 AM

--  
好想没有这样的定义,我看的是《XML宝典》
没有用空格做间隔的,只有用“,”做间隔的。
--  作者:goldyard
--  发布时间:5/23/2004 9:23:00 PM

--  
那如果我需要一个无序的元素列表怎样表示呢?
--  作者:lukyboy
--  发布时间:5/24/2004 4:43:00 PM

--  
好像,中间应该是用逗号分开的, 不能用空格。
--  作者:mashimaro
--  发布时间:5/26/2004 4:54:00 PM

--  
我也记得好象要用逗号的
--  作者:robert
--  发布时间:5/27/2004 8:27:00 AM

--  
我也看的《XML宝典》,也记得是逗号
--  作者:sunhy
--  发布时间:5/28/2004 11:29:00 AM

--  
一个元素的各个子元素之间可以以任意顺序出现,也可以强制遵循一定的顺序。

不要求顺序的子元素
考虑下面的DTD定义:

    <!ELEMENT 联系人(姓名 EMAIL)>
    <!ELEMENT 姓名(#PCDATA)>
    <!ELEMENT EMAIL(#PCDATA)>

遵从这个DTD的XML文件可以为:

<联系人>
    <姓名>张三</姓名>
    <EMAIL>zhang@aaa.com</EMAIL>
</联系人>

同样,下面这个XML文件也是有效的:

<联系人>
    <EMAIL>zhang@aaa.com</EMAIL>
    <姓名>张三</姓名>
</联系人>

我想大家已经注意到了,由于我们在DTD定义中仅仅用空白符分隔了元素“联系人”的两个子元素,这说明我们并没有严格要求两个元素出现的顺序,因此上面两种写法都是允许的。

要求顺序的子元素
相反,在上面例子中,如果我们使用逗号“,”来分隔两个子元素,那么XML文件中,元素“姓名”就必须出现在元素“EMAIL”前面。也就是说,如果我们把DTD定义为下面的形式:

    <!ELEMENT 联系人(姓名, EMAIL)>
    <!ELEMENT 姓名(#PCDATA)>
    <!ELEMENT EMAIL(#PCDATA)>

那么下面的文件是有效的:

<联系人>
    <姓名>张三</姓名>
    <EMAIL>zhang@aaa.com</EMAIL>
</联系人>

而下面这个文件不是有效的,因为它把元素“EMAIL”放在了元素“姓名”之前,这是不合规定的:

<联系人>
    <EMAIL>zhang@aaa.com</EMAIL>
    <姓名>张三</姓名>
</联系人>


--  作者:goldyard
--  发布时间:5/28/2004 3:14:00 PM

--  
对啊对啊,书上就是这样写的,但是实际运行的时候发现是错误的语法,无法通过校验啊
--  作者:sunhy
--  发布时间:5/28/2004 5:06:00 PM

--  
可能哪里错了一点。程序就是这个样子的嘛,错一点也不行。
--  作者:ty44092003
--  发布时间:9/2/2004 3:58:00 PM

--  
为什么不这样
<!ELEMENT 联系人 (姓名|EMAIL)*>

这样不就以无序出现了


--  作者:tiancai
--  发布时间:9/2/2004 6:42:00 PM

--  
如果是xsd是不是 可以这样打乱呢?
<xsd:sequence minOccurs="1" maxOccurs="unbounded">
                 <xsd:element name="firstNode" minOccurs="0">
                 <xsd:element name="secondNode" minOccurs="0">
</xsd:sequence>
如果是打乱INT呢?
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
72.021ms